A-A+

删除运行程序本身的方法! 不是用批处理的方法(bat)!

2008年11月29日 未分类 暂无评论 阅读 1 次

作者:d99 日期:2005-07-31
 
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()) <> 0 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;

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录