吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6154|回复: 2
收起左侧

[分享] 手脱ASProtect v1.23 RC1(有Stolen Code)

[复制链接]
Jian丶ylt 发表于 2015-11-21 20:39
本帖最后由 Jian丶ylt 于 2015-11-21 20:43 编辑

声明:

       1.只为纪录自己成长历程,高手勿喷
       2.您的热心是新手持续发帖的动力

1.载入PEID

    ASProtect v1.23 RC1
   
常见ASprotect版本壳:

    ASProtect 1.23 RC4   按shift+f9键26次后来到典型异常
    ASProtect 1.31 04.27 按shift+f9键36次后来到典型异常
    ASProtect 1.31 05.18 按shift+f9键40次后来到典型异常
    ASProtect 1.31 06.14 按shift+f9键38次后来到典型异常

2.载入OD,不勾选内存访问异常,其他异常全部勾选,然后使用最后一次异常法,应该是第26次,第27次就会跑飞

[Asm] 纯文本查看 复制代码
00401000 >  68 01C06D00     push SoWorker.006DC001                   ; //入口点
00401005    E8 01000000     call SoWorker.0040100B
0040100A    C3              retn
0040100B    C3              retn
0040100C    74 23           je short SoWorker.00401031
0040100E    C039 74         sar byte ptr ds:[ecx],74
00401011    0FD19CA4 0599E0>psrlw mm3,qword ptr ss:[esp+CFE09905]
00401019    AA              stos byte ptr es:[edi]


3.落脚点在这个位置,还是像之前脱ASProtect一样,往下拉找到最近的一个retn,然后让程序运行过去

[Asm] 纯文本查看 复制代码
00C339EC    3100            xor dword ptr ds:[eax],eax               ; //落脚点
00C339EE    64:8F05 0000000>pop dword ptr fs:[0]
00C339F5    58              pop eax
00C339F6    833D B07EC300 0>cmp dword ptr ds:[C37EB0],0
00C339FD    74 14           je short 00C33A13
00C339FF    6A 0C           push 0C
00C33A01    B9 B07EC300     mov ecx,0C37EB0
00C33A06    8D45 F8         lea eax,dword ptr ss:[ebp-8]
00C33A09    BA 04000000     mov edx,4
00C33A0E    E8 2DD1FFFF     call 00C30B40
00C33A13    FF75 FC         push dword ptr ss:[ebp-4]
00C33A16    FF75 F8         push dword ptr ss:[ebp-8]
00C33A19    8B45 F4         mov eax,dword ptr ss:[ebp-C]
00C33A1C    8338 00         cmp dword ptr ds:[eax],0
00C33A1F    74 02           je short 00C33A23
00C33A21    FF30            push dword ptr ds:[eax]
00C33A23    FF75 F0         push dword ptr ss:[ebp-10]
00C33A26    FF75 EC         push dword ptr ss:[ebp-14]
00C33A29    C3              retn                                     ; //最近的tetn
00C33A2A    5F              pop edi
00C33A2B    5E              pop esi
00C33A2C    5B              pop ebx


4.程序运行到最近的retn后,我们就可以开始寻找丢失的代码了。不过这里可以先给大家看下假的OEP,打开内存窗口,在401000处下段然后shift+F9运行一次就来到假的OEP,落点处就是假的OEP,代码往上拉可以看到很多空的位置,这里就是待会找回丢失的代码后需要补充的位置了。

[Asm] 纯文本查看 复制代码
004F27A7  ^\EB F8           jmp short SoWorker.004F27A1
004F27A9    0000            add byte ptr ds:[eax],al
004F27AB    0000            add byte ptr ds:[eax],al
004F27AD    0000            add byte ptr ds:[eax],al
004F27AF    0000            add byte ptr ds:[eax],al
004F27B1    0000            add byte ptr ds:[eax],al
004F27B3    0000            add byte ptr ds:[eax],al
004F27B5    0000            add byte ptr ds:[eax],al
004F27B7    0000            add byte ptr ds:[eax],al
004F27B9    0000            add byte ptr ds:[eax],al
004F27BB    0000            add byte ptr ds:[eax],al
004F27BD    0000            add byte ptr ds:[eax],al
004F27BF    0000            add byte ptr ds:[eax],al
004F27C1    0000            add byte ptr ds:[eax],al
004F27C3    0000            add byte ptr ds:[eax],al
004F27C5    0000            add byte ptr ds:[eax],al
004F27C7    0000            add byte ptr ds:[eax],al
004F27C9    0000            add byte ptr ds:[eax],al
004F27CB    0000            add byte ptr ds:[eax],al
004F27CD    0000            add byte ptr ds:[eax],al
004F27CF    FF15 9CC25200   call dword ptr ds:[52C29C]               ; //假的OEP
004F27D5    33D2            xor edx,edx
004F27D7    8AD4            mov dl,ah
004F27D9    8915 34306900   mov dword ptr ds:[693034],edx
004F27DF    8BC8            mov ecx,eax
004F27E1    81E1 FF000000   and ecx,0FF
004F27E7    890D 30306900   mov dword ptr ds:[693030],ecx
004F27ED    C1E1 08         shl ecx,8
004F27F0    03CA            add ecx,edx
004F27F2    890D 2C306900   mov dword ptr ds:[69302C],ecx
004F27F8    C1E8 10         shr eax,10
004F27FB    A3 28306900     mov dword ptr ds:[693028],eax
004F2800    6A 01           push 1
004F2802    E8 933B0000     call SoWorker.004F639A


