实际不是原创,是别人研究出来的,我不过把Delphi代码翻译成C的。
下面的代码可以卸载一个进程的模块。
pid是进程ID,ModuleName是模块名。
如果卸载的是一个关键模块,进程就废了。
比如:调用UnloadModule(pid, "ntdll.dll");可以结束一个进程,手段很黄很暴力。
结束一般程序没有问题,但有自我保护的,比如卡巴斯基是不行的,原因是根本不允许你OpenProcess。
下面的代码可以卸载一个进程的模块。
pid是进程ID,ModuleName是模块名。
- BOOL UnloadModule(DWORD pid, char *ModuleName)
- {
- typedef DWORD (WINAPI *PTRZwUnmapViewOfSection)(IN HANDLE ProcessHandle, IN PVOID BaseAddress);
- PTRZwUnmapViewOfSection pZwUnmapViewOfSection = (PTRZwUnmapViewOfSection)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwUnmapViewOfSection");
- HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
- if (hProcess != NULL)
- {
- pZwUnmapViewOfSection(hProcess, GetModuleHandle(ModuleName));
- CloseHandle(hProcess);
- return TRUE;
- }
- return FALSE;
- }
比如:调用UnloadModule(pid, "ntdll.dll");可以结束一个进程,手段很黄很暴力。
结束一般程序没有问题,但有自我保护的,比如卡巴斯基是不行的,原因是根本不允许你OpenProcess。