【发布时间】:2020-06-30 19:06:23
【问题描述】:
今天我得到了一个 LoadLibraryA 注入器,它工作得很好,但它不允许在注入后删除 dll(加载库的东西),我尝试做 FreeLibraryAndExitThread 但它没有工作。
我试过的代码:
FreeLibraryAndExitThread(hThread, 0);
注入代码:
const char* procName = "notepad.exe";
DWORD procID = 0;
while (!procID)
{
procID = GetProcID(procName);
Sleep(30);
}
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, procID);
if (hProc && hProc != INVALID_HANDLE_VALUE)
{
void* loc = VirtualAllocEx(hProc, 0, MAX_PATH, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (loc)
{
WriteProcessMemory(hProc, loc, dllPath, strlen(dllPath) + 1, 0);
}
HANDLE hThread = CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, loc, 0, 0);
if (hThread)
{
CloseHandle(hThread);
}
if (hProc)
{
CloseHandle(hProc);
}
FreeLibraryAndExitThread(hThread, 0);
return 0;
}
顺便说一句,对于愚蠢的问题,我很抱歉,我是 cpp 的新手,在互联网上没有找到可行的解决方案。
【问题讨论】:
-
请发送minimal reproducible example。
FreeLibraryAndExitThread应与hLibModule一起调用(由LoadLibrary、LoadLibraryEx、GetModuleHandle或GetModuleHandleEx返回)。我认为CreateRemoteThread不会返回兼容的句柄。 -
所以如果我切换到 LoadLibrary 或 LoadLibraryEx 我可以卸载 dll 吗?
-
你不能只切换功能。
CreateRemoteThread创建一个线程,LoadLibrary加载一个DLL。我从来没有做过 DLL 注入,所以我不确定库在你的场景中的加载位置。 -
我的意思是,切换整个注入代码。
-
我不知道。我从来没有做过注射。
标签: c++ dll loadlibrary dll-injection