PROCDUMP使用2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先我们要先准备我们的工具:
1.Procdump1.50
2.Ultraedit6.10 (这个你也可以用别的编辑器)
3.Winsoftice
4.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 按钮,这时就出现了 Choose Unpacker 窗口;
3. 在窗口中选择 UPX ,这时就会跳出一个选择你要脱壳文件的选择窗口;
4. 按下打开,哦天啊!好痛苦啊!程序没有脱壳竟然运行了,Procdump1.50 提示一个错
误发生在 script 的第一行。
以上的所有操作,是对自动脱壳来说的,基本上的自动脱壳的操作都是这样的。
好了,难道就这样没有戏唱了吗?作者写文章那会就写这几十行废话呢?请接着看下面的吧!好了,看一看它没有没防住winsoftice 呢?重新启动机器,换一个有安装 winsoftice 的windows 平台吧!再次运行被加脱了的程序,还好!没有当掉winsoftice ,这样心中暗喜,你有难了啊!看来外国人写的东西还是比较有善,不象 Ding Boy 的幻影系列,比小燕子还凶( ^o^ ,又说 Ding Boy 的坏话了,其实有时我觉得他比较象 Crack 界的小燕子,令人又爱又恨)。
好了关闭程序,用 winsoftice 载入去,唉刚刚还说好呢!原来它还是对 winsoftice 作了一点小动作,winsoftice 不能中断于程序的入口的第一句处。
没有关系,现在有三种方法,第一种方法是通过对程序的 exe 文件作一点修改,使其符合标准的 PE 文件格式,因为 winsoftice 毕竟不是专为 Crack 设计的,所以它的中断程序入口是针对标准的 PE 文件格式来写的,对于那些不符合的,它就没有能力了,具体的 PE 文件格式,大家可以看一看 VC 中的 MSDN 中的帮助和 WINNT.H 中的解释;第二种方法就是不用 winsoftice ,而用 TRW ,因为刘涛涛先生的 TRW 是专为 Crack 设计的,所以几乎所有可以在 Windows 上运行的程序,它都可以中断得了;第三种方法,就是在原 exe 文件中加插 int 3
语句,令 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=Shrinker 3.3
P5=Wwpack32 I
P6=Manolo
P7=Petite<1.3
P8=Wwpack32 II
P9=Vbox Dialog
PA=Vbox Std
PB=Petite 1.x
PC=Shrinker 3.2
PD=PEPack
PE=UPX 修改为 PE=UPX<0.7X PF=Aspack<108
P10=SoftSentry
P11=CodeSafe 3.X
P12=Aspack108
P13=Neolite2
P14=Aspack108.2
P15=Petite 2.0
P16=Sentinel
P17=PKLiTE
P18=Petite 2.1
P19=PCShrink
P1A=PCGUARD v2.10
P1B=Aspack108.3
P1C=Shrinker 3.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=LOOK EB,10 ; 查找第一个 EB,10 程序代码
L3=BP ; 在当前内存位置设置断点
L4=WALK ; 交还控制权到Procdump 并且执行下一个指令
L5=OBJR ; 在扫描开始处设置初始的内存地址
L6=LOOK 61,E9 ; 查找第一个 EB,10 程序代码
L7=BP ; 在当前内存位置设置断点
L8=STEP ; 一步一步地跟踪分析程式
好了,以上的解释都很清楚了,没有什么不明白了,我们把文件保存后,再次运行 Procdump1.50 ,在 Choose Unpacker 中可以见到多了一个 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 的工作方式
OPTL4=00030000
OPTL5=00000000
今次再运行 Procdump1.50 进行脱壳,哈哈!!!可以脱了,然后再双击脱壳后的文件,咦,可以执行了,再用 Wdasm8.93 反汇编分析一下文件,发现基本和原文件相同,只是文件大小有点不同,大了一点,再用了一下软件的各种功能,一切正常,所以应该说脱壳是成功的,到此,文章也该在此结束了,不过好象还漏了点事,就是用MakePe1.27 帮助脱壳后的文件作进一步的优化,这就不一一描述了,自己看帮助进行吧!好了,最后总结一下吧!
完整地加入:
[UPX0.7X-0.8X]
L1=OBJR
L2=LOOK EB,10
L3=BP
L4=WALK
L5=OBJR
L6=LOOK 61,E9
L7=BP
L8=STEP
OPTL1=00000001
OPTL2=01010101
OPTL4=00030000 OPTL5=00000000。