Dll未在Firefox中加载,但在自定义应用程序中加载

Dll not being loaded in Firefox but loads in custom application

本文关键字:加载 自定义 应用程序 未在 Dll Firefox      更新时间:2023-10-16

我最近在SO上发布了一个关于代码注入的问题,这个问题相似但不相同。我正在将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被成功注入,也不会发生任何事情。

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

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

顺便说一句:你可能想把MessageBox改成MessageBeep,因为FireFox创建/破坏了很多线程。。。(即使是快速测试,这也很烦人!)