-
-
[旧帖]
[原创]卸载其他进程的DLL
0.00雪花
-
发表于:
2012-5-27 15:56
2151
-
[旧帖] [原创]卸载其他进程的DLL
0.00雪花
菜鸟一枚,各位大牛勿喷。。。虽然之前有人在黑防上发表过类似的文章,但是木有给出具体代码。。。我也是近来写出来了,才发现黑防上早有人发表过类似的文章了,泪奔啊。。。

闲话少说,先简单介绍一下卸载其他进程DLL模块的思路,主要借助远程线程注入技术,在目标进程中创建一个线程,线程函数为FreeLibrary函数,参数为通过模块快照获取的指定DLL的模块句柄,这样就可以卸载掉啦。。。好吧。。。我表达能力不够好。。。直接上代码。。。支持共享
bool FreeRemoteDLLs(DWORD dwProcessID,LPCTSTR lpModuleName = TEXT("WatchDog.dll"))
{
MODULEENTRY32 stModuleEntry = {0};
stModuleEntry.dwSize = sizeof(MODULEENTRY32);
HANDLE hModule = NULL;
HANDLE hModuleSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwProcessID);
if(hModuleSnapShot == INVALID_HANDLE_VALUE)
{
return false;
}
if(Module32First(hModuleSnapShot,&stModuleEntry))
{
do{
if(lstrcmpi(stModuleEntry.szModule,lpModuleName) == 0)
{
hModule = stModuleEntry.hModule;
break;
}
continue;
}while(Module32Next(hModuleSnapShot,&stModuleEntry));
if(hModule == NULL)
{
return false;
}
CloseHandle(hModuleSnapShot);
}
HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE,
false,
dwProcessID);
if(!hProcess)
{
return false;
}
LPTHREAD_START_ROUTINE lpFreeDLLs = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32.dll")),"FreeLibrary");
HANDLE hThread = CreateRemoteThread(hProcess,
NULL,
0,
lpFreeDLLs,
hModule,
0,
NULL);
WaitForSingleObject(hThread,INFINITE);
return true;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课