只針對2000以上系統,9X的就別問我了,4年沒搞了:)
一般有4種方法:
1)DLL掛靠方法
程序改寫為DLL結構,掛靠Explorer.exe上運行
好處:沒進程實體,普通進程查看無效
缺點:可以通過代碼叫Explorer.exe Unload你的Dll,呵呵,還有Explorer出錯時,會重新啟用,那個時候需要重新掛靠你的DLL
改進:用Debug權限掛靠WinLogon.exe,哈哈,安全系數就高很多,WinLogon死了,你也就死機了
LYSoft主頁的http://ly.activepower.Net/projects/No Ctrl+Alt+Del.rar是DLL掛靠方法的例子,修改就可用
2)API Hook方法
關閉程序的實質是什麼?TerminateProcess的API!
只要你的Application.Title:=‘’就不會出現在任務管理器的第一頁
第二頁會出現的,但不怕,我Hook了TerminateProcess就可以保證安全了
TerminateProcess可以Hook?可以,但Hook了沒用,Handle是未知的
因此實質上要Hook的是OpenProcess,只要是我的進程就拒絕打開
好處:不怕你見的到,你就是關不了我
缺點:CMD下的命令行方法Hook不到
改進:能夠Hook系統服務就一定可以,可惜難度大,需要編寫驅動
LYSoft主頁的http://ly.activepower.Net/projects/API Hook.rar是API Hook方法的例子,修改就可用
3)NT內核修改方法
修改NT系統內核對象PsLoadedModuleList上的ActiveProcessLink鏈表就可以在系統上“失蹤”了,但實現這個功能需要驅動支持,沒驅動的方法只能適合XP/2003,因為Nt5.1以上的ZwSystemDebugControl API才能支持內核訪問
好處:你怎麼都見不到進程的
缺點:難度過大,用內核工具仍然可以看見的,很多RootKit木馬就用這個方法的
改進:幾乎是終極大法,沒什麼別的好方法了。
LYSoft主頁的http://ly.activepower.Net/projects/NTLowLevel.exe是演示程序
關鍵代碼如下
function HideProcess: boolean;
label Err;
var
EProcess : DWord;
hPM, FLink, BLink: Cardinal;
begin
Result := false;
EProcess := GetCurrentEProcess;
if EProcess < 1 then Exit;
if not ReadVirtualMemory(EProcess+$88, @FLink, 4) then Exit;
if not ReadVirtualMemory(EProcess+$8C, @BLink, 4) then Exit;
if not WriteVirtualMemory(FLink+4, @BLink, 4) then Exit;
if not WriteVirtualMemory(BLink, @FLink, 4) then Exit;
Result := true;
end;
不要問為什麼了,你需要NTDDK的知識才能明白的:)
4)遠程線程方法
沒有實體的存在,沒進程,沒DLL,只有代碼
把代碼直接注入進程空間VirtualAllocEx,用CreateRemoteThread運行,
好處:沒可見的實體,隱蔽性最強
缺點:適合於簡單代碼,復雜的難以保證其可靠性和穩定性,病毒的最愛
改進:不需要什麼了
這個沒演示了,呵呵:)
注入某個進程空間,要涉及到API定位等一系列病毒式操作,在對方的身體運行呀
簡單的代碼可以,復雜的功能就很不適合,一般的程序根本就不適合,所以除非寫病毒,否則不建議用這樣的方法,因為連調試都變得很難