首页
社区
课程
招聘
[原创]ASProtect 2.1x SKE之木马克星5.50 build 2403 脱壳分析
发表于: 2006-4-18 17:08 17114

[原创]ASProtect 2.1x SKE之木马克星5.50 build 2403 脱壳分析

2006-4-18 17:08
17114

【破文标题】ASProtect 2.1x SKE之木马克星5.50 build 2403 脱壳分析
【破文作者】lchhome
【作者邮箱】lchhome@163.com
【作者主页】http://lchhome.ys168.com
【破解工具】OD、Imp
【破解平台】WinXP
【软件名称】木马克星5.50 build 2403
【软件大小】1.07MB
【原版下载】
【保护方式】ASProtect 2.1x SKE -> Alexey Solodovnikov
【软件简介】
【破解声明】仅供学习
------------------------------------------------------------------------
脱Aspr的步骤如下:
1、找到IAT处理所在,并设法避开其加密;
2、寻觅oep,并对所有对壳的调用进行处理;
3、dump后直接修复stolen code;

要得到IAT表,先要得到一些数据:
1、它把jmp xxxxxxxx变成CAll xxxxxxxx形式;
2、IAT的大致地方在何处;
3、IAT是否加密。
分析好了,就按部就班吧!
一、OD不忽略内存访问异常,其余全忽略,隐藏OD,载入程序:
<ModuleEn>  68 01806400     PUSH iparmor.00648001          停在这里,F9运行
00401005    E8 01000000     CALL iparmor.0040100B
0040100A    C3              RETN

按Shift+F9运行到最后一次异常:
012EFAA5    C700 EFCA5C85   MOV DWORD PTR DS:[EAX],855CCAEF   中断在这里
012EFAAB    67:64:8F06 0000 POP DWORD PTR FS:[0]
012EFAB1    83C4 04         ADD ESP,4
012EFAB4    83E8 AF         SUB EAX,-51

按Alt+M,在00401000 CODE段下F2断点,Shift+F9运行:
005A4524    55              PUSH EBP                这就是OEP处
005A4525    8BEC            MOV EBP,ESP
005A4527    B9 04000000     MOV ECX,4
005A452C    6A 00           PUSH 0
005A452E    6A 00           PUSH 0
005A4530    49              DEC ECX
005A4531  ^ 75 F9           JNZ SHORT iparmor.005A452C

好的,按Ctrl+B,搜索一下FF 25,会找到:
004012AC  - FF25 5CC35C00   JMP DWORD PTR DS:[5CC35C]                ; kernel32.CreateFileA
004012B2    8BC0            MOV EAX,EAX
004012B4    E8 47ED1201     CALL 01530000             这里可看出,它把jmp xxxxxxxx变成CAll 01530000形式

在命令行下 dd 5cc35c,在数据区可看到:
005CC2A8  9460A627
005CC2AC  7C93188A  ntdll.RtlDeleteCriticalSection
005CC2B0  7C9210ED  ntdll.RtlLeaveCriticalSection
005CC2B4  7C921005  ntdll.RtlEnterCriticalSection
005CC2B8  7C809FA1  kernel32.InitializeCriticalSection
005CC2BC  7C809B14  kernel32.VirtualFree
005CC2C0  7C809A81  kernel32.VirtualAlloc
005CC2C4  7C80995D  kernel32.LocalFree
005CC2C8  7C8099BD  kernel32.LocalAlloc
005CC2CC  7C809794  kernel32.InterlockedDecrement
005CC2D0  7C80977B  kernel32.InterlockedIncrement
005CC2D4  7C80B859  kernel32.VirtualQuery
005CC2D8  7C80A0C7  kernel32.WideCharToMultiByte
005CC2DC  B5693000                               可知IAT已加密,不加密的IAT函数之间是用00000000隔开的
005CC2E0  7C809CAD  kernel32.MultiByteToWideChar
005CC348  7C81EAE1  kernel32.RaiseException
005CC34C  5993DFD3
005CC350  15231CEE
005CC354  1D38E0DE

从上面可以看IAT已加密!OK!这里得到了这几个数据后,重来吧!Ctrl+F2重载后,在数据区,去5CC200跟随:
005CC200  88354C5A            注意变化
005CC204  5D166687
005CC208  A25C556C
005CC20C  D6DB7D5E
005CC210  3936FF34
005CC214  ACED3A65

按Shift+F9继续运行N次后,
005CC200  4CABE4CE          已变了 ,第一次变化   
005CC204  CEA68995
005CC208  75D1396B
005CC20C  8CBC3B56
005CC210  111443CC
005CC214  727A3D19
005CC218  B99BA8C2

继续运行
005CC200  001CF8FC     变成这样,第二次变化
005CC204  001CCCC0
005CC208  00000000
005CC20C  00000000
005CC210  00000000
005CC214  001CF914

再按Shift+F9一次:
012EEA55    C601 B6         MOV BYTE PTR DS:[ECX],0B6        停在这里
012EEA58    6323            ARPL WORD PTR DS:[EBX],SP
012EEA5A    DEAA B86B9C6B   FISUBR WORD PTR DS:[EDX+6B9C6BB8]

右键点搜索字符参考,找“85”,来到:
012EEBF6   /EB 0A           JMP SHORT 012EEC02
012EEBF8   |68 E8F42E01     PUSH 12EF4E8                         ; ASCII "85" 这是ASProtect 2.1x一个特有标志
012EEBFD   |E8 2A62FEFF     CALL 012D4E2C
012EEC02   \A1 1C372F01     MOV EAX,DWORD PTR DS:[12F371C]
012EEC07    8B00            MOV EAX,DWORD PTR DS:[EAX]
012EEC09    E8 0A8CFFFF     CALL 012E7818
012EEC0E    84C0            TEST AL,AL
012EEC10    75 0A           JNZ SHORT 012EEC1C
012EEC12    68 E8F42E01     PUSH 12EF4E8                          ; ASCII "85"
012EEC17    E8 1062FEFF     CALL 012D4E2C

在012EEC09句下F2断点,Shift+F9运行,中断在此,然后F7跟进,然后按滚动条往下找到:
012E795A    E8 59FCFFFF     CALL 012E75B8                    这个CALL是进行IAT处理,F4,然后F7跟进
012E795F    0FB707          MOVZX EAX,WORD PTR DS:[EDI]
012E7962    83C0 02         ADD EAX,2
012E7965    03F8            ADD EDI,EAX
012E7967    8A1F            MOV BL,BYTE PTR DS:[EDI]
012E7969    47              INC EDI
012E796A    3A5E 34         CMP BL,BYTE PTR DS:[ESI+34]
012E796D  ^ 0F85 77FFFFFF   JNZ 012E78EA                  每个DLL的函数是否处理
012E7973    8BDF            MOV EBX,EDI
012E7975    8B03            MOV EAX,DWORD PTR DS:[EBX]
012E7977    85C0            TEST EAX,EAX
012E7979  ^ 0F85 0AFFFFFF   JNZ 012E7889                  比较DLL是否处理完
012E797F    8A0424          MOV AL,BYTE PTR SS:[ESP]
012E7982    83C4 0C         ADD ESP,0C
012E7985    5D              POP EBP
012E7986    5F              POP EDI
012E7987    5E              POP ESI
012E7988    5B              POP EBX
012E7989    C3              RETN

跟进后,找到:
012E75EA   /EB 01           JMP SHORT 012E75ED
012E75EC   |6933 C08A433B   IMUL ESI,DWORD PTR DS:[EBX],3B438AC0
012E75F2    3BF0            CMP ESI,EAX                        这里下F2中断后,然后 F9运行  
012E75F4    75 5E           JNZ SHORT 012E7654                这里要修改
012E75F6    EB 01           JMP SHORT 012E75F9

在012E75F2句下断运行,注意数据区,可以看出ESI有17、42、AA三个值,其中17、AA不加密,只有42加密,把42
改为AA即可,好!在012E75F4句修改,先用HideOD申请一个内存空间,我的是01640000,把012E75F4改为:
012E75F4  - E9 078A3500     JMP 01640000        然后下F2断点,F7跟进,
再把修改代码写进去:
01640000  - 0F84 F375CAFF   JE 012E75F9       下F2断点,F9运行
01640006    81FE AA000000   CMP ESI,0AA
0164000C  - 0F84 4276CAFF   JE 012E7654
01640012    BE AA000000     MOV ESI,0AA
01640017  - E9 3876CAFF     JMP 012E7654

在数据区去5CC2A4跟随,看看,就可以很明显的看出IAT的原先面目,它的起始地址:5CC2A4,结束地址:5CCD54
大小:AB0,得到了IAT表后,撤消所有原先的修改,恢复原状后,在012E75F4句新建EIP,按Shift+F9运行,来到
最后一次异常:
012EFAA5    C700 EFCA5C85   MOV DWORD PTR DS:[EAX],855CCAEF
012EFAAB    67:64:8F06 0000 POP DWORD PTR FS:[0]
012EFAB1    83C4 04         ADD ESP,4
012EFAB4    83E8 AF         SUB EAX,-51
滚动条往下找:
012EFBFA    E8 B5D0FFFF     CALL 012ECCB4    下断,F7跟进,
012EFBFF    83C4 2C         ADD ESP,2C
012EFC02    5D              POP EBP
012EFC03    5F              POP EDI
012EFC04    5E              POP ESI
012EFC05    5B              POP EBX
012EFC06    C3              RETN
然后按F7往下走到:
012ECDAF    2BF1            SUB ESI,ECX
012ECDB1    56              PUSH ESI
012ECDB2    BE F2E34800     MOV ESI,48E3F2
012ECDB7    BE EA774A00     MOV ESI,4A77EA
012ECDBC    C3              RETN              来到这里,但是返回到壳中的OEP,
下04010000 CODE段内存断点可以到达真OEP,再返回到012ECDBC句,搜索一下89,45,F0,B8,00,07,00,00 到达这里:
012E7188    8945 F0         MOV DWORD PTR SS:[EBP-10],EAX
012E718B    B8 00070000     MOV EAX,700
012E7190    E8 B7B3FDFF     CALL 012C254C                  这里要修改
012E7195    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX
012E7198    C645 EF 00      MOV BYTE PTR SS:[EBP-11],0

就用刚才申请的内存空间01640000,012E7190句修改为:
012E7190  - E9 A28E3500     JMP 01640037      
然后写下如何代码:
01640000    BA 00104000     MOV EDX,4010000                  写好代码后,在这下F2断点,F9运行一下   
01640005    803A E8         CMP BYTE PTR DS:[EDX],0E8
01640008    75 12           JNZ SHORT 0164001C
0164000A    8B42 01         MOV EAX,DWORD PTR DS:[EDX+1]
0164000D    03C2            ADD EAX,EDX
0164000F    83C0 05         ADD EAX,5
01640012    3D 00005301     CMP EAX,1530000
01640017    75 03           JNZ SHORT 0164001C
01640019    EB 0C           JMP SHORT 01640027
0164001B    90              NOP
0164001C    42              INC EDX
0164001D    81FA 00505A00   CMP EDX,5A5000
01640023  ^ 72 E0           JB SHORT 01640005
01640025  - EB FE           JMP SHORT 01640025
01640027    8915 00015801   MOV DWORD PTR DS:[1640100],EDX
0164002D    60              PUSHAD
0164002E    FFE2            JMP EDX
01640030    90              NOP
01640031    90              NOP
01640032    90              NOP
01640033    90              NOP
01640034    90              NOP
01640035    90              NOP
01640036    90              NOP
01640037    60              PUSHAD
01640038    B8 A8C25C00     MOV EAX,5CC2A8
0164003D    90              NOP
0164003E    3910            CMP DWORD PTR DS:[EAX],EDX
01640040    75 20           JNZ SHORT 01640062
01640042    8B0D 00015801   MOV ECX,DWORD PTR DS:[1640100]
01640048    C701 FF250000   MOV DWORD PTR DS:[ECX],25FF
0164004E    8941 02         MOV DWORD PTR DS:[ECX+2],EAX
01640051    61              POPAD
01640052    90              NOP
01640053    8B15 00015801   MOV EDX,DWORD PTR DS:[1640100]
01640059    90              NOP
0164005A    90              NOP
0164005B    90              NOP
0164005C  ^ EB BE           JMP SHORT 0164001C
0164005E    90              NOP
0164005F    90              NOP
01640060    90              NOP
01640061    90              NOP
01640062    83C0 04         ADD EAX,4
01640065    3D 50CD5C00     CMP EAX,5CCD50
0164006A  ^ 7E D2           JLE SHORT 0164003E
0164006C  ^ EB E3           JMP SHORT 01640051
0164006E    90              NOP
0164006F    90              NOP

然后到OEP处,用OD插件脱壳,再用Imp修复,填上OEP=1A4524,点IAT自动搜索,获得输入信息,全部为有效指针
,修复抓取文件。
运行脱壳文件,发现它不能正常运行,晕!
用OD载入修复后的文件,按F9运行,程序出现异常,看堆栈区:
0013F984   0040E110  返回到 dumped_.0040E110 来自 dumped_.0040A824  ,右键反汇编中跟随
0013F988   00000007
0013F98C   0013F9B0

0040E10B  |.  E8 14C7FFFF   CALL dumped_.0040A824     是这个CALL出错,跟进
0040E110  |.  8BD8          MOV EBX,EAX              停在这

0040A824  - E9 D7571601     JMP 01570000          来到这,它又跳回壳去了,要改!这里来个狸猫换太子
随便找个retn就行了,按Ctrl+F,输入“retn",找到004012A7句,OK!把它改了,改成:
0040A824  ^\E9 7E6AFFFF     JMP dumped_.004012A7

