zoukankan      html  css  js  c++  java
  • 手脱PECompact v2.xx

    个人认为这个壳对于新手有那么一点点难度,所以用单步和ESP都跑一下,我觉得单步是最最基础的,所以一定要掌握

    一、单步
    1.PEID查壳

    PECompact v2.xx (16 ms)
    

    2.载入OD,除了以下标注的几个位置外,其他的都使用F8

    0040A86D >  B8 74DE4500     mov eax,qqspirit.0045DE74         ; //入口点
    0040A872    50              push eax                          
    0040A873    64:FF35 0000000>push dword ptr fs:[0]
    0040A87A    64:8925 0000000>mov dword ptr fs:[0],esp
    0040A881    33C0            xor eax,eax                       
    0040A883    8908            mov dword ptr ds:[eax],ecx
    0040A885    50              push eax    

    位置1:

    778D711D    6A 00           push 0x0
    778D711F    51              push ecx
    778D7120    E8 2BE5FFFF     call ntdll.ZwContinue             ; //程序会跑飞F7跟进
    778D7125    EB 0B           jmp short ntdll.778D7132
    778D7127    5B              pop ebx                          
    778D7128    59              pop ecx                           
    778D7129    6A 00           push 0x0
     

    位置2:

    778D5650 >  B8 3C000000     mov eax,0x3C                      ; //F7落脚点
    778D5655    BA 0003FE7F     mov edx,0x7FFE0300
    778D565A    FF12            call dword ptr ds:[edx]           ; //程序会跑飞F7跟进
    778D565C    C2 0800         retn 0x8
    778D565F    90              nop
    778D5660 >  B8 3D000000     mov eax,0x3D
    
    778D71B0 >  8BD4            mov edx,esp                       ; //第二个F7落脚点
    778D71B2    0F34            sysenter
    778D71B4 >  C3              retn
    778D71B5    8DA424 00000000 lea esp,dword ptr ss:[esp]
    778D71BC    8D6424 00       lea esp,dword ptr ss:[esp]
    778D71C0 >  8D5424 08       lea edx,dword ptr ss:[esp+0x8]

    3.找到了指向OEP的跳转

    0045DF34    5B              pop ebx                           
    0045DF35    5D              pop ebp                           
    0045DF36  - FFE0            jmp eax                           ; //指向OEP的跳转
    0045DF38    6D              ins dword ptr es:[edi],dx
    0045DF39    A8 40           test al,0x40
    0045DF3B    0000            add byte ptr ds:[eax],al
     

    4.来到OEP,脱壳吧

    0040A86D >  55              push ebp                          ; //来到OEP
    0040A86E    8BEC            mov ebp,esp
    0040A870    6A FF           push -0x1
    0040A872    68 78794200     push qqspirit.00427978
    0040A877    68 F4E14000     push qqspirit.0040E1F4
    0040A87C    64:A1 00000000  mov eax,dword ptr fs:[0]
    0040A882    50              push eax                          
    0040A883    64:8925 0000000>mov dword ptr fs:[0],esp
     

    5.运行查壳

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

    二、ESP定律

    1.载入OD,看到两个push入栈,下一行ESP定律下硬件访问断点然后shift+F9运行一次

    0040A86D >  B8 74DE4500     mov eax,qqspirit.0045DE74         ; //入口点
    0040A872    50              push eax                          
    0040A873    64:FF35 0000000>push dword ptr fs:[0]
    0040A87A    64:8925 0000000>mov dword ptr fs:[0],esp          ; //ESP定律一次
    0040A881    33C0            xor eax,eax                       
    0040A883    8908            mov dword ptr ds:[eax],ecx
     

    2.来到ESP的落脚点,单步F8跟下去就能到OEP了

    0045DEA3    83C4 04         add esp,0x4                       ; //ESP落脚点
    0045DEA6    55              push ebp
    0045DEA7    53              push ebx
    0045DEA8    51              push ecx
    0045DEA9    57              push edi
     

    3.来到关键跳,这就是指向OEP的跳转

    0045DF34    5B              pop ebx                           
    0045DF35    5D              pop ebp                           
    0045DF36  - FFE0            jmp eax                           ; //指向OEP的跳转
    0045DF38    6D              ins dword ptr es:[edi],dx
    0045DF39    A8 40           test al,0x40
     

    4.来到OEP,脱壳、运行、查壳

    0040A86D >  55              push ebp                          ; //OEP
    0040A86E    8BEC            mov ebp,esp
    0040A870    6A FF           push -0x1
    0040A872    68 78794200     push qqspirit.00427978
    0040A877    68 F4E14000     push qqspirit.0040E1F4
    0040A87C    64:A1 00000000  mov eax,dword ptr fs:[0]
    0040A882    50              push eax                          
    0040A883    64:8925 0000000>mov dword ptr fs:[0],esp
    0040A88A    83EC 58         sub esp,0x58
     
  • 相关阅读:
    在Linux下安装配置Oracle11g R2
    使用C#读取dbf行情文件
    终于完成了DailyBuild
    如何用NANT+FxCop 并生成文档规范检测结果?
    Nant中的一个小问题(可能让许多人急掉许多汗哦)
    最近在研究 Daily Build 不知道如何用CC.Net 得到 VSS改动的情况
    利用NAnt取得远程VSS服务器中的文件并且编译
    未曾秋高气爽,亦然爬山去也
    如何使用命令提示符下的FxCop
    在NAnt中加入Vssget 任务
  • 原文地址:https://www.cnblogs.com/JianXu/p/5158385.html
Copyright © 2011-2022 走看看