我有一个进程 X,我将我的 DLL 注入其中以绕过一些函数,并制作一些内存补丁。我需要绕道ShellExecuteEx()
,因为这个进程运行其他进程,然后我也需要将我的 DLL 注入到子进程中。
我的迂回函数似乎调用得很好,当我调用原始函数时,它返回 TRUE。但是,注入我的 DLL 的进程会在几秒钟后关闭,此时调用它(还没有注入子进程,因为我还没有对其进行编码)。知道为什么吗?
static BOOL(WINAPI *t_ShellExecuteExW)(SHELLEXECUTEINFOW *pExecInfo) = ShellExecuteExW;
BOOL d_ShellExecuteExW(SHELLEXECUTEINFOW *pExecInfo)
{
BOOL result;
printf("ShellExecuteEx %ls \n", pExecInfo->lpFile);
try
{
result = t_ShellExecuteExW(pExecInfo);
}
catch (const std::exception& e)
{
printf("Exception %s", e.what());
}
if (result)
printf("Result True");
else
printf("Result False");
return result;
}
void makeHooks()
{
HMODULE module = LIBpatching_loadLibrary("shell32.dll", 10000);
FARPROC address;
if ((address = GetProcAddress(module, "ShellExecuteExW")) != nullptr)
{
printf("[shell32] [ShellExecuteExW] Address found\n");
LIBpatching_hookFunction((PBYTE)address, (PBYTE)d_ShellExecuteExW);
}
}