加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – Delphi自删除程序

发布时间:2020-12-14 04:36:08 所属栏目:Windows 来源:网络整理
导读:我如何自动删除我的Delphi程序?我试过这段代码: procedure DeleteSelf;var module : HMODULE; buf : array [ 0 .. MAX_PATH - 1 ] of char; p : ULONG; hKrnl32 : HMODULE; pExitProcess,pDeleteFile,pFreeLibrary : pointer;begin module := GetModuleHan
我如何自动删除我的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下运行.因为在这些操作系统中,系统保留对内存映射文件的usermode句柄引用,该文件支持磁盘上的可执行映像.在这些Windows版本中,此句柄始终具有值0x4.

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

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

> Self-deleting Executables (Techniques which allow an executable file to delete itself whilst running)
> Self deleting executables Ranju. V.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读