首页
社区
课程
招聘
[求助]脱UltraProtect 1.x -> RISCO Software Inc.遇到的困惑
发表于: 2008-12-25 13:08 5992

[求助]脱UltraProtect 1.x -> RISCO Software Inc.遇到的困惑

2008-12-25 13:08
5992
【破文标题】学习脱壳
【破解工具】 peid  od
【破解平台】xp
【保护方式】UltraProtect 1.x -> RISCO Software Inc.
【破解声明】只为学习,没有其他目的.
------------------------------------------------------------------------
【破解过程】压缩包中有两个程序(A和B),是一样的程序,用PEID查壳都是UltraProtect 1.x -> RISCO Software Inc.程序A用下面的方法脱壳并修复,可以运行.但程序B试过多种方法脱壳后修复不了,请高手指点!
下面是程序A的脱壳,修复过程,用OD载入,忽略除内存访问异常所有的异常.隐藏OD
F8单步,用ESP定律下硬件访问断点,
015CC000 ep>  60                 pushad
015CC001      E8 01000000        call epromm51.015CC007
015CC006    - 71 83              jno short epromm51.015CBF8B
015CC008      04 24              add al,24
015CC00A      06                 push es
015CC00B      C3                 retn
015CC00C      FC                 cld
015CC00D      F8                 clc
 
然后按F9一直来到
015E1FF7      55                 push ebp
015E1FF8      8F05 4DC85C01      pop dword ptr ds:[15CC84D]
015E1FFE      60                 pushad
015E1FFF      61                 popad
015E2000      A1 C0E34D00        mov eax,dword ptr ds:[4DE3C0]                    
015E2005      C1E0 02            shl eax,2
015E2008      A3 C4E34D00        mov dword ptr ds:[4DE3C4],eax
015E200D      53                 push ebx
015E200E      BB F1C85C01        mov ebx,epromm51.015CC8F1
015E2013      893B               mov dword ptr ds:[ebx],edi
015E2015      5B                 pop ebx
015E2016      FF35 F1C85C01      push dword ptr ds:[15CC8F1]
015E201C      8F05 E1C85C01      pop dword ptr ds:[15CC8E1]
015E2022      FF35 E1C85C01      push dword ptr ds:[15CC8E1]
015E2028      8F05 95CA5C01      pop dword ptr ds:[15CCA95]
015E202E      FF35 95CA5C01      push dword ptr ds:[15CCA95]
015E2034      52                 push edx
015E2035      890C24             mov dword ptr ss:[esp],ecx
015E2038      893C24             mov dword ptr ss:[esp],edi
015E203B      8915 6DC85C01      mov dword ptr ds:[15CC86D],edx
015E2041      FF35 6DC85C01      push dword ptr ds:[15CC86D]

其中
015E2000      A1 C0E34D00        mov eax,dword ptr ds:[4DE3C0]                    
015E2005      C1E0 02            shl eax,2
015E2008      A3 C4E34D00        mov dword ptr ds:[4DE3C4],eax
这三行是被偷取的代码.记录下来

重新载入程序,忽略除内存访问异常所有的异常.隐藏OD,ALI+M来到
内存映射,项目 21
 地址=0150C000
 大小=00003000 (12288.)
 物主=epromm51 00400000
 区段=.idata
 包含=code
 类型=Imag 01001002
 访问=R
 初始访问=RWE
下内存写入断点,SHIFT+F9,再次ALI+M,取消上面的内存断点,在
内存映射,项目 17
 地址=00401000
 大小=000DD000 (905216.)
 物主=epromm51 00400000
 区段=.text
 包含=code
 类型=Imag 01001002
 访问=R
 初始访问=RWE
处F2下断点,然后SHIFT+F9,OD来到
0040101B      3BCF               cmp ecx,edi                          ; epromm51.00501404
0040101D      76 05              jbe short epromm51.00401024
0040101F      2BCF               sub ecx,edi
00401021      FC                 cld
00401022      F3:AA              rep stos byte ptr es:[edi]
00401024      59                 pop ecx
00401025      5F                 pop edi
00401026      52                 push edx
00401027      6A 00              push 0
00401029      E8 EEBD0D00        call epromm51.004DCE1C
0040102E      8BD0               mov edx,eax
00401030      E8 0FD70C00        call epromm51.004CE744
00401035      5A                 pop edx
00401036      E8 6DD60C00        call epromm51.004CE6A8
0040103B      E8 44D70C00        call epromm51.004CE784

这时在注释显示窗口会显示
edi=00501404 (epromm51.00501404)
ecx=01509890 (epromm51.01509890)
记录下来.至此入口代码全部找到:A1 C0 E3 4D 00 C1 E0 02 A3 C4 E3 4D 00 57 51 33 C0 BF 04 14 50 00 B9 90 98 50 01

最后就是替换好找到的代码,二进制粘贴,新建EIP,脱壳,用ImportREC带的ACProtect.dll修复后可以正常运行.

上面程序A的脱壳和修复,但程序B和A是一个程序,好像版本不同,加的是同一个壳,保护方法却又不同,用多种方法脱壳,修复后不能运行,不知道怎样解决,请论坛中的朋友指点.

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
附件上传失败,只好放在:http://www.namipan.com/d/%e8%84%b1%e5%a3%b3.rar/1e69e31f8d4610bf4504c400acb2b8e8b0c0800d36872300
2008-12-25 13:10
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
不知道你错误提示是什么。

