0x00 前言

上一篇介绍了壳程序的加载过程以及通过两次内存断点法寻找OEP,这篇我们将利用新的的方法——堆栈平衡法来寻找OEP。

0x01 堆栈平衡法原理

堆栈平衡原理就是利用壳程序在运行前后需要保存和恢复原程序的堆栈环境来实现的。我们可以把壳程序当作一个子程序,调用这个子程序前,肯定需要保存原程序的堆栈环境,子程序调用完毕之后,就需要pop处原堆栈的值从而实现堆栈平衡。通常来说,壳程序使用pushhad/pophad或者pushfd/popfd指令来实现。脱壳时可以实根据堆栈平衡原理对ESP下断(由于esp存储的是栈顶指针),找到OEP。

0x02 实例讲解堆栈平衡原理找OEP

1)将PE文件RebPE拖入OD,程序停处,如下图:

我们按F8单步执行一次,得下图:

上图可知,第一步执行的是pushad操作,就是把各个寄存器的值保存在堆栈中)在寄存器窗口得到保存的值为0019FF64,我们右键在数据窗口跟随,并在该处下硬件断点。如下图:

2)F9运行,该程序在刚刚的断点处停止(PS:我们刚刚下的数据断点是ESP寄存器的值,既然要壳程序运行结束要恢复数据就一定会访问这里,恢复完数据即马上就要到了OEP处)。

3)我们注意到前面已经执行了popad指令,后面两句指令 push 0x401130 ,retn其实就是相当于jmp 0x401130,即跳转至401130处,这个地址就是OEP 。我们继续F8单步,程序来到此处如下图:

这个401130就是原程序起始地址。我们将od的分析去掉可以很直观的看出来,如下图:

转载于:https://www.cnblogs.com/2f28/p/9856350.html

脱壳实践之寻找OEP——堆栈平衡法相关推荐

  1. 脱壳笔记-寻找OEP方法总结

    本文的示例程序为通过upx加壳的应用程序 讲解的方法:手动单步跟踪法.ESP定律方式.内存二次断点法 一.手动单步跟踪法 主要使用的两个快捷键F8与F4 F8:单步步过 F4:运行到指定位置(右键-& ...

  2. 脱壳实践之手动构造输入表

    0x00 前言 对于脱壳后的程序往往不能直接运行,这是因为它们很多都没有重建输入表.当然用的od脱壳可能可以.重建输入表一般都是用专业软件比如ImportREC.但是对于逆向研究者来说会自己重讲输入表 ...

  3. 【脱壳-寻找OEP】壳常用的函数寻找OEP

    LoadLibrary 加载dll GetProcAddress 获取函数的地址 ExitThread 调用后就会释放系统分配的堆栈 我们这次用GetProcAddres来测试,载入我们的测试文件然后 ...

  4. 【脱壳-寻找OEP】通过内存定位OEP实现脱壳

    这个方法使用的是特殊OD,这个OD也叫VBOD 这个OD只会在执行的时候断点,其他异常之类的操作都不会进行断点. 这个方法是通过运行壳后壳会对原来的代码段进行 解密 还原 写入 这三个步骤,我们通过在 ...

  5. 利用ESP定律的upx脱壳实践

    背景: 除了命令行upx -d脱壳,还有手动脱壳.ESP定律的本质是堆栈平衡,又称堆栈平衡定律,是应用频率最高的脱壳方法之一,脱壳的目的就是找到真正的OEP(源文件的EP代码) 方法: 从pushad ...

  6. 【树莓派 有趣实践】寻找小项目

    有时候在想,有没有一些炫酷的树莓派小项目,在有趣实践中成长. 于是通过不断地寻找,找到了一些不错的.(详细的步骤说明.有源代码) 目录 一.疫情数据实时监控 二.[机械六足蜘蛛]恐怖机器人 三.LED ...

  7. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库...

    前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/f...上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种事情本就应该义不容辞,如 ...

  8. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库... 1

    前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种 ...

  9. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库

    前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/f...上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种事情本就应该义不容辞,如 ...

  10. 儿科主治医师总题库 --- 一例APK脱壳反编译寻找AES密钥过程记录

    应客户需求对一款名为"儿科主治医师总题库"(https://www.wandoujia.com/apps/com.zitibaohe.zhuzhiyishierke,包名为com. ...

最新文章

  1. 计算机辅助相关论文,关于计算机辅助教学的论文
  2. Duang,钉钉会议室预定系统已上线!
  3. 赞扬别人团建评论_赞扬精心设计:基于属性的测试如何帮助我成为更好的开发人员...
  4. matlab出现红色括号,想让大家看下标红地方为什么说有括号问题
  5. 《Python编程从入门到实践》记录之第7章 用户输入(input)和while 循环总结(思维导图)
  6. 从0开始学习自动化测试框架cypress(三)特性
  7. [转]paint,update和repaint三种awt方法
  8. JMeter设置集合点
  9. maven错误相关(整理中)
  10. android上代码阅读软件,安卓代码阅读器app下载-android代码阅读器 安卓版v1.0.0-PC6安卓网...
  11. 移动端element日期插件不弹软键盘
  12. oracle数据库报01033,oracle数据库报ORA-01033错误
  13. wireshark提示未启动npf服务The NPF driver isn’t running You may have trouble capturing or listing interfaces
  14. asc18_hpl,hpc,hpcg
  15. 微信公众平台消息储存mysql php_使用PHP进行微信公众平台开发的示例
  16. 关于MFC中Ribbon界面如何修改标题属性问题
  17. 消息队列8:RabbitMq的QOS实验
  18. 计算机网络 实验三 网络互联与路由协议配置
  19. text-decoration属性
  20. android应用资源预编译,编译和打包全解析

热门文章

  1. vue 函数(二):callback回调函数
  2. sketchup草图家具拆单软件 衣柜橱柜拆单 SU 全屋定制拆单 有屋软件 下料机
  3. 开源.net 混淆器ConfuserEx介绍
  4. abd串口工具使用教程_adb调试工具包(adb调试程序)
  5. 数值分析——三角分解法(LU分解法)C++
  6. Android MVP架构实现
  7. BScroll 使用(Vue)
  8. 【智能制造】智能制造50大产业链全景图
  9. yolov5 烟雾和火焰检测
  10. PS 做动态图视频教程