Dll没有在Firefox中加载,而是在自定义应用程序中加载

时间:2014-10-01 08:54:28

标签: c++ c firefox dll-injection

我最近发布了关于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也没有任何反应。

1 个答案:

答案 0 :(得分:0)

我无法重现您的观察结果。我能够将dllinject.dll注入其他进程(也是firefox),但我从未见过消息框。

经过一番挖掘后,我发现你的DLLMain拼错了。将其更改为DllMain,您将在Firefox中看到消息框。

顺便说一句:你可能希望将MessageBox更改为MessageBeep,因为FireFox创建/销毁了很多线程......(即使是快速测试也很烦人!)