第二课 壳的介绍以及脱壳常用思路
一.
Q:
1.PUSHAD (压栈) 代表程序的入口点,
2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近
3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
A:
这是因为加壳程序也是一个函数, 而函数的开始与结束的标志就是压栈和出栈, 当加壳程序截止的时候差不多也是原程序的入口点了.
二.
Q:
方法一:单步跟踪法
1.用OD载入,点“不分析代码!”
2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4)
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
A:
第一课已经解释得很清楚
Q:
Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP!
A:
手动让其跳转
三.
Q:
方法二:ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!
3.选中下断的地址,断点--->硬件访--->WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。
A:
原理其实跟第一点介绍的很像, 壳也是程序, 开始压栈, 结束出栈. 当压栈后下硬件访问断点, 一旦触发, 则就是出栈操作造成. 也就是程序的结尾处.
四.
Q:
方法三:内存镜像法
1:用OD打开软件!
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!
3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP!
A:
【推测】 资源加载在代码执行前, 那么先在资源节下断是为了跳过壳程序, 因为壳程序可能没有用到资源, 然后再在代码节下断, 说明来到了原程序的入口点.
Q:
为什么不直接在代码节下断?
A:
因为代码节前面部分可能是壳程序, 如果直接下断就到了壳程序的入口点.
五.
Q:
方法四:一步到达OEP
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处
2.来到大跳转处,点下F8,到达OEP!
A:
原理如一所解释
六.
Q:
方法五:最后一次异常法
1:用OD打开软件
2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序
3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m!
4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次)
5:在OD的右下角我们看见有一个"SE 句柄",这时我们按CTRL+G,输入SE 句柄前的地址!
6:按F2下断点!然后按SHIFT+F9来到断点处!
7:去掉断点,按F8慢慢向下走!
8:到达程序的OEP!
A:
【推测】壳程序会有很多暗桩,也就是所谓的异常, 跳过所有的异常即来到原程序的入口点
七.
Q:
方法六:模拟跟踪法
1:先试运行,跟踪一下程序,看有没有SEH暗桩之类
2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations)
内存镜像,项目 30
地址=0054B000
大小=00002000 (8192.)
Owner=check 00400000
区段=.aspack
包含=SFX,imports,relocations
类型=Imag 01001002
访问=R
初始访问=RWE
3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。。
Btw:大家在使用这个方法的时候,要理解他是要在怎么样的情况下才可以使用
A:
【推测】壳程序会重定位, 那么模拟跟踪到重定位节的地址就会跳过壳程序的部分代码, 这样使得我们单步跟踪法少了很多步骤
八.
Q:
方法七:“SFX”法
1:设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
2:切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。
3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP)
A:
OD自带的脱壳插件, 原理不知, 不过功能有限只能脱一些压缩壳
转载于:https://www.cnblogs.com/bxdm/p/6793053.html
第二课 壳的介绍以及脱壳常用思路相关推荐
- 逆向学习1:52pojie第二课
52pojie第二课 去广告.弹窗及主页锁定 例子一 1.脱壳 2.C32asm搜索字符串 3.OD 例子2 脱壳 OD 去广告.弹窗及主页锁定 所用到的windows API: 1.消息框 Mess ...
- Linux 探索之旅 | 第四部分第二课:SSH 连接,安全快捷
-- 作者 谢恩铭 转载请注明出处 内容简介 第四部分第二课:SSH连接,安全快捷 第四部分第三课预告:文件传输,潇洒同步 SSH连接,安全快捷 上一课是 Linux探索之旅 | 第四部分第一课:压缩 ...
- etl常用的三种工具介绍_Adobe Photoshop常用修图插件+屏幕模式+内容感知移动工具介绍...
PS教学第27期 第一篇 1.5 Photoshop的三种屏幕模式 [Ps教程] 1. 本节课将为您演示,系统的三种屏幕显示模式.首先依次点击[文件 > 打开]命令,打开一张示例图片. imag ...
- 第二课计算机ppt,第二课计算机系统.ppt
第二课计算机系统 主要部件功能及参数指标 机 箱 外 壳 一个完整的计算机系统是由硬件(Hardware)系统和软件(Software)系统两大部分组成. 计算机硬件是指系统中可触摸得到的设备实体,是 ...
- 【C++探索之旅】第一部分第二课:C++编程的必要软件
内容简介 1.第一部分第二课:C++编程的必要软件 2.第一部分第三课预告:第一个C++程序 C++编程的必要软件 经过上一课之后,大家是不是摩拳擦掌,准备大干一场了呢. 这一课我们来做一些C++开发 ...
- 商务汇报PPT制作的七堂课-第二课:模板制作
继续更新PPT制作与美化第二课的内容-模板制作. 大帽子就不用扣了,反正模板对于一份PPT很重要. 首先和大家澄清一个概念,母版和模板 什么是母版呢? 母版可以帮助我们设置PPT的统一格式,设置好之后 ...
- Python 学习第二课:Python要点
第二课目录 进制 进制之间的转换 进制的计数 计算机中的单位 1.Python 语言 1.1 Python语言的基本概念 1.2 Python的特色 1.3 Python的发展及应用 2. 搭建环境 ...
- H.265/HEVC 简述 第二课(数字视频格式)
目录 零.前言 一.数字视频 二.数字视频格式 三.H.265/HEVC编码视频格式 零.前言 本系列博客是对H.265/HEVC视频编码进行一个简单的介绍,主要介绍大致的编码框架和流程,不涉及算法和 ...
- 第二课 大数据技术之Hadoop3.x的HDFS
第二课 大数据技术之Hadoop3.x的HDFS 文章目录 第二课 大数据技术之Hadoop3.x的HDFS 第一节 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HD ...
最新文章
- 浏览器及时感知服务端数据变化的方式
- caffe中的学习率的衰减机制
- 微信小程序开发框架从入门到放弃
- Servlet 实例
- Struts2的下载安装
- 神经网络 | Mask Scoring R-CNN:实例分割综述
- 一道C#类型转换的思考题
- pcb只开窗不镀锡_案例图解射频PCB设计要点
- 局域网内Windows允许其他电脑指定IP访问本地mysql-8.0.23数据库
- 只需三种手段,将传统的网站的性能提高 24%!
- 使用axis2 services.xml 发布web service
- 孔浩用的mysql工具_孔浩Java教学系列视频教程
- Android 根据手机自带GPS获取当前位置,经纬度
- Markdown如何给图片添加图注
- 苹果7pnfc功能门禁卡_苹果手机门禁卡nfc功能
- 电脑用久了卡,学会这四招解决你的电脑卡顿问题!
- 【2018,中国智能+】新智元10万+热文排行,AI爆发没有看客
- 二元logistic模型案例_基于Logistic回归的二元分类应用(含公式推导)
- 计算消耗卡路里C语言程序,人体基础代谢率计算公式,热量表,运动消耗热量值...
- 解决CSS中display: inline-block有缝隙问题