WEB开发网
开发学院网络安全黑客技术 压缩与脱壳-自动脱壳 阅读

压缩与脱壳-自动脱壳

 2007-01-12 20:12:01 来源:WEB开发网   
核心提示:1、工具介绍通过上一节,我想大家己认识了什么是壳的概念了,压缩与脱壳-自动脱壳,也是说运行加壳程序时, 用户执行的实际上是这个外壳的程序,添加 OPTLx 的方法也是这样做,如果你没有指定默认的 options ,而这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正的程序

1、工具介绍

通过上一节,我想大家己认识了什么是壳的概念了,也是说运行加壳程序时, 用户执行的实际上是这个外壳的程序,而这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正的程序,由于一切工作都是在内存中运行,用户根本不知道也不需要知道其运行过程,只要执行起来没有变化就好。当时有些人担心这些解压缩的工作会给程序带来额外的运行时间,但实际上所有的可执行文件都要读到内存中去执行,文件小了,从计算机硬盘上读到内存的时间自然也少了,两下相抵,实际上用户并不会感觉程序慢了多少。脱壳的就是把在内存中真正还原的程序抓取下来,修正后变成可执行的文件。

在Windows 95/NT/2000 上的文件格式是Portable Executable File Format(即PE格式),该格式应用于所有基于Win32的系统。由于现在windows的普及,下面谈到的壳都是基于这种文件格式。

压缩工具介绍(PACKERS)

我们这里谈的压缩工具不是Winzip,WINRAR等工具(它们是可压缩任何文件),而是谈专门压缩windows下的 PE 格式EXE或DLL文件的工具,压缩的EXE文件是自解压可执行文件。

常用压缩工具(Windows Packers )列表:

名称作者主页介绍
ASPack Alexey Solodovnikov http://www.aspack.com/是俄国作者Alexey Solodovnikov写的一个非常强大的Win32压缩工具,其压缩率、速度和兼容性很不错,是目前很流行的一种压缩工具。
UPXMarkus Oberhumer & Laszlo MolnarHomepage非常全能的 EXE 压缩软件,并可用UPX -D命令脱壳。
Petite Ian Luck Homepage能压缩PE文件的code, data等资源。
PE-PACK ANAKiN Homepage一个自身体积小巧的压缩工具
PKLITE32 PKWARE, Inc. http://www.pkware.com/32-位压缩工具(DLL/EXE).
WWPack32 Piotr Warezak and Rafal Wierzbicki Homepage32-位压缩工具(DLL/EXE).
NeoLite Hompage32-位压缩工具(DLL/EXE).
Shrinker Blink IncHompage32-位压缩工具(DLL/EXE).

脱壳工具介绍(UNPACKERS)

一般某种压缩工具的壳,都会有相应的脱壳工具,因此只要找到较新版本的脱壳工具, 一般的壳都可轻易脱去。

常用脱壳工具(Windows Unpackers)列表:

名称作者主页介绍
ASPack unpackerbane Homepage脱ASPack的压缩PE文件。
UnPEPack M.o.D. 脱PEPack的壳
ProcDump32 十分优秀的“万能”脱壳工具,可惜不升级了,因此只能自动脱些老版本压缩工具的壳,但可通过脚本命令使其升级。也是一款优秀的PE修改工具。

侦测文件类型工具

名称介绍
FileInfo 能检测多种文件格式,脱壳前用来判断是否加壳或何种壳,推荐使用!
GetTyp 功能同上
TYP功能同上

要了解更多的压缩工具或脱壳工具可去下面站点:

站点1:playtools工具站点(请通过代理访问)

站点2:protools工具站点 (请通过代理访问)

站点3:阿伦主页

2、ProcDump应用文章一

注:本文作者PererS是台湾的,因此要注意在一些名词上称呼与我们不同。

由于此文写作时间较早,在此推荐两个新版工具:

侦测工具:推荐FileInfo。

脱壳工具:ProcDump32 v1.6.2 FINAL终结版本 。(作者不升级了,对目前新版压缩工具的壳无效,为了你对 Procdump有个认识,在此提供一较老版本ASPack压缩的记事本程序供练习:下载)

标题:软体名称 中文哇!档案阅览器 2000(Version4.1)

保护方法 壳

需要工具 TYP( 侦测工具 )&ProcDump1.50( 剥壳机 )

文章作者 PeterS. (彼得的家)

侦测与剥 CWView 2000 (Version 4.1) 的壳

一、前言

何谓壳 ? 相信这是很多人的疑问。

其实壳,顾名思义,就像鸡蛋的壳一样,主要是保护鸡的「卵」。从外观上看来,鸡蛋是白色的,但是把壳剥掉以后呢 ? 是黄色的卵 + 透明的蛋白 ( 未熟蛋 ) 。这应用到我们的破解与保护上呢,也是同样的意思,假若我今天要修改一个执行档 ( 就像我要把黄色的卵,涂成绿色 ) ,但是因为有壳,所以根本找不到你要修改的地方 ( 就像光从鸡蛋的外观上看来,根本找不到有黄色的地方一样 ) ,一定要把壳「剥掉」,才能达成你的目的。我这样说,应该比较容易了解什么是壳了吧 ?

当然,正确的说,「壳」与「加密」是一体的,这类似你有一个纯文字档,如果你用 zip 压缩它以后,能够再更改它吗 ? 不可能,因为资料已经被重新排列、且压缩运算过,成为一堆乱码,所以根本不能直接改。

这个教学文件所需要的软体如下 :

1.TYP  这是一个能侦测你的软体是被哪一种「壳」给加密了

( 就好像侦测你的文件档是被 zip 、 rar 、 arj 哪一个给压缩了一样,如果连被哪种软体加了壳都不晓得,那要剥壳就难很多 ) 。

2.Procdump1.5 这是剥壳机器,可剥许多已知壳、未知的 forwin32 的壳。

二 . 用 TYP 测试 CWView2000 是被哪种壳给加密了 :

废话不多说,直接来 :

1. 首先,你要把你下载来的 TYP 先解压缩到某个目录 ( 我假设 c: ry)

2. 再来,把 CWView2000 的主程式 cwview32.exe ,由 c:cwv2000 下拷贝到上面讲的目录 (c: ry) ,接下来,从 win95 开一个 dos 视窗,并且切换到 c: ry 目录下,然后键入 typ3cwview32.exe

3. 过几秒以后,直接跳到最后一行,有没有看到 ASPACK/SolodovnikovAlexy[1.07b] 这行 ?

哦 ~~~ 原来 CWView2000 是用 ASPACK1.07b 来加密的啊。那要脱壳不就简单了,去找一个专门脱 ASPACK1.07 的软体不就得了 ??

没错,不过我在来要教的,是使用目前全世界最强的拨壳机 Procdump 来剥壳。

三 . 用 Procdump1.50 来剥 ASPACK1.07b 的壳 :

1. 首先,当然也是把 Procdump 解压缩到刚刚的目录 (C:TRY)

2. 执行 Procdump ,你会看到如下的视窗 :

3. 因为我们要剥壳,所以按下 Unpack( 其他的按钮是干什么的,我也不清楚,大概是跟 WIN 的 PE 执行档有关的吧 ):

4. 由刚刚 TYP 侦测得知, CWView2000 是用 Aspack1.07b 加的壳,所以理所当然的我们要选择 [Aspack<108] ,选好后,按下 OK( 要选对喔,选错会剥不出来 ):

5. 此时, ProcDump 会要求你开启你要剥壳的执行档,当然,我们要把路径指到 c: rycwview32.exe

6. 紧接著马上会出现如下的视窗,此时,千万不要按下 [ 确定 ] 。稍微等一下,有耐心一点,你马  上就会看到 CWView2000 被呼叫执行了,此时,将视窗切换至 CWView ,随便使用一二个  功能,然后在不要关掉 CWView2000 之下,按下 [ 确定 ] 钮。 ( 这个按钮是当程式 [ 完全 ] 被载入以后,才要按的 )

上面这个步骤很重要,如果心急乱按或乱关,你就得重来了。

7. 按下 [ 确定 ] 后没多久,会出现下面的视窗,并且此时 cwview 会自动被关掉,然后开始剥壳  运算,当出现 Stepbystepanalyzisactivated... 时,过不久, Prucdump 就会要求你键入要输出的  档名 ( 也就壳剥掉以后,原始的卵要存成什么档名 ) ,我这里举例成 unshell.exe ,此时,也代表剥壳成功 !!:

剥壳还蛮简单的嘛,对不对 ?

三 . 试试看剥壳了以后的 CWView32.exe 可不可用 :

你可以自己执行看看,应该可以用吧 ? 或许你也可以比较一下剥壳与未剥之间的差别,  你将惊觉 : 没有剥壳的 CWView32 只有 602kb ,但是剥壳后,竟然高达 1634kb 。很惊人的压缩率吧 !( 所以加密或加壳的确有存在的必要,就好像压缩一样,可以帮助人们节省很多硬碟空间 )

四 . 试试看剥壳了以后的 CWView32.exe 可不可以修改成注册版 ?:

  你可以用 16 位元编辑器,打开刚刚剥壳后的档案 (unshell.exe) ,然后

寻找 C60520864F0001

改成 ------------00

嘿嘿,找的到对不对 ? 也可以改了吧 ... 这样就不用使用外挂的「动态破解」软体 PPATCHER 了 !

五 . 我知道你在想什么 ...

你是不是在想,可不可以把刚刚修改完成的 unshell.exe 再把它加壳,让它变的小一点啊 ?

当然可以,只要你有加壳软体 ... 还等什么,赶快去做啊 !

从这次的破解教学我们学到 :

1. 如何使用 TYP 来侦测壳,与如何使用史上最强的 procdump 来剥壳。

2. 要剥壳,其实并不难,只要 TYP 侦测得出来、 procdump 有列表的,都很简单。

要注意的是 :

1. 当你发现 TYP 的回报是 Unknow 时候,别慌, procdump 也可以针对未知的壳作剥壳的运算,只要选择 **unknow** 就可以啦,不过成功率当然降低许多。

2. 为什么要介绍 procdump? 因为它可以外挂 script.ini 来增加剥壳的能力。也就是你可以自己用 sice 追某个被不知名加密软体给加壳的软体,然后纪录起相关的资料,再交由 Procdump 来把记忆体的内容「 dump 」 ( 存 ) 起来,只是这篇教学没有教 ( 我也不太会啦 ...) 。

3.TYP 是目前世界上侦测壳、压缩资料,能力最强的软体,要善用,你可以在下面的网站抓到 :

阿伦的家 (GB 码 ):http://crackers.163.net/

作者网页 :http://www-user.TU-Cottbus.DE/~kannegv

注意 : 要抓 dos32 的版本,才能在 windows 下正常使用

4.Procdump 是目前世界上最强的拨壳软体,除可以剥已知道的壳外,还可以剥许多未知的壳。更可以以手动的方法,增强其剥壳能力 ( 可惜的是,它只支援 win32 的软体, win16 与 dos 的他都不支援 ) 。,你可以在下面的网站抓到 :

阿伦的家 (GB 码 ):http://crackers.163.net/

吴朝相的家 (GB 码 ):http://member.netease.com/~topage

5. 别看我的网站都是介绍中国的网站,我可是道道地地的台湾人,只是因为破解与保护在中国比较盛行,不得已 ... 否则我也想介绍一些台湾的破解站啊 !( 不然只有孤零零的我一个 )

3、ProcDump应用文章二

今天,在吴朝相的网页上看到一篇由台湾的 Peter's 写的关于脱壳的文章,里面提及到的了 Procdump1.50 的使用,但由于所写的内容比较地肤浅,并没有交待到 Procdump1.50 的强大之处,同时由于最近在网上的软件,加壳之风日盛,如果作为一个 Cracker ,不跟着时代走,可 能在不久的将来,你就没有什么软件可以修改了,所以一定要在加脱方法下点苦功才行,为此, 小弟想把一月来学习到的脱壳技术 Post 出来,让大家了解一下在 Windows 上是如何进行软件脱 壳的,同时也想向大家介绍强大的 Procdump1.50 是如何使用的,如何用它来进行手动脱壳的, 如何扩展自已的 Procdump1.50 的脱壳种类。但由于小弟在脱壳方面还是新手,如果文章中有错误之处,请来信指教。

读者要求:

你可以阅读和传播本文章,但不能对文章的内容作任何的修改,请尊重作者的劳动。

首先我们要先准备我们的工具:

1.Procdump1.50

2.Ultraedit6.10 (这个你也可以用别的编辑器)

3.Winsoftice4.0

4.Trw0.75

