一.

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. 逆向学习1:52pojie第二课

    52pojie第二课 去广告.弹窗及主页锁定 例子一 1.脱壳 2.C32asm搜索字符串 3.OD 例子2 脱壳 OD 去广告.弹窗及主页锁定 所用到的windows API: 1.消息框 Mess ...

  2. Linux 探索之旅 | 第四部分第二课:SSH 连接,安全快捷

    -- 作者 谢恩铭 转载请注明出处 内容简介 第四部分第二课:SSH连接,安全快捷 第四部分第三课预告:文件传输,潇洒同步 SSH连接,安全快捷 上一课是 Linux探索之旅 | 第四部分第一课:压缩 ...

  3. etl常用的三种工具介绍_Adobe Photoshop常用修图插件+屏幕模式+内容感知移动工具介绍...

    PS教学第27期 第一篇 1.5 Photoshop的三种屏幕模式 [Ps教程] 1. 本节课将为您演示,系统的三种屏幕显示模式.首先依次点击[文件 > 打开]命令,打开一张示例图片. imag ...

  4. 第二课计算机ppt,第二课计算机系统.ppt

    第二课计算机系统 主要部件功能及参数指标 机 箱 外 壳 一个完整的计算机系统是由硬件(Hardware)系统和软件(Software)系统两大部分组成. 计算机硬件是指系统中可触摸得到的设备实体,是 ...

  5. 【C++探索之旅】第一部分第二课:C++编程的必要软件

    内容简介 1.第一部分第二课:C++编程的必要软件 2.第一部分第三课预告:第一个C++程序 C++编程的必要软件 经过上一课之后,大家是不是摩拳擦掌,准备大干一场了呢. 这一课我们来做一些C++开发 ...

  6. 商务汇报PPT制作的七堂课-第二课:模板制作

    继续更新PPT制作与美化第二课的内容-模板制作. 大帽子就不用扣了,反正模板对于一份PPT很重要. 首先和大家澄清一个概念,母版和模板 什么是母版呢? 母版可以帮助我们设置PPT的统一格式,设置好之后 ...

  7. Python 学习第二课:Python要点

    第二课目录 进制 进制之间的转换 进制的计数 计算机中的单位 1.Python 语言 1.1 Python语言的基本概念 1.2 Python的特色 1.3 Python的发展及应用 2. 搭建环境 ...

  8. H.265/HEVC 简述 第二课(数字视频格式)

    目录 零.前言 一.数字视频 二.数字视频格式 三.H.265/HEVC编码视频格式 零.前言 本系列博客是对H.265/HEVC视频编码进行一个简单的介绍,主要介绍大致的编码框架和流程,不涉及算法和 ...

  9. 第二课 大数据技术之Hadoop3.x的HDFS

    第二课 大数据技术之Hadoop3.x的HDFS 文章目录 第二课 大数据技术之Hadoop3.x的HDFS 第一节 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HD ...

最新文章

  1. 浏览器及时感知服务端数据变化的方式
  2. caffe中的学习率的衰减机制
  3. 微信小程序开发框架从入门到放弃
  4. Servlet 实例
  5. Struts2的下载安装
  6. 神经网络 | Mask Scoring R-CNN:实例分割综述
  7. 一道C#类型转换的思考题
  8. pcb只开窗不镀锡_案例图解射频PCB设计要点
  9. 局域网内Windows允许其他电脑指定IP访问本地mysql-8.0.23数据库
  10. 只需三种手段,将传统的网站的性能提高 24%!
  11. 使用axis2 services.xml 发布web service
  12. 孔浩用的mysql工具_孔浩Java教学系列视频教程
  13. Android 根据手机自带GPS获取当前位置,经纬度
  14. Markdown如何给图片添加图注
  15. 苹果7pnfc功能门禁卡_苹果手机门禁卡nfc功能
  16. 电脑用久了卡,学会这四招解决你的电脑卡顿问题!
  17. 【2018,中国智能+】新智元10万+热文排行,AI爆发没有看客
  18. 二元logistic模型案例_基于Logistic回归的二元分类应用(含公式推导)
  19. 计算消耗卡路里C语言程序,人体基础代谢率计算公式,热量表,运动消耗热量值...
  20. 解决CSS中display: inline-block有缝隙问题

热门文章

  1. 【实战】烂泥:net use命令使用(一)
  2. 家用路由器支持组播吗_组播分布树及其转发模式
  3. Linux挂载共享文件
  4. 函数 —— fork()将运行着的程序分成2个(几乎)完全一样的进程
  5. 2018焦作网络赛-E- Jiu Yuan Wants to Eat
  6. UPnP协议编程实践
  7. 未能在全局命名空间中找到类型或命名空间名称“Wuqi”
  8. 30天敏捷结果(4):放弃一些事情
  9. 浅谈自考学习方法(二)
  10. REST service 化一个数据系统(REST Service 的最佳实践,第 2 部分)