脱壳入门----常见的寻找OEP的方法
一步直达法
所谓的一步直达法就是利用壳的特征。壳一般在执行完壳代码之后需要跳转到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的方法的更多相关文章
- 常见寻找OEP脱壳的方法
方法一: 1.用OD载入,不分析代码! 2.单步向下跟踪F8,是向下跳的让它实现 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——运行到所选) 4.绿色线条表 ...
- 破解之寻找OEP[手动脱壳](1)
OEP:(Original Entry Point),程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的 ...
- 破解之寻找OEP[手动脱壳](2)
1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:“在数据窗口中跟随”,到内存数据窗口,将内存数据窗口以HEX 数据形式显示,在刚才的地址起始位置上(如 ...
- 脱壳实践之寻找OEP——堆栈平衡法
0x00 前言 上一篇介绍了壳程序的加载过程以及通过两次内存断点法寻找OEP,这篇我们将利用新的的方法——堆栈平衡法来寻找OEP. 0x01 堆栈平衡法原理 堆栈平衡原理就是利用壳程序在运行前后需要 ...
- 寻找OEP
1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:"在数据窗口中跟随",到内存数据窗口,将内存数据窗口以HEX数据形式显示,在刚才的 ...
- 脱壳入门----脱ASPack壳保护的DLL
前言 结合脱dll壳的基本思路,对看雪加密解密里的一个ASPack壳保护的dll进行脱壳分析. 脱壳详细过程 寻找程序的OEP 先将目标DLL拖入OD,来到壳的入口处. 然后利用堆栈平衡原理在push ...
- [视频]K8软件破解脱壳入门教程
[视频]K8软件破解脱壳入门教程 链接:https://pan.baidu.com/s/1aV9485MmtRedU6pzyr--Vw 提取码:vbak C:\Users\K8team\Desktop ...
- Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- coreseek常见错误原因及解决方法
coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...
随机推荐
- 浅析MyBatis(二):手写一个自己的MyBatis简单框架
在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...
- x64 下记事本WriteFile() API钩取
<逆向工程核心原理>第30章 记事本WriteFile() API钩取 原文是在x86下,而在x64下函数调用方式为fastcall,前4个参数保存在寄存器中.在原代码基础上进行修改: 1 ...
- python3表格数据处理
技术背景 数据处理是一个当下非常热门的研究方向,通过对于大型实际场景中的数据进行建模,可以用于预测下一阶段可能出现的情况.比如我们有过去的2002年-2018年的黄金价格的数据: 该数据来源于Gite ...
- mysql中FIND_IN_SET函数用法
本篇文章主要介绍mysql中FIND_IN_SET函数用法,用来精确查询字段中以逗号分隔的数据 以及其与 like 和 in 的区别 1.问题发现 之前在做工作任务时有这么一个需求:需要用接口所传的服 ...
- 生产环境中mysql数据库由主从关系切换为主主关系
目录 一.清除原从数据库数据及主从关系 1.1.关闭主从数据库原有的主从关系 1.2.清除从数据库原有数据 二.将主库上的数据备份到从库 2.1.备份主库数据到从库 2.2.在从库使用tsc.sql文 ...
- [树形DP]战略游戏
战 略 游 戏 战略游戏 战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上 ...
- 01-MySQL Linux安装
一.检查当前系统是否安装过mysql rpm -qa|grep mysql 或 ps -ef|grep mysql 二.安装mysql服务端 rpm -ivh MySQL-server-5.5.48- ...
- Dynamics CRM调用选择用户弹窗
在开发Dynamics CRM的部分场景时我们会遇到一些需要去锁定用户的操作,所以就需要使用Javascript把用户的弹窗弹出来.具体做法如下 我们需要拼接一个弹出选择记录框的url Url格式:C ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- ASP.NET Core可视化日志组件使用
前言 今天站长推荐一款日志可视化组件LogDashboard,可以不用安装第三方进程,只需要在项目中安装相应的Nuget包,添加数行代码,就可以实现拥有带Web页面的日志管理面板,十分nice哦. 下 ...