B程序的入口点代码好像没有被偷。
2008-12-25 18:54
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
程序A的入口点被偷,程序B的好像确实没有被偷,脱壳后为什么修复不了呢,请指点,困惑了好久了,谢谢!
2008-12-25 20:07
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
我对壳的分析也是刚学,不敢妄言。

简单看了一下,试试这样能有没有效果:

按照你原来的方法,在idata节上下内存写入断点,F9运行后来到这里:

015CA48C    8366 0C 00      AND     DWORD PTR DS:[ESI+C], 0
015CA490    03C2            ADD     EAX, EDX
015CA492    8BD8            MOV     EBX, EAX
015CA494    56              PUSH    ESI
015CA495    57              PUSH    EDI
015CA496    50              PUSH    EAX
015CA497    8BF3            MOV     ESI, EBX
...


往下拉,一直到这里:

015CA63A    53              PUSH    EBX
[COLOR="Red"]015CA63B    50              PUSH    EAX[/COLOR]
015CA63C    E8 8DB2FFFF     CALL    B.015C58CE
015CA641    8BD8            MOV     EBX, EAX
[COLOR="Red"]015CA643    58              POP     EAX
015CA644    33C3            XOR     EAX, EBX[/COLOR]
015CA646    C606 68         MOV     BYTE PTR DS:[ESI], [COLOR="Red"]68[/COLOR]
015CA649    8946 01         MOV     DWORD PTR DS:[ESI+1], EAX
015CA64C    C746 05 8134240>MOV     DWORD PTR DS:[ESI+5], [COLOR="Red"]243481[/COLOR]
015CA653    895E 08         MOV     DWORD PTR DS:[ESI+8], EBX
015CA656    C646 0C C3      MOV     BYTE PTR DS:[ESI+C], 0C3
015CA65A    5B              POP     EBX
015CA65B    8BC6            [COLOR="Red"]MOV     EAX, ESI[/COLOR]
015CA65D    8385 0BF94000 0>ADD     DWORD PTR SS:[EBP+40F90B], 0D
015CA664    5E              POP     ESI
015CA665    60              PUSHAD
...


这一段是对输入表进行处理的,其中push eax时,eax中就是API的地址。

下面的0x68是push XXXXXXXX的机器码。

也就是说,这一段代码是构造调用原来API的stub代码。(thunk??)



015CA644    33C3            XOR     EAX, EBX




015CA65B    8BC6            MOV     EAX, ESI


这两行全部改成nop,貌似就跳过了对导入表的处理了。

剩下的事就是走到OEP,然后用LordPE将其dump出来。

此时再用ImportRec来修复,应该可以修复了。

因为我的Windows XP x64系统,系统带的kernel32.dll和user32.dll等系统模块与32位的系统不一样,缺少很多函数,这些函数都在其它模块中实现了。这就导致ImportRec在我的机器上无法工作,所以我没办法亲自试验一下。抱歉。你先试试,如果还有问题,咱们继续讨论。
2008-12-25 21:05
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
多谢嘉宾版主的分析,我试试看
2008-12-25 21:25
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我按照嘉宾版主的方法试了一下,脱壳后用插件和等级3还是不修复,麻烦版主换台机器试试看。
2008-12-25 22:14
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
自己顶一下,晕了
2008-12-26 20:42
0
雪    币: 107
活跃值: (1628)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
这壳以前见过一个类似楼主情况的  最后查出原因是用了代码拼接 你的也许是
楼主可查相关资料
2008-12-26 21:56
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
10
楼上说得有道理。

用我说的方法修改壳的解码过程后,最终还有两个函数(一个是MessageBoxA,另一个是什么忘了,不过壳判断的代码就是附近,自己看一下就行)还会被加密,其它API函数指针都恢复成了本来的值,用ImportRec修复时遇到的无效指针全部是空指针,可以直接剪掉。

但是是脱壳后的程序还是无法运行,对比脱前和脱后,发现这个“壳”与“瓤”结合得很紧,基本上分不清楚哪是壳,哪是瓤。比如有很多指针变量,指向的内存区域是壳给分配,而脱壳后这些指针指向了无效的内存。

我的水平是处理不掉了。等待高人吧。
2008-12-27 00:38
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
11
壳在前面跑啊跑,我在后面追啊追...
书呆子强大啊....膜拜膜拜...
2008-12-27 08:23
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
嘉宾版主都搞不定,我们这些菜鸟就更不用提了,期待高手出现.嘿嘿!看雪老大不知能不能搞定.
2008-12-27 08:26
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
期待高手出现
2008-12-28 15:41
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
顶到高手出现
2008-12-29 15:33
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看雪老大不知能不能搞定
2008-12-30 21:54
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
自己还是没有搞定,请大牛指点.
2009-1-14 13:23
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
期待大牛的指点,谢谢。
2009-1-28 22:51
0
雪    币: 6092
活跃值: (654)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
18
你自己就是牛啊。看看你的头像。
2009-1-29 15:57
0
雪    币: 1183
活跃值: (2036)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
新手先不要搞难的,从简单的开始,我学了N年了还不会脱壳,一些壳是根本脱不掉的
2009-1-29 20:25
0
游客
登录 | 注册 方可回帖
返回
//