sentaly 发表于 2010-8-13 19:17:55

菜鸟也来玩Asprotect脱壳

本帖最后由 sentaly 于 2010-8-13 19:20 编辑

【文章标题】: 菜鸟也来玩Asprotect脱壳
【文章作者】: sentaly
【作者邮箱】: [email protected]
【作者QQ号】: 138121310
【下载地址】: http://u.115.com/file/t18aacf88d
【加壳方式】: Asprotect 2.x
【操作平台】: windows sp1 PEID od LORDPE
【软件介绍】: 忘了什么时间的软件了
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
我是一名小菜鸟啊,也来玩玩Asprotect 2.x的壳。高手无视、、、、

ASP的壳跑OEP工作量太大,但是只是体力的问题,难就难在Stolen OEP,好在这个壳没有要我修复SDK,不知道为什么
好,下面先整理下思路:

1、到达Stolen OEP'Start
2、正常脱壳
3、分析Stolen区段(Stloen Code、VM、Route Check)
4、补区段
5、修复Route Check
6、可能会有自校验

所以我就用VOLX大大的ASP 2.X脚本跑到Stolen OEP'Start,省我很多体力。。。/:014


确定

同样


然后两次确定就到了,Stolen OEP start了,不同的机器,这里的地址是不一样的。用F7单步走,不能用F8

010E0521    55            push ebp                                 ; 655E90
010E0522    EB 01         jmp short 010E0525
010E0524    9A BDF64E46 006>call far 6500:464EF6BD
010E052B    EB 01         jmp short 010E052E
010E052D    69BD 2C3A4100 6>imul edi,dword ptr ss:,F001E>
010E0537    EB 01         jmp short 010E053A
010E0539    E8 BD8EC842   call 43D693FB
010E053E    00EB            add bl,ch
010E0540    0169 BD         add dword ptr ds:,ebp
010E0543    92            xchg eax,edx
010E0544    73 49         jnb short 010E058F
010E0546    00BD 02944200   add byte ptr ss:,bh
010E054C    F2:             prefix repne:
010E054D    EB 01         jmp short 010E0550
010E054F    E8 C1D5538D   call 8E61DB15
010E0554    6C            ins byte ptr es:,dx
010E0555    04 16         add al,16
010E0557    2BE8            sub ebp,eax
010E0559    8D6C0D EA       lea ebp,dword ptr ss:
010E055D    2BE9            sub ebp,ecx
010E055F    83C4 F0         add esp,-10

我们来继续。。。。F7 F7 F7 N次F7以后
标志:
push xxx
call xxx

就这,停下。把这里的地址记下。补区段时用。。继续F7

010E0F41    68 DF100E01   push 10E10DF
010E0F46    E8 B5F00B00   call 011A0000                            //这里是Stolen OEP end
010E0F4B    57            push edi
010E0F4C    F2:             prefix repne:
010E0F4D    EB 01         jmp short 010E0F50
010E0F4F    F0:B8 C2494800lock mov eax,4849C2                      ; 不允许锁定前缀
010E0F55    334424 28       xor eax,dword ptr ss:
010E0F59    EB 01         jmp short 010E0F5C
010E0F5B    9A 8D447561 83E>call far E883:6175448D
010E0F62    61            popad
010E0F63    F2:             prefix repne:
010E0F64    EB 01         jmp short 010E0F67
010E0F66    9A 03442418 F2E>call far EBF2:18244403
010E0F6D    01E8            add eax,ebp
010E0F6F    C1C8 F5         ror eax,0F5
010E0F72    8D8411 60566500 lea eax,dword ptr ds:
010E0F79    2BC2            sub eax,edx
010E0F7B    2BC1            sub eax,ecx
010E0F7D^ E9 BFFFFFFF   jmp 010E0F41

这里也要停,标志:call 一个寄存器
继续去打VM的,要记来寄存器里的值。


