Delphi自删除程序

我如何自动删除,我的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最有效的方法是创建一个处于挂起状态的子进程,注入代码以等待父进程(要删除的exe),然后检测父进程何时退出,删除父进程并最终终止孩子的过程。

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

  • 自删除可执行文件(允许可执行文件在运行时自行删除的技术)
  • Self deleting executables Ranju。 V.