我最近发布了关于code injection的问题,这个问题类似但不一样。我正在将DLL注入Firefox,它注入成功,但DLL中的代码不运行。如果我将相同的代码注入自定义应用程序,它的工作原理。为什么会那样。这是我正在使用的代码。
Injector.exe //注入代码的文件
#include <stdio.h>
#include <windows.h>
#define procId 2844
#define dllname "dllinject.dll" // located in same directory
int main()
{
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, procId);
LPVOID allocated = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(dllname), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProc, (LPVOID)allocated, dllname, strlen(dllname), NULL);
LPVOID libaddr = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)libaddr, NULL, NULL);
CloseHandle(hProc);
return 0;
}
Simpleinjected.exe //正在注入的文件
#include <stdio.h>
int main()
{
printf("Hello");
return 0;
}
dllinject.dll
#include <windows.h>
int message(const char *msg)
{
MessageBox(NULL, msg, "Message from Dll", MB_OK);
return 0;
}
BOOL WINAPI DLLMain(HINSTANCE hInstDll, DWORD ulReason, LPVOID lpReserved)
{
switch(ulReason)
{
case DLL_PROCESS_ATTACH:
message("process attach");
break;
case DLL_THREAD_ATTACH:
message("thread attach");
break;
case DLL_PROCESS_DETACH:
message("process detach");
break;
case DLL_THREAD_DETACH:
message("thread detach");
break;
}
return true;
}
注入simpleinjected.exe
时有效,但在Firefox中注入时,即使成功注入了dll也没有任何反应。
答案 0 :(得分:0)
我无法重现您的观察结果。我能够将dllinject.dll注入其他进程(也是firefox),但我从未见过消息框。
经过一番挖掘后,我发现你的DLLMain
拼错了。将其更改为DllMain
,您将在Firefox中看到消息框。
顺便说一句:你可能希望将MessageBox
更改为MessageBeep
,因为FireFox创建/销毁了很多线程......(即使是快速测试也很烦人!)