相关疑难解决方法(0)

什么是HMODULE?

我没什么问题.我已经将DLL加载到进程中(它不是我的),我必须在其中使用函数.我有这个功能的偏移,所以我只需要获取DLL地址并将其添加到偏移量以获得该功能.GetModuleHandle()返回HMODULE变量,但实际上我不知道是什么HMODULE.它是加载DLL的地址还是某种其他标记?

如果它不是加载DLL的地址,我怎么能得到这个地址?我希望我能说清楚.

c++ winapi

14
推荐指数
1
解决办法
3万
查看次数

从dll加载DLL?

从dll加载dll的最佳方法是什么?

我的问题是我无法在process_attach上加载一个dll,我无法从主程序加载dll,因为我不控制主程序源.因此我也不能调用非dllmain函数.

c++ dll multithreading loadlibrary

6
推荐指数
3
解决办法
1万
查看次数

在 LoadLibrary 上创建远程线程并取回 HMODULE

我最近在做 DLL 注入工作,所以我在谷歌上做了一些研究。现在我知道使用 CreateRemoteThread 是一个好方法。

ASLR(Address space layout randomization,因为Windows Vista)使得kernel32.dll的地址是随机的,但这并不影响整体,因为在一个会话中所有进程的kernel32.dll的基地址是一样的——直到操作系统重置。

所以这段代码通常可能是安全的:

void launchAndInject(const char* app, const char* dll)
{
    STARTUPINFOA si = {0};
    si.cb = sizeof(si);
    PROCESS_INFORMATION pi = {0};

    if (CreateProcessA(app, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi))
    {
        LPVOID loadLibrary = GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
        if (loadLibrary == NULL) {
            return;
        }
        SIZE_T len = ::strlen(dll) + 1;
        LPVOID addr = VirtualAllocEx(pi.hProcess, NULL, len, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
        if (addr == NULL) {
            return;
        }
        if (!WriteProcessMemory(pi.hProcess, addr, dll, len, …
Run Code Online (Sandbox Code Playgroud)

dll-injection

5
推荐指数
1
解决办法
3218
查看次数

标签 统计

c++ ×2

dll ×1

dll-injection ×1

loadlibrary ×1

multithreading ×1

winapi ×1