http://www.security.org.sg/code/loadexe.html
我已经编译了这个,但无法让它正常工作,它运行正常并且在控制台中没有显示错误
控制台输出:
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 CD来测试。从我读过的PE格式来看,32b的代码应该适用于64b。
任何人都可以确认这是否适用于32b? 或者知道我为什么会收到这个错误?
答案 0 :(得分:3)
代码修改新进程的入口点,如下所示:
ctx.Eax = (DWORD)v + inpeXH->addressOfEntryPoint;
在Windows x64(64位和wow64)上,这不再起作用,我真的很惊讶这个技巧可以使用很长时间。
要快速解决这个问题,您需要编写一个启动暂停进程的小型示例项目,并从ctx读取所有寄存器并检查哪一个是入口点。在尽可能多的Windows版本中尝试尽可能多的exes。
这真的是未定义的行为,一旦这个小技巧不再起作用,它就会发生奇怪的访问冲突之类的事情(它将再次停止工作,迟早会发生)。 我建议你寻找一种更好的方法将代码注入流程,但后来我不知道你到底要做什么......
答案 1 :(得分:0)
确保安装了正确的VC运行时可再发行组件。正确的意思是: