程序的自删除早已经不是什么新鲜的话题了,对于各位大虾来说是更是比较容易的事情,但想想自己刚学时遇到的种种错误,我觉得有必要把自己所知道的各种 *** 总结一下,希望对新手的学习能够有所帮助。
程序的自删除广泛用于反安装程序最后的自删除(环保呀!),当然更多见于木马、病毒首次安装的自动销毁^*^,至于用于何种用途就看你自己啦!
经典自删除
说到程序的自删除就不能不说由 Gary Nebbett 等大虾所写的代码,经典之作呀!代码采用C语言内嵌汇编a *** :
在Win9x下只要先对exe本身句柄执行FreeLibrary操作即可解除exe IMAGE在内存的映射,随后就可以通过调用DeleteFile来删除自身文件。
Win9x下的代码如下[selfkill-9x.c]:
#include "windows.h"
int main(int argc, char *argv[])
{
char buf[MAX_PATH];
HMODULE module;
module = GetModuleHandle(0);
GetModuleFileName(module, buf, MAX_PATH);
__a ***
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push FreeLibrary
ret
}
return 0;
}
在WinNT/2K下则需要先调用CloseHandle关闭exe文件本身对应的IMAGE的句柄HANDLE[硬编码为4],然后调用UnmapViewOfFile解除了另外一个对应IMAGE的HANDLE,并且解除了程序本身在内存的映射对象,最后就可以用DeleteFile删除自身啦!(注意:本 *** 不适用于WinXP!)
WinNT/2K下的代码如下[selfkill-nt.c]:
#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);
__a ***
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}
return 0;
}
把上面用于Win9x及WinNT/2K下的代码综合起来,即把两种平台用到的API代码全部执行一遍,虽然在一种平台上可能会有几个API运行失败,有几个API会运行成功,但最后的结果exe程序文件在退出前就删除了自身!
Win9x和WinNT/2K下的代码如下[selfkill-9x+nt.c]:
#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);
__a ***
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push module
push UnmapViewOfFile
push FreeLibrary
ret
}
return 0;
}
因为我自己在学习Win32下的汇编[MA *** 32],所以重新用汇编写了一遍,但结果却发现每次都执行失败,显示如图一的错误,
=========== 在此插入图一 ==============
通过反汇编比较发现原来由于MA *** 32编译器对API调用的编码和C编译器的不同,导致使用FreeLibrary或UnmapViewOfFile解除程序在内存的映射后,调用DeleteFile时又引用IMAGE映射地址内的代码[JMP DeleteFile],导致读内存执行错误。
错误分析
普通程序进行API调用时,编译器会将一个API调用语句编译为几个参数压栈指令后跟一条间接调用语句(这是指Microsoft编译器,Borland编译器使用JMP DWORD PTR [XXXXXXXXh])形式如下:
人生加减法...
重新安装系统软件很繁杂吗?no no no ,重做系统两步就拿下。我未重做系统以前觉得重做系统是电脑上高手才会的实际操作,花了许多糊涂钱。实际上重做系统超级简单,下边,我也给大伙儿介绍一下重新安装wi...
对于很多怀孕后的宝妈来说,宝宝在出生前就需要提前准备一些东西,其中一个就是准生证。准生证又称为计划生育服务证,它关系着孩子出生之后生育险报销、新生儿上户口、上学等诸多问题。有人问,如今国家在实行开放二...
本文导读目录: 1、怎样连接摄像头监控? 2、你好,我想用手机连接别人的监控,应该怎么连接? 3、手机怎么连接摄像头监控 4、家里监控器怎么连接手机 5、摄像头怎么连接手机手机需要什么...
上面那个部分现已把打扰电话拨打的作业都处理了。 俗话说得好,一个巴掌拍不响,假如没电话能够打,这些打扰电话天然不会这样掀起轩然大波。 接下来咱们议论一下电话号码的来历。 8月现已揭露走漏过的网站数据库...
数字拷贝信息可以经编码后送入视频信号,这样做的目的在于使数字录音机能很方便地予以识别。 6、DCPS技术 该技术的中文含义为数字拷贝保护系统技术,它的主要作用是让各部件之间进行数字连接,但不允许进行数...