首页
社区
课程
招聘
[原创]Rocky4 SHL 狗壳,适合初学.
发表于: 2007-8-21 22:09 6076

[原创]Rocky4 SHL 狗壳,适合初学.

2007-8-21 22:09
6076
文件名称: AOTE FIPS
狗壳:据说是Rocky4的壳
特殊标志:RY4SHL区段
带狗脱壳

软件拿到手上惯例Peid一下,什么也没有找到
继续惯例OllyDbg打开程序停在下面位置

008D4600 A>  E8 D8020000                 call AOTE-DJ.008D48DD
008D4605     EB 22                       jmp short AOTE-DJ.008D4629
008D4607     80BA 3038857F 8A            cmp byte ptr ds:[edx+7F853830],8A
008D460E     43                          inc ebx
008D460F     9B                          wait
008D4610     192A                        sbb dword ptr ds:[edx],ebp
008D4612     FD                          std
008D4613     FB                          sti
008D4614   ^ E1 8B                       loopde short AOTE-DJ.008D45A1
008D4616     CA 237B                     retf 7B23
008D4619     58                          pop eax
008D461A     847A AA                     test byte ptr ds:[edx-56],bh
008D461D     F8                          clc

不用说拉,一定是F7进去啦。
下面一路F8

慢慢的我们就到了这个位置啦...不要图方便直接下断点,要慢慢来
008C8760    /74 20                       je short AOTE-DJ.008C8782
008C8762    |6A 00                       push 0
008C8764    |6A 00                       push 0
008C8766    |68 78E28A00                 push AOTE-DJ.008AE278
008C876B    |E8 2EFDFFFF                 call AOTE-DJ.008C849E
008C8770    |59                          pop ecx
008C8771    |50                          push eax
008C8772    |6A 00                       push 0
008C8774    |FF15 FC818A00               call dword ptr ds:[8A81FC]

008C8760  Anti的判断位置,这个位置不跳就要弹出一个对话框,那么在着个位置的时候修改Z flag,或者直接改成 jmp short 008c8782 都可以.

经过两次retn后我们来到程序领空啦

0041EF30     55                          push ebp
0041EF31     8BEC                        mov ebp,esp
0041EF33     6A FF                       push -1
0041EF35     68 60214200                 push AOTE-DJ.00422160
0041EF3A     68 36F14100                 push AOTE-DJ.0041F136
0041EF3F     64:A1 00000000              mov eax,dword ptr fs:[0]
0041EF45     50                          push eax
0041EF46     64:8925 00000000            mov dword ptr fs:[0],esp
0041EF4D     83C4 94                     add esp,-6C
0041EF50     53                          push ebx
0041EF51     56                          push esi
0041EF52     57                          push edi
0041EF53     8965 E8                     mov dword ptr ss:[ebp-18],esp
0041EF56     C745 FC 00000000            mov dword ptr ss:[ebp-4],0
0041EF5D     6A 02                       push 2
0041EF5F     FF15 C0014200               call dword ptr ds:[4201C0]

记录一下:
oep = 0041EF30
程序结构上看蛮熟悉的哦?VC++

观察一下
0041EF5F     FF15 C0014200               call dword ptr ds:[4201C0]
ds:[004201C0]=01B70745
那么转到 01B70745
01B70745    /EB 01                       jmp short 01B70748
01B70747    |1A68 D0                     sbb ch,byte ptr ds:[eax-30]
01B7074A     A4                          movs byte ptr es:[edi],byte ptr ds:[esi]
01B7074B     2010                        and byte ptr ds:[eax],dl
01B7074D     EB 02                       jmp short 01B70751
01B7074F     0A11                        or dl,byte ptr ds:[ecx]
01B70751     C3                          retn

有点乱乱的,Junk啦, 转到 01B70748 看看
01B70748     68 D0A42010                 push MSVCRTD.__set_app_type

哦,真的哦.你知道是什么啦

下面观察一下1B70000区段 知道这样几个问题
EB 02
EB 01
这些jmp 只跳转一个位置,或者两个位置.

手工修复IAT吧
下硬件断点
hw 4201C0 (写入的时候中断)
重新载入程序,现在直接F9吧

观察一下代码

