首页 > 系统相关 >强制卸载目标进程模块

强制卸载目标进程模块

时间:2023-09-19 10:04:27浏览次数:44  
标签:HANDLE tkp pt32 hSnap 模块 卸载 md32 return 强制


代码来源于网络,卸载模块后通过查询PEB得到进程信息的程序没有得到更新,(如:Windows优化大师和360的进程查看),可以通过冰刃查看。

注:强制卸载可能导致目标进程崩溃。

哈哈,又有了种结束进程的方式,卸载目标进程的ntdll.dll。

下面是代码:

class ForceQuit
{
public:
    bool EnablePriv()
    {
            HANDLE hToken;
            if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) )
            {
                    TOKEN_PRIVILEGES tkp;
		
                    LookupPrivilegeValue( NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid );//修改进程权限
                    tkp.PrivilegeCount=1;
                    tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
                    AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL );//通知系统修改进程权限
		
                    return( (GetLastError()==ERROR_SUCCESS) );
            }
            return false;
    }
    bool GetProcessIdByName(LPSTR lpProcessName,LPDWORD lpdwPID)
    {
            HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
            assert(hSnap!=INVALID_HANDLE_VALUE);
            PROCESSENTRY32 pt32;
            pt32.dwSize=sizeof pt32;
            bool result=false;
            if (Process32First(hSnap,&pt32))
            {
                    do
                    {
                            if (!lstrcmpi(pt32.szExeFile,lpProcessName))
                            {
                                    *lpdwPID=pt32.th32ProcessID;
                                    result=true;
                                    break;
                            }
                    }while (Process32Next(hSnap,&pt32));
            }
            CloseHandle(hSnap);
            return result;
    }
    bool GetModuleBaseAddrByPID(DWORD dwProcessID,LPSTR lpDllName,LPDWORD lpdwBaseAddr)
    {
       HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwProcessID);
       assert(hSnap!=INVALID_HANDLE_VALUE);
       MODULEENTRY32 md32;
       md32.dwSize=sizeof md32;
       bool result=false;
       if(Module32First(hSnap,&md32))
       {
           do
           {
              if(!lstrcmpiA(lpDllName,md32.szModule))
              {
                 *lpdwBaseAddr=(DWORD)md32.modBaseAddr;
                 result=true;
                 break;
              }
           }
           while(Module32Next(hSnap,&md32));
       }
       CloseHandle(hSnap);
       return result;
    }

    bool Execute(LPSTR lpProcessName,LPSTR lpDllName)
    {
        typedef DWORD (_stdcall *XXXNtUnmapViewOfSection)( HANDLE hProcess, PVOID Address);

        PVOID   NtdllAddress;
        HANDLE   hProcess;
       
        DWORD dwProcessID;
        EnablePriv();
        if(GetProcessIdByName(lpProcessName,&dwProcessID))
        {
            hProcess = OpenProcess( PROCESS_VM_OPERATION, FALSE, dwProcessID);
            assert(hProcess!=NULL);
            XXXNtUnmapViewOfSection  NtUnmapViewOfSection = (XXXNtUnmapViewOfSection)GetProcAddress(LoadLibraryA("ntdll.dll"), "NtUnmapViewOfSection" );
            assert(NtUnmapViewOfSection!=NULL);
            NtdllAddress = (PVOID)NtUnmapViewOfSection;
            
            DWORD moduleBaseAddr;
            if(GetModuleBaseAddrByPID(dwProcessID,lpDllName,&moduleBaseAddr))
            NtUnmapViewOfSection( hProcess,(PVOID)moduleBaseAddr);

            CloseHandle( hProcess );
            return true;
        }   
        return false;
    }
};



调用:

ForceQuit quit;
    quit.EnablePriv();
    quit.Execute(DestProcessName,DestModuleName);




标签:HANDLE,tkp,pt32,hSnap,模块,卸载,md32,return,强制
From: https://blog.51cto.com/u_15487030/7521742

相关文章

  • 用ZwQueryVirtualMemory枚举进程模块
    用ZwQueryVirtualMemory枚举进程模块枚举进程模块通常可以使用诸如:CreateToolhelp32Snapshot,Module32First,Module32Next等"ToolHelpFunctions"接口来实现,并且这也是最通用的方法(从Win95就开始支持了),但是今天我们要介绍的是ntdll.dll导出的未文档化接口ZwQueryVirtualM......
  • 前端模块化
     1.为什么需要模块化随着前端应用的日益复杂,我们的项目代码已经逐渐膨胀到了不得不花大量时间去管理的程度了。而模块化就是一种最主流的代码组织方式,它通过把复杂的代码按照功能的不同划分为不同的模块单独维护,从而提高开发效率、降低维护成本。模块化可以使你能够更容易地重......
  • Node.js URL 模块:解析和操作 URL
    任何基于Web的应用程序不可或缺的方面之一是其有效使用URL的能力。无论是解析传入的URL还是构建URL来发出请求,清楚地了解Node.js中的URL模块对于现代Web开发人员来说至关重要。在这篇博文中,我们将探索Node.js的URL模块,从基本的URL解析开始,逐步推进到更复杂的......
  • JavaScript 模块之间的差异:CJS、AMD、UMD 和 ESM
    JavaScript的世界是一个不断发展和发展的技术领域。多年来,开发人员尝试使用不同的模块系统来提供更有组织性和协作性的工作环境。在这篇博文中,我们将研究四种流行的JavaScript模块系统之间的差异:CommonJS(CJS)、异步模块定义(AMD)、通用模块定义(UMD)和ECMAScript模块(ES......
  • RK3568开发板外接超声波传感器测距模块-迅为电子
    超声波传感器测距模块1模块说明HC-SR04传感器模块如下图所示:   只需要在 Trig 管脚输入一个 10US 以上的高电平,系统便可发出 8 个 40KHZ 的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过 Echo 管脚输出。根据 Echo管脚输出高电平的持续时间可以计算距离值,......
  • RK3568开发板外接超声波传感器测距模块
      超声波传感器测距模块1模块说明HC-SR04传感器模块如下图所示:   只需要在Trig管脚输入一个10US以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过Echo管脚输出。根据Echo管脚输出高电平的持续时间可以计算距离......
  • DC电源模块保护内外部电路至关重要
    BOSHIDADC电源模块保护内外部电路至关重要DC电源模块是现代电路设计中经常使用的设备,它能够将交流电转化成为直流电并提供给电路中的各种电子设备使用。在现代电子设备中,大部分都需要稳定可靠的直流电源才能正常工作。然而,如果DC电源模块出现故障,将会对设备和使用者造成不可估量......
  • 编译python扩展模块:-ltensorflow_framework
    参考:https://blog.csdn.net/u012947309/article/details/116736684  =======================================       =======================================......
  • 关于vue2的模块级总结
    前阵子在赶一个项目的进度,一直没时间做总结,今日闲来无事,消化一下。背景vue2的项目,面向受众为g端内容1.项目原因,单路由下包含详情&列表两页面。根据v-if跳转,笔者这里用的是动态组件的方式2.同样由于项目原因,使用的模块级vuex,因而在使用时,也有了许多盲点:(如图:)使用createNa......
  • Linux平台卸载MySQL总结
     如何在Linux下卸载MySQL数据库呢?下面总结、整理了一下Linux平台下卸载MySQL的方法。MySQL的安装主要有三种方式:二进制包安装(UsingGenericBinaries)、RPM包安装、源码安装。对应不同的安装方式,卸载的步骤有些不同。文章中如有不足或不对的地方,敬请指出或补充! RPM包安装方......