如何简单实现可执行文件的自我删除

Python-删除自己在百度贴吧的发帖和回复 删除自己在百度贴吧的发帖和回复 立即下载

可执行文件即 EXE 文件在运行过程中,由系统管理其打开的句柄。此时对该文件的一些操作是被系统禁止的,比如删除操作。然而在某些场合,可能须要程序有自我删除的功能,也就是程序运行结束后删除自身。基于这个想法,可以有一种很简单的方法来实现这个基本功能。

本方法基于两点来实现删除功能。一是利用 windows 的 command program 的删除文件操作;再者就是启动新的进程来执行这个删除操作。下面就仔细说明。

Windows 中的 command program 是一个系统的 shell program. 在 windows95/98/Me 中,其文件名为 command.com ,而在 NT/2000/XP 中则是 cmd.exe 。我们可以通过环境变量 COMSPEC 得到其全路径名。

假定目前我们所使用的是 XP ,在命令行中输入 :

cmd.exe /?

即得到 command shell 的使用方法;其中 /c 的含义是:执行字符串指定的命令然后终断,这正是我们所须要的。这样利用 command shell 删除一个文件的命令如下:

cmd.exe /c del mypro.exe

这里要注意一点,文件名应该是短文件名(文件名不得超过 8 个字符 , 后缀不超过 3 个字符)。如果实际文件是长文件句,那么程序中我们可以用 GetShortPathName 这个 API 函数来转换。

接下来我们要做是如何在一新的进程中成功的执行这一指令。起来一个新进程的命令主要有 ShellExecute 和 CreateProcess 。

先使用 ShellExecute 为例。在程序的结束处使用如下语句:

ShellExecute(NULL, "open","cmd.exe", "/c del mypro.exe ", NULL, SW_HIDE);

编译后运行文件发现执行成功,文件运行完后被删除。但是后面做多次实验后,发现有时文件执行完后并不会被删除。通过分析,认为在删除操作执行时,可执行文件还未关闭。也就是说只有在执行文件的进程关闭后,执行删除操作的进程才能完成操作。这样就有了一个问题,系统负责进程和线程的调度执行,我们无法人为规定进程或线程以某种秩序执行。

对此我的解决办法是,建立执行删除操作的进程时设定其为挂起状态,从而为其的设定一个低优先级别,同时提高执行文件的进程级别,然后才正式起动新进程。这样基本可以保证两个进程的先后执行。这样新的解决方法就是用CreateProcess以CREATE_SUSPEND标志来建立新进程,然后用SetPriorityClass来设定相应的优先级,主进程的优先级是HIGH_PRIORITY_CLASS,而执行删除操作的进程的优先级是IDLE_PRIORITY_CLASS。经过数百次的测试,删除操作都是成功的。

下面是一个封装了删除操作的函数,函数内起动一个进程执行command shell的del命令。在程序最后结束处调用它,就可以简单的实现程序的自删除功能。
#include <windows.h>
#include <shellapi.h>
#include <stdio.h>

int DeleteMyExe()
{
	TCHAR tcsExename[MAX_PATH];
	TCHAR tcsParam[MAX_PATH * 2];
	TCHAR tcsCmd[MAX_PATH];
	HANDLE hProcess = NULL;

	// get exe filename and command shell program
	if( 0 == GetModuleFileName(NULL, tcsExename, MAX_PATH) 
		||  0 == GetEnvironmentVariable(_T("COMSPEC"), tcsCmd, MAX_PATH))
		FAILRET;

	// get short filename for command shell program
	if( 0 == GetShortPathName(tcsExename, tcsExename, MAX_PATH))
		FAILRET;
	
	// create a command process, set its priority, then start it.
	STARTUPINFO si;
	PROCESS_INFORMATION pi;

	ZeroMemory( &si, sizeof(si) );
	si.cb          = sizeof(si);
	si.dwFlags     = STARTF_USESHOWWINDOW;
	si.wShowWindow = SW_HIDE;
	ZeroMemory( &pi, sizeof(pi) );

	_stprintf(tcsParam, _T("%s /c del %s"), tcsCmd, tcsExename);
	if(!CreateProcess(NULL,
					  tcsParam,
					  NULL,
					  NULL,
					  FALSE,
					  CREATE_SUSPENDED,
					  NULL,
					  NULL,
					  &si,
					  &pi))
	{
		return GetLastError();
	}

	// heigthen priority of the current process
	SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);    

	// set file attribute to normal 
	SetFileAttributes(tcsExename, FILE_ATTRIBUTE_NORMAL);

	// depress priority of command process, then start it
	SetPriorityClass(pi.hProcess, IDLE_PRIORITY_CLASS);
	ResumeThread(pi.hThread);
    return 0;
}
exe自删除程序.程序运行后,自己删除自己 vc++ exe自删除程序.程序运行后,自己销毁自己 立即下载

