原理:壳代码在一开始会使用PUSHAD指令将所有的寄存器入栈,此时ESP所指向的内存记录着某一个寄存器的值。然后我们ESP指向的内存处下一个硬件内存访问断点,执行完壳代码后会将所有的寄存器值出栈以平衡堆栈POPAD,CPU需要访问原ESP记录的值,壳代码解压完程序代码后,最后平衡堆栈时必然要从ESP所指向的内存中读取之前存入的某个寄存器的值,所以必定会触发此断点,此时离真正的OEP也不远了

0x01 直接加载入OD,F8一次,让当前的寄存器中的值都压入堆栈

学习:脱壳之ESP定律寻找OEP

0x02 然后将当前ESP指向的内存处下一个硬件内存访问断点,然后进行F9运行程序,发现直接来到大跳转,原因是执行完壳代码后会将所有的寄存器值出栈以平衡堆栈POPAD,此时CPU需要访问原ESP的记录的值,所以就会触发原来我们断下的硬件断点,OD捕获异常,成功下断,F8成功来到OEP

学习:脱壳之ESP定律寻找OEP

学习:脱壳之ESP定律寻找OEP

相关文章:

  • 2021-11-17
  • 2021-06-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-16
  • 2021-05-13
  • 2021-06-25
猜你喜欢
  • 2021-07-22
  • 2022-12-23
  • 2021-09-18
  • 2021-12-08
  • 2022-02-27
  • 2022-12-23
  • 2021-05-23
相关资源
相似解决方案