自删除技术小记:Gary Nebbett

以前看书的时候摘录的笔记,经典的自删除方法,可以当历史故事看看 :)

Gary Nebbett1曾提出一种方法,利用系统的一个特点来达到目的。

#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;
}

经典的自删除方法之一,不够通用,比如不支持Windows XP系统。

注释

程序的自删除已经不是什么新鲜的话题了,它广泛运用于木马、病毒中。当程序还在运行中(通常是完成了驻留、感染模块),它就自动地把自己从磁盘中删掉。

自删除(Self Deleting)最早的方法是由 Gary Nebbett 写的。

编译,运行,消失。

Gary Nebbett 钻了系统的一个漏洞,他的程序是关闭了 exe 文件的 IMAGE(硬编码为4),然后用 UnmapViewOfFile 解除了 exe 文件在内存中的映象,接着通过堆栈传递当前程序的路径名缓冲区指针给 DeleteFile() ,实现了程序的自删除。


  1. Gary Nebbett著有“Windows NT/2000 Native API Reference”,这里所说的“Native API”,实际上就是系统调用。显然,这是一本关于WinNT系统调用的参考手册。既然微软把系统调用界面藏在黑盒子里面,或者说藏在Win32 API后面,从来都不公开,那么这本参考手册的价值也就不言而喻了。看一下这本书,就可以知道实现Windows系统调用界面的工作量该有多大。
    http://download.eeworld.com.cn/detail/solarelec/455783 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值