程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> win2000/xp/2003下不能關閉程序的方法

win2000/xp/2003下不能關閉程序的方法

編輯:Delphi
只針對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定位等一系列病毒式操作,在對方的身體運行呀  
  簡單的代碼可以,復雜的功能就很不適合,一般的程序根本就不適合,所以除非寫病毒,否則不建議用這樣的方法,因為連調試都變得很難  
   
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved