吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3706|回复: 4
收起左侧

[原创] ESP法的原理

[复制链接]
dotaSven 发表于 2015-11-12 10:36
在学习中的个人心得,有不对的请指正啊= =

esp法其实是基于堆栈平衡原理,因为加壳后的程序要正确运行,就必须在接近原始入口点处还原现场环境,以保证程序运行与无壳时相同。

由于栈是与cpu相关的,所以不同的系统环境下,栈的地址是不同的,所以不用关注到底要用哪个地址。

要使用esp法(其实我更喜欢叫堆栈平衡法),要注意的不是esp的值,而是要注意壳的入口处的现场环境(栈和各个寄存器值),
一般而言入口处的栈顶是一个kernel32.dll中的地址,在OD中栈区显示 “返回到kernel32.XXXXXXXX”,假设这时候看到对应的栈地
址为0012FFC4。那么你要关注的其实是什么时候栈顶会还原成0012FFC4,而且会恢复入口时各个寄存器的值。

通常用pushad/popad、pushfd/popfd指令来保存与恢复现场环境,或者用若干条push指令来保存某几个关键寄存器的值,所以只要找到壳入口
后的第一个push/pushad/pushfd,执行后发现栈区变成了:

0012FFC0  XXXXXXXX  
0012FFC4  7XXXXXXX   返回到kernel32.XXXXXXXX

就可以用命令 hr  0012FFC0 ,对0012FFC0 下硬件断点,然后F9,当程序访问到0012FFC0时就会断下,如果这个程序是可以用esp法直接寻找到
OEP的话,这时候就离跳转到OEP的地方不远了。当然单纯使用esp法局限性很大,但是这个原理可以帮助你确定某个片段是不是OEP,从而结合其
他方法找到OEP

本来想做个例子的但是发现截图上传不了。。提示不能上传零字节文件- - 等我弄清楚怎么上传后再传吧



免费评分

参与人数 1热心值 +1 收起 理由
Hmily + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.

查看全部评分

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

scqandcy 发表于 2015-11-12 14:37 来自手机
这个东西真是好,一直只知道esp定律,确实不太懂原理
tangdragon 发表于 2015-11-14 10:22
言之有理,上传图很简单吧。不行清一下浏览器缓存和cookie。
whdfog 发表于 2015-11-14 14:44 来自手机
wshxining 发表于 2015-11-14 15:10
授人以鱼,不如授人以渔!知其然,更要知其所以然,多谢楼主分享原理。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-5-3 03:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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