http://wenku.baidu.com/link?url=gh2PceqhGr8lDb2scDE32PfTBkBTeINmccNwbZOu_TWoGSiMH44Yyo8h5ZVH5cSfpow4cRUL8vkAauyrFhwwkGCkT1CgD-Uny930hF5t4wm

 

Delphi中几种程序自我删除的方法 第一种:(普通批处理方式)  
1. procedure DeleteMe; 2. var 
3. BatchFile: TextFile; 4. BatchFileName: string; 
5. ProcessInfo: TProcessInformation; 6. StartUpInfo: TStartupInfo; 7. begin 
8. BatchFileName := ExtractFilePath(ParamStr(0)) + '_deleteme.bat'; 9. AssignFile(BatchFile, BatchFileName); 10. Rewrite(BatchFile); 11.  
12. Writeln(BatchFile, ':try'); 
13. Writeln(BatchFile, 'del "' + ParamStr(0) + '"'); 14. Writeln(BatchFile, 
15. 'if exist "' + ParamStr(0) + '"' + ' goto try'); 16. Writeln(BatchFile, 'del %0'); 17. CloseFile(BatchFile); 18.  
19. FillChar(StartUpInfo, SizeOf(StartUpInfo), $00); 
20. StartUpInfo.dwFlags := STARTF_USESHOWWINDOW; 21. StartUpInfo.wShowWindow := SW_HIDE; 
22. if CreateProcess(nil, PChar(BatchFileName), nil, nil, 23. False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, 24. ProcessInfo) then 25. begin 
26. CloseHandle(ProcessInfo.hThread); 27. CloseHandle(ProcessInfo.hProcess); 28. end; 29. end; 30.  
31. procedure TForm1.Button1Click(Sender: TObject); 32. begin 33. DeleteMe; 34. close; 35. end; 36.  37. end. 
第二种:(系统控制批处理方式)  
我们经常遇到这样的软件,运行之后就消失的无影无踪,特别是一些黑客的木马工具。 如果我们能掌握这个技术,即使不做黑客工具,也可以在程序加密、软件卸载等方面发挥作用。 

 


var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);

 

 

 

那么他们是怎样实现的呢? ---- 以delphi为例,在form关闭的时候执行以下函数closeme即可。  
procedure TForm1.closeme; var f:textfile; begin 
assignfile(f,'.\delme.bat'); rewrite(f); 
writeln(f,'@echo off'); writeln(f,':loop'); 
writeln(f,'del "'+application.ExeName+'"'); writeln(f,'if exist .\file.exe goto loop'); writeln(f,'del .\delme.bat'); closefile(f); 
winexec('.\delme.bat', SW_HIDE); close; end;  
winexec(pchar('command.com /c del '+ParamStr(0)),SW_MINIMIZE);//最小化执行删除操作,否则将看到DOS窗口的瞬间闪烁  
第三种:  
1. uses 
2. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 
Forms, 
3. Dialogs, StdCtrls, ShellAPI, ShlObj; 4.  5. type 
6. TForm1 = class(TForm) 
7. procedure FormClose(Sender: TObject; var Action: TCloseAction); 8. private 
9. { Private declarations } 10. public 
11. { Public declarations } 12. end; 13.  14. var 
15. Form1: TForm1; 16.  
17. implementation 18.  
19. {$R *.dfm} 20.  

 


var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);

 

 

 

21. function Suicide: Boolean; 22. var 
23. sei: TSHELLEXECUTEINFO; 24. szModule: PChar; 25. szComspec: PChar; 26. szParams: PChar; 27. begin 
28. szModule := AllocMem(MAX_PATH); 29. szComspec := AllocMem(MAX_PATH); 30. szParams := AllocMem(MAX_PATH); 31.  
32. // get file path names: 
33. if ((GetModuleFileName(0,szModule,MAX_PATH)<>0) and 34. (GetShortPathName(szModule,szModule,MAX_PATH)<>0) and 
35. (GetEnvironmentVariable('COMSPEC',szComspec,MAX_PATH)<>0)) then 36. begin 
37. // set command shell parameters 38. lstrcpy(szParams,'/c del '); 39. lstrcat(szParams, szModule); 40.  
41. // set struct members 
42. sei.cbSize := sizeof(sei); 43. sei.Wnd := 0; 
44. sei.lpVerb := 'Open'; 45. sei.lpFile := szComspec; 
46. sei.lpParameters := szParams; 47. sei.lpDirectory := 0; 48. sei.nShow := SW_HIDE; 
49. sei.fMask := SEE_MASK_NOCLOSEPROCESS; 50.  
51. // invoke command shell 
52. if (ShellExecuteEx(@sei)) then 53. begin 
54. // suppress command shell process until program exits 
55. SetPriorityClass(sei.hProcess,HIGH_PRIORITY_CLASS);//IDLE_PRIORITY_
CLASS); 56.  
57. SetPriorityClass( GetCurrentProcess(), 58. REALTIME_PRIORITY_CLASS); 59.  
60. SetThreadPriority( GetCurrentThread(), 61. THREAD_PRIORITY_TIME_CRITICAL); 62.  
63. // notify explorer shell of deletion