首页
社区
课程
招聘
UPX---定位OEP
2020-8-5 16:56 8220

UPX---定位OEP

2020-8-5 16:56
8220

方法1-esp定律

在编写加壳软件时,必须遵守栈平衡原理。
将整个外壳作为一个函数或子程序来理解,执行前后遵守栈平衡原理,当其跳转到OEP时,esp的值不会变,这就是esp定律。
可利用这一特性找到部分加壳软件的OEP。

 

流程

  1. 执行压栈,32位程序是pushad,64位程序是 push rbx
  2. 单击esp寄存器的值,右键转到内存,然后右键设置硬件断点
  3. F9运行,程序断下后,下面的第一条jmp就是跳转到oep

方法2-特殊指令定位

upx壳跳转oep指令的附近可以找到全局唯一的特征指令。
32位搜指令 popad
64位搜指令 sub rsp,0xFFFFFFFFFFFFFF80
搜到对应指令,下面的第一条jmp就是跳转到oep


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

最后于 2020-8-11 09:00 被qux编辑 ,原因: 重新整理描述思路,避免误导
收藏
点赞1
打赏
分享
最新回复 (4)
雪    币: 3072
活跃值: (20)
能力值: ( LV1,RANK:40 )
在线值:
发帖
回帖
粉丝
0x99er 2020-8-6 10:08
2
0

upx壳,加载后,往下翻,好像可以直接看到jmp oep

最后于 2020-8-6 10:09 被0x99er编辑 ,原因:
雪    币: 12092
活跃值: (4728)
能力值: ( LV5,RANK:77 )
在线值:
发帖
回帖
粉丝
qux 2020-8-7 12:30
3
0
6otest upx壳,加载后,往下翻,好像可以直接看到jmp oep
有经验的话,确实可以翻到,但没经验的话,翻到也不知道那个地方是跳到OEP的,所以写了两个附近指令的特征
雪    币: 2050
活跃值: (2805)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
xiaohang 3 2020-8-10 09:21
4
0

你自己都说esp定律了,64位也是一样的道理

最后于 2020-8-10 10:03 被xiaohang编辑 ,原因:
雪    币: 12092
活跃值: (4728)
能力值: ( LV5,RANK:77 )
在线值:
发帖
回帖
粉丝
qux 2020-8-11 09:01
5
0
xiaohang 你自己都说esp定律了,64位也是一样的道理
是的,我描述不够清楚。最初对esp定律的理解也比较局限,已做修改,谢谢
游客
登录 | 注册 方可回帖
返回