为什么我在dll注入后没有收到消息框?

2024-06-11 03:14:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有简单的dll代码:

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
      if(ul_reason_for_call == DLL_PROCESS_ATTACH) 
      {
            MessageBox(0, L"Hello!", L"Hello!", 0);          

      }

return TRUE;
}

以及将dll注入另一个进程的python代码:

^{pr2}$

注射对某些过程起作用。例如,它适用于gvim。我能看到留言盒。但我已经用C创建了一个简单的应用程序。在尝试将我的dll注入这个应用程序之后,什么都没有发生。在

Python injector不报告任何带有OpenProcessCirtualAllocEx的错误,并返回c_ulong(3968L)。为什么我看不到messagebox?在

编辑:

我的操作系统:Windows XP professional SP3 32位。在

<2>编辑:

我用C代码做了同样的事情,得到了同样的结果。例如,对于gvim,注射起作用。但不是我在c的过程。我检查过调试器,看起来DllMain函数没有执行。在

DWORD pid;
cout << "PID: ";
cin >> pid;


HANDLE hproc = OpenProcess(PROCESS_ALL_ACCESS,0,pid);

LPVOID adr = 
VirtualAllocEx (
                hproc,
               (LPVOID)0,
               (SIZE_T)0x1000,
               MEM_COMMIT | MEM_RESERVE,
               PAGE_EXECUTE_READWRITE
               );

WriteProcessMemory (hproc, adr, "injdll.dll", 256, NULL);

HANDLE hthread = CreateRemoteThread 
(hproc,
 NULL,
 0,
 (LPTHREAD_START_ROUTINE)
 GetProcAddress(GetModuleHandle(L"kernel32"),"LoadLibraryA"),
 adr,
 0,
 NULL);

CloseHandle(hthread);
CloseHandle(hproc);

return 0;

Tags: 代码helloforcallulprocesspidnull
1条回答
网友
1楼 · 发布于 2024-06-11 03:14:35

还不能留下评论,那么,您使用的是什么操作系统版本?在

在大多数情况下,对于64位操作系统中的.net应用程序,Dll必须是64位的。在

在pyton中我不确定,但是LoadLibrary需要AsciiZ字符串。所以,出于安全考虑,您可以使用“dllLen=len(DLLPath)+1”?在

另外,尝试更改默认堆栈大小

kernel.CreateRemoteThread(hProcs, None, 4096*16, hLib, argAddy, 0, ctypes.byref(t_Id))

或者,也许,你的大脑中发生了异常(因为某种原因?)。在执行CreateRemoteThread之前,将调试器附加到目标进程

相关问题 更多 >