• 手脱ASProtect v1.23 RC1(有Stolen Code)之以壳解壳


    1.载入PEID

    ASProtect v1.23 RC1
    

    2.载入OD,不勾选内存访问异常,其他异常全部勾选

    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.最后一次异常法运行到最后一次,应该是第26次,第27次跑飞

    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                                     ; //运行到最近的retn
    00C33A2A    5F              pop edi
     

    4.先记录假的OEP,运行到最近的retn处(不能使用F4,用F2,SHIFT+F9,F2)后打开内存窗口在00401000处下断然后shift+F9运行一次来到假的OEP

    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
     

    5.重新载入程序,运行步骤1-3,让程序落在最近的retn处,此时查看堆栈窗口,在命令行下硬件断点,地址填堆栈窗口第四行(程序名下的第二行)的地址或者是值都可以,上一个教程是使用的值,这个教程使用下地址,下硬件断点”hr 0012ff68”,然后shift+F9运行一次

    0012FF5C   00C45340
    0012FF60   00400000  SoWorker.00400000
    0012FF64   E3DE7228
    0012FF68   0012FFA4
    0012FF6C   00C20000
     

    6.落脚点在这个位置,然后删除硬件断点单步跟两步

    00C454BB   /EB 44           jmp short 00C45501                       ; //落脚点
    00C454BD   |EB 01           jmp short 00C454C0
    00C454BF   |9A 51579CFC BF0>call far 00BF:FC9C5751
    00C454C6   |0000            add byte ptr ds:[eax],al
    00C454C8   |00B9 00000000   add byte ptr ds:[ecx],bh
    00C454CE   |F3:AA           rep stos byte ptr es:[edi]
    00C454D0   |9D              popfd
    00C454D1   |5F              pop edi
    00C454D2   |59              pop ecx
     

    7.单步两步之后程序应该是运行到了注释的地方,按照ximo大神视频中的讲解,这里应该是最佳以壳脱壳的位置。

    00C46519    03C3            add eax,ebx
    00C4651B    BB A2000000     mov ebx,0A2                              ; //以壳脱壳最佳位置
    00C46520    0BDB            or ebx,ebx
    00C46522    75 07           jnz short 00C4652B
    00C46524    894424 1C       mov dword ptr ss:[esp+1C],eax
    00C46528    61              popad

    8.到了这里之后,我们就可以使用loadPE先完整转存下来,然后查看程序现在运行到位置的地址,是00C4651B,我们使用loadPE部分转存,区段就选择包含了这个地址的区段。也就是00C40000这个区段,把这个区段给转存下来先,这里需要注意的是不同的PC或者是系统可能显示的地址是不同的,所以不要太过于死板。一定要按照视频教程走,其实你仔细看会发现我的教程里的地址跟ximo大神视频教程里的地址是不一样的。不过这并不影响。

    9.完整转存和区域转存都执行完毕之后我们使用loadPE载入完整转存的文件,也就是点[PE编辑器]按钮,选中完整转存的那个文件;然后点击[区段]按钮,在最后一个区段右键—从磁盘载入—选中我们不分转存的那个区段。载入后我们右键选中我们载入的这个区段,然后点[编辑区段],名称我们可以随意填,虚拟地址选项输入添加区段的起始地址-基质,也就是00C40000-00400000=00840000。填完之后点确定然后保存

    10.执行完上面的步骤之后我们使用需要给添加好区段的程序重建PE,使用loadPE即可。这里要说明一下,重建选项只勾选[使PE有效]这一个选项即可,其他选项都不勾选。

    11.重建PE完成后我们就可以使用ImportREC进行脱壳了。脱壳地址就填假的OEP地址-基质也就是F27CF,然后进行修复,修复的时候还是使用等级1+插件进行修复。修复完毕之后先不要转存,我们需要把ImportREC上OEP地址改为最佳脱壳位置OEP-基质也就是0084651B后再进行转存。至此我们的以壳脱壳算是搞完了

    12.运行查壳

    运行OK,查壳:Unknown
    
    需要说明的是我个人认为用这种方法壳应该是没有脱掉的。不过这样操作之后我们就可以使用资源编辑器对资源进行编辑修改,这样也就达到了我们的破解目的。所以壳是不是真的脱掉了我们也就不要太在意了。毕竟我们学习脱壳只是为了破解嘛。
    
  • 相关阅读:
    TVB西游记-观音的眼泪化作金河送唐僧回长安
    天下没有免费的午餐是什么意思
    什么样的经历、体验或者行为等能彻底的改变一个人
    看人先看什么
    python字符串中查找指定子字符串
    字符串的分隔及连接
    流媒体服务器音视频直播平台的开发为什么需要CDN?
    微信公众号小程序如何做流媒体视频直播?
    搭建专属于自己的视频流媒体直播/点播平台都需要注意哪些事项?
    音视频流媒体服务器的虚拟直播推流失败断流无法播放如何解决?
  • 原文地址:https://www.cnblogs.com/JianXu/p/5158362.html
Copyright © 2020-2023  润新知