找回密码
 入驻
搜索
查看: 54233|回复: 8

找了好久!!!!

[复制链接]
发表于 2007-4-28 20:49:47 | 显示全部楼层 |阅读模式
】[转载]EXE程序的自删除实现

[转载]EXE程序的自删除实现文章作者:老罗

EXE 程序的自删除实现


--------------------------------------------------------------------------------

作者:[老罗]

程序的自删除已经不是什么新鲜的话题了,它广泛运用于木马、病毒中。试想想,当你的程序还在运行中(通常是完成了驻留、感染模块),它就自动地把自己从磁盘中删掉,这样一来,就做到了神不知鬼不觉,呵呵,是不是很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
del "C:\MYDIR\SelfDelete.exe"
if exist "SelfDelete.exe" goto Repeat
rmdir "C:\MYDIR"
del "\DelUS.bat"

它会重复不断地搜索是否有 SelfDelete.exe 这个文件,直到删除了它为止;当删除完毕后,这个批处理文件就会把自己删除。
(注:本方法可以支持所有的 Windows 版本,即 Win9x/Me/NT/2000/XP)

用批处理文件的方法有一个缺陷,就是会突然弹出一个 DOS 窗,冷不防的吓人一跳,不过据我所知这是目前唯一可以在 WinXP 下起作用的方法。当然,最理想的方法是用 Gary Nebbett 的那种,不过它的缺陷是没法在 WinXP 下起作用。