保存文件!再运行,一切OK了!

------------------------------------------------------------------------

------------------------------------------------------------------------
【版权声明】属于lchhome所有,支持正版!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (58)
雪    币: 279
活跃值: (145)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
修复代码跟我用的这么像呢,一大堆NOP
支持一下!
2006-4-18 17:15
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
3
ASProtect 现在成了大路货,肯定没用人敢再用了,众多高手低手,高人菜鸟都拿ASProtect来开刀玩,简直是蜂拥而上.
2006-4-18 17:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
顶!!!
2006-4-18 18:51
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
强烈支持!!!
2006-4-18 20:18
0
雪    币: 235
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
[QUOTE]最初由 hnhuqiong 发布
ASProtect 现在成了大路货,肯定没用人敢再用了,众多高手低手,高人菜鸟都拿ASProtect来开刀玩,简直是蜂拥而上.:

是啊,许多牛人都拿它开刀.我想它有持挑战性吧.
2006-4-18 20:22
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 hnhuqiong 发布
ASProtect 现在成了大路货,肯定没用人敢再用了,众多高手低手,高人菜鸟都拿ASProtect来开刀玩,简直是蜂拥而上.



蜂拥而上
2006-4-18 20:30
0
雪    币: 313
活跃值: (250)
能力值: ( LV9,RANK:650 )
在线值:
发帖
回帖
粉丝
8
又一脱文,好东东
2006-4-18 21:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
又是一个脱文,不错,看来软件作者又要换猛壳了,不知道下个是什么!
2006-4-18 21:32
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
努力学习这个教程
2006-4-18 21:55
0
雪    币: 237
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好东东要顶!
2006-4-18 23:47
0
雪    币: 222
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
好文,支持
2006-4-19 00:07
0
雪    币: 50
活跃值: (145)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
13
好啊
2006-4-19 01:08
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
14
争取拿下这个壳。
2006-4-19 06:54
0
雪    币: 236
活跃值: (100)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
15
看了这个教程,我觉得自己也可以驼这个壳了(无stolen code)
2006-4-19 07:40
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主利欲熏心!

破解还收费?!

在看雪免费学技术,学了技术就去骗钱?强烈这种行为鄙视!

引自他的网站(http://lchhome.ys168.com)广告:

=======================================================
各位网友,你们好!

首先,感谢各位网友能够光临本站!
  希望大家踊跃加入本站认证会员,加入本站认证会员会得到以下服务:
一、免费得到本站所有商业软件的破解服务解压密码;
二、可以免费申请各种软件的破解,本站将在能力范围提供无偿服务。
加入方法:
  因本站空间容量小,只能发邮件至lchhome@163.com进行认证。
加入方式:
一、月费50元,享受本站认证会员第一条服务;
二、年费800元,享受本站所有服务。
想加入者请发邮件确认。
===========================================================
2006-4-19 09:27
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
没有利益,就没有动力,很正常
大家都要生活嘛...关于骗钱一说,是需要拿出证据来滴,呵

破解收费,这是非常正常的事情!

不过会员费用是挺高滴...
2006-4-19 09:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
只学习  不发表其他意见
2006-4-19 09:40
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
19
最初由 酷酷 发布
没有利益,就没有动力,很正常
大家都要生活嘛...关于骗钱一说,是需要拿出证据来滴,呵

破解收费,这是非常正常的事情!

........


破解了作者的软件,还那去买,简直是剽窃他人的合法利益!
2006-4-19 09:51
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
20
如果是我,我决不会怎么做!虽然本人技术没有他怎么高!但是还有自知之明!
2006-4-19 09:52
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
21
最初由 爱一个人好难 发布
如果是我,我决不会怎么做!虽然本人技术没有他怎么高!但是还有自知之明!


世上没有免费的午餐
你总不能无劳而获,
再说技术就是财富!
2006-4-19 10:06
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
最初由 爱一个人好难 发布
破解了作者的软件,还那去买,简直是剽窃他人的合法利益!


即然你这么支持正版,那你还是改用正版的WinXp吧,不要去市场上买五块钱一张的盗版光盘(光盘成本为1元一张,另外四元,算是破解组织的利润,应该也算有偿破解吧)大家都一样,何必装清高呢?
2006-4-19 10:25
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
炒起来了

明显2压1

路过......................
2006-4-19 10:55
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
24
只要一个愿打,一个愿挨,就不关他人的事。
2006-4-19 11:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
不谈盗版不盗版, 只学习.
请问这个OEP有没有被抽取?
如何准确判断?
谢谢`!
2006-4-19 11:10
0
游客
登录 | 注册 方可回帖
返回
//