011A011B    FFD3            call ebx                   //数据窗口里寄存器里的值就是VM的地址了。这里不好找,不同的机器会变成不同的寄存器,每加载一次OD他也都在变。
011A011D    F3:             prefix rep:
011A011E    EB 02         jmp short 011A0122
011A0120    CD20 64FF3500   vxdjump 35FF64
011A0126    0000            add byte ptr ds:,al
011A0128    0065 EB         add byte ptr ss:,ah
011A012B    01E8            add eax,ebp
011A012D    BB 8C6D4900   mov ebx,496D8C
011A0132    81DB 72BCB9C0   sbb ebx,C0B9BC72
011A0138    5B            pop ebx
011A0139    FC            cld


下面是Route Check不过很近的。进VM地址的CALL下面第一个CALL寄存器的CALL就是Route Check的地址CALL了

00E78537    8B73 30         mov esi,dword ptr ds:
00E7853A    8B7B 14         mov edi,dword ptr ds:
00E7853D    A1 E497E700   mov eax,dword ptr ds:
00E78542    8B40 34         mov eax,dword ptr ds:
00E78545    FFD0            call eax                         //数据窗口里寄存器里的值就是Route Check的地址了,记下来。。
00E78547    2945 0C         sub dword ptr ss:,eax
00E7854A    8B45 0C         mov eax,dword ptr ss:
00E7854D    2B43 18         sub eax,dword ptr ds:
00E78550    2B43 68         sub eax,dword ptr ds:
00E78553    8945 FC         mov dword ptr ss:,eax
00E78556    8D43 24         lea eax,dword ptr ds:
00E78559    8945 F8         mov dword ptr ss:,eax
00E7855C    85FF            test edi,edi
00E7855E    76 38         jbe short 00E78598
00E78560    EB 01         jmp short 00E78563

现在我们找齐了

Stolen OEP start010E0521

Stolen OEP end    011A0000

VM            ebx=00E784FC

Route Check   eax=010B0000

下面就是补区段了

一般的补区段的顺序

VM(2)
Route Check(1)
Stolen Code(10)
从地址小的DUMP到大的地址

下面开始吧。
打开LORDPE,区域脱壳,
00E784FC

找到这个地址,DUMP,再用LORDPE载入开开始DUMP出来,也修复好的文件。

下面就分别找地址,DUNMP,载入修复的文件。不过要记得,从小到大,比如:

VM 两个分别Dump来,从小到大载入修复的文件,再去Dump
Route Check的,分别Dump出来后,再载入修复文件。继续Stolen Code

还有要注意一点。。。就是载入区域脱壳后要记得修改 虚拟大小
Route Check区段虚拟大小=011A0000-00401000(基址)

补好区段以后,重建下PE。LORDPE来

重建好还是不能打开,看看,我们还少来一步。去Route Check
用OD再次载入我们修复的文件,ctrl+g输入route check的地址,就是我们刚刚找到 call eax那个地方
下断,shift+F9到这里

90 90 90 8B 44 24 58 83 E8 05 90
用二进制粘贴,覆盖那个call.保存退出,over了

经验总结:
理清思路,其实也挺简单。这个壳是有点烦

--------------------------------------------------------------------------------
【版权声明】: 本文原创于sentaly,首发于PYG 转载请注明作者并保持文章的完整, 谢谢!

                                                       2010年08月13日 18:49:06

cjteam 发表于 2010-8-14 00:20:26

不错不错哈,继续加油学习哦,膜拜下

ham3666 发表于 2010-8-24 17:00:14

这个一直没搞定

jy02318874 发表于 2010-9-3 16:58:20

进来学习下!

weiwxsir 发表于 2010-9-4 16:31:30

兄弟牛呀,羡慕。

老万 发表于 2010-9-15 20:01:15

真厉害,如果是视频教程的话,一定能学习的更多

mojingtai 发表于 2010-9-21 21:39:23

学习一下。共同进步。

zhujian888 发表于 2010-9-21 22:18:09

"用VOLX大大的ASP 2.X脚本"

volx老大的脚步已经帮你把要补的区段都合并成一个区段了,好像不需要补区段了。你DUMP就可以了。

northman 发表于 2010-10-11 13:25:35

谢谢楼主分享经验

yxw886 发表于 2010-10-12 09:46:15

一起学习,一起进步!
页: [1] 2 3
查看完整版本: 菜鸟也来玩Asprotect脱壳