Динамическая Форкинг Win32 EXE - PullRequest
0 голосов
/ 25 августа 2011

http://www.security.org.sg/code/loadexe.html

http://pastebin.com/QFHASx75

Я скомпилировал это, но не могу заставить его работать должным образом, Он работает нормально и не показывает ошибок в консоли

вывод консоли:

C:\~\~\Documents\Visual Studio 2010\Projects\loadEXE\Debug>loadEXE.exe AcceleratedC++Exe_2-0.exe
Original EXE loaded (PID = 4068).
Original Base Addr = 110000, Size = 29000
Unmapped and Allocated Mem for New EXE at 400000
EIP = 772501C4
EAX = 12141F
EBX = 7EFDE000
ECX = 0
EDX = 0
New EXE Image Size = 25000
New EXE image injected into process.
********> EIP = 772501C4
********> EAX = 411307
Process resumed (PID = 4068).

Однако я получаю эту ошибку приложения.

"Не удалось правильно запустить приложение (0xc0000005). Нажмите кнопку ОК, чтобы закрыть приложение."

Я новичок в формате PE и не могу понять, почему это происходит, статья старая, поэтому я не уверен, работает ли она даже на 64b, но у меня нет запасного 32b компакт-диска для тестирования,Из того, что я читал о формате PE, код для 32b должен работать на 64b.

Кто-нибудь может подтвердить, работает ли он на 32b?или знаете почему я получаю эту ошибку?

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

Код изменяет точку входа нового процесса следующим образом:

ctx.Eax = (DWORD)v + inpeXH->addressOfEntryPoint;

В Windows x64 (как 64-битной, так и wow64) это больше не работает, я на самом деле удивлен, что этот трюк можно было использовать так долго.

Чтобы быстро это исправить, вам нужно написать небольшой пример проекта, который запускает приостановленный процесс и читает все регистры из ctx и проверяет, какой из них является точкой входа. Попробуйте как можно больше exe-файлов на всех версиях Windows.

Это в лучшем случае неопределенное поведение, такие вещи, как странные нарушения доступа, начинают происходить, когда этот маленький трюк больше не работает ( перестанет работать снова, раньше, чем позже). Я предлагаю вам поискать лучший способ внедрения кода в процесс, но тогда я не знаю, что именно вы пытаетесь сделать ...

0 голосов
/ 25 августа 2011

Убедитесь, что у вас установлен правильный распространяемый пакет времени выполнения VC. Правильное средство:

  • 32-битная, если приложение 32-битная (не имеет значения, если ОС 64-битная).
  • 64-битная, если приложение 64-битная
  • Соответствующая версия среды выполнения VC (VC8 / 2005, VC9 / 2008, VC10 / 2010).
  • Правильный пакет обновления VC ++ redist.
...