C++ 加载库与将二进制dll加载到进程中?
我尝试使用C++ 加载库与将二进制dll加载到进程中?,c++,c,winapi,dll,dll-injection,C++,C,Winapi,Dll,Dll Injection,我尝试使用ifstream将dll文件的内容注入远程进程。我使用char*缓冲区来存储dll的内容,然后使用WriteProcessMemory将dll文件的二进制文件注入进程。我使用CheatEngine查看由VirtualAllocEx的结果指向的内存区域,因此我知道写入的数据,因为我看到了我创建的函数之一的文本参数。我只是好奇,LoadLibrary与仅将dll的原始二进制文件加载到进程中有什么不同。简而言之,LoadLibrary执行以下操作: 在内存中映射和重新定位节 处理导入描述符表
ifstream
将dll文件的内容注入远程进程。我使用char*
缓冲区来存储dll的内容,然后使用WriteProcessMemory
将dll文件的二进制文件注入进程。我使用CheatEngine查看由VirtualAllocEx
的结果指向的内存区域,因此我知道写入的数据,因为我看到了我创建的函数之一的文本参数。我只是好奇,LoadLibrary
与仅将dll的原始二进制文件加载到进程中有什么不同。简而言之,LoadLibrary
执行以下操作:
DllMain
),如果它存在将二进制映射为图像,但不是线性映射,重新定位和解析导入(可能加载其他DLL)创建激活上下文,如果存在清单,则调用入口点。这是众所周知的。有许多库实现内存模块装入器。阅读他们的来源。很明显这是一次大规模的黑客攻击。你为什么不直接打电话给LoadLibrary呢?或者,如果你想要更多的控制,LoadLibraryEx。我想不出一个好的理由来进行反向工程,这样你就可以手动完成。为什么你认为简单地将DLL文件的内容从一个内存缓冲区复制到另一个就足以“加载”DLL?就复制而言,它只是任意字节,操作系统不会尝试解释被复制的字节。