无法使用加载库卸载注入的 dll (C++)
Can't unload an injected dll with loadlibrary (C++)
今天我得到了一个 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 的新手,在互联网上找不到有效的解决方案。
您没有正确卸载 DLL。
您滥用FreeLibraryAndExitThread()
. 它期望加载的 DLL 的HMODULE
卸载,但您改为为其提供远程线程的HANDLE
- 您已经事先通过CloseHandle()
关闭了该线程。 无论如何,FreeLibraryAndExitThread()
终止调用线程,这不是您在这种情况下想要执行的操作。
您需要等待LoadLibrary()
完全完成。 创建远程线程后,使用WaitForSingleObject()
或相关函数等待线程HANDLE
。
之后,您可以将调用 toFreeLibrary()
注入到远程进程的上下文中,将LoadLibrary()
返回的HMODULE
传递给它 - 您当前没有。 使用LoadLibrary()
作为线程过程时,线程的退出代码将包含返回的HMODULE
。 如果目标是 32 位进程,则可以使用GetExitCodeThread()
检索该HMODULE
。 但是,如果您的目标是 64 位进程,事情会变得更加复杂,因为线程的退出代码将截断HMODULE
值。
请参阅 LoadLibrary 上的 CreateRemoteThread 并取回 HMODULE。
我不太确定你想要什么,但你不能这样做,因为你关闭了句柄:
if (hThread)
{
CloseHandle(hThread);
}
...
FreeLibraryAndExitThread(hThread, 0);
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL