Pue*_*tis 5 c++ dll winapi code-injection 32bit-64bit
我最近在C++中编写了一个DLL-Injector,其要求如下
很快我注意到,Injector 中GetProcAddress("LoadLibraryA")的调用返回一个"不可用"句柄,因为32位目标加载了另一个kernel32.dll,并且函数的地址不同,因此注入失败(无法使用返回的地址/句柄启动远程线程).此外,32位进程将kernel32.dll加载到不同的基址,这使得创建远程线程更加不可能.
为了说清楚我的意思,会发生以下情况:
当从64位进程注入64位进程,从32位注入32位时,通常没有问题,因为kernel32.dll(很可能)在相同的基地址加载并且可以使用相同的函数地址 - 到目前为止,这是我的解释.在这种情况下,条件不同.
为了解决这个问题,我做了以下步骤:
这种方法实际上运行得很好,但我无法摆脱这是总开销的想法,并且必须有一个更简单的解决方案来从64位注入器注入32位目标.
我有两个问题,如果可以在这里回答,我将非常感激:
任何答案都非常感谢,谢谢!
编辑:哦,我的天啊...我刚刚意识到,我在最初的帖子中描述了错误的情况.INJECTOR是64位,TARGET是32位(最初是另一种方式,但我已经纠正了它).Ben Voigt在下面的评论完全正确,对EnumProcessModulesEx的调用将失败.一个大大的抱歉,这种混乱:(
我偶然发现这个线程正在寻找同样问题的解决方案.
到目前为止,我倾向于使用另一种更简单的解决方案.要获得32位内核proc地址,64位进程只需执行一个32位程序,它将为我们查找proc地址:
#include <Windows.h>
int main(int argc, const char**)
{
if(argc > 1)
return (int) LoadLibraryA;
else
return (int) GetProcAddress;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6331 次 |
最近记录: |