首页
社区
课程
招聘
ASProtect 2.1x SKE -> Alexey Solodovnikov的stolen code脱壳[原创]
发表于: 2006-8-16 22:04 27297

ASProtect 2.1x SKE -> Alexey Solodovnikov的stolen code脱壳[原创]

2006-8-16 22:04
27297

文章标题:ASProtect 2.1x SKE -> Alexey Solodovnikov的stolen code脱壳
软件名称:Twilight复读机
保护方式:ASProtect 2.1x SKE -> Alexey Solodovniko
使用工具:od  ImportREC v1.6   LordPE v1.40
软件大小:393K
作者声明:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

看了好久别人脱ASPR的教程了,想到这个壳的stolen code有难度,所以特找个软件,来说说stolen code的脱壳,希望高手不要见笑!~!

脱壳步骤:

1   找到stolen code

2   DUMP程序

3   补区段

4   去校验

一  找到stolen code处

载入程序  到EP处

00401000 >  68 01904B00     PUSH twilight.004B9001
00401005    E8 01000000     CALL twilight.0040100B
0040100A    C3              RETN
0040100B    C3              RETN
0040100C    C4E4            LES ESP,ESP                              ; 非法使用寄存器
0040100E    21441D BE       AND DWORD PTR SS:[EBP+EBX-42],EAX
00401012    93              XCHG EAX,EBX
00401013    1210            ADC DL,BYTE PTR DS:[EAX]
00401015    A0 49705525     MOV AL,BYTE PTR DS:[25557049]

忽略除INT3以外的所有异常shift+f9两次  呵呵,ASPR2.1的特征,前面的文章里已经讲过了,这里就不多说了

停在这里

00A4C73B    90              NOP
00A4C73C    EB 01           JMP SHORT 00A4C73F
00A4C73E    6966 81 FE47467>IMUL ESP,DWORD PTR DS:[ESI-7F],744647FE
00A4C745    05 31C040EB     ADD EAX,EB40C031
00A4C74A    0231            ADD DH,BYTE PTR DS:[ECX]
00A4C74C    C031 DB         SAL BYTE PTR DS:[ECX],0DB                ; 移位常量超出 1..31 的范围
00A4C74F    64:8F03         POP DWORD PTR FS:[EBX]
00A4C752    83C4 04         ADD ESP,4
00A4C755    EB 01           JMP SHORT 00A4C758

此时VM区段已经全部解开,alt+M   在VM区段上下断

内存映射, 条目 56
地址=00C80000
大小=00005000 (20480.)
属主=         00C80000 (自身)
区段=
类型=Priv 00021040
访问=RWE
初始访问=RWE

shift+f9 程序中断在stolen code处

00C80367 >  55              PUSH EBP                                 ; (initial cpu selection)
00C80368    EB 02           JMP SHORT dumped_.00C8036C
00C8036A    CD 20           INT 20
00C8036C    8DAC0B 5E304800 LEA EBP,DWORD PTR DS:[EBX+ECX+48305E]
00C80373    8D6C4B 12       LEA EBP,DWORD PTR DS:[EBX+ECX*2+12]
00C80377    8D6C0D EE       LEA EBP,DWORD PTR SS:[EBP+ECX-12]
00C8037B    2BE9            SUB EBP,ECX
00C8037D    2BE9            SUB EBP,ECX
00C8037F    8D6C24 1B       LEA EBP,DWORD PTR SS:[ESP+1B]
00C80383    8D6C25 E5       LEA EBP,DWORD PTR SS:[EBP-1B]
00C80387    6A FF           PUSH -1
00C80389    EB 02           JMP SHORT dumped_.00C8038D
00C8038B    CD 20           INT 20
00C8038D    68 0A304400     PUSH dumped_.0044300A
00C80392    EB 02           JMP SHORT dumped_.00C80396
00C80394    CD 20           INT 20

二   DUMP程序

呵呵,这里我们找到OEP 接下来,就是DUMP了
打开LordPE v1.40找到程序,完全DUMP出来保存为dumped.exe

打开

ImportREC v1.6

选择程序的进程,点自动搜索IAT,然后将大小改为1000,呵呵,估计足够了,再点获取输入表,因为这个软件,IAT没加密,所以直接可以这样修复,
再填入OEP   00870367    修复抓取文件,OK了,文件修复完毕

三    补区段

这也是我们今天说的重点所在,前面的找OEP可以直接用Volx大侠的脚本找到的
好,现在我们开始DUMP程序的VM区段

先看看程序用到vm哪些段 ,要DUMP那几个区段,这里我们用到最少区段法,
就是对vm全部下段 ,看程序在哪些段断下 ,就说明程序用到了vm的那些段
在这几个区段上全部下断,然后F9运行程序,看程序都在那几个区段上停下了,也就是程序用到了那几个区段,我们就要合部DUMP下来

这几个是我这里用到的并一一记录(应用该方法就能准确的定位出,该dump哪些区段了)

00C70000     00005000
00CE0000     00001000
00A20000     00043000
00A70000     00014000
00CF0000     00001000
00C90000     00001000
00C80000     00006000
00ADC000     00004000
00AEC000     00004000
00AB0000     0000C000
00CA0000     00001000
00CD0000     00001000

之后程序起动了,呵呵,前面这些就是我这里所用到的区段
通过 LordPE v1.40全部DUMP下来,之后,就可以补区段了

将所有区段的补完之后,要进行PE重建,要不然,程序不能运行的

四   去校验

所有ASPR的壳,都要找特征码

这里给大家讲一种比较好的,又有校的方法,用Ultraedit打开补好区段的程序搜索下特征码:8B 40 34 FF D0
定位到文件偏移(154c66)如图:

用LordPE转换下得到VA为:00A58A66
立即用OD载入,Ctrl+G,到达00A58A66地址,发现跟SYSCOM大侠讲的不一样,代码面目全非,不像大侠给出的那样(如图)

失望之时,往上一看,原来有个花指令,干扰了我们,看到那个Jmp Short dumped_.00A58A5B了吗?呵呵,我们把00A58A5A给nop掉,哈哈,真面目出来了!!如图:

代码修改为如下:
00A58A58   /EB 01           JMP SHORT dumped_.00A58A5B
00A58A5A   |90              NOP
00A58A5B   \8B73 30         MOV ESI,DWORD PTR DS:[EBX+30]
00A58A5E    8B7B 14         MOV EDI,DWORD PTR DS:[EBX+14]
00A58A61    A1 F037A600     MOV EAX,DWORD PTR DS:[A637F0]
00A58A66    3E:8B4424 34    MOV EAX,DWORD PTR DS:[ESP+34]
00A58A6B    83E8 05         SUB EAX,5
00A58A6E    90              NOP
00A58A6F    90              NOP
00A58A70    90              NOP
00A58A71    2B43 18         SUB EAX,DWORD PTR DS:[EBX+18]
OK!!搞定,收工。

在此特别感谢论坛的秀才兄,一直鼓励着我。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 8
支持
分享
最新回复 (43)
雪    币: 250
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
支持一下,好文,值得学习~!~!~!
2006-8-16 22:06
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
3
软件下载地址:http://aixi.org/twisetup27.exe
在此给出脱掉壳的程序
程序第一部份:
上传的附件:
2006-8-16 22:14
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
4
程序第二部份:
上传的附件:
2006-8-16 22:15
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
脱的好!学习!
2006-8-16 22:21
0
雪    币: 250
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
看来楼主要多出几篇精华文章了,期待中~!~!~!
2006-8-17 09:25
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
跟着老大慢慢来
2006-8-17 14:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
请问大大说的

ASPR2.1的特征,前面的文章里已经讲过了,这里就不多说

是指哪篇文章?可告诉我吗?
因为我不懂特徵想学习.
2006-8-17 18:52
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
9
Route Check代码

014D8A5E      8B7B 14            mov edi,dword ptr ds:[ebx+14]
014D8A61      A1 F0374E01        mov eax,dword ptr ds:[14E37F0]
014D8A66      8B40 34            mov eax,dword ptr ds:[eax+34]
014D8A69      FFD0               call eax
014D8A6B      2945 0C            sub dword ptr ss:[ebp+C],eax   
014D8A6E      8B45 0C            mov eax,dword ptr ss[ebp+C]
014D8A71      2B43 18            sub eax,dword ptr ds:[ebx+18]
014D8A74      2B43 68            sub eax,dword ptr ds:[ebx+68]
014D8A77      8945 FC            mov dword ptr ss:[ebp-4],eax

其中下面的代码只要是aspr加密过机器码都一样

014D8A66      8B40 34            mov eax,dword ptr ds:[eax+34]
014D8A69      FFD0               call eax

即文章中说的机器码(特征码):8B 40 34 FF D0
详细请见SYSCOM大侠的文章
2006-8-17 20:57
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
此时VM区段已经全部解开,alt+M   在VM区段上下断

内存映射, 条目 56
地址=00C80000
大小=00005000 (20480.)
属主=         00C80000 (自身)
区段=
类型=Priv 00021040
访问=RWE
初始访问=RWE

这里是怎么确认是这个区段的呢?谢谢
2006-8-17 21:26
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
11
不错,但是按照gkend的观点

00C80367 >  55              PUSH EBP                                 ; (initial cpu selection)
00C80368    EB 02           JMP SHORT dumped_.00C8036C
00C8036A    CD 20           INT 20
00C8036C    8DAC0B 5E304800 LEA EBP,DWORD PTR DS:[EBX+ECX+48305E]
00C80373    8D6C4B 12       LEA EBP,DWORD PTR DS:[EBX+ECX*2+12]
00C80377    8D6C0D EE       LEA EBP,DWORD PTR SS:[EBP+ECX-12]
00C8037B    2BE9            SUB EBP,ECX
00C8037D    2BE9            SUB EBP,ECX
00C8037F    8D6C24 1B       LEA EBP,DWORD PTR SS:[ESP+1B]
00C80383    8D6C25 E5       LEA EBP,DWORD PTR SS:[EBP-1B]
00C80387    6A FF           PUSH -1   //gkend认为这里应该是push 0
gkend曾说,如果这里写push -1, 那么这种人是教条主义,照本宣科的
所以要改成push 0, 这样才算活学活用

