• 手脱PEncrypt 4.0


    1.载入PEID

    PEncrypt 4.0 Gamma / 4.0 Phi -> junkcode [Overlay]
    

    2.载入OD,没什么头绪,忽略所有异常,用最后一次异常法shift+F9运行两次,因为第三次会跑飞,所以运行两次,另外这个壳使用单步太费劲了,一不小心就跑飞了,所以直接使用的最后一次异常法进行脱壳的

    00401000 >  FC              cld                               ; //入口点
    00401001    FC              cld
    00401002    FC              cld
    00401003    90              nop
    00401004  - E9 BDBA0000     jmp PEncrypt.0040CAC6
    00401009  - E3 D5           jecxz short PEncrypt.00400FE0
    0040100B    04 4F           add al,0x4F
    0040100D  - 74 A4           je short PEncrypt.00400FB3
    0040100F    D248 74         ror byte ptr ds:[eax+0x74],cl
     

    3.最后一次异常法的落脚点,落脚后,右键—转到—表达式—输入SE句柄(也叫SE处理程序)”0040CCD7”—回车

    0040CCD0    9D              popfd
    0040CCD1    90              nop
    0040CCD2    4B              dec ebx                           ; //最后一次异常法落脚点
    0040CCD3    6F              outs dx,dword ptr es:[edi]
    0040CCD4    6368 69         arpl word ptr ds:[eax+0x69],bp
    0040CCD7    8B4424 04       mov eax,dword ptr ss:[esp+0x4]    
    0040CCDB    8B00            mov eax,dword ptr ds:[eax]
    0040CCDD    3D 04000080     cmp eax,0x80000004
    
    0012FF88   0040CCD7  SE处理程序

    4.回车后的位置,然后F2,SHIFT+F9,F2,也就是让程序运行到转到的位置上,然后继续F8,F8过程中,记得在向上跳转的下一行F4,也就是让程序运行到向上跳转的下一行,这是脱壳的基本原则,尽量不让程序往回跳

    0040CCD3    6F              outs dx,dword ptr es:[edi]
    0040CCD4    6368 69         arpl word ptr ds:[eax+0x69],bp
    0040CCD7    8B4424 04       mov eax,dword ptr ss:[esp+0x4]    ; //回车的位置
    0040CCDB    8B00            mov eax,dword ptr ds:[eax]
    0040CCDD    3D 04000080     cmp eax,0x80000004
    0040CCE2    74 06           je short PEncrypt.0040CCEA
    0040CCE4    4B              dec ebx
     

    5.找到关键跳,指向OEP的关键跳

    0040CD26    9D              popfd
    0040CD27    61              popad
    0040CD28    BD CC104000     mov ebp,PEncrypt.004010CC
    0040CD2D  - FFE5            jmp ebp                           ; //指向OEP的关键跳
    0040CD2F    0000            add byte ptr ds:[eax],al
    0040CD31    0000            add byte ptr ds:[eax],al
    0040CD33    0000            add byte ptr ds:[eax],al
     

    6.来到OEP,进行脱壳,需要注意的是脱壳后无法正常运行,需要使用loadPE重建PE表才可以正常运行

    004010CC    55              push ebp                          ; PEncrypt.004010CC
    004010CD    8BEC            mov ebp,esp
    004010CF    83EC 44         sub esp,0x44
    004010D2    56              push esi
    004010D3    FF15 E4634000   call dword ptr ds:[<&KERNEL32.Get>; kernel32.GetCommandLineA
    004010D9    8BF0            mov esi,eax
    004010DB    8A00            mov al,byte ptr ds:[eax]
    004010DD    3C 22           cmp al,0x22
    004010DF    75 1B           jnz short PEncrypt.004010FC

    7.运行查壳

    运行OK,查壳:Microsoft Visual C++ v6.0 SPx
    
  • 相关阅读:
    html5 video标签如何禁止视频下载
    Redis源代码-数据结构Adlist双端列表
    HTML5分析实战WebSockets基本介绍
    Chromium on Android: Android在系统Chromium为了实现主消息循环分析
    Android AIDL使用特定的解释
    [LeetCode]Maximum Product Subarray
    OC省字典的数组摘要集
    CocoaChina 第四个测试
    Java在的时候,类定义HashSet初始化方法
    WSHPSRS-匹克选择列表生成器-SRS(R12.2.3)
  • 原文地址:https://www.cnblogs.com/JianXu/p/5158377.html
Copyright © 2020-2023  润新知