BattleHeart 发表于 2014-10-29 23:00

教你如何写Aspack脱壳脚本

本帖最后由 BattleHeart 于 2014-10-30 09:34 编辑

教你如何写Aspack脱壳脚本本文所述的内容皆源于上一节的DLL文件的脱壳内容,本篇文章主要讲一下上篇文章的DLL(地址:https://www.52hb.com/thread-1723-1-1.html)使用脚本脱壳及重定位地址的查找。好吧,这里不多说了,直接上分析过程。首先已经知道了Aspack壳的动态链接库(DLL)文件的重定位地址搜索以下代码就可迅速找到重定位地址:好的,这个重定位地址也就是sub ecx,0x8;shrecx,1这里就是关键点,这两个前面的机器码和在一起就是83E908D1E9,那么就可以在脚本编辑器中进行写这段脚本了。VarRelocation                                 //存放重定位地址
Var aa                                                 //声明变量
FINDeip,#83E908D1E9#                  //搜索上面那段代码
MOVaa,$RESULT                           //将搜索的eip地址给aa,也就是图上的771f9处
MSGaa                                          //弹出aa
      好的,这段脚本已经完工了,那么还说了我们要将断点设置在771C4处的je跳转出,那么已经获取了771F9处的地址,要找到771C4很容易就找到了,因为两者相差35,我们只需要将771F9-35=771C4了,好的这里已经知道了思路。开始写下一段设断点脚本SUBaa,35                                       //771C4的地址处
BP   aa                                             //在771C4处下断点
RUN                                              //让程序跑一下,就会段在771C4处
       这样程序就段在了771C4位置处,从771C4到771DC的magic jmp处只需要单步走4次就好了,单步到了magic jmp后不能让这个跳转跳,这时候我们可以改变ZF标志位为0,这样跳转就不会跳了      脚本实现单步走:STO
STO
STO
STO
MOV      !ZF,0                        //改变ZF标志位为0
      通过上图可以看到,magic jmp没有跳过之后再进行单步4下就可以到达存放重定位地址的地方,这时候我们只需要取出里面的值就好,因为里面存放的就是重定位地址。STO                                                //单步走四次
STO
STO
STO         
MOV Relocation,ebp                     //将ebp地址给了Relocation变量
ADD Relocation,539                     //将Relocation+539
MOV Relocation,      //这是取出来的就是ebp+539的值,程序中是70000
MSG Relocation                           //弹出这个70000
BC                                                //清楚断点
          好的,已经找到了重定位的地址之后,就可以向下发现规律,我们发现程序到达OEP之前的时候有一个popad,如下图所示:    那么就可以用这个当做关键点,查找popad:   FINDOP eip,#61#                //从当前位置opcode的61指令
MOV bb,$RESULT
MSG bb
BP bb                                  //下断点
下好了断点之后将程序运行起来,段在上面的断点处只需要单步走4次就到了程序的OEP,然后退出脚本就可以了。RUN                                 //运行程序                                       
STO                                 //单步走
STO
STO
STO
BC                                  //清楚断点
RET                              //返回
完整的脚本如下所示:VAR Relocation
VAR aa
VAR bb
FIND eip,#83E908D1E9#
MOV aa,$RESULT
MSG aa
SUB aa,35
BP aa
RUN
STO
STO
STO
STO
MOV !ZF,0
STO
STO
STO
STO         
MOV Relocation,ebp
ADD Relocation,539
MOV Relocation,
MSG Relocation
BC
FINDOP eip,#61#
MOV bb,$RESULT
MSG bb
BP bb
RUN
STO
STO
STO
STO
MSG "欢迎来到OEP,By:BattleHeart"
BC
RET
程序运行结果:这是第一个Msg弹出来的是查找的sub ecx,0x8;shrecx,1后的eip的位置:第二个msg是重定位地址第三个msg就是弹出的popad的地址处:这样点击确认后就到了程序的OEP处;


Shark恒 发表于 2014-10-29 23:51

真心不错,我发现楼主的教程制作的非常精细。

起凡第一华佗 发表于 2014-10-30 01:28

发现一个大牛

Dean 发表于 2014-10-30 08:49

学习一下,争取早日学会

bigeorry 发表于 2014-10-30 09:33

楼主真是太厉害了,小白真心需要多学习啊

BattleHeart 发表于 2014-10-30 09:35

Dean 发表于 2014-10-30 08:49
学习一下,争取早日学会

恩,一起努力~~~

BattleHeart 发表于 2014-10-30 09:35

bigeorry 发表于 2014-10-30 09:33
楼主真是太厉害了,小白真心需要多学习啊

哪有,一起努力~~~

AoQc 发表于 2014-10-30 09:55

看看大牛长什么样 顺便兜售瓜子饮料爆米花~

zx2cwf 发表于 2014-10-30 13:43

大牛你好大牛再见

BattleHeart 发表于 2014-10-30 14:52

LWJ一辈子 发表于 2014-10-30 13:43
大牛你好大牛再见

别闹!别闹!
页: [1] 2 3 4
查看完整版本: 教你如何写Aspack脱壳脚本