吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23587|回复: 24
收起左侧

[分享] 加密狗破解 之 SoftDog脱壳

  [复制链接]
小马甲 发表于 2010-3-19 17:28
搞一个试炼品,插上狗狗,开OD,OK,我们继续往下看吧,


载入后,OEP处是这样的
00468FAC > $  60            pushad
00468FAD   $  55            push    ebp
00468FAE   .  8BEC          mov     ebp, esp
00468FB0   .  81EC 54030000 sub     esp, 354
00468FB6   .  53            push    ebx
00468FB7   .  56            push    esi
00468FB8   .  57            push    edi
00468FB9   .  C685 F4FEFFFF>mov     byte ptr [ebp-10C], 0
00468FC0   .  C685 F5FEFFFF>mov     byte ptr [ebp-10B], 0
00468FC7   .  C685 F6FEFFFF>mov     byte ptr [ebp-10A], 0
00468FCE   .  C685 F7FEFFFF>mov     byte ptr [ebp-109], 0
00468FD5   .  8DBD F8FEFFFF lea     edi, dword ptr [ebp-108]
00468FDB   .  33C0          xor     eax, eax
00468FDD   .  B9 3F000000   mov     ecx, 3F
00468FE2   .  F3:AB         rep     stos dword ptr es:[edi]
00468FE4   .  C685 A4FDFFFF>mov     byte ptr [ebp-25C], 0
00468FEB   .  C685 A5FDFFFF>mov     byte ptr [ebp-25B], 0
00468FF2   .  C685 A6FDFFFF>mov     byte ptr [ebp-25A], 0
00468FF9   .  C685 A7FDFFFF>mov     byte ptr [ebp-259], 0
00469000   .  8DBD A8FDFFFF lea     edi, dword ptr [ebp-258]

PEiD标志
[SoftDog  V3.1 -> SafeNet Technology  * Sign.By.xiaomajia * 20100315]
signature = 60 55 8B EC 81 EC ?? ?? ?? ?? 53 56 57 C6 85 F4 FE FF FF 00 C6 85 F5 FE FF FF 00 C6 85 F6 FE FF FF 00 C6 85 F7 FE FF FF 00 8D BD F8 FE FF FF 33 C0 B9 3F 00 00 00 F3 AB C6 85 A4 FD FF FF 00 C6 85 A5 FD FF FF 00 C6 85 A6 FD FF FF 00 C6 85 A7 FD FF FF 00 8D BD A8 FD FF FF 33 C0 B9 3F 00 00 00 F3 AB
ep_only = true


第一层壳子,esp之

0046924D   >-/FF25 08A14600         jmp     dword ptr [46A108]               ;  05MAC.00455D3F

单步走一回,来到这里

00455D3F    55                      push    ebp
00455D40    8BEC                    mov     ebp, esp
00455D42    81EC EC020000           sub     esp, 2EC
00455D48    53                      push    ebx
00455D49    56                      push    esi
00455D4A    57                      push    edi
00455D4B    56                      push    esi
00455D4C    57                      push    edi
00455D4D    52                      push    edx
00455D4E    51                      push    ecx
00455D4F    53                      push    ebx
00455D50    50                      push    eax
00455D51    833D 402B4600 00        cmp     dword ptr [462B40], 0
00455D58    0F85 8B150000           jnz     004572E9
00455D5E    C685 C0FEFFFF 49        mov     byte ptr [ebp-140], 49
00455D65    C685 C1FEFFFF 73        mov     byte ptr [ebp-13F], 73
00455D6C    C685 C2FEFFFF 44        mov     byte ptr [ebp-13E], 44
00455D73    C685 CAFEFFFF 50        mov     byte ptr [ebp-136], 50
00455D7A    C685 CBFEFFFF 72        mov     byte ptr [ebp-135], 72
00455D81    C685 CCFEFFFF 65        mov     byte ptr [ebp-134], 65
00455D88    C685 CDFEFFFF 73        mov     byte ptr [ebp-133], 73
00455D8F    C685 CEFEFFFF 65        mov     byte ptr [ebp-132], 65
00455D96    A1 582B4600             mov     eax, dword ptr [462B58]
00455D9B    8985 D4FEFFFF           mov     dword ptr [ebp-12C], eax
00455DA1    A1 682B4600             mov     eax, dword ptr [462B68]
00455DA6    8985 A4FEFFFF           mov     dword ptr [ebp-15C], eax
00455DAC    C785 80FEFFFF 00000000  mov     dword ptr [ebp-180], 0


