寻找OEP

对于加了壳的软件,要寻找其OEP(Origin entry pointer)入口点的时候,该如何去寻找

1.根据跨段指令去寻找OEP

绝大多数加壳程序在被加密的程序中加上一个或多个区块,这个可以使用PEID软件去查看相应的区段(section)。

这个方法的思路是:一般是跟踪软件,一直跟踪,然后看起跨段指令,最后得出OEP。

加壳程序的入口点代码如下。

一直跟踪就能跟出外壳程序,外壳程序以push 0x401130 retn这两句来结尾,等价于jmp 0x401130,跳转程序的真正入口点。

2.用内存访问断点找OEP

思路:就是外壳首先将原来压缩的代码解压,并放在对应的区块上,处理完后将跳到代码段上运行。就是对代码设置两次内存访问断点,第一次设置之后,当解压函数将各个区块解压完成之后,并放到相应地内存地址处后,再对代码段设置断点,因为解压完之后要跳转到代码段中执行,所以当跳转中,对代码段设断点就会被暂停,就能找到相应地入口点。

3.根据堆栈平衡原理找OEP

编写加壳软件时,必须保证外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序在初始化时保存了各寄存器的值,当外壳执行完毕之后,在恢复各寄存器内容,最后再跳到原程序执行。通常使用pushad/popad、pushfd/popfd指令对来保存于恢复现场环境。

所以外壳程序开始时的esp值与加壳后的esp值是完全一模一样的。

使用可以对相应的寄存器值设置硬件访问断点,hr +address

这种方法很快就可以找到相应的OEP

4.根据编译语言特点找OEP

常见语言的人口代码,对相应的函数设置断点,两次之后,就能很容易找到OEP。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值