5.MakePE1.27

6.Wdasm8.93

好了!工具都准备齐全了,我们就去下载一个实验品吧!今次我们选的是UPX ,在 Procdump1.50 的脱壳文件列表中,你可以清楚地看到有 UPX 的选项,所以我们今次就选它了,目前它的最新版本是 0.82 ,好了下载完毕了,我们先用它来为软件加一个脱吧!

操作:

1. 在 windows 上打开一个 Dos 窗口 , 进入 UPX0.82 所在的目录;

2. 输入 upx [ 要加壳的文件路径和文件名 ]

3.OK! 加壳成功了!

好了!现在可以试一试脱壳了!

操作:

1. 运行 Procdump1.50 ;

2. 按 Unpack 按钮,这时就出现了 ChooseUnpacker 窗口;

3. 在窗口中选择 UPX ,这时就会跳出一个选择你要脱壳文件的选择窗口;

4. 按下打开,哦天啊!好痛苦啊!程序没有脱壳竟然运行了, Procdump1.50 提示一个错误发生在 script 的第一行。

以上的所有操作,是对自动脱壳来说的,基本上的自动脱壳的操作都是这样的。好了,难道就这样没有戏唱了吗?作者写文章那会就写这几十行废话呢?请接着看下面的吧! 好了,看一看它没有没防住 winsoftice 呢?重新启动机器,换一个有安装 winsoftice 的 windows 平台 吧!再次运行被加脱了的程序,还好!没有当掉 winsoftice ,这样心中暗喜,你有难了啊!看来外 国人写的东西还是比较有善,不象 DingBoy 的幻影系列,比小燕子还凶( ^o^ ,又说 DingBoy 的坏 话了,其实有时我觉得他比较象 Crack 界的小燕子,令人又爱又恨)。好了关闭程序,用 winsoftice 载入去,唉刚刚还说好呢!原来它还是对 winsoftice 作了一点小动作, winsoftice 不能中断于程序的入口的第一句处。没有关系,现在有三种方法,第一种方法是通过对程序的 exe 文件作一点修改, 使其符合标准的 PE 文件格式,因为 winsoftice 毕竟不是专为 Crack 设计的,所以它的中断程序入口 是针对标准的 PE 文件格式来写的,对于那些不符合的,它就没有能力了,具体的 PE 文件格式,大 家可以看一看 VC 中的 MSDN 中的帮助和 WINNT.H 中的解释;第二种方法就是不用 winsoftice ,而用 TRW ,因为刘涛涛先生的 TRW 是专为 Crack 设计的,所以几乎所有可以在 Windows 上运行的程序,它 都可以中断得了;第三种方法,就是在原 exe 文件中加插 int3 语句,令 winsoftice 强行中断。   好了,方法说了一大罗,我们就用最简单的方法吧!没人会有简单的不用,去用最繁的,如果有吧!大家就。。。。。。。。

运行 TRW0.75 ,选择菜单中的 TRNEWTCB 命令,然后运行加脱的程序,程序马上中断于第一句了。

具体如下:

0137:0043D100 PUSHAD         程序会中断于这里
0137:0043D101 MOV   ESI,0042B0D9
0137:0043D106 LEA   EDI,[ESI+FFFD5F27]
0137:0043D10C PUSH   EDI
0137:0043D10D OR    EBP,-01
0137:0043D110 JMP   0043D122      跳到解压程序
0137:0043D112 NOP
0137:0043D113 NOP

解压程序的入口:

0137:0043D122 8B1E        MOV   EBX,[ESI]
0137:0043D124 83EEFC      SUB    ESI,-04
0137:0043D127 11DB        ADC    EBX,EBX
0137:0043D129 72ED        JB     0043D118
0137:0043D12B B801000000   MOV   EAX,00000001
0137:0043D130 01DB        ADD    EBX,EBX
0137:0043D132 7507        JNZ    0043D13B
0137:0043D134 8B1E        MOV   EBX,[ESI]

好了在解压程序里面,程序会做无数次的循环,我没有必要了解它是如何进行加压的,所以就把光标一直向下走,一直走到这里:

