【发布时间】:2020-07-16 14:49:27
【问题描述】:
DLL代码:
#include <windows.h>
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
MessageBoxW(NULL, L"Hello world!", L"Test DLL", MB_OK);
return TRUE;
}
加载库代码:
#include <windows.h>
int main()
{
LoadLibrary("dll.dll");
return 0;
}
当我使用上述代码加载 dll 时,消息框会按预期弹出。
当我尝试使用我能找到的任何注入器注入 dll 时,DllMain 永远不会被调用。
目标进程和 dll 架构都是 x64。目标进程已加载 MessageBoxW() 所需的库。
如果需要,这就是我编译 dll (mingw) 的方式:gcc.exe main.cpp -shared -fPIC -o dll.dll
也许我已经尝试了 5 个注射器,但我不走运,有什么建议吗?
还有什么可能导致消息框不弹出?
【问题讨论】:
-
为 DllMain 考虑公平游戏的一系列事情是 substantially limited。关于 MessageBox 位于栅栏的哪一侧的两个猜测。您只是要求加载程序锁。
-
@WhozCraig 来自您的链接:执行以下操作是合法的:创建和初始化同步对象。打开、读取和写入文件。 我尝试使用 ofstream 写入文件,但没有成功。您是否知道其他任何可以使注入看起来而不导致加载程序锁定的方法?
-
OutputDebugString 并使用 DebugView 进行监控。这就是我一直使用的。当然,我在我的业务中还没有遇到 DLL 注入的原因,但事实就是如此。总帐。
-
调试监视器非常好,谢谢。虽然该字符串仅在我自己加载 dll 时出现。喷油器好像有问题。我会尝试找到一个工作的。
-
您可能还想获得一份备忘单并使用 WinDbg(也称为风袋,通常称为)进行一些探索。这是一个非常古老但仍然卓越的调试工具,适用于各种事情,包括内核级调试。相信我,花一天时间来熟悉这个工具是值得的。祝你好运。
标签: c++ windows gcc dll-injection dllmain