吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1123|回复: 0
收起左侧

[其他] 脱壳学习 - 从ESP定律简述脱壳

  [复制链接]
照片依旧 发表于 2025-7-16 10:19
本帖最后由 照片依旧 于 2025-7-16 09:43 编辑

ESP定律简述

   所谓ESP定律,其通过判断ESP中地址的变化,来判断壳解密函数是否执行到位,也就是栈平衡。
   程序被加密后,必定会有解密的过程中。解密过程中,壳程序需要进行大量的运算,会“污染”寄存器状态,由于程序的代码执行是线性的,不存在巨变跳跃,所以需要一个地址来保存在解密之前代码的执行状态,也就是寄存器的状态,以便可以正确执行程序。
   按照上述所论,寄存器中的值,也就是代码的执行情况需要先保存,再取出恢复。
   这些寄存器的值是保存在哪里呢,它保存在堆栈中。但是只保存,不能保证程序可以有效地取出来,所以需要一张“地图”来导航,而ESP就是这张“地图”,里面存放的指向所保存数据的堆栈的栈顶地址。

   在执行保存寄存器状态时,会使用pushad和pushfd命令,将寄存器中的值压入栈中,给程序执行拍了一张快照,这张快报需要一个地方来保存,这个保存的地方就是ESP寄存器了。保存完毕之后,就可以继续执行解密函数,寄存器可以供程序随意使用。执行完解密函数后,需要回到之前的状态。系统会拿出来地图,将之前保存在栈中的寄存器的值都取出来,ESP寄存器中的地址也就是我们的地图完成了使命,会被之前的值覆盖。所以通过ESP可以很快了解到程序是否被解密完毕。

   解密出原始程序后,壳程序最终是需要执行到原始程序中去如果壳程序带“锁”,需要“钥匙”解密后再跳转到原始程序入口的另说),这样再使用单步跟踪,便找到真正的
OEP,程序的入口处。

   要记住,壳的作用是用来避免别人可以轻易找到源代码,轻易破解程序,但是壳不能影响原始代码



程序简单概述


   加壳程序在未运行状态情况下,其源代码被壳程序加密,一般是无法使用IDA等静态工具直接修改来使用,ida也可能无法正常识别其中的头文件和函数。

   加壳程序要正常运行,壳程序不能影响原始程序,也就是原始程序要能够在系统中正常运行,且原始程序功能不发生改变,功能不发生改变。在功能不改变的情况下,原始程序代码也应该也是没有改变的。
   既然程序是可以正常运行,且功能没有改变,这就表示运行状态的加壳程序,在运行过程中会将原始程式从加密状态中解密出来,原始程序会在内存中出现。具体为什么在内存中,此处就不详细概述。
   现在情况,我们知道了原始程序的代码会在内存中被解密出来正常运行,所以我们就是要从内存中入手,将原始程序从内存中复制出来。


脱壳方法概述

   脱壳方法按照我的理解,可以统分为两类。第一类是从原始程序运行前切入,也就是我们在论坛中常看到的ESP定律、内存镜像定律、单步跟踪等方法;第二种是从原始程序运行后切入,就是从堆栈入手,直接找到第一次的出现 程序名加地址,反汇编向上翻找
OEP入口。也可能还有其他的方法。
   所有的脱壳方法,都是通过各种手段尽快到达程序OEP入口处之前的路径,但是,到达OEP之前,还是需要使用单步跟踪方法进行程序分析。
   最重要的一个内容是要能够准确识别程序OEP。各种方法都是减少在脱壳中的分析时间,不能识别程序的OEP,脱壳也只能是猴子捞月了。


程序脱壳流程分析——从ESP入手

   上图为加壳程序运行的一个简单流程图,可能存在理解错误,欢迎大佬指正。

   上文简单分析了ESP定律。
   此处附一个流程图,明晰一下ESP定律。

流程图

流程图

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
Wulimideruxia + 1 我很赞同!
E式丶男孩 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-1-30 16:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表