欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

卸载其他进程的DLL

卸载其他进程的DLL

菜鸟一枚,各位大牛勿喷。。。虽然之前有人在黑防上发表过类似的文章,但是木有给出具体代码。。。我也是近来写出来了,才发现黑防上早有人发表过类似的文章了,泪奔啊。。。
闲话少说,先简单介绍一下卸载其他进程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;
}
[/SIZE]

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功