windows - Delphi自删除程序

标签 windows delphi assembly

如何自动删除我的 Delphi 程序?我试过这段代码:

procedure DeleteSelf;
var
  module : HMODULE;
  buf : array [ 0 .. MAX_PATH - 1 ] of char;
  p : ULONG;
  hKrnl32 : HMODULE;
  pExitProcess, pDeleteFile, pFreeLibrary : pointer;
begin
  module := GetModuleHandle ( nil );
  GetModuleFileName ( module, buf, sizeof ( buf ) );
  CloseHandle ( THandle ( 4 ) );
  p := ULONG ( module ) + 1;
  hKrnl32 := GetModuleHandle ( 'kernel32' );
  pExitProcess := GetProcAddress ( hKrnl32, 'ExitProcess' );
  pDeleteFile := GetProcAddress ( hKrnl32, 'DeleteFileA' );
  pFreeLibrary := GetProcAddress ( hKrnl32, 'FreeLibrary' );
  asm
    lea eax, buf
    push 0
    push 0
    push eax
    push pExitProcess
    push p
    push pDeleteFile
    push pFreeLibrary
    ret
  end;
end;

但是不行,不要删除文件。我的程序是控制台。 谢谢!

最佳答案

您的代码 可以在Windows NT 和2000 下运行。因为在这些操作系统中,系统会保留对内存映射文件的用户模式句柄引用,该文件支持磁盘上的可执行镜像。 在这些 Windows 版本中,此句柄的值始终为 0x4

删除自己的exe最有效的方法是创建一个处于挂起状态的子进程,注入(inject)代码等待父进程(删除的exe),然后检测父进程何时退出,删除父进程最后杀死子进程。

您可以在这些推荐资源中找到有关此主题的更多信息。

关于windows - Delphi自删除程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197542/

相关文章:

Java运行Windows命令行命令返回一个值

windows - Windows Powershell 中的 Unix tail 等效命令

delphi - 我们如何从 Delphi Form 欺骗 Windows 帮助系统来执行我们自己的表单?

delphi - 印地 HTTP : reading response content on a 403

c - 这条指令是做什么的? :- mov %gs:0x14, %eax

c++ - 使用 o2 标志编译会使程序出现访问冲突

performance - 涉及英特尔SnB系列CPU上涉及微编码指令的循环的分支对齐

c++ - 在 GDI+ 中使用 DrawString 函数绘制文本时如何描边?

检查 API 是否受到监控( Hook ?)

delphi - 发送电子邮件最简单的方法是什么?