加载中…
个人资料
小key
小key
  • 博客等级:
  • 博客积分:0
  • 博客访问:6,238
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

几种程序自杀的方法(Delphi)

(2007-08-11 00:36:18)
分类: Hackerkey墮落
 
procedure DeleteMe;

var

  BatchFile: TextFile;

  BatchFileName: string;

  ProcessInfo: TProcessInformation;

  StartUpInfo: TStartupInfo;

begin

  BatchFileName := ExtractFilePath(ParamStr(0)) '_deleteme.bat';

  AssignFile(BatchFile, BatchFileName);

  Rewrite(BatchFile);

  Writeln(BatchFile, ':try');

  Writeln(BatchFile, 'del "' ParamStr(0) '"');

  Writeln(BatchFile,

    'if exist "' ParamStr(0) '"' goto try');

  Writeln(BatchFile, 'del %0');

  CloseFile(BatchFile);

  FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);

  StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;

  StartUpInfo.wShowWindow := SW_HIDE;

  if CreateProcess(nil, PChar(BatchFileName), nil, nil,

    False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,

    ProcessInfo) then

  begin

    CloseHandle(ProcessInfo.hThread);

    CloseHandle(ProcessInfo.hProcess);

  end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

  DeleteMe;

  close;

end;

end.

  第二种:

类 别:系统控制

  我们经常遇到这样的软件,运行之后就消失的无影无踪,特别是一些黑客的木马工具。

  如果我们能掌握这个技术,即使不做黑客工具,也可以在程序加密、软件卸载等方面发挥作用。

  那么他们是怎样实现的呢? 

---- 以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窗口的瞬间闪烁

第三种:
 
Delphi 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ShellAPI, ShlObj;



type

  TForm1 class(TForm)

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private

    Private declarations }

  public

    Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

function Suicide: Boolean;

var

  sei: TSHELLEXECUTEINFO;

  szModule:  PChar;

  szComspec: PChar;

  szParams:  PChar;

begin

  szModule  := AllocMem(MAX_PATH);

  szComspec := AllocMem(MAX_PATH);

  szParams  := AllocMem(MAX_PATH);

  // get file path names:

  if ((GetModuleFileName(0,szModule,MAX_PATH)<>0) and

     (GetShortPathName(szModule,szModule,MAX_PATH)<>0) and

     (GetEnvironmentVariable('COMSPEC',szComspec,MAX_PATH)<>0)) then

  begin

    // set command shell parameters

    lstrcpy(szParams,'/c del ');

    lstrcat(szParams, szModule);

    // set struct members

    sei.cbSize       := sizeof(sei);

    sei.Wnd          := 0;

    sei.lpVerb       := 'Open';

    sei.lpFile       := szComspec;

    sei.lpParameters := szParams;

    sei.lpDirectory  := 0;

    sei.nShow        := SW_HIDE;

    sei.fMask        := SEE_MASK_NOCLOSEPROCESS;

    // invoke command shell

    if (ShellExecuteEx(@sei)) then

    begin

      // suppress command shell process until program exits

      SetPriorityClass(sei.hProcess,HIGH_PRIORITY_CLASS);//IDLE_PRIORITY_CLASS);

      SetPriorityClass( GetCurrentProcess(),

                        REALTIME_PRIORITY_CLASS);

      SetThreadPriority( GetCurrentThread(),

                         THREAD_PRIORITY_TIME_CRITICAL);

      // notify explorer shell of deletion

      SHChangeNotify(SHCNE_Delete,SHCNF_PATH,szModule,nil);

      Result := True;

    end

    else

      Result := False;

  end

  else

    Result := False;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  Suicide;

end; 

 

 

第四种:

?/P>


procedure deleteSelf;

var hModule: THandle;

szModuleName: array[0..MAX_PATH] of char;

hKrnl32: THandle;

pExitProcess, pdeleteFile, pFreeLibrary, pUnmapViewOfFile: pointer;

ExitCode: UINT;

begin

hModule := GetModuleHandle(nil);

GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));

hKrnl32 := GetModuleHandle('kernel32');

pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');

pdeleteFile := GetProcAddress(hKrnl32, 'deleteFileA');

pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');

pUnmapViewOfFile := GetProcAddress(hKrnl32, 'UnmapViewOfFile');

ExitCode := system.ExitCode;

if ($80000000 and GetVersion()) <> then

// Win95, 98, Me

asm

lea eax, szModuleName

push ExitCode

push 0

push eax

push pExitProcess

push hModule

push pdeleteFile

push pFreeLibrary

ret

end

else

begin

CloseHandle(THANDLE(4));

asm

lea eax, szModuleName

push ExitCode

push 0

push eax

push pExitProcess

push hModule

push pdeleteFile

push pUnmapViewOfFile

ret

end

end

end;

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有