如果有狗的话,可以插上加密狗,直接esp之,没有的话,需要patch一下,今天不讲,日后在说!:)


我有狗,再esp之,走一步,就是OEP了,到了OEP之后,可以发现,输入表调用被处理了,  他修改了
jmp dword ptr [xxxxxxxx]   
call dword ptr [xxxxxxxx]   这两种的调用

变成了

nop
jmp xxxxxxxx

nop
call xxxxxxxx

这个样子,我不会在壳解码的时候patch,所以只能写脚本,由于刚刚分析,而且最近一直忙着找工作,所以没有时间写脚本了,我讲一个大概的思路,有条件有兴趣的同学可以自己去写这个脚本。


随便找一个调用的地方, 先找jmp api的地方,我们跟入,慢慢的走啊走啊走,走到如下位置的时候,就出现了API地址了


004553DA    BB E8030000             mov     ebx, 3E8
004553DF    2BD2                    sub     edx, edx
004553E1    F7F3                    div     ebx
004553E3    3BC8                    cmp     ecx, eax
004553E5    76 13                   jbe     short 004553FA
004553E7    8B45 DC                 mov     eax, dword ptr [ebp-24]
004553EA    8945 04                 mov     dword ptr [ebp+4], eax
004553ED    5F                      pop     edi
004553EE    5E                      pop     esi
004553EF    5A                      pop     edx
004553F0    59                      pop     ecx
004553F1    5B                      pop     ebx
004553F2    58                      pop     eax
004553F3    C9                      leave
004553F4    C3                      retn                              //到这里的时候, dword ptr [esp ]就是要跳转到的api地址, esp+4是返回调用的地址


二进制搜索特征码
BB E8 03 00 00 2B D2 F7 F3 3B C8 76 13 8B 45 DC 89 45 04 5F 5E 5A 59 5B 58 C9 C3

这个数据是固定的,根据我研究发现 call 和  jmp 调用都是要到这里的,所以修复的思路也就出来了。   我们先定义代码段的 开始和结束 地址,然后 搜索特征码,比如 jmp 这种的可以搜索  90 EB ?? ?? ?? 00  call的可以搜索 90 e8 ?? ?? ?? 00 ,这个样子,具体问题具体分析,搜索到特征码后,修改eip到jmp或者call的地方,在 retn 那里下断点,run,然后根据esp指向的api数据对搜索到的地方进行修改,脚本跑完后,再用uif工具修复一下,然后dump+fix iat 就 O 啦, 重定位表没加密,dll脱壳后改一下基址为OD里看到的就OK了。



好了,教程到此结束,谢谢收看!


ps:其实他原来的输入表根本没擦除,所以,如果把代码修复后,直接dump,然后改一下输入表段,就直接能用了,嘿嘿!点到为止,下面的不讲不讲~~~

免费评分

参与人数 1威望 +1 收起 理由
CHHSun + 1 感谢发布原创作品,[吾爱破解]因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dxshen 发表于 2010-3-19 17:58
看不懂,不过还是顶一下。
秋风夜雪 发表于 2010-3-21 14:48
半瓶水 发表于 2010-3-21 21:15
fywy 发表于 2010-3-22 09:28
不明白!!!!
zjj 发表于 2010-4-30 17:58
保留很多呵!
zjh1968 发表于 2010-4-30 18:03
看不懂,慢慢学
shzlk999 发表于 2010-5-20 15:30
感觉教的很笼统……
babyinsun 发表于 2010-7-9 15:52
笼统了些. 无法真正用于实战.
ymcoming 发表于 2010-7-9 22:05
虽然不能实战,因为我们也没狗呀,学习一下思路还是可以的,感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表