相关推荐

【GD32篇】驱动AD7616完成数据采集

GD32F10X驱动AD7616完成数据采集

we_long的博客 1万+

转:如何简单实现可执行文件的自我删除

如何简单实现可执行文件的自我删除作者:zyq654321可执行文件即 EXE 文件在运行过程中,由系统管理其打开的句柄。此时对该文件的一些操作是被系统禁止的,比如删除操作。然而在某些场合,可能须要程序有自我删除的功能,也就是程序运行结束后删除自身。基于这个想法,可以有一种很简单的方法来实现这个基本功能。 本方法基于两点来实现删除功能。一是利用 windows 的 command program 的

1454

Aspice的理解

ASPICE 是由汽车行业的主要公司和组织合作开发的,包括德国汽车工业联合会(VDA)和国际汽车工作组(Automotive SIG)。其目标是通过标准化的软件开发流程,提高汽车电子系统的软件质量和可靠性。

hkj8808的博客 2017

python删除自身程序

为了实现python程序的自删功能查了很多资料,最终使用了这个方案 代码部分 def run_batch_file(file_path): # 执行bat文件函数 Popen(file_path, creationflags=subprocess.CREATE_NEW_CONSOLE) def zh(): pf=os.getenv("SystemDrive") #获取系统盘 盘符 file = open(pf+r'\Users\%s\Desktop\1.bat' % ge

小超的博客 3822

COMSOL有限元仿真深度指南:为结构件添加预应变

一、什么是预应力和预应变? 我们知道,结构力学问题中,结构件在外载荷作用下产生变形响应以吸收外载荷做功带来的能量;而在结构内部,整体的受力和变形则是通过固体微元的应力与应变传递的。 对于线弹性材料来说,应力与应变的关系可以线性表达,也即 σ=Dεσ = Dεσ=Dε ;在该式中,无论固体微元的应变程度多大,弹性矩阵DDD都是一个不变的常值。而对于超弹性材料来说,应力与应变的关系则需要通过应变能密度函数WWW来表征(详细参加博客《COMSOL有限元仿真深度指南:超弹性模型有限元分析入门》)。 从上面我们也不难

忘了面孔的Batou 7172

FPGA 学习笔记:Vivado 工程更改FPGA 型号

FPGA 学习笔记:Vivado 工程更改FPGA 型号

坚韧与专注 1万+

python 程序删除自身

python程序打包exe后,运行之后删除自身。

三怪老头的怪言怪语 1915

uniapp [全端兼容] - 实现接入集成高德地图搜索地址及选择位置功能,搜索框检索选择地点并返回经纬度及详细省市区县街道地址,用户搜索历史及清空历史记录,选择地址自动获取周边位置列表/地图移动选点

uni-app,高德地图,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,Uniapp高德地图,在地图上选择或搜索指定地点,打开地图选择位置,关联地址搜索,输入地址返回附近地址列表,uniApp高德地图地址搜索,搜索框历史记录,关键字搜索,周边查询,搜索位置,uniapp对接高德实现搜索出现地址以及保存搜索记录,集成高德地图,实现精准位置选点功能,获取当前定位城市,如何实现搜索功能,获取省份城市区街道详细地址经纬度,移动选点标记位置,在地图上进行选择位置选点、搜索

🏆 前端领域优质创作者 1万+

简单实现可执行文件的自我删除

简单实现可执行文件的自我删除 可执行文件即 EXE 文件在运行过程中,由系统管理其打开的句柄。此时对该文件的一些操作是被系统禁止的,比如删除操作。然而在某些场合,可能须要程序有自我删除的功能,也就是程序运行结束后删除自身。基于这个想法,可以有一种很简单的方法来实现这个基本功能。 本方法基于两点来实现删除功能。一是利用 windows 的 command progra...

weixin_33858336的博客 186

【安卓逆向】python版本 sha源码

免责声明本文内容仅供学习交流使用,严禁用于商业和非法用途。抓包数据、敏感网址以及数据接口已进行脱敏处理。 注:如有引用,请标注文章地址!!!!!!!

Coodekun的博客 817

【WRF-GHG 教程上】完整教程(2024年更新版)

完整教程(2024年更新版)

WW、forever的博客 1436

如何"借他人之手"实现可执行文件的自我删除