5.然后重新载入程序,运行完步骤1-3的操作,也就是让程序运行到最近的一个retn处。然后看堆栈窗口第四行(也就是程序名下面第二行)的值"0012ffa4"

[Asm] 纯文本查看 复制代码
0012FF5C   00C45A1C  //第一行
0012FF60   00400000  SoWorker.00400000
0012FF64   E3DE7228
0012FF68   0012FFA4
0012FF6C   00C20000


6.命令行下硬件访问断点"hr 0012ffa4"然后shift+F9运行一次,落脚后先F8单步跟一会。

[Asm] 纯文本查看 复制代码
00C45C07   /26:EB 01        jmp short 00C45C0B                       ; //落脚点
00C45C0A   |C7              ???                                      
00C45C0B   \EB 02           jmp short 00C45C0F
00C45C0D    CD20 83EC372E   vxdjump 2E37EC83
00C45C13    EB 01           jmp short 00C45C16
00C45C15  - E9 8D642479     jmp 79E8C0A7
00C45C1A    64:EB 01        jmp short 00C45C1E


7.一直到程序运行到这里,之前应该是没有call的,下面开始可能就会有call了。ASProtect的call可能会经常跑飞,所以我们遇到call就F7跟进去,没有call还是可以使用F8,当然你也可以一直使用F7,效果是一样的。

[Asm] 纯文本查看 复制代码
00C45C3B    BD 415CC400     mov ebp,0C45C41                          ; //到这里
00C45C40    FF55 03         call dword ptr ss:[ebp+3]             ; //这里就F7跟进
00C45C43    E8 4D5CC400     call 0188B895
00C45C48    9A E969F29A 5DF>call far F35D:9AF269E9
00C45C4F    EB 02           jmp short 00C45C53
00C45C51    CD20 1BE9EB02   vxdjump 2EBE91B
00C45C57    CD20 33E8EB02   vxdjump 2EBE833
00C45C5D    CD20 EB010F8D   vxdcall 8D0F01EB


8.F7跟进后我们继续往下走,寻找丢失的代码,走到下面代码的位置的时候我们可以看到有好几个jmp,并且从第一个jmp后面的代码就比较熟悉了push ebp...其实这就是我们要寻找的丢失的代码了,每两个jmp中间除去问号剩下的就是我们应该要寻找的丢失的代码了。直到两个jmp中间只剩下问号为止,仔细看下下面的代码,总共是5段,我们再分别把5段代码连同二进制代码复制下来

[Asm] 纯文本查看 复制代码
00C45C66    5D              pop ebp
00C45C67    EB 01           jmp short 00C45C6A                 ;//jmp
00C45C69    C7              ???                                      
00C45C6A    55              push ebp                                 ; //第一段
00C45C6B    8BEC            mov ebp,esp                              ; //第一段
00C45C6D    6A FF           push -1                                  ; //第一段
00C45C6F    68 78E35300     push 53E378                              ; //第一段
00C45C74    68 407B4F00     push 4F7B40                              ; //第一段
00C45C79    64:A1 00000000  mov eax,dword ptr fs:[0]                 ; //第一段
00C45C7F    EB 01           jmp short 00C45C82                 ;//jmp
00C45C81    C7              ???                                      
00C45C82    50              push eax                                 ; //第二段
00C45C83    64:8925 0000000>mov dword ptr fs:[0],esp                 ; //第二段
00C45C8A    83EC 58         sub esp,58                               ; //第二段
00C45C8D    EB 01           jmp short 00C45C90                 ;//jmp
00C45C8F    C7              ???                                      
00C45C90    53              push ebx                                 ; //第三段
00C45C91    EB 01           jmp short 00C45C94                 ;//jmp
00C45C93    C7              ???                                      
00C45C94    56              push esi                                 ; //第四段
00C45C95    EB 01           jmp short 00C45C98                 ;//jmp
00C45C97    C7              ???                                      
00C45C98    57              push edi                                 ; //第五段
00C45C99    8965 E8         mov dword ptr ss:[ebp-18],esp            ; //第五段
00C45C9C    26:EB 01        jmp short 00C45CA0                 ;//jmp
00C45C9F    C7              ???                                      
00C45CA0    EB 02           jmp short 00C45CA4                 ;//jmp
00C45CA2    CD20 68CF274F   vxdjump 4F27CF68



第一段:

[Asm] 纯文本查看 复制代码
00C45C6A    55              push ebp                                 ; //第一段
00C45C6B    8BEC            mov ebp,esp                              ; //第一段
00C45C6D    6A FF           push -1                                  ; //第一段
00C45C6F    68 78E35300     push 53E378                              ; //第一段
00C45C74    68 407B4F00     push 4F7B40                              ; //第一段
00C45C79    64:A1 00000000  mov eax,dword ptr fs:[0]                 ; //第一段

