0x00 序言
很忙也是很忙,在反向某应用领域软件时深入细致介绍了下ESP运动定律,接着就想写个该文历史记录并撷取下。
ESP运动定律又称为栈均衡运动定律,是应用领域振幅最低的紫菊方式众所周知 ,无论是初学者却是新手都时常加进。,ESP运动定律是一名国外大牛辨认出的,但现阶段已难于考据(未被辨认出有关数据资料)。
0x01 后置科学知识
栈
栈(stack)是缓存中重新分配的几段内部空间。
向两个栈填入新原素又称为作入(push)放在args原素的下面,使之正式成为捷伊args元素;
从两个栈删掉原素又称为做出栈(pop),它把args原素删掉掉,使其交界处的原素正式成为捷伊args原素。
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 #retf0x02 操作示例
这是我写的两个带壳的32位小程序,用来当做esp运动定律应用领域的两个示例。这是两个比较机械的方式,但可以对esp运动定律有两个感性的认识。
首先用Exeinfo Pe查壳,辨认出是nspack壳。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基本原理进行紫菊的流程。)