可执行文件即EXE文件在运行过程中,由系统管理其打开的句柄。此时对该文件的一些操作是被系统禁止的,比如删除操作。然而在某些场合,可能须要程序有自我删除的功能,也就是程序运行结束后删除自身。基于这个想法,可以有一种很简单的方法来实现这个基本功能。       本方法基于两点来实现删除功能。一是利用windows的command program的删除文件操作;再者就是启动新的进程来执行这个删除操作。下

老裴 1035

高通Camx功能feature分析之八:高通NCS服务之架构和初始化

本文介绍了高通NCS(NONCameraSensor)服务的架构与初始化流程。NCS服务通过QMI接口访问非相机传感器,为CameraEIS、AEC等算法节点提供陀螺仪、加速度计等传感器数据支持。文章详细解析了NCS服务的分层架构,包括客户端、服务端、QSEE接口实现等组件,并重点分析了初始化过程中获取传感器列表、查询能力等关键步骤。通过camxsetting.xml中的enableNCSService开关控制服务启动,初始化过程涉及QSEE单例创建、传感器能力查询等核心操作。后续文章将继续深入讲解相关技术

931

linux 运行的程序,把可执行文件或者动态库删除,程序会崩溃吗

当程序运行的时候,如果把可执行文件删除或者把这个程序依赖的动态库删除,程序会继续正常运行还是会崩溃?当程序运行的时候,如果将可执行文件覆盖或者将程序依赖的动态库覆盖,程序会继续正常运行还是会崩溃?这两个问题中有两个变量,一个是操作的对象,可执行文件还是依赖库;一个是操作的类型,把文件删除还是把文件覆盖。本文通过实验的方式来记录这 4 中情况。先列出结论,如下:操作对象删除覆盖: cp new old覆盖: mv new old可执行文件程序继续运行,不崩溃操作失败,提示文件忙。

weixin_38184628的博客 1553

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

快速删除可执行文件

背景 在使用 vim 撸码的的时候,我的配置可以按F5直接编译运行,不过在编译通过后会生成一个同名的可执行文件,然后每次都要手动删除这个文件,很烦,所以决定写个命令直接删除当前文件下所有的可执行文件 实现 首先我自己写了一个回收站,防止 rm 命令误删文件具体可以看给rm命令加道保险 然后在此基础上向 ~/.bashrc 中写了这个命令 alias clearallx='mv `ls...

skange的博客 1930

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

如何让程序进行自我删除

    如何让程序完成自我删除,直接删办法没有想到,想了一种间接删除法,即先从程序中释放出来一个小的Shell文件,在Window中可以是一个.bat,批处理文件,在Linux就是一个Shell文件。 以Window平台为例,当前运行的可执行文件是Test.exe。当在使用这个Test.exe,出现了一些危机情况或才非法权限运行,程序会自动进行删除,删除前创建一个del.bat 内容可以是

my2005lb的专栏 993

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

可执行文件自我删除

可执行程序自己删除自己。挺有意思的,Google && csdn 了一下,还是有不少方法的。有一个已经经过试验,挺管用的。代码如下:#include #include #include int DeleteMyExe(){    TCHAR tcsExename[MAX_PATH];    TCHAR tcsParam[MAX_PATH * 2];    TCHAR tcsCmd[MAX_PATH

simon_new88的专栏 893

linux文件上传后执行脚本,linux执行后台可执行文件后自删除脚本

摘要:linux执行可执行文件后,删除可执行文件以规避硬盘文件检查。因为linux特殊机制,可执行文件执行后,是可以删除的。所以把可执行文件放入后台执行,然后把硬盘上的文件删除,可以规避一定的检测。bae64命令如果禁止上传可执行文件,或者对上传的文件有字符串检测,可以把可执行文件转换成base64字符串,然后再还原回去。base64 docker > dockerbase//将docker...

weixin_42527401的博客 524

删除进程自身可执行文件的另一种方法

此文章系收藏之作,并非本人所写 大家都知道,一般的程序运行的时候,可执行文件本身是被操作系统保护的,不能用改写的方式访问,更别提在本身还在运行的时侯删除自己了。在lu0的主页上看到一种undocument的方法,通过改变系统底层的文件访问模式实现删除自己,那是实在功夫。我看了很是佩服。但是有没有一种用在msdn上就能查到的函数实现呢?有!jeffrey richter给我们做了一个范例:delet

vcforever的专栏 2761

使用shell编程实现删除指定文件夹中可执行文件

初学shell编程,为了巩固所学知识准备编写一个简单的shell脚本,实现删除指定文件夹中可执行文件的目的。

Jason_zhaojie的博客 975
上一篇: 半驱动后门s_126_0(1).htm 部分分析
下一篇: MS08-025 win32k.sys NtUserFnOUTSTRING Privilege Escalation Exploit
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值