0137:0043D250 EBD6        JMP   0043D228
0137:0043D252 61          POPAD
0137:0043D253 C3          RET
0137:0043D254 61          POPAD
0137:0043D255 E9D6A1FDFF  JMP   00417430     这就是程序的真正入口了
0137:0043D25A 0000        ADD   [EAX],AL
0137:0043D25C 0000        ADD   [EAX],AL
0137:0043D25E 0000        ADD   [EAX],AL

好开心啊!终于找到了入口地址,如果你只是针对某一个特定的程序而脱壳的,那么现在就可以 用 TRW 的 pedump 命令直接脱壳了,但这不是我们所要的,我们现在是要研究 UPX0.82 的壳,要写一个通用的脱壳 ini 加入到 Procdump1.50 里面,那么,这样你以后就可以很方便脱掉 UPX0.82 所 的脱了,同时也很方便网上传播了,让别人也能分享你的成果,这才是真正的 Cracker 精神。

操作:

1. 用 Ultraedit6.10 打开 Procdump1.50 目录下的 Script.ini 文件;

它的格式如下:

[INDEX]
P1=Hasiuk/NeoLite
P2=PESHiELD
P3=Standard
P4=Shrinker3.3
P5=Wwpack32I
P6=Manolo
P7=Petite<1.3
P8=Wwpack32II
P9=VboxDialog
PA=VboxStd
PB=Petite1.x
PC=Shrinker3.2
PD=PEPack
PE=UPX             修改为 PE=UPX<0.7X
PF=Aspack<108
P10=SoftSentry
P11=CodeSafe3.X
P12=Aspack108
P13=Neolite2
P14=Aspack108.2
P15=Petite2.0
P16=Sentinel
P17=PKLiTE
P18=Petite2.1
P19=PCShrink
P1A=PCGUARDv2.10
P1B=Aspack108.3
P1C=Shrinker3.4
P1D=UPX0.7X-0.8X   加入这句

然后找到:

[UPX]            修改为 [UPX<0.7X]

然后在文件最下面加入:

[UPX0.7X-0.8X]

好了,准备功夫我们都做好了,现在可以写 UPX0.82 的脱壳扩展了,首先我们可以见到程序有两个跳动的地方,第一个是:

0137:0043D110 JMP   0043D122      跳到解压程序

所以我们马上把机器代码抄下来:

EB,10

第二个是:

0137:0043D255 E9D6A1FDFF  JMP   00417430     这就是程序的真正入口了

机器代码就是:

E9,D6,A1,FD,FF

好了,所有的要找到东西我们都已经找到了,我们就开始编写 UPX0.82 的脱壳扩展了。

我编写的具体如下:

[UPX0.7X-0.8X]
L1=OBJR                  ; 在扫描开始处设置初始的内存地址
L2=LOOKEB,10      ; 查找第一个 EB,10 程序代码
L3=BP                    ; 在当前内存位置设置断点
L4=WALK                  ; 交还控制权到 Procdump 并且执行下一个指令
L5=OBJR                  ; 在扫描开始处设置初始的内存地址
L6=LOOK61,E9           ; 查找第一个 EB,10 程序代码
L7=BP                    ; 在当前内存位置设置断点
L8=STEP                  ; 一步一步地跟踪分析程式

好了,以上的解释都很清楚了,没有什么不明白了,我们把文件保存后,再次运行 Procdump1.50 , 在 ChooseUnpacker 中可以见到多了一个 UPX0.7X-0.8X 项了,选择它,进行脱我们加了脱的程序, 哈哈,叫我们保存了,你可以不要高兴得太早了,你试一试运行 dump 程序,哦不能运行,非法操作。 不要心急,我们好象还有点东西要加上呢!那就是 dump 的可选参数了, Procdump1.50 一共给我们 提供了五组可选参数,如果你没有特别指出,就用默认值。好我们加上去试一试吧!

OPTL1=00000000
OPTL2=01010001
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000

以上这五参数是最常用的,你加参数时可要先试试,或者加了之后就可以用了,好我们加上,试一试。

以下文章所述,可能在有的机器上有不同的结果,请自行修正:

作者的机器是:

赛扬 300A (超 450 )

PC100-64M 内存

当我再次运行 Procdump1.50 来脱壳程序时,竟然程序一下子就运行了,根本不象上次那样提示要我保存 脱壳后的文件,所以我想,可能这些参数有些不合适我的机器,于是我认真分析了每一个参数的真正含义之后,就把参数作了如下的修改:

