发新话题
打印

[交流] 黑客技巧之EXE程序的自删除实现

黑客技巧之EXE程序的自删除实现

程序的自删除已经不是什么新鲜的话题了,它广泛运用于木马、病毒中。试想想,当你的程序还在运行中(通常是完成了驻留、感染模块),它就自动地把自己从磁盘中删掉,这样一来,就做到了神不知鬼不觉,呵呵,是不是很cool呢?   自删除(Self Deleting)最早的方法是由 Gary Nebbett 大虾写的,太经典了,不能不提。程序如下:  #include 'windows.h'
0 Z5 D' ]% X6 ?2 X4 [8 |  int main(int argc, char *argv[])
  K. v, l/ R* L9 O6 p  {1 S' v2 C0 Y0 f0 S
  char buf[MAX_PATH];
; ^/ l) O# V: O( \( J  HMODULE module;( u  x# h5 y$ H5 Y8 [. }  T  P. [
  module = GetModuleHandle(0);
& p4 T8 t5 i, C. i: D$ F  GetModuleFileName(module, buf, MAX_PATH);& [8 S- u! B+ b5 ]
  CloseHandle((HANDLE)4);* |# q5 l; a: w
  __asm# a2 a; P" j0 S6 N9 h. a$ b6 D0 r  M
  {' u+ q5 V! c' l) K/ ]& S  G+ t
  lea eax, buf
1 b5 t7 [, ?9 v5 O. d* }  x  push 0( ~- H3 h; S- V1 B
  push 0
4 F3 N$ B) l+ I# J! S  push eax& b6 Z& r! a+ Q+ f$ b
  push ExitProcess
0 Z* ~/ ~6 [0 ]1 u4 s; u. e  push module
0 o4 r# s* g2 B! q8 G  }4 c  push deleteFile% Z0 }! |4 g6 W5 {6 w* m: u) R) @
  push UnmapViewOfFile
% O: ^, a0 l3 b- B& f  ret7 B0 n" {% p8 |- W+ v6 W
  }, Y* }$ ~  H8 s9 q9 L7 R( c
  return 0;
; I( h2 x4 Y5 o/ s7 T  }  试试编译它,运行。怎么样?从你的眼皮底下消失了吧?是不是很神奇?  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 下起作用。  <A href="http://www.zgsj.com/click/click.asp?str=44717c87b8d8fc3a3e18797345b90434" target=_blank>www.zgsj.com热线电话:025-86801327转8000Q:714400476

TOP

很不错啊

TOP

发新话题