Win32 EXE的动态分叉
Dynamic Forking of Win32 EXE
http://www.security.org.sg/code/loadexe.html
http://pastebin.com/QFHASx75
我已经编译了这个,但无法使其正常工作,它运行良好,在控制台中没有显示错误
控制台输出:
C:~~DocumentsVisual Studio 2010ProjectsloadEXEDebug>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吗?或者知道我为什么会犯这个错误吗?
代码修改新进程的入口点,如下所示:
ctx.Eax = (DWORD)v + inpeXH->addressOfEntryPoint;
在Windows x64(64位和wow64(上,这已经不起作用了,我真的很惊讶这个技巧能用这么长时间。
为了快速解决这个问题,您需要编写一个小的示例项目,启动一个挂起的进程,从ctx读取所有寄存器,并检查哪个寄存器是入口点。在你现有的Windows版本上尽可能多地尝试前任。
这充其量只是一种未定义的行为,一旦这个小把戏不再奏效,就会开始发生奇怪的访问违规行为(它迟早会再次停止工作(。我建议您寻找一种更好的方法将代码注入流程,但我不知道您到底想做什么…
确保安装了适当的VC运行时可再发行程序。正确方式:
- 如果应用程序是32位,则为32位(如果操作系统是64位,则无所谓(
- 如果应用程序为64位,则为64位
- 适当的VC运行时版本(VC8/2005、VC9/2008、VC10/2010(
- VC++redist的正确服务包
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- C++中的动态铸造故障
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 控制允许动态运行c++的并发操作数
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 输出没有重复元素的动态数组(收缩数组)C++
- C++为线程工作动态地分割例程
- 正在插入动态数组
- 在c++中使用动态分配的问题
- C++中的动态对象与非动态对象
- 如何在动态数组上使用搜索函数
- 视觉studo 2019中的漫画和静态/动态绑定
- 从C++中的数字输入动态创建矩阵
- 如何从QToolBox中动态创建的QLineEdit中获取文本
- C++ 工艺镂空/动态分叉
- Win32 EXE的动态分叉