程序的自删除早已经不是什么新鲜的话题了,对于各位大虾来说是更是比较容易的事情,但想想自己刚学时遇到的种种错误,我觉得有必要把自己所知道的各种 *** 总结一下,希望对新手的学习能够有所帮助。
程序的自删除广泛用于反安装程序最后的自删除(环保呀!),当然更多见于木马、病毒首次安装的自动销毁^*^,至于用于何种用途就看你自己啦!
经典自删除
说到程序的自删除就不能不说由 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])形式如下:
. 宝宝还年年龄还小的时候,一些疾病很容易找上来。幼儿急疹是容易出现的一种性传染性疾病。一般都会有几种固定的特征。一旦发现急疹一定要及时治疗。那么宝宝急疹该怎么处理。下面小编就来和大家说一说。 幼...
Emlog今日文章时间加红 只需要写一个判断,那如果今日未发文则显示昨日时间加红怎么实现呢? 首先我们需要判断一下今日是否发文 把代码放到模板下module.php中 &l...
本文目录一览: 1、在手机上怎么下载手机app 2、怎么下载手机APP? 3、怎样下载App 4、可以下载软件的APP平台有哪些? 在手机上怎么下载手机app 你好。APP是这样下载的。...
剑与远征欧K礼包哪个好?剑与远征近日和KFC肯德基合作推出了3款套餐,玩家点餐后即可获得对应的欧K礼包兑换码。那么,这3个欧K礼包中我们买哪一个最划算呢?下面就是剑与远征KFC联动套餐选择攻略了,一起...
“轻吻商务 高清-【朱勤】” 职业:计算机/互联网/通讯学历:本科北京伴游陪游旅行网周灼荣,北京伴游网周灼荣的详细资料超哥的伴游旅行期待:偶遇精彩江冠出席活动演出报价单:一:添加微信,找模特经纪人...
11月初,Google 宣布他们已在Search Console中添加了速度报告的测试版。May也查看了自己网站的谷歌站长工具,确实多了一项速度(实验性)报告功能。 有效使用谷歌站长工具Google...