我本人不同意这个观点, 这里修得很好!
2006-8-17 22:26
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 shoooo 发布
不错,但是按照gkend的观点

00C80367 > 55 PUSH EBP ; (initial cpu selection)
00C80368 EB 02 JMP SHORT dumped_.00C8036C
00C8036A CD 20 INT 20
........

我亲爱的shoooo啊,把这个忘了吧!!!
2006-8-17 22:57
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
13
最初由 无奈无赖 发布
此时VM区段已经全部解开,alt+M 在VM区段上下断


内存映射, 条目 56
地址=00C80000
........


00C70000    8BFF            MOV EDI,EDI
00C70002    55              PUSH EBP
00C70003    8BEC            MOV EBP,ESP
00C70005    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
00C7000B    8B4D 08         MOV ECX,DWORD PTR SS:[EBP+8]
00C7000E    8948 34         MOV DWORD PTR DS:[EAX+34],ECX
00C70011    5D              POP EBP
00C70012    C2 0400         RETN 4
00C70015    90              NOP
00C70016    0000            ADD BYTE PTR DS:[EAX],AL
00C70018    0000            ADD BYTE PTR DS:[EAX],AL
00C7001A    0000            ADD BYTE PTR DS:[EAX],AL
00C7001C    0000            ADD BYTE PTR DS:[EAX],AL
00C7001E    0000            ADD BYTE PTR DS:[EAX],AL
00C70020    0000            ADD BYTE PTR DS:[EAX],AL
00C70022    0000            ADD BYTE PTR DS:[EAX],AL
00C70024    0000            ADD BYTE PTR DS:[EAX],AL
00C70026    0000            ADD BYTE PTR DS:[EAX],AL
00C70028    0000            ADD BYTE PTR DS:[EAX],AL
00C7002A    0000            ADD BYTE PTR DS:[EAX],AL
这是C70000区段的代码!!!(模拟API)
上传的附件:
2006-8-18 00:12
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
14
还有一点就是:修复IAT,DUMP 主程序DUMP VM区段,要在同一次加载过程中完成。
2006-8-18 00:22
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主问个问题:我在看保护文件夹脱壳文章(http://bbs.pediy.com/showthread.php?s=&threadid=27239)是有个步骤是:先把dump抓取的文件补区段再用importREC进行修复,而老大是先用importREC修复dump抓取的文件再补区段.这究竟是谁对谁错?
2006-8-18 08:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习先!
2006-8-18 10:22
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
17
最初由 softKiller 发布
楼主问个问题:我在看保护文件夹脱壳文章(http://bbs.pediy.com/showthread.php?s=&threadid=27239)是有个步骤是:先把dump抓取的文件补区段再用importREC进行修复,而老大是先用importREC修复dump抓取的文件再补区段.这究竟是谁对谁错?


都试下就知道了。
只要能运行就可以了。
2006-8-18 10:30
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
18
最初由 softKiller 发布
楼主问个问题:我在看保护文件夹脱壳文章(http://bbs.pediy.com/showthread.php?s=&threadid=27239)是有个步骤是:先把dump抓取的文件补区段再用importREC进行修复,而老大是先用importREC修复dump抓取的文件再补区段.这究竟是谁对谁错?


两种方法我都试过了,都没问题。
先修复输入表的如图(文件在3楼和4楼):

后修复输入表的如图:
上传的附件:
2006-8-18 10:42
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
感谢 kangaroo 兄弟和楼上的各位,我现在还没有把它给破掉,不过我会努力的!在破解的过程中,rebuid pe时应在什么时候进行?
2006-8-18 15:03
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不好意思问了个白痴问题,[QUOTE]选择程序的进程,点自动搜索IAT,然后将大小改为1000,呵呵,估计足够了,再点获取输入表,因为这个软件,IAT没加密,所以直接可以这样修复,
再填入OEP   00870367    修复抓取文件,OK了,文件修复完毕
OEB应该是00880367吧
2006-8-18 15:25
0
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
21
最初由 softKiller 发布
感谢 kangaroo 兄弟和楼上的各位,我现在还没有把它给破掉,不过我会努力的!在破解的过程中,rebuid pe时应在什么时候进行?


补完区段后
2006-8-18 16:19
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
先顶一下  小弟不才!
2006-8-18 22:25
0
雪    币: 213
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
00A58A66    3E:8B4424 34    MOV EAX,DWORD PTR DS:[ESP+34] >>这里不是
        修改为:            mov eax,dword ptr ss:[esp+58] 这个?
00A58A6B    83E8 05         SUB EAX,5
感觉有点疑问
2006-11-6 16:08
0
雪    币: 235
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
24
三 补区段
为什么要补区段??原来可以说一下吗?
选择程序的进程,点自动搜索IAT,然后将大小改为1000

将什么改为1000,为什么改为1000,你这些都没说啊!晕死!我服了你!
2006-11-12 14:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
好,我也想问[ 这个问题哟
2006-11-15 18:02
0
游客
登录 | 注册 方可回帖
返回
//