[转]强制卸载目标进程模块
2013-03-09 11:35
302 查看
http://blog.csdn.net/qq752923276/article/details/7333835
代码来源于网络,卸载模块后通过查询PEB得到进程信息的程序没有得到更新,(如:Windows优化大师和360的进程查看),可以通过冰刃查看。
注:强制卸载可能导致目标进程崩溃。
哈哈,又有了种结束进程的方式,卸载目标进程的ntdll.dll。
下面是代码:
调用:
ForceQuit quit;
quit.EnablePriv();
quit.Execute(DestProcessName,DestModuleName);
代码来源于网络,卸载模块后通过查询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);
相关文章推荐
- 强制卸载目标进程模块
- 学习笔记之卸载远程目标进程中的DLL模块(转)
- 卸载其他进程中的dll模块
- 目标版插入模块驱动时出现version magic 与 驱动模块插入成功但是不能卸载的解决办法
- Linux强制卸载内核模块(由于驱动异常导致rmmod不能卸载)
- linux3.x 内核如何强制卸载模块?
- 利用NtUnmapViewOfSection强制卸载模块
- VC中遍历目标进程中的模块
- 如何在不结束进程的情况下卸载该进程中的dll模块
- linux3.x 内核如何强制卸载模块?
- 卸载远端进程模块(张佩)
- 幽默人讲解R3枚举目标进程加载模块的全过程
- 卸载进程中的模块(修改版)
- 卸载掉指定进程中的指定模块
- 从进程空间卸载模块的方法
- 04 Python正则表达式 爬虫程序 变量的引用,浅拷贝,深拷贝 多线程 进程锁 数据库模块
- Linux下如何用rpm卸载软件 rpm依赖包强制卸载
- 内核级强制结束进程
- Python学习进程(12)模块