繁体   English   中英

如何使用 windows 中注入的 dll 中的参数调用 function

[英]How to call function with parameters in the injected dll in windows

我想将我的简单 dll 注入第三方应用程序。 之后我想从我自己的进程中调用dll中的function,而不是第三方应用程序中的进程。

以下第一部分显示了我测试的整个dll:

// dllmain.cpp
#include "pch.h"



extern "C" __declspec(dllexport) int add(int a, int b)
{
    return a + b;
}


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

第二部分显示了我进程中的调用者 function:

    // hProcess is the process in the third-party application

    // Call our exported function
    lpReturn = NULL;

    ***// I don't know how to pass parameter a and b into the exported function add in my simple dll***
    HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpFunctionAddress, lpRemoteParams, NULL, NULL);

    DWORD dwOut = 0;
    while (GetExitCodeThread(hThread, &dwOut)) {
        if (dwOut != STILL_ACTIVE) {
            *ppReturn = (PVOID)dwOut;
            break;
        }
    }

我不知道如何将参数a和b传递到导出的function中添加我的简单dll(请参考上面的第二部分)

任何人都可以给我一个提示,或者一个完整的示例显示如何使用 windows 中注入的 dll 中的参数调用 function? 谢谢:-)

我认为棘手的部分是在注入 DLL 时通过 arguments。

您至少可以尝试两种方法:

  1. 使用您的 DLL 路径和名称作为参数。 DLL 的文件名可以通过GetModuleHandleExGetModuleFileName检索
  2. 通过线程描述传递参数。 首先,使用标志 CREATE_SUSPENDED 调用CreateRemoteThread ,然后在您有机会通过SetThreadDescription设置其描述后恢复它。 在您的 DLL_PROCESS_ATTACH 案例中使用GetThreadDescription来获取描述。

请参考 Github 上的migi 项目以获取工作源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM