一步直达法

所谓的一步直达法就是利用壳的特征。壳一般在执行完壳代码之后需要跳转到OEP处,而这个跳转指令一般是call ,jmp ,push retn类型的指令,而且因为壳代码所在的区段和OEP代码所在的区段一般属于不同的区段,所以我们可以通过搜索这些特殊指令的机器码并查看其跳转范围,如果跳转范围较大(也就是跨段跳转)则可以判断为此指令会跳到OEP处。

下面以UPX壳为例:

我们在OD中通过Crty + B来搜索二进制字串,call的机器码为E8,jmp的机器码为E9。这里我们搜索E9,通过Ctry + L来查看下一个机器码。

通过几次搜索之后我们找到了一条跳转到另一个区段的jmp指令,此指令就为对应的OEP跳转指令。

如果我们通过搜索jmp的机器码(E9)没有找到符合条件的跳转指令我们可以接着搜索call指令的机器码(E8)。

一步直达法的优点是简单,缺点是对一些强壳不好判断,因为一些强壳会采用jmp eax的方式跳转到oep中,而eax值我们是不能直接判断的,有的一些强壳还会对跳转到OEP的指令进行压缩,在执行此指令前才对其进行解压缩。这样我们通过直接搜索这些特定指令的机器码就很难判断是否为OEP跳转指令。

单步跟踪法

所谓的单步跟踪法就是从EP处开始F8单步向下跟踪,遇见向上跳转的指令不跳。这种方法实际是利用了壳代码的一般逻辑都是先解压缩原程序的各个区段和一些简单处理,然后最后跳转到OEP处。所以可以忽略前面的那些操作,直接去寻找OEP跳转的指令。这种方法也是存在一定的偶然性,对一些简单的壳能起到奇效。

模拟跟踪法

模拟跟踪法是利用OD的命令行插件,tc/toc命令是跟踪步进/步过 直到满足条件就暂停程序。因为OEP所在区段一般位于第一个区块处,而壳代码一般位于后几个区块中,因此我们可以利用tc/toc命令当eip小于壳代码所在的区块地址时说明程序跳转到了oep处。

下面我们用例子来演示一遍:

用OD加载程序后我们Alt+M查看内存,我们发现主模块的壳代码位于首地址为0x4F1000处。

我们在OD的命令行中输入 toc eip < 0x4F1000 后运行程序,程序会暂停到OEP处。

模拟跟踪法优点也是简单,缺点是耗时特别长,因为其在没执行完一条指令后都需要判断条件是否成立,所以程序运行很慢。而且如果壳代码和OEP在同一个区段中的话此方法就不适用了。(虽然这种情况很少,但不能保证没有)

SFX法

SFX法和模拟跟踪法十分相似,只不过SFX是OD本身提供的功能。

SFX法有两种方式,一种是通过判断块的形式看是否到达OEP处,另一种是通过判断字节的形式。显而易见块判断形式速度快但是准确度低,字节形式速度慢但是准确度高。我们在实际分析时结合具体情况选择合适的方式进行跟踪。

内存映像法

内存映像法就是通过对加载到内存中的程序下内存断点来寻找OEP,因为加壳程序在解压缩各个区段后会跳转到OEP执行此处的代码,所以我们可以通过先对OEP所在的区块设置内存写入断点,待此区段解压缩完成后我们再在此区块上设置内存访问断点。这样当程序执行到OEP处时就会暂停。

ESP定律法

ESP定律是利用堆栈平衡,一般壳代码在执行的时候回保存寄存器环境,在跳转到OEP处的时候再恢复环境。我们可以利用此特点在执行完push指令保存环境后,对堆栈设置硬件访问断点或内存访问断点。这样在跳转到OEP前其会执行pop指令,程序就会暂停我们就可以单步向下跟踪寻找OEP跳转指令。

最后一次异常法

有的加壳程序会在执行壳代码的时候设置很多异常来干扰脱壳破解者,其会在各个异常的异常处理程序中检测断点以及进行反调试。所以我们如果还用esp定律,内存映像等下断点的方法就会失效。我们需要将这些异常执行完之后在采取以上办法。最后一次异常法就是寻找到程序最后一次异常发生的指令,当最后一次异常执行后我们在采取常规方法寻找OEP。

利用应用程序调用的第一个API

通过对应用程序调用的第一个API下断点来到达OEP附近,从而进一步寻找到OEP。

例如GetVersion,GetModuleHandle等。

利用不同编译器编译程序入口特征码定位OEP

如果熟悉各个编译器编译程序入口点代码的特征就可以通过此方法来快速到达OEP处,我们可以在各个区块解压缩后通过搜索特定编译器程序入口点代码的特征码来到达OEP处。

脱壳入门----常见的寻找OEP的方法的更多相关文章

  1. 常见寻找OEP脱壳的方法

    方法一: 1.用OD载入,不分析代码! 2.单步向下跟踪F8,是向下跳的让它实现 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——运行到所选) 4.绿色线条表 ...

  2. 破解之寻找OEP[手动脱壳](1)

    OEP:(Original Entry Point),程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的 ...

  3. 破解之寻找OEP[手动脱壳](2)

    1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:“在数据窗口中跟随”,到内存数据窗口,将内存数据窗口以HEX 数据形式显示,在刚才的地址起始位置上(如 ...

  4. 脱壳实践之寻找OEP——堆栈平衡法

     0x00 前言 上一篇介绍了壳程序的加载过程以及通过两次内存断点法寻找OEP,这篇我们将利用新的的方法——堆栈平衡法来寻找OEP. 0x01 堆栈平衡法原理 堆栈平衡原理就是利用壳程序在运行前后需要 ...

  5. 寻找OEP

    1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:"在数据窗口中跟随",到内存数据窗口,将内存数据窗口以HEX数据形式显示,在刚才的 ...

  6. 脱壳入门----脱ASPack壳保护的DLL

    前言 结合脱dll壳的基本思路,对看雪加密解密里的一个ASPack壳保护的dll进行脱壳分析. 脱壳详细过程 寻找程序的OEP 先将目标DLL拖入OD,来到壳的入口处. 然后利用堆栈平衡原理在push ...

  7. [视频]K8软件破解脱壳入门教程

    [视频]K8软件破解脱壳入门教程 链接:https://pan.baidu.com/s/1aV9485MmtRedU6pzyr--Vw 提取码:vbak C:\Users\K8team\Desktop ...

  8. Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  9. coreseek常见错误原因及解决方法

    coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...

随机推荐

  1. sqlmap在https下的一种错误 - ssl连接失败

    在昨天与师傅的交流中师傅考了我一个问题,在用sqlmap跑的时候遇到ssl爆红该怎么办,因为在实战中并没有遇到过这种情况,所以今天补一下知识. 首先查询了ssl的概念,通俗来说,如果一个网站没有安装s ...

  2. python-for表达式

    for表达式用于其他区间,元组,列表等可迭代对象创建新的列表 [表达式 for 循环计数器 in 可迭代对象] for表达式与普通for循环的区别有两点 在for关键字之前定义一个表达式,该表达式通常 ...

  3. 史上超强拷贝仓——GitHub 热点速览 v.21.11

    作者:HelloGitHub-小鱼干 Clone-Wars 是真的强,能细数 70+ 知名应用网站的源码,即便你不看代码,也可以了解下各大网站的所用技术栈.同样很强的是用 OpenCV 实现的图片转 ...

  4. PTA 链表逆置

    6-3 链表逆置 (20 分)   本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头.链表结点定义如下: struct ListNode { int data; struct L ...

  5. Kubernetes 实战 —— 05. 服务:让客户端发现 pod 并与之通信(下)

    将服务暴露给外部客户端 P136 有以下三种方式可以在外部访问服务: 将服务的类型设置成 NodePort 将服务的类型设置为 LoadBalance 创建一个 Ingress 资源 使用 NodeP ...

  6. 文字变图片——GitHub 热点速览 v.21.14

    作者:HelloGitHub-小鱼干 程序的力量,在 deep-daze 体现得淋漓尽致,你用一句话描述下你的图片需求,它就能帮你生成对应图片.同样的,appsmith 的力量在于你只要拖拽即可得到一 ...

  7. [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.4 规范电路模型

    7.4 规范电路模型 在讨论了推导开关变换器交流等效电路模型的几种方法后,让我们先停下来,说明下这些结果.所有的在 CCM下以PWM工作的DC-DC变换器都具有相似的基本功能.首先,他们在理想情况下, ...

  8. Dynamics CRM安装教程六:CRM产品安装

    接下来就要开始进行CRM产品的安装了 首先要安装IIS,以及.NET FrameWork4.6及相关功能 打开服务器管理器,在添加角色功能向导中勾选IIS,点击添加功能 默认下一步 选择角色服务这里的 ...

  9. Math类的random()方法

    Math类的random()方法 Math类的random()方法可以生成大于等于0.0.小于1.0的double型随机数. Math.random()方法语句基础上处理可获得多种类型.或任意范围的随 ...

  10. 解决JDK9以上的非法反射访问警告

    1 问题描述 JDK9以上很多库都有这种非法反射访问的警告,比如protostuff: 解决方法两个: JDK降级 添加JVM参数 2 原因 降到JDK8能解决以上问题. 但是这不是本文的重点. 先说 ...