zoukankan      html  css  js  c++  java
  • 手脱ACProtect v1.35(无Stolen Code)之二

    首先,想说明的是这个壳在我的PC上是可以用上一个帖子中的方法来到假的OEP的:http://www.52pojie.cn/forum.php?mod=viewthread&tid=433462&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline,可能跟系统版本有关。如果大家使用这个连接中的帖子无法来到假的OEP那么可以参考下下面的方法,对于比较难的壳,我们首先先掌握方法,脱得多了,自然而然也就会了。当然,对于抽取OEP代码的壳,我们首先要知道不同语言写出来的程序的入口点代码特征,大家可以参考:http://www.52pojie.cn/thread-421969-1-1.html

    1.载入PEID

    ACProtect v1.35 -> risco software Inc. & Anticrack Softw
    

    2.载入OD,异常选项不勾选INT3选项,隐藏OD,吾爱官方现在的OD隐藏OD在strongOD里面,还是使用最后一次异常法shift+F9一次,第二次就会跑飞了

    004AC000 >  60              pushad                            ; //入口点
    004AC001    4E              dec esi
    004AC002    D3D6            rcl esi,cl
    004AC004    4E              dec esi
    004AC005    66:D3E8         shr ax,cl
    004AC008    4E              dec esi
    004AC009    8BC3            mov eax,ebx
     

    3.落脚点,落脚后在堆栈闯窗口右键单机SE句柄,然后选择[数据窗口跟随],然后右键选中数据窗口跟随的地方下内存访问断点,然后shift+F9一次

    0012FF24   004BAAF0  SE处理程序     //堆栈窗口SE句柄
    
    004BAAF0  0424448B      //数据窗口跟随
    
    004BAB23    90              nop                               ; //最后一次异常法落脚点
    004BAB24    64:67:8F06 0000 pop dword ptr fs:[0]              
    004BAB2A    83C4 04         add esp,0x4
    004BAB2D    60              pushad
    004BAB2E    E8 00000000     call NetClean.004BAB33
    004BAB33    5E              pop esi                           
    004BAB34    83EE 06         sub esi,0x6
    004BAB37    B9 5B000000     mov ecx,0x5B

    4.落脚点,在落脚点的位置下断点F2,然后shift+F9一次

    004BAAF0    8B4424 04       mov eax,dword ptr ss:[esp+0x4]    ; //落脚点
    004BAAF4    8B4C24 0C       mov ecx,dword ptr ss:[esp+0xC]
    004BAAF8    FF81 B8000000   inc dword ptr ds:[ecx+0xB8]
    004BAAFE    8B00            mov eax,dword ptr ds:[eax]
    004BAB00    2D 03000080     sub eax,0x80000003
    004BAB05    75 12           jnz short NetClean.004BAB19
    004BAB07    90              nop
     

    5.落脚点,在落脚点的位置同样下断点F2然后shift+F9一次

    004BAB4E    8B048E          mov eax,dword ptr ds:[esi+ecx*4]  ; //落脚点
    004BAB51    8B5C8E 04       mov ebx,dword ptr ds:[esi+ecx*4+0>
    004BAB55    03C3            add eax,ebx
    004BAB57    C1C8 0E         ror eax,0xE
    004BAB5A    2BC2            sub eax,edx
    004BAB5C    81EA D41CF55C   sub edx,0x5CF51CD4
     

    6.落脚点,落脚后先清除两个F2断点,一个内存访问断点,然后找到下面最近的retn,F4运行到指定位置。

    004BAB62    89048E          mov dword ptr ds:[esi+ecx*4],eax  ; //落脚点
    004BAB65    49              dec ecx
    004BAB66  ^ EB E1           jmp short NetClean.004BAB49
    004BAB68    61              popad
    004BAB69    61              popad
    004BAB6A    C3              retn                              ; //F4
    004BAB6B    0000            add byte ptr ds:[eax],al
     

    7.到这里后就是脱壳的最佳时机了(如果想要看看假的OEP位置可以按照上一篇的脱壳法到内存界面401000下断点shift+F9运行过去看下).我们在命令行输入”d 12ffc0”,据ximo大神讲,这是ACProtect壳的死穴,记着就好。输入完命令后回车,在数据窗口第一行下硬件断点,然后shift+F9运行一次(我在我的PC上下硬件断点程序会跑飞,我的是win7–32,悲催。还是老老实实用XP吧)

    0012FFC0  00000000      //数据窗口第一行
     

    8.落脚点的位置就是被偷取代码的第一行,一共被偷取了三行代码,使用二进制把它复制出来

    004C9B31    55                push ebp                               ; //被偷取代码1
    004C9B32    8BEC              mov ebp,esp                            ; //被偷取代码2
    004C9B34    6A FF             push -1                                ; //被偷取代码3
    004C9B36    90                nop
    004C9B37    60                pushad
    
    55 8B EC 6A FF  //二进制复制一共5个字节

    9.点击来到内存窗口在401000位置下断点F2然后shift+F9一次来到假的OEP,向上找5个字节(如果向上拉的时候代码乱掉了就右键分析一下代码再向上拉)

    004431F9    68 D8B24400     push NetClean.0044B2D8            ; //假的OEP
    004431FE    68 B4334400     push NetClean.004433B4
    00443203    64:A1 00000000  mov eax,dword ptr fs:[0]
    00443209    50              push eax                          
    0044320A    64:8925 0000000>mov dword ptr fs:[0],esp
    00443211    83EC 68         sub esp,0x68
     

    10.如下,找到5个字节后选中并右键使用二进制粘贴

    004431F4      8C              db 8C                                  ;  //第1个字节
    004431F5   .  C3              retn                                   ;  //第2个字节
    004431F6      49              db 49                                  ;  //第3个字节
    004431F7      2E              db 2E                                  ;  //第4个字节
    004431F8      79              db 79                                  ;  //第5个字节
    004431F9   .  68 D8B24400     push NetClean.0044B2D8                 ;  //假的OEP
    004431FE   .  68 B4334400     push NetClean.004433B4                  SE 处理程序安装
    00443203   .  64:A1 00000000  mov eax,dword ptr fs:[0]
    00443209   .  50              push eax
    0044320A   .  64:8925 0000000>mov dword ptr fs:[0],esp
    00443211   .  83EC 68         sub esp,68
     

    11.在新的OEP位置右键新建EIP,然后可以先进行一下脱壳,当然脱壳后的程序是不能运行的。

    004431F4      55            push ebp                          ;  //此处新建EIP
    004431F5      8BEC          mov ebp,esp
    004431F7      6A FF         push -0x1
    004431F9   .  68 D8B24400   push NetClean.0044B2D8            ;  //假的OEP
    004431FE   .  68 B4334400   push NetClean.004433B4            处理程序安装
    00443203   .  64:A1 0000000>mov eax,dword ptr fs:[0]
    00443209   .  50            push eax                          
    0044320A   .  64:8925 00000>mov dword ptr fs:[0],esp
    00443211   .  83EC 68       sub esp,0x68
     

    12.OD载入已脱壳的程序,先去到原脱壳程序的入口点(可以使用PEID查看一下未脱壳程序的入口点然后在OD中跟随一下),然后把被抽取的三行代码改到入口点的三行代码中,第四行改为一个无条件跳转”jmp 00ff31f4”,跳转到我们新建EIP的那个地址如下图(可能是系统不同,所以改好后显示的代码跟XP下不一样,还是要用XP脱壳才行):

    • 修改前:
    004AC000 > $  60            pushad                            ;  //入口点
    004AC001   .  4E            dec esi
    004AC002   .  D3D6          rcl esi,cl
    004AC004   .  4E            dec esi
    004AC005   .  66:D3E8       shr ax,cl
    004AC008   .  4E            dec esi
    004AC009   .  8BC3          mov eax,ebx

    • 修改后
    004AC000 >    55            push ebp                          ;  //入口点
    004AC001      8BEC          mov ebp,esp
    004AC003      6A FF         push -0x1
    004AC005    - E9 EA71F9FF   jmp NetClean.004431F4           ;//无条件跳转
    004AC00A      C3            retn
    004AC00B   .  48            dec eax   

    13.修改完成后选中修改的几行代码,然后右键–复制到可执行文件–选择,在新出现的窗口再右键–保存文件,保存到一个路径下。然后使用loadPE把保存好的文件的入口点改为和未脱壳程序一样的入口点。就可以正常运行了。

    14.运行查壳

    运行OK,查壳:UnKnow  查壳虽然好像还是有壳的样子,但是其实已经脱掉了。
    
  • 相关阅读:
    OSG-提示“error reading file e:1.jpg file not handled”
    OSG-加载地球文件报0x00000005错误,提示error reading file simple.earth file not handled
    QT-找开工程后,最上方提示the code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.
    我的书《Unity3D动作游戏开发实战》出版了
    java中无符号类型的第三方库jOOU
    Windows批处理备份mysql数据
    使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A
    Java版本,Java版本MongoDB驱动,驱动与MongoDB数据库,Spring之间的兼容性
    Jrebel本地激活方法
    wget下载指定网站目录下的所有内容
  • 原文地址:https://www.cnblogs.com/JianXu/p/5158370.html
Copyright © 2011-2022 走看看