zoukankan      html  css  js  c++  java
  • 手脱Upack 2.x

    1.PEID查壳

    Upack 2.x - 3.x Heuristic Mode -> Dwing
    

    2.载入OD,一上来就是一个大跳转,先F8跟一会

    00401030 >- E9 56D40300     jmp 跑跑排行.0043E48B                 ; //程序入口点
    00401035    42              inc edx                           ; 跑跑排行.<ModuleEntryPoint>
    00401036    79 44           jns short 跑跑排行.0040107C
    00401038    77 69           ja short 跑跑排行.004010A3
    0040103A    6E              outs dx,byte ptr es:[edi]
    0040103B    67:40           inc eax                           ; kernel32.BaseThreadInitThunk
    0040103D    0000            add byte ptr ds:[eax],al
     

    3.来到这里,我们看到一个push,可以使用ESP定律,下硬件访问断点,然后shift+F9运行一下

    0043E49B    F3:AB           rep stos dword ptr es:[edi]
    0043E49D    AD              lods dword ptr ds:[esi]
    0043E49E    50              push eax                          
    0043E49F    97              xchg eax,edi                      ; //ESP定律
    0043E4A0    51              push ecx
    0043E4A1    58              pop eax                           
    0043E4A2    8D5485 5C       lea edx,dword ptr ss:[ebp+eax*4+0>
     

    4.ESP落脚点,这里就是落脚点了,别忘了清除硬件断点,然后继续F8,记住基本原则,向上跳转的下一行F4

    0043E60E   /E3 1B           jecxz short 跑跑排行.0043E62B         ; //ESP落脚点
    0043E610   |8A07            mov al,byte ptr ds:[edi]
    0043E612   |47              inc edi                           
    0043E613   |04 18           add al,0x18
    0043E615   |3C 02           cmp al,0x2
    0043E617  ^|73 F7           jnb short 跑跑排行.0043E610           ; //向上跳转的下一行F4
    0043E619   |8B07            mov eax,dword ptr ds:[edi]
    0043E61B   |3C 01           cmp al,0x1
     

    5.经常脱壳的朋友应该发现了,这里应该就是指向OEP的关键跳转了(因为第二列中间有个横杠),但是你会发现F8跳不过去,跳转没有实现,因为跳转的上一行”or eax,eax”这句话不解释了,需要一定的汇编基础,http://www.52pojie.cn/thread-420306-1-1.html可以在这个界面对照着查一下,也许你会懂,不懂我也没办法,然后我们需要做的是在这个跳转这行右键—断点—条件—输入”eax==0”—F9—F8,这样我们就实现了他的跳转

    0043E631    46              inc esi                           
    0043E632    AD              lods dword ptr ds:[esi]
    0043E633    09C0            or eax,eax                        
    0043E635 >- 0F84 E3BDFCFF   je 跑跑排行.0040A41E                  ; //指向OEP的跳转
    0043E63B    56              push esi                          
    0043E63C    97              xchg eax,edi                      
    0043E63D    FF53 FC         call dword ptr ds:[ebx-0x4] 

    6.来到OEP,可以脱壳了

    0040A41E    55              push ebp                          ; //来到OEP
    0040A41F    8BEC            mov ebp,esp
    0040A421    6A FF           push -0x1
    0040A423    68 C8CB4000     push 跑跑排行.0040CBC8
    0040A428    68 A4A54000     push 跑跑排行.0040A5A4
    0040A42D    64:A1 00000000  mov eax,dword ptr fs:[0]
    0040A433    50              push eax
    0040A434    64:8925 0000000>mov dword ptr fs:[0],esp
    0040A43B    83EC 68         sub esp,0x68
     

    7.运行,查壳

    运行OK,查壳:Microsoft Visual C++ v6.0
    
  • 相关阅读:
    PHP学习笔记:APACHE配置虚拟目录、一个站点使用多域名配置方式
    转载:分页原理+分页代码+分页类制作
    PHP学习笔记:数据库学习心得
    PHP学习笔记:用mysqli连接数据库
    PHP学习笔记:MySQL数据库的操纵
    PHP学习笔记:利用时间和mt_rand函数获取随机名字
    PHP学习笔记:等比例缩放图片
    前端学习(一) html介绍和head标签
    Python 协程
    Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet
  • 原文地址:https://www.cnblogs.com/JianXu/p/5158382.html
Copyright © 2011-2022 走看看