BYTE : 合并代码
为得到更详细资料 ... 查看 ProcDump Options 的解释吧。 C) 如何编写你的加壳软件的定义:
***************************************************** 1) 添加索引段:
*************************
加一个 Pxx 的声明 .... 注意 xx 的值是跟接在最后一个的值。 例如: 增加之前 [INDEX] P1=Shrinker 3.3 P2=Wwpack32 Beta 9 P3=Wwpack32 1.0 增加之后 [INDEX] P1=Shrinker 3.3 P2=Wwpack32 Beta 9 P3=Wwpack32 1.0 P4=My Own definition 2) 增加你的定义: ************************
每行的定义都必须事先声明,例如用 Lxx 。 例:
[My own definition]
L1=Look 0F,85,DB,FF,FF L2=BP L3=STEP
你可以在定义中多加一点默认 options ,添加 OPTLx 的方法也是这样做,如果你没有指定默认的 options , ProcDump 会使用常规的那些设置。 作者: Ru Feng (译)
信箱: ocq@163.net (未得作者允许,严禁 Email 任何软件到此信箱) 主页(一): http://ocq.163.net (枫林居)
主页(二): http://ocq.yeah.net (最 Cool 的 VB 控件天堂)
主页(三): http://ocqpat.163.net (我的作品,主要介绍“电子资料库”软件)
1、基本知识
手动脱壳就是不借助自动脱壳工具,而是用动态调试工具SOFTICE或TRW2000来脱壳。这课谈谈一些入门方面的知识,如要了解更深的脱壳知识,请参考《脱壳高级篇》这课。 工具
*调试器:SoftICE 、TRW2000 *内存抓取工具:Procdump等;
*十六进制工具:Hiew、UltraEdit、Hex Workshop等; *PE编辑工具: Procdump、PEditor等;
名词概念
★PE文件:Microsoft设计了一种新的文件格式Portable Executable File Format(即PE格式),该格式应用于所有基于Win32的系统:Windows NT、Windows 2000、Win32s及Windows 95/98。
★基址(ImageBase ):是指装入到内存中的EXE或DLL程序的开始地址,它是Win32中的一个重要概念。 在Windows NT中,缺省的值是10000h;对于DLLs,缺省值为400000h。在Windows 95中,10000h不能用来装入32位的执行文件,因为该地址处于所有进程共享的线性地址区域,因此Microsoft将Win32可执行文件的缺省基地址改变为400000h。
★RVA:相对虚拟地址(Relative Virual Address),是某个项相对于文件映象地址的偏移。例如:装载程序将一个PE文件装入到虚拟地址空间中,从10000h开始的内存中,
如果PE中某个表在映像中的起始地址是10464h,那么该表的RVA就是464h。虚拟地址(RVA)=偏移地址+基址(ImageBase )
★Entry Point:入口点,就是程序在完成了对原程序的还原后,开始跳转到刚还原的程序执行,此时的地址就是入口点的值。
步骤
★确定壳的种类
一般拿到软件后,可用工具FileInfo、gtw、TYP32等侦测文件类型的工具来看看是何种壳,然后再采取措施。
★入口点(Entry Point)确定
对初学者来说定位程序解壳后的入口点确定较难,但熟练后,入口点查找是很方便的。 决大多数 PE 加壳程序在被加密的程序中加上一个或多个段。 所以看到一个跨段的 JMP 就有可能是了。如:UPX 用了一次跨段的 JMP , ASPACK 用了两次跨段的 JMP 。 这种判断一般是跟踪分析程序而找到入口点,如是用TRW2000也可试试命令:PNEWSEC,它可让TRW2000中断到入口点上。
PNEWSEC:运行直到进入一个 PE 程序内存的新的 section时产生断点。(如不懂,以后到脱壳高级篇自会明白)
另外也可用D.boy的冲击波2000,它能轻易的找到任何加密壳的入口点,
★dump取内存己还原文件
找到入口点后,在此处可以用 Procdump的FULL DUMP功能来抓取内存中整个文件, 如是用TRW2000也可用命令:
makepe命令含义:从内存中整理出一个指令名称的PE格式的exe文件, 当前的 EIP 将成为新的程序入口,生成文件的 Import table 已经重新生成过了。生成的PE文件可运行任何平台和微机上。
pedump命令含义:将PE文件的内存映像直接映像到指定的文件里。生成的文件只能在本机运行,不能在其它系统平台或微机运行。
★修正刚dump取的文件
如是用 Procdump的FULL DUMP功能脱壳的文件,要用 Procdump或PEditor等PE编辑工具修正入口点(Entry Point)。
2、UPX V1.01的壳
目标程序: 用 UPX V1.01压缩过的Notepad.exe
方法一、使用TRW2000来脱壳 ★使用工具
TRW2000 FileInfo
★确定壳的种类
拿到这软件后,可用工具FileInfo、gtw、TYP32等侦测文件类型的工具来看看是何种软件压缩的,在这我们以FileInfo 为例,把目标文件复制到FileInfo目录下,在资源管理器下双击FileInfo,再按回车,你将看到报告出来:告诉你这是UPX1.01压缩的软件。
★入口点(Entry Point)确定 ◇利用跟踪分析来确定入口点
决大多数 PE 加壳程序在被加密的程序中加上一个或多个段。 所以看到一个跨段的 JMP 就有可能是了。 UPX 用了一次跨段的 JMP 。 就是你一步步跟踪时会看到代码有一突跃,一般再跟据领空文件名的变化,就能确定入口点了。运行TRW2000并装载目标程序,然后LOAD,你将中断在主程序入口处:此时合理按F10、F7及F12一直向前走,注意此时领空会是:NOTUPX!UPX1+2xxx. 在你跟踪过程中会出现如下代码: 该程序的具体情况如下:
XXX:XXXXXXXX 60 PUSHAD ;所有的寄存器进栈 XXX:XXXXXXXX BE2EFD4200 MOV ESI, XXXXXXXX ;将下一条指令送入进行解压 XXX:XXXXXXXX 8DBED21FFDFF LEA EDI, [ESI+XXXXXXXX] ....... ....... <---- 按F10跟踪 ;-P XXX:XXXXXXXX FF96A8C90400 CALL [ESI+XXXXXXXX] XXX:XXXXXXXX 61 POPAD ;所有寄存器出栈 XXX:XXXXXXXX E9A44AFBFF JMP 00401000 ;跳到程序真正入口点(OEP),文件完全解压。 0137:40ddbe popa
0137:40ddf jmp 00401000 <-此行己完全解压结束,将要跳到记事本程序入口点执行程序(注意此处的一个大的突跃)。 ........................
0137:401000 push ebp <-完全解压后的记事本程序第一行
因此入口点(Entry Point)找到为:401000
◇利用TRW2000特有命令PNEWSEC
TRW2000也是一款优秀的脱壳工具,有许多特有的命令对脱壳很有帮助,在此时用PNEWSEC命令也可方便找到入口点。
运行TRW2000并装载目标程序,然后LOAD,你将中断在主程序入口处,下令:PNEWSEC 等上一段时间,程序将中断在入口点处。
◇用冲击波2000
冲击波2000是D.boy开发的一个专门查找加壳软件入口点的工具,先运行冲击波2000,点击Track按钮:开始进行跟踪,然后运行要跟踪的程序, 找到入口点后,会在Enter point 显示。可是用这个记事本程序却无效。
★dump取内存中己脱壳的文件
不管你用何种方法找到入口点,首先要来到入口点一行: 0137:401000 push ebp
执行命令makepe 路径/文件名或pedump 路径/文件名 就这样脱壳成功。
注:TRW2000的makepe重建的PE文件可跨平台运行,pedump抓取的文件却不可。
方法二、用SOFTICE来脱壳 ★使用工具
TRW2000 FileInfo ProcDump
★入口点(Entry Point)确定 ◇利用跟踪分析来确定入口点
方法同TRW2000。
★dump取内存中己脱壳的文件
0137:40ddf jmp 00401000
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库怎样使用脱壳软件(5)在线全文阅读。
相关推荐: