C++: инъекция Dll. Почему CreateRemoteThread() не работает в блокноте?

Я довольно новичок в внедрении DLL, делаю это из любопытства и потому, что хочу создать оверлей в игре, не изменяя его исходный код.

Но сейчас я застрял с базовой инъекцией DLL: той, что использует CreateRemoteThread().

Я следовал этому уроку (по-французски, будьте осторожны): http://xevia.webege.com/old/atoray/2010/06180.php

Что я сделал:

  • Инъекция отлично работает на основной программе Target.exe (см. Ссылку Xevia)
  • Я могу видеть DLL, загруженную процессом с EnumProcessModules()
  • После инъекции в Target.exe я вижу, что мой "Hook.dll" был добавлен.
  • [править] Проверил exe-версию: и блокнот, и мой инжектор 32-битные

Но когда я внедряю dll в другие процессы, кажется, что это не работает, даже если CreateRemoteThread () не возвращает NULL.

Итак, я проверил много постов, в том числе и этот: Как предотвратить внедрение DLL

И это: C++ - CreateRemoteThread DLL Injection [Windows 7] (пробовал абсолютный путь, но безуспешно)

И многие другие, не имея возможности указать, что было не так. Поэтому я призываю SO-богов.

1) Может ли это быть проблема прав доступа?

2) Это может быть мой метод инъекций, слишком классический? Какой я должен попробовать?

3) [Тема вопроса] Почему моя DLL не вводится в Блокнот с CreateRemoteThread?

Спасибо за ваше время.

[открыть для любой грамматики / редактирования формулировки]

1 ответ

Решение

Оно работает!

Что мне нужно было изменить:

  • Сборка в x86, чтобы соответствовать целевому приложению
  • Используйте абсолютный путь

Я сделал оба, но забыл изменить свой абсолютный путь при переключении между x86/x64...

Спасибо Адриану Роману, который поставил меня на правильный путь.

Другие вопросы по тегам