OPTL1=00000001     这是延迟时间,我设为 1ms 
OPTL2=01010101     采用了快速 dump 的工作方式
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000

今次再运行 Procdump1.50 进行脱壳,哈哈!!!可以脱了,然后再双击脱壳后的文件,咦,可以执行了, 再用 Wdasm8.93 反汇编分析一下文件,发现基本和原文件相同,只是文件大小有点不同,大了一点,再用了一下软件的各种功能,一切正常,所以应该说脱壳是成功的,到此,文章也该在此结束了,不过好象还漏了点事,就是用 MakePe1.27 帮助脱壳后的文件作进一步的优化,这就不一一描述了 ,自己看帮助进 行吧! 好了,最后总结一下吧!

完整地加入:

[UPX0.7X-0.8X]
L1=OBJR
L2=LOOKEB,10
L3=BP
L4=WALK
L5=OBJR
L6=LOOK61,E9
L7=BP
L8=STEP
OPTL1=00000001
OPTL2=01010101
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000

ByTheWay !

我发现对于使用 UPX0.7x 到 UPX0.8x 加壳的软件,用我的方法都可以成功脱壳。

4、Procdump中文说明书

大家好!早两天放上了提高篇( 10 )后,大家的反应还不错,不过对于一些朋友来说, 要想用好 Procdump1.50 ,可能还有点问题,因为它的 Script 的说明书是英文的,对于英文不是 太好的朋友,这就成为一个很大的问题了。昨晚,在白菜的聊天室内,我和 DingBoy 等高手一 起聊天, DingBoy 就建议我把 Procdump1.50 的说明书翻译成中文,方便广大的朋友学习和使用 Procdump1.50 ,本着我不入地狱,谁入地狱的决心,我就着手了翻译工作,由于本人的英文也 不是太好!所以在 Procdump1.50 的 Script 说明书的翻译过程中,难免会有一些错误的地方,同 时我的语文水平也不见得好到那里去,有时英文了解什么意思,中文也不知如何表达,所以也 难免有一些词不达意,还有一些地方,我只能根据意译的方法来完成了,因为如果一字一字的 合并起来,句子的意思可能不知它说什么。花了三个小时的时间,终于完成了,但为了有点记 念意义,就把译文放进了提高篇( 11 )当中了,希望大家喜欢!

读者要求:

你可以阅读和传播本文章,但不能对文章的内容作任何的修改,请尊重作者(译)的劳动。

*********************************

ProcDump32 的 Script 扩展:

*********************************

A) 功能定义:

*************************

1)Look 功能:

这个 Look 功能是在被载入的程序中查找指定的 HEX 字串。它会把找到了的内存地址保存下来以便你可以方便在此内存地址设置断点。

例:

LookOF,85 将用于搜索一个 JNE 或一个长 jump 。你可以通过 BP 命令来设置断点。

2)ADD 功能:

允许你在当前内存地址上加一个变址值(例:出现于 look 命令或 POS 命令之后)。

3)DEC 功能:

猜测;)

4)REPL 功能

这个功能用于在当前内存中修改内码(连续的 HEX )(注:它出现在 look 命令之后)。

例:

REPL90,90 将会在你当前的内存位置开始连接放入两个 NOP 指令。

5)BP 功能

在当前内存位置设置一个断点。

6)BPX 功能

在指定的位置设置断点。这个位置与程序开始位置有关。

例:

如果程序的开始位置在 RVA66000h,BPX2672 就会在 RVA68672 设置断点。

7)BPF 功能(用标志位设断)

这个功能会检查每一次断点发生时的标志位的值是否为你所设定的值。断点的位置为

当前内存地址。

Unset/Set 的内容

*******************

C *C* 进位标志。

P *P* 奇偶标志。

A *A* 辅助进位标志。

Z *Z* 零标志。

S *S* 正负号标志。

D *D* 方向标志。

O *O* 溢出标志。

你可以单独测试 ONE 旗标。

8)BPC 功能

当经过当前位置的次数达到设定值时发生中断。

例:  

BPC15  ( 在第 21(15h) 次经过当前位置时中断 )

9)BPV 功能

当如果寄存器的值到达了你设定的值时中断。

例:

BPVEAX=5( 当特定位置的 EAX=5 时中断 ) 。

