程序的自删除已经不是什么新鲜的话题了,它广泛运用于木马、病毒中。试想想,当你的程序还在运行中(通常是完成了驻留、感染模块),它就自动地把自己从磁盘中删掉,这样一来,就做到了神不知鬼不觉,呵呵,是不是很cool呢?
自删除(Self Deleting)最早的方法是由 Gary Nebbett 大虾写的,太经典了,不能不提。程序如下:
#include “windows.h”
int main(int argc, char *argv[])
{
char buf[MAX_PATH];
HMODULE module;
module = GetModuleHandle(0);
GetModuleFileName(module, buf, MAX_PATH);
CloseHandle((HANDLE)4);
__asm
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push deleteFile
push UnmapViewOfFile
ret
}
return 0;
}
试试编译它,运行。怎么样?从你的眼皮底下消失了吧?是不是很神奇?
Gary Nebbett 钻了系统的一个漏洞,他的程序是关闭了 exe 文件的 IMAGE(硬编码为4),然后用 UnmapViewOfFile 解除了 exe 文件在内存中的映象,接着通过堆栈传递当前程序的 Handle 给 deleteFile() ,实现了程序的自删除。
Gary Nebbett 果然不愧为 WIN 系统下顶尖的底层高手。那么是否还有其他的方法实现程序的自删除呢?答案是肯定的。
在 Win9x/ME 下,还可以利用 WININIT.INI 的一些特性。在 WININIT.INI 文件里面有一个节 [rename] ,只要在里面写入要 “Nul=要删除的文件”,那么下次系统重新启动的时候,该文件就会被自动删除了。以下是一个例子:
[rename]
NUL=c:\Selfdelete.exe
利用这个特性,我们就可以在程序中对这个 ini 文件进行操作。值得注意的是,当需要自删除的文件多于一个的时候,就不能使用 WritePrivateProfileString 来实现,因为这个 API 会阻止多于一个”NUL=”这样的入口在同一个节里面出现,所以最好还是自己手动实现。
第三种方法是利用批处理文件。先让我们做一个试验:
创建一个 a.bat ,给它写入以下内容:
del %0.bat
现在运行它吧,屏幕一闪而过,最后留下一串字符:”The batch file cannot be found”。这时候它已经从你的硬盘中消失了。
这说明,批处理文件是可以删除自己的,于是我们可以把这个小技巧运用在自己的程序当中:
:Repeat
它会重复不断地搜索是否有 Selfdelete.exe 这个文件,直到删除了它为止;当删除完毕后,这个批处理文件就会把自己删除。
(注:本方法可以支持所有的 Windows 版本,即 Win9x/Me/NT/2000/XP)
用批处理文件的方法有一个缺陷,就是会突然弹出一个 DOS 窗,冷不防的吓人一跳,不过据我所知这是目前唯一可以在 WinXP 下起作用的方法。当然,最理想的方法是用 Gary Nebbett 的那种,不过它的缺陷是没法在 WinXP 下起作用。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
勒索软件给事件响应带来压力
研究表明,随着网络罪犯将注意力转向勒索软件攻击,2017年泄露数据记录数量下降近25%。 根据2018年IBM […]
-
雅虎数据泄露事故黑客认罪
雅虎数据泄露事故涉及30亿用户帐户,该泄露事故背后共有四名攻击者,Karim Baratov只是其中一名……
-
“以恶制恶”:Team White黑客团队的做法是否利大于弊?
“白色团队”(Team White)黑客称其Wifatch恶意软件感染超过30万台设备,其目的旨在加强这些设备的安全性,但专家仍然质疑该团队的义务安全保护行为。
-
信息安全形势严峻 西部省份成重灾区
网康专家谈到,受限于资金、意识、技术条件等多方面制约,西部地区信息化建设和发展相对滞后,信息系统漏洞多、风险管理意识差,遭遇黑客入侵较为普遍。