基础知识
这里首先说一下程序自删除实现的思路:程序创建一个批处理文件,并创建进程执行,然后程序结束进程;批处理所做的功能便是延时5秒后,删除指定程序然后再自删除。这样,程序自删除功能便实现了。
常用的有三种“自删除”技术
1.利用windows的批处理命令
2.多进程的方式
3.远程注入的方式
主要的问题在于,当前程序正在执行过程中,是删除不掉的。如果当前进程的任务是将程序注入到其他进程,在其他进程的地址空间中运行,然后关掉当前进程。再删除文件就可以删除成功了,这个原理就是方式2,3。
方式1是利用批处理任务可以删除自己的特性实现的。
MoveFileEx方式
我们首先看一下MoveFileEx
这个api
BOOL MoveFileExA(
[in] LPCSTR lpExistingFileName,
[in, optional] LPCSTR lpNewFileName,
[in] DWORD dwFlags
);
dwFlags:设置移动标志,指明要怎样操作文件或者目录。
MOVEFILE_COPY_ALLOWED:当需要移动文件到不同的盘符时需要指定此值,不然会失败,这个值不能和MOVEFILE_DELAY_UNTIL_REBOOT一起用
MOVEFILE_DELAY_UNTIL_REBOOT:文件并不立即移动,当下一次机器重启时文件才执行移动 ,不能和MOVEFILE_COPY_ALLOWED同时用
MOVEFILE_FAIL_IF_NOT_TRACKABLE:当源文件是连接资源时会移动失败。