55 8B EC 6A FF 68 78 E3 53 00 68 40 7B 4F 00 64 A1 00 00 00 00


第二段

[Asm] 纯文本查看 复制代码
00C45C82    50              push eax                                 ; //第二段
00C45C83    64:8925 0000000>mov dword ptr fs:[0],esp                 ; //第二段
00C45C8A    83EC 58         sub esp,58                               ; //第二段


50 64 89 25 00 00 00 00 83 EC 58


第三段

[Asm] 纯文本查看 复制代码
00C45C90    53              push ebx                                 ; //第三段

53


第四段

[Asm] 纯文本查看 复制代码
00C45C94    56              push esi                                 ; //第四段

56


第五段

[Asm] 纯文本查看 复制代码
00C45C98    57              push edi                                 ; //第五段
00C45C99    8965 E8         mov dword ptr ss:[ebp-18],esp            ; //第五段

57 89 65 E8


9.OK,这样被偷取的代码我们就找回来了,然后你可以选择继续F8走到假的OEP或者是重新载入一下来到假的OEP位置。这个都无所谓的。我们先把程序运行到假的OEP位置,然后把五段被偷取的二进制代码整合一下,然后假的OEP往上拉,把空的代码行选中,二进制把被偷取代码粘贴进去

[Asm] 纯文本查看 复制代码
二进制代码汇总:55 8B EC 6A FF 68 78 E3 53 00 68 40 7B 4F 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8

004F27A7  ^\EB F8           jmp short SoWorker.004F27A1
004F27A9    0000            add byte ptr ds:[eax],al                 ; //从这里开始
004F27AB    0000            add byte ptr ds:[eax],al
004F27AD    0000            add byte ptr ds:[eax],al
004F27AF    0000            add byte ptr ds:[eax],al
004F27B1    0000            add byte ptr ds:[eax],al
004F27B3    0000            add byte ptr ds:[eax],al
004F27B5    0000            add byte ptr ds:[eax],al
004F27B7    0000            add byte ptr ds:[eax],al
004F27B9    0000            add byte ptr ds:[eax],al
004F27BB    0000            add byte ptr ds:[eax],al
004F27BD    0000            add byte ptr ds:[eax],al
004F27BF    0000            add byte ptr ds:[eax],al
004F27C1    0000            add byte ptr ds:[eax],al
004F27C3    0000            add byte ptr ds:[eax],al
004F27C5    0000            add byte ptr ds:[eax],al
004F27C7    0000            add byte ptr ds:[eax],al
004F27C9    0000            add byte ptr ds:[eax],al
004F27CB    0000            add byte ptr ds:[eax],al
004F27CD    0000            add byte ptr ds:[eax],al                 ; //到这里结束
004F27CF    FF15 9CC25200   call dword ptr ds:[52C29C]               ; //假的OEP
004F27D5    33D2            xor edx,edx
004F27D7    8AD4            mov dl,ah
004F27D9    8915 34306900   mov dword ptr ds:[693034],edx
004F27DF    8BC8            mov ecx,eax
004F27E1    81E1 FF000000   and ecx,0FF


10.粘贴好的OEP应该是这样子的,我们在粘贴好的代码的第一行,也就是那个push ebp的位置右键--新建EIP

[Asm] 纯文本查看 复制代码
004F27A7  ^\EB F8           jmp short SoWorker.004F27A1
004F27A9    55              push ebp                                 ; //此处新建OEP
004F27AA    8BEC            mov ebp,esp
004F27AC    6A FF           push -1
004F27AE    68 78E35300     push SoWorker.0053E378
004F27B3    68 407B4F00     push SoWorker.004F7B40
004F27B8    64:A1 00000000  mov eax,dword ptr fs:[0]
004F27BE    50              push eax
004F27BF    64:8925 0000000>mov dword ptr fs:[0],esp
004F27C6    83EC 58         sub esp,58
004F27C9    53              push ebx
004F27CA    56              push esi
004F27CB    57              push edi
004F27CC    8965 E8         mov dword ptr ss:[ebp-18],esp
004F27CF    FF15 9CC25200   call dword ptr ds:[52C29C]               ; //假的OEP
004F27D5    33D2            xor edx,edx
004F27D7    8AD4            mov dl,ah


11.至此我们就可以进行脱壳了,记得脱壳后修复的时候使用插件修复。

12.运行查壳

    运行OK,查壳:Microsoft Visual C++ v6.0

附件较大,没法上传,大家可以在论坛里搜索下ximo大神的教程第23课,自行去下载相应样本或者自己找个对应版本的脱壳机练练手









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

520_ai_in@sina. 发表于 2015-11-21 20:57
额 简单的壳载入OD直接往下拉 找到 --jmp F4运行到哪里走一步就到oep了
Luminousky 发表于 2015-11-21 21:07
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 15:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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