10)MOVE 功能

设置当前 EIP 。加一个参数值给当前 EIP 。但请小心使用它。其实它对于程序没有做到 什么,只是当你要跳过一些 CRC 检查时,就要用到它了,它相当于代替一连串的 NOP 指令。

例:

MOVE14 就会把当前 EIP 变为 EIP+14h 。

11)POS 功能

为所有的功能设置当前内存地址,这个位置与程序开始位置有关。

12)STEP 功能

这个功能是设置一步一步的进行分析。它通常是用于完成跟踪 dump 过程的。

注意:单步模式就意味着每一行代码它都进行测试 -> 慢!!所以设置单步模式一般

都放在最后。

13)OBJR 功能

这个功能是设置以基始内存地址为开始进行扫描。对于 LOOK 命令有影响。

14)BPREG 功能

以通过寄存器的值来设置断点。

15)WALK 功能

执行下一条指令后把控件权交还 ProcDump32 。

16)EIP 功能

设置下一个 EIP 为原来程序的最初进入点。

注意:

在断点之后,下一个 EIP 就是断点地址本身。

17) 建立外部帮助文件

通过特殊的参数创建外部文件。这个你指定的 ini 文件是由一些特殊的参数组成和建立的。

它包括:

. 进程的 Pid 。

. 所有寄存器的值包括 EIP 。

. 当前 EIP 的值

例子:

在 script 中:

...

L5=HELPPDHelp.ExeHelper.ini

...

你的 helper 的命令行会包含 <Pathtohelper.ini>"helper.ini" 。

在 helper.ini 中:

[REG]
  Dr0=00000000
  Dr1=00000000
  Dr2=00000000
  Dr3=00000000
  Dr6=00000000
  Dr7=00000000
  SegGs=00000000
  SegFs=00000FDF
  SegEs=00000167
  SegDs=00000167
  Edi=00000000
  Esi=8161D244
  Ebx=00000000
  Edx=8161D2A4
  Ecx=8161D264
  Eax=0043E9B4
  Ebp=00456000
  Eip=00456264
  SegCs=0000015F
  Flags=00000216
  Esp=0068FE34
  SegSs=00000167
  Pid=FFC1E943
Local=00456264

我想这样做可以比较灵活;)。

注意:

命令行每行不能使用超过 512 个字每来描述 helper 的 EXE 和 INI 文件的路径,这个只是 ProcDump 的内部限制,而对于 WINDOWSAPI 来说来说就不能超过 256 个字母。

B) 在 script 中 Options 的格式:

*************************************

Options 是通过 OPTL 开始的,并以 DWORD 形式保存的。

OPTL1=

DWORD: 设定 AutoDump 中的延迟时间,以 ms 为单位。

OPTL2=

BYTE : 自动执行 EIP

BYTE : 忽略错误

BYTE : 快速模式 Dump

BYTE : 外部 Predump

OPTL3=

BYTE : 优化 PE

BYTE : 自动计算程式

BYTE : 跟踪 API

BYTE : 自动分层

OPTL4=

BYTE : 未知模式

BYTE :Import 表类型重建

BYTE : 修复 Header

BYTE : 修复 Relocs

OPTL5=

BYTE : 保留

BYTE : 保留

BYTE : 检查 Header

BYTE : 合并代码

为得到更详细资料 ... 查看 ProcDumpOptions 的解释吧。

C) 如何编写你的加壳软件的定义:

*****************************************************

1) 添加索引段:

*************************

加一个 Pxx 的声明 .... 注意 xx 的值是跟接在最后一个的值。

例如:

增加之前

[INDEX]

P1=Shrinker3.3

P2=Wwpack32Beta9

P3=Wwpack321.0

增加之后

[INDEX]

P1=Shrinker3.3

P2=Wwpack32Beta9

P3=Wwpack321.0

P4=MyOwndefinition

2) 增加你的定义:

************************

每行的定义都必须事先声明,例如用 Lxx 。

例:

[Myowndefinition]

L1=Look0F,85,DB,FF,FF

L2=BP

L3=STEP

你可以在定义中多加一点默认 options ,添加 OPTLx 的方法也是这样做,如果你没有指定默认的 options , ProcDump 会使用常规的那些设置。

作者: RuFeng (译)

Tags:压缩 脱壳 自动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接