千家信息网

ESP定律原理是什么

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,ESP定律原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。0x00 前言疫情期间闲着也是闲着,在逆向某软件时深入了解了下ESP定
千家信息网最后更新 2024年09月21日ESP定律原理是什么

ESP定律原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

0x00 前言

疫情期间闲着也是闲着,在逆向某软件时深入了解了下ESP定律,然后就想写个文章记录并分享下。

ESP定律又称堆栈平衡定律,是应用频率最高的脱壳方法之一 ,不论是新手还是老手都经常用到。据我所知,ESP定律是一位外国大牛发现的,但目前已无从考证(未找到相关资料)。

0x01 前置知识


栈(stack)是内存中分配的一段空间。 向一个栈插入新元素又称作入(push)放到栈顶元素的上面,使之成为新的栈顶元素; 从一个栈删除元素又称作出栈(pop),它把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

call

相当于高级语言中的函数调用。 当执行call指令时,进行两步操作: 将下一条的指令的地址压入栈中,再跳转到该地址处。 相当于:

push ip jmp near ptr 地址

ret && retf

与call指令相对应,将当前的ESP寄存器中指向的地址出栈,然后跳转到这个地址。 相当于:
pop ip#retpop IPpop CS#retf

0x02 操作示例

这是我写的一个带壳的32位小程序,用来当做esp定律应用的一个示例。这是一个比较机械的方法,但可以对esp定律有一个感性的认识。

首先用Exeinfo Pe查壳,发现是nspack壳。

接下来用od载入程序,单步步入后,如箭头所示发现ESP寄存器变红。

此时单击右键选中该寄存器进行数据窗口跟随。然后选中数据窗口任意字符下硬件断点(byte,word,dword均可)。

f9运行后,f8连续单步步过找到OEP( 程序的入口点 )。选中该地址单击右键选中用OllyDump脱壳调试进程,然后进行脱壳(如果发现程序不能打开,可以试试勾选重建输入表)。

接着用Exeinfo Pe查壳,壳已经被去掉了。

0x03 原理详解

首先,壳实质上是一个子程序,它在程序运行时首先取得控制权并对程序进行压缩。 同时隐藏程序真正的OEP。大多数病毒就是基于此原理,从而防止被杀毒软件扫描。

壳的类型:

• 解压->运行• 解压->运行->解压.->运行• 解压 decoder|encoded code->decode ->exc• Run the virtual machine

而脱壳的目的就是找到真正的OEP(入口点)。

而我们所讲到的ESP定律的本质是堆栈平衡,具体如下:

让我们看下加了壳的这个小程序的入口的各个寄存器的情况

EAX 00000000ECX 004E820D offset r1.EDX 004E820D offset r1.EBX 0036C000ESP 0072FF74EBP 0072FF80ESI 004E820D offset r1.EDI 004E820D offset r1.EIP 004E820D r1.

然后是到OEP时各寄存器的情况

EAX 0072FFCCECX 004E820D offset r1.EDX 004E820D offset r1.EBX 0036A000ESP 0072FF74EBP 0072FF80ESI 004E820D offset r1.EDI 004E820D offset r1.EIP 00401500 r1.00401500

我们发现只有EIP和EAX寄存器的数值发生了变化,而EAX保存的是OEP的地址,这是什么原因呢?

由于在程序自解密或者自解压过程中, 多数壳会先将当前寄存器状态压栈, 如使用pushad, 而在解压结束后, 会将之前的寄存器值出栈, 如使用popad. 因此在寄存器出栈时, 往往程序代码被恢复, 此时硬件断点触发(这就是我们要下硬件断点的原因),然后在程序当前位置, 只需要一些单步操作, 就会到达正确的OEP位置.

0x04 适用范围

我自己总结了一个比较小白的方法,那就是载入程序后只有esp寄存器内容发生变化,那么这个程序多半可以用ESP定律(如有错误多谢指正)。

几乎全部的压缩壳, 一些早期的加密壳 (这是在网上收集到的资料总结的,经过我自己的实践,基本准确)。

看完上述内容,你们掌握ESP定律原理是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

程序 定律 寄存器 元素 地址 方法 运行 原理 就是 脱壳 入口 内容 原因 指令 断点 硬件 这是 位置 又称 只有 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 绍兴信息网络技术口碑推荐 服务器迁移ip设置 c语言复制远程服务器文件 军队网络安全十严禁图片 房地产开发公司网络技术部 湖州看着互联网科技有限公司 疫情期间科技互联网公司贡献 list能封装几组数据库 注解怎样返回多张表数据库 为什么王者服务器会崩溃 天龙八部海外服务器 三大网络技术 网络安全专业培养方案分析 广州定制软件开发服务费 甲骨文软件开发是什么公司 测试软件开发各阶段的作用 出现网络安全错误论文 新华网 网络安全法 网络安全隐患整改的请示 电竞比赛软件开发 阿里服务器申请微信测试号 企业网络安全访问架构 怎么用数据库跳转到特定网页 跨云管理云服务器在哪里 工信局国家网络安全宣传周活动 讯致网络技术有限公司 数据库转移表到另一个模式 腾讯云服务器数据库密码找回 软件开发多长时间学好 怎么把数据库写的表导出来的
0