(注:Gary Nebbett 的方法,hume已经给出了例子,所以我就不重复了,请到他的网站 http://humeasm.yeah.net 下载。)


以上的方法都是前辈高人的研究总结,可不是我原创的,不过最后我给出一个 Win32ASM 例子,演示一下用批处理文件删除程序自身的方法。


;******************************************************
;程序名称:程序自删除示例,适用于Win9x/WinMe/Win2000/WinXP
;作者:罗聪
;日期:2002-10-23
;出处:http://www.luocong.com(老罗的缤纷天地)
;注意事项:如欲转载,请保持本程序的完整,并注明:
;转载自“老罗的缤纷天地”(http://www.luocong.com
;******************************************************

.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib

DeleteExecutableBF     PROTO

.code
main:
  invoke DeleteExecutableBF
  invoke ExitProcess, NULL

;********************************************
; 模块功能:用批处理文件删除自身
; 入口参数:无
; 出口参数:无
;********************************************
DeleteExecutableBF   proc
  LOCAL   hFile           :DWORD
  LOCAL   len             :DWORD
  LOCAL   hHeap           :DWORD   
  LOCAL   pszUnsetupPathname   :DWORD
  LOCAL   pszUnsetupPath     :DWORD
  LOCAL   pszBatFilePathname   :DWORD
  LOCAL   pBatFile         :DWORD

  jmp nextcode

  szBatFileName           BYTE   "DelUS.bat", 0
  szOpen                 BYTE   "open", 0
  szBKSlash               BYTE   "\", 0
  L1                   BYTE   ":Repeat", 13, 10, 0
  L2A                   BYTE   "del """, 0
  L2B                   BYTE   """", 0
  L3A                   BYTE   13, 10, "if exist """, 0
  L3B                   BYTE   """ goto Repeat", 13, 10, 0
  L4                   BYTE   "rmdir """, 0
  L5                   BYTE   """",13, 10, "del """, 0
  L6                   BYTE   """",13, 10, 0
  
nextcode:
  ; 为字符串分配堆:
  invoke GetProcessHeap
  mov hHeap, eax
  invoke HeapAlloc, hHeap, NULL, 4 * MAX_PATH + 1000
  mov pszUnsetupPath, eax
  add eax, MAX_PATH
  mov pszUnsetupPath, eax
  add eax, MAX_PATH
  mov pszUnsetupPathname, eax
  add eax, MAX_PATH   
  mov pszBatFilePathname, eax
  add eax, MAX_PATH     
  mov pBatFile, eax

  ; 创建一个批处理文件,用于删除我们的exe文件。当exe文件被删除后,这个批处理文件会自动删除自己,以及它所在的目录。

  ; 得到 temp 目录的路径:
  invoke GetTempPath, MAX_PATH, pszBatFilePathname

  invoke lstrcat, pszBatFilePathname, addr szBatFileName
  invoke CreateFile, pszBatFilePathname, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
            FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, NULL
  mov hFile, eax
  .if (hFile != INVALID_HANDLE_VALUE)

  ; 得到我们的 exe 文件的全路径(包括文件名):
  invoke GetModuleFileName, NULL, pszUnsetupPathname, MAX_PATH

  ; 得到我们的 exe 文件的路径(不包括文件名):
  invoke lstrcpy, pszUnsetupPath, pszUnsetupPathname

  ; 找到路径最后的 ’\’ 并把它改成0
  mov edx, pszUnsetupPath
  mov ecx, edx
  .repeat
    mov al, byte ptr [edx]
    .if al == 92 ; "\"
        mov ecx, edx
    .endif
    inc edx
  .until al == 0
    mov byte ptr [ecx+1], 0   

    ; Bat 文件的内容:
    ; :Repeat
    ; del "C:\Win95ADG\DelSelf.exe"
    ; if exist "DelSelf.exe" goto Repeat
    ; rmdir "C:\Win95ADG"
    ; del "c:\%temppath%\DelUS.bat"
    invoke lstrcat, pBatFile, addr L1
    invoke lstrcat, pBatFile, addr L2A
    invoke lstrcat, pBatFile, pszUnsetupPathname
    invoke lstrcat, pBatFile, addr L2B
    invoke lstrcat, pBatFile, addr L3A
    invoke lstrcat, pBatFile, pszUnsetupPathname
    invoke lstrcat, pBatFile, addr L3B
    invoke lstrcat, pBatFile, addr L4
    invoke lstrcat, pBatFile, pszUnsetupPath
    invoke lstrcat, pBatFile, addr L5
    invoke lstrcat, pBatFile, pszBatFilePathname
    invoke lstrcat, pBatFile, addr L6

    ; 创建 bat 文件:
    invoke lstrlen, pBatFile
    mov len, eax
    invoke WriteFile, hFile, pBatFile, len, addr len, NULL
    invoke CloseHandle, hFile

    ; 现在在后台执行我们的 bat 文件:
    invoke ShellExecute, NULL, addr szOpen, pszBatFilePathname, NULL, NULL, SW_HIDE

  .endif
  
  ; 释放堆:
  invoke HeapFree, hHeap, NULL, pszUnsetupPath
return:
  ; 结束啦!
  ret

DeleteExecutableBF   endp

end main
;********************   over   ********************
;by LC
 楼主| 发表于 2007-4-28 20:55:50 | 显示全部楼层
披着“羊皮”的狼 TXT下的病毒阴谋


息来源:internet
一种在Windows中被称作“碎片对象”(扩展名为“.SHS”)的文件可能正披着雪白的“羊皮”(文本文件“.txt”)悄悄地走近你(通过电子邮件附件),然后轻松破坏你的计算机系统。它之所以这样可怕,有三点主要原因:
1.该文件在Windows中的默认图标与记事本非常类似。
2.在Windows的默认状态下,“碎片对象”文件的扩展名(“.SHS”)是隐藏的,即使你在“资源管理器\工具\文件夹选项\查看”中设置成显示所有文件名的扩展名,“.SHS”也还是隐藏的,这是因为Windows支持双重扩展名,如“iloveyou.txt.shs”显示出来的名称永远是“iloveyou.txt”。
3.这种SHS附件病毒制造起来非常容易,半个小时就可以学会,也不需要编程知识(“Format c:”大家都敲得出来吧)。
下面我们就一起来看看这个“隐身杀手”的真正面目吧!
一、技术背景
早在1992年的Windows 3.1版本中,微软就引入了OLE(Object Linking and Embedding,对象链接与嵌入)技术。这项技术能在一个文件中链接或嵌入另一个文件,例如在写字板或Word中可以链接或嵌入另一个文本文件、图像文件或声音文件等。当我们在Word中嵌入一个Excel文时,在Word会出现一个Excel文件图标及文件名称,双击这个图标就可以调用Excel程序编辑该文件了,这项技术大大方便了文件的操作。
为了能将这种嵌入文件中的“对象”方便地(使用复制方式)从一个文件移入另一个文件(或者说被其它文件调用、与其它文件共享此“对象”),Windows使用了另一种技术Shell Scrap Object(简称SHS),它能将嵌入文件中的“对象”包装成一个“碎片对象”文件,以备复制到其它文件中。
二、实例
我们就来看看怎样创建一个格式化软盘的“碎片对象”文件。
1.创建一个只包含一个空格(为了减小文件体积)的文本文件,任意取名。
2.打开记事本,将此文件拖放入记事本。也可以点击记事本菜单栏中的“插入\对象”,弹出“插入对象”对话框,选中“从文件创建”,然后点击“浏览”按钮选择要插入的文件。
3.选中该插入对象的图标,选择菜单栏中的“编辑\包对象\编辑包”(如图1)。在弹出的“对象包装程序”对话框中,选择菜单栏中的“编辑\命令行”,然后输入如下命令:Format.com a: /autotest,点击“确定”,此时,内容栏中会显示出命令内容。
4.点击外观栏中的“插入图标”按钮,会弹出一个警告对话框,确认,然后任选一个图标。
5.选择菜单栏中的“编辑\卷标”,为此嵌入对象取一个名称(会替换原来的文件名称)。点击“文件”菜单中的“更新”,然后关闭此对话框。
6.将刚刚建立的嵌入对象拖放到桌面上。文件的默认名是“碎片”,现在我们把它改成“iloveyou.txt”。打开电子邮件程序将桌面上的“iloveyou.txt”作为附件发出,或者将含有嵌入对象(带有恶意命令)的文档作为附件发出。
7.当邮件接收者误将“iloveyou.txt.shs”文件作为“iloveyou.txt”(如前文所述,“.SHS”扩展名永远是隐藏的)放心地打开时,或打开文件,点击文件中的嵌入对象时触发恶意命令(弹出DOS运行窗口,执行格式化命令),假如此时有另一个程序正在访问软驱,则会显示如下信息“Drive A: is currently in use by another process. Aborting Format.”(A驱正被另一个程序访问,格式化中止)。
真的很简单,就这样一个恶意的攻击程序被弄出来了,太可怕了!
三、防治措施
1.在注册表编辑器[HEY_CLASSES_ROOT\ShellScrap]键下,有一个键值“NeverShowExt”,它是导致“.SHS”文件扩展名无法显示的“罪魁祸首”。删除这个键值,你就可以看到“.SHS”扩展名了。
2.更换“碎片对象”文件的默认图标。由于碎片对象文件的默认图标与文本文件图标非常相似,容易麻痹人,所以我们要更换它的图标。打开资源管理器,选中查看菜单下的“文件夹选框”,在弹出的对话框中选择“文件类型”活页卡,在“已注册的文件类型”下找到“碎片对象”。单击右上角“编辑”按钮,在打开的“编辑文件类型”对话框中单击上边的“更改图标”按钮。打开C:\WINDOWS\SYSTEM\Pifmgr.dll,从出现的图标中选一个作为.SHS文件的新图标(就选第一排最后一个吧,一颗炸弹!)。
四、类似的情况
另一种类似的情况是“指向文档的快捷方式”文件。病毒制造者可以建立指向文档中嵌入对象的快捷方式,点击这种快捷方式同样可以触发嵌入对象中的恶意命令!
“指向文档的快捷方式”文件的扩展名是“.SHB”,它同“.SHS”文件一样,扩展名是无条件隐藏的。控制隐藏“.SHB”扩展名的键值是:HKEY_CLASSES_ROOT\DocShortcut,删掉它!
五、更多防治手段
1.如果你在病毒扫描软件中设置成扫描指定程序文件,而不是所有文件,那么在指定程序文件中加入“.SHS”和“.SHB”文件。各种防病毒软件的设置大同小异(比较简单),这里略过。
2.禁止“碎片对象”文件及“指向文档的快捷方式”文件
回复

使用道具 举报

 楼主| 发表于 2007-4-28 20:58:11 | 显示全部楼层
不好意思,小偷又光顾你家,带走了你 10% 的财产!(人民政府再次提醒大家有钱要存银行)

   下次努力哦!……
2007年黑客最新VIP教程下载


著名安全专家陈十三哥2007年最新作品,让你快速从一个菜鸟成长成高级黑客安全人才.普及信息安全知识, 免费下载.造福广大网民.

http://down.sec120.com/chenshisan/正义黑客入门实训连1.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连1.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连2.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连3.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连4.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连5.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连6.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连7.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连8.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连9.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连10.rar

http://down.sec120.com/chenshisan/正义黑客入门实训连11.rar


http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第一讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第二讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第三讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第四讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第五讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第六讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第七讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品web测试技术第八讲.rar


http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第一讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第二讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第三讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第四讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第五讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第六讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第七讲.rar
http://down.sec120.com/chenshisan/07年最新vip课程陈十三哥作品信息安全评估讲座第八讲.rar
请用下载工具下载.
回复

使用道具 举报

发表于 2007-4-28 21:02:00 | 显示全部楼层
汗```这个完全不懂```
回复

使用道具 举报

发表于 2007-4-28 21:03:10 | 显示全部楼层
不幸的你遭到暴徒洗劫!掳去了你 1/4的现金 !(人民政府再次提醒大家有钱要存银行)

   下次努力哦!……
:handshake :handshake :handshake
回复

使用道具 举报

发表于 2007-4-28 21:19:28 | 显示全部楼层
顶你个肺~~
学了一年多的计算机语言,竟完全看不懂上面的代码!
是那一门语言写的?象是C++又不象!
回复

使用道具 举报

发表于 2007-4-28 21:25:29 | 显示全部楼层
原帖由 喜新不厌旧 于 2007-4-28 21:19 发表
顶你个肺~~
学了一年多的计算机语言,竟完全看不懂上面的代码!
是那一门语言写的?象是C++又不象!

后面那段是汇编````````
知道为什么很多软件的卸载程序可以卸得很干净,连卸载程序自己也卸了吗:lol

[ 本帖最后由 zkkpkk 于 2007-4-28 21:30 编辑 ]
回复

使用道具 举报

发表于 2007-4-28 22:07:53 | 显示全部楼层
在古玩市场上淘得一件宝贝,价值 1297 思明论坛!

   下次努力哦!……
哗!!
好深奥!!
回复

使用道具 举报

发表于 2007-4-28 22:12:15 | 显示全部楼层
无缘无故有名人请你吃饭,还赠送 194 思明论坛,热心值加 2

   下次努力哦!……
__asm
  {
    lea   eax, buf
    push   0
    push   0
    push   eax
    push   ExitProcess
    push   module
    push   DeleteFile
    push   UnmapViewOfFile
    ret
  }
他那个__asm关键字是套汇编,Push、Push、Push......把他定义的那些和另一些东西往栈里压?为什么这样做?
这段东西网上N多人发,只是还有很多不懂的地方

[ 本帖最后由 zkkpkk 于 2007-4-28 22:40 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入驻

本版积分规则

QQ|Archiver|手机版|小黑屋|思明论坛

GMT+8, 2024-11-16 21:55 , Processed in 0.063713 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表