快速查找UPX 的OEP的方法(一)

方法一

UPX的压缩器的特征之一是,其EP代码被包含在PUSHAD和POPAD之间,并且跳转到OEP的JMP指令会紧接着出现在PUSHAD指令之后,我们只需要找到符合以下两点条件的JMP指令并设置断点就可以顺利找到OEP:

条件一:这条JMP指令上方几条指令内有PUSHAD
条件二:这条JMP指令跳转到主程序空间内,且跟随后第一条指令是push XXX

方法二

方法二也利用了PUSHAD \POPAD。因为PUSHAD将8个寄存器的值压栈保存起来,而POPAD则相反是将这些值弹出送归原处,所以我们在执行第一条指令:PUSHAD后,停下来观察堆栈的情况:
这里写图片描述
这里写图片描述

我们看到寄存器值已经压栈了,接下来在数据窗口中,转到栈顶的地址也就是0006FFA4 ,然后打硬件access断点
这里写图片描述

接着按F9执行,断在POPAD指令之后的lea指令上,‘
这里写图片描述

我们看到下面就是JMP语句,我们跟进这条JMP指令看看:
这里写图片描述

这里就是程序的OEP了

相比较两种方法,第二种方法明显要简单粗暴,可行性要好很多,第一种方法在查找时费时又费力,可以找到好几个POPAD但是具体哪个是我们需要查找的,并不是很容易分辨,第二种直接通过硬件断点的方式可以一下子定位,方便快捷。
2015年10月27日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值