使用ESP定律脱壳实验

实验步骤

1. PE文件基本信息分析

用Exeinfo对程序进行分析,发现是UPX加壳,版本在0.50到0.72之间
点击scan/t,看到详细版本为0.7:

同时可以看到OEP为0007C037H,这实际上是UPX加壳后的软件的一个节的名称,不是真实的OEP

2. 手动脱壳基本原理

函数调用规范约定:cdelc,stdcall,fastcall

函数栈调用原理视频:

这里使用ESP定律法

3. ESP定律脱壳实验步骤

加载程序

x32dbg打开后,默认显示系统库函数调用的代码,不是程序中的代码,按alt+F9快速跳转到用户代码

我们推测call diskprobe.47C03D是壳的自释放代码入口
按F7执行一条指令

使得EIP指向call diskprobe.47C03D
根据ESP定律,call完之后,必定再次访问ESP地址0019FF54

添加断点

可以直接右键设置硬件访问断点

也可以输入指令

然后按F9执行代码到中断位置,注意第一次中断是进入函数前,第二次才是执行完毕
之前便执行了一次,只需按一次F9

这里发现jmp指令是一个跨节的长跳转
说明前面在执行加壳指令代码,这里要跳转到解密后的节了

这里是通过查询节表来看出跨节的长跳转的

基址是00400000,如下

导出脱壳后程序

从刚刚的断点单步执行以下(F7)

我们已经判断0044716A是OEP,要将内存中从OEP开始的内存中数据DUMP到文件中即可脱壳
DUMP是,需按照PE格式要求修复各项数据,手工太麻烦
x32dbg中可以使用scylla插件自动完成

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