008C900C     FF75 EC                     push dword ptr ss:[ebp-14]   
008C900F     FF75 CC                     push dword ptr ss:[ebp-34]
008C9012     FF55 D8                     call dword ptr ss:[ebp-28]     
008C9015     59                          pop ecx
008C9016     8945 C8                     mov dword ptr ss:[ebp-38],eax
008C9019     85C0                        test eax,eax
008C901B     59                          pop ecx
008C901C     75 25                       jnz short AOTE-DJ.008C9043
008C901E     FF75 F0                     push dword ptr ss:[ebp-10]
008C9021     817D EC FFFF0000            cmp dword ptr ss:[ebp-14],0FFFF
008C9028     8D85 C4FEFFFF               lea eax,dword ptr ss:[ebp-13C]
008C902E     FF75 EC                     push dword ptr ss:[ebp-14]
008C9031     50                          push eax
008C9032     76 07                       jbe short AOTE-DJ.008C903B
008C9034     E8 E8F8FFFF                 call AOTE-DJ.008C8921
008C9039     EB 05                       jmp short AOTE-DJ.008C9040
008C903B     E8 27F9FFFF                 call AOTE-DJ.008C8967
008C9040     83C4 0C                     add esp,0C
008C9043     8B45 FC                     mov eax,dword ptr ss:[ebp-4]
008C9046     8B4D C8                     mov ecx,dword ptr ss:[ebp-38]
008C9049     25 FFFFFF7F                 and eax,7FFFFFFF
008C904E     0343 04                     add eax,dword ptr ds:[ebx+4]
008C9051     837D D4 00                  cmp dword ptr ss:[ebp-2C],0
008C9055     8945 FC                     mov dword ptr ss:[ebp-4],eax
008C9058     8908                        mov dword ptr ds:[eax],ecx
008C905A     75 03                       jnz short AOTE-DJ.008C905F
008C905C     894D D4                     mov dword ptr ss:[ebp-2C],ecx
008C905F     807D 0B 00                  cmp byte ptr ss:[ebp+B],0
008C9063   ^ 0F85 06FFFFFF               jnz AOTE-DJ.008C8F6F
008C9069     FF75 EC                     push dword ptr ss:[ebp-14]
008C906C     E8 3FE1FEFF                 call AOTE-DJ.008B71B0
008C9071     50                          push eax

记录下来这个位置.
008C9058     8908                        mov dword ptr ds:[eax],ecx 写的地方就是这里
现在下硬件断点
hw 41EF30 (就是开始解密程序实体部分)
找到下面的retn.下断 F9 过去

转到 008C9058 这个位置

通过上面的观察我们在程序末尾找一个空白的地方 写上一段代码

008DBF00     81F9 0000B801               cmp ecx,1B80000
008DBF06     7D 2D                       jge short AOTE-DJ.008DBF35
008DBF08     81F9 0000B701               cmp ecx,1B70000
008DBF0E     7E 25                       jle short AOTE-DJ.008DBF35
008DBF10     52                          push edx
008DBF11     8079 01 01                  cmp byte ptr ds:[ecx+1],1
008DBF15     75 17                       jnz short AOTE-DJ.008DBF2E
008DBF17     8B51 04                     mov edx,dword ptr ds:[ecx+4]
008DBF1A     8910                        mov dword ptr ds:[eax],edx
008DBF1C     837D D4 00                  cmp dword ptr ss:[ebp-2C],0
008DBF20     75 27                       jnz short AOTE-DJ.008DBF49
008DBF22     90                          nop
008DBF23     90                          nop
008DBF24     90                          nop
008DBF25     90                          nop
008DBF26     8955 D4                     mov dword ptr ss:[ebp-2C],edx
008DBF29     EB 1E                       jmp short AOTE-DJ.008DBF49
008DBF2B     90                          nop
008DBF2C     90                          nop
008DBF2D     90                          nop
008DBF2E     8B51 05                     mov edx,dword ptr ds:[ecx+5]
008DBF31     8910                        mov dword ptr ds:[eax],edx
008DBF33   ^ EB E7                       jmp short AOTE-DJ.008DBF1C
008DBF35     8908                        mov dword ptr ds:[eax],ecx
008DBF37     837D D4 00                  cmp dword ptr ss:[ebp-2C],0
008DBF3B   ^ 0F85 1ED1FEFF               jnz AOTE-DJ.008C905F
008DBF41     894D D4                     mov dword ptr ss:[ebp-2C],ecx
008DBF44   ^ E9 16D1FEFF                 jmp AOTE-DJ.008C905F
008DBF49     5A                          pop edx
008DBF4A   ^ E9 10D1FEFF                 jmp AOTE-DJ.008C905F
008DBF4F     90                          nop

而原来的 008C9058 内容改成 jmp  008DBF00

下面就是在 0041EF30 处下断点咯(不是硬件断点)

F9过去

下面就是惯例 LordPE ,dump出来.
importRec 输入OEP 1EF30 ,Get一下
好了选择show invalid.  -> Trace 1
最后就是Fix啦

程序现在就能打开咯.

谢谢各位

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 86
活跃值: (1038)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
带狗。。。。。无语。。。
2007-8-21 23:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感觉不错啊
学习了
2007-8-27 19:17
0
游客
登录 | 注册 方可回帖
返回
//