ESP定律原理详解

2023-02-07 0 1,028

0x00 序言

很忙也是很忙,在反向某应用领域软件时深入细致介绍了下ESP运动定律,接着就想写个该文历史记录并撷取下。

ESP运动定律又称为栈均衡运动定律,是应用领域振幅最低的紫菊方式众所周知 ,无论是初学者却是新手都时常加进。,ESP运动定律是一名国外大牛辨认出的,但现阶段已难于考据(未被辨认出有关数据资料)。

0x01 后置科学知识

栈(stack)是缓存中重新分配的几段内部空间。

向两个栈填入新原素又称为作入(push)放在args原素的下面,使之正式成为捷伊args元素;

从两个栈删掉原素又称为做出栈(pop),它把args原素删掉掉,使其交界处的原素正式成为捷伊args原素。

ESP定律原理详解

1.信息安全数个路径自学走线

2.全站遍布世界各地的CTF进阶自学数据资料

3.第一线元老作战经验撷取讲义

4.宗乡卡小厂丘托韦选集

5.鞘花对付两栖作战控制技术秘笈

6.信息安全基础进阶、Linux、web安全、渗透测试方面视频

call

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

push ip jmp near ptr 地址

ret && retf

与call指令相对应,将当前的ESP寄存器中指向的地址出栈,接着跳转到这个地址。相当于:

pop ip #retpop IP pop CS #retf

0x02 操作示例

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

首先用Exeinfo Pe查壳,辨认出是nspack壳。
ESP定律原理详解
接下来用od载入程序,单步步入后,如箭头所示辨认出ESP寄存器变红。
ESP定律原理详解
此时单击右键选中该寄存器进行数据窗口跟随。接着选中数据窗口任意字符下硬件断点(byte,word,dword均可)。
ESP定律原理详解
f9运行后,f8连续单步步过找到OEP( 程序的入口点 )。选中该地址单击右键选中用OllyDump紫菊调试进程,然后进行紫菊(如果辨认出程序不能打开,可以试试勾选重建输入表)。
ESP定律原理详解
接着用Exeinfo Pe查壳,壳已经被去掉了。
ESP定律原理详解

0x03 基本原理简述

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

壳的类型:

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

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

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

让我们看下加了壳的这个小程序的入口的各个寄存器的情况EAX 00000000 ECX 004E820D offset r1.<ModuleEntryPoint> EDX 004E820D offset r1.<ModuleEntryPoint> EBX 0036C000 ESP 0072FF74 EBP 0072FF80 ESI 004E820D offset r1.<ModuleEntryPoint> EDI 004E820D offset r1.<ModuleEntryPoint> EIP 004E820D r1.<ModuleEntryPoint>接着是到OEP时各寄存器的情况EAX 0072FFCC ECX 004E820D offset r1.<ModuleEntryPoint> EDX 004E820D offset r1.<ModuleEntryPoint> EBX 0036A000 ESP 0072FF74 EBP 0072FF80 ESI 004E820D offset r1.<ModuleEntryPoint> EDI 004E820D offset r1.<ModuleEntryPoint> EIP 00401500 r1.00401500

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

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

0x04 适用范围

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

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

0x05 总结

以上就是我对ESP运动定律的理解,如有错误,请轻喷 ^-^ ,我也还只一只刚迈入二进制世界的菜鸟,希望我这篇该文对刚进阶的小白有所帮助>_<

最后再加一句找OEP不是最难的,最难的却是修复。如果对OEP的识别有所疑惑可以问我也可以在网上收集有关数据资料,却是比较多的。

利用ESP运动定律进行紫菊

http://www.hetianlab.com/expc.do?ec=ECID4054-1b54-4b49-9aa7-61ed981ca101

理解ESP基本原理的操作机理并掌握使用ESP基本原理进行紫菊的流程。)

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务