经过第一节的基础知识,我们都知道了,加壳程序首先解把原来压缩的代码解压,然后放到所对应的区块中,当外壳程序执行完毕后,跳回到OEP执行,我们都知道,OEP是放在代码段中,也就是当外壳程序处理完毕后,跳回到代码段来执行,那我们是不是可以利用壳的这个特点来进行脱壳呢?答案是肯定的,是可以的!有的时候紧紧在代码段下断是不够的,那怎么办呢?其实很简单,用两次内存断点就可以了,一般的壳会一堆对.text、.rdata、.data、rsrc区块进行解压,根据这个原理,我们可以在适当的时候,对其他的几个区段下断点,然后再在.text段下断点,来找到程序的OEP,进而进行脱壳!
我是用Delphi7.0的加了Aspack2.28的壳,测试能运行后,我们按“ALT + M”打开内存镜像,对代码段进行下断,我们可以用F2来下断点,也可以下内存访问中断(有的强壳会检测F2断点,所以我们可以用这个方法来对区段下断!)这个断点是一次性断点,当被下断点的区块被读取或者执行时就会中断,中断发生以后,断点就会被自动删除了!

对CODE(我用的是Delphi7.0加的壳,所以是为Code段)段下断以后,F9运行,我们停到了004608BB这里:

此时,代码开始解压了,我们对00401000段下F2断点,也就是PE文件头,下断点,F9运行,断在了开始解压PE文件头的地方:

我们向下面拉,会发现一个很熟悉的代码:

00460425 这里是一个跨区段的转移,很明显是跳向OEP的,我们在这个retn这里下F2断点,F9运行,断下后,取消断点,F8单步步过下,发现果真到达了OEP了!

其实也不一定非在PE文件头那里下断,可以在.rsrc段下断后,到Code段下断,也是可以到达0046038F的,继而向下面拉,可以找到跨区段的转移,从而到达OEP!
附下载版文章:
http://www.2cto.com/uploadfile/2012/1205/20121205071514480.zip

菜鸟脱壳之脱壳的基础知识(五)——利用内存断点寻找OEP的更多相关文章

  1. Python基础知识(五)------字典

    Python基础知识(四)------字典 字典 一丶什么是字典 ​ dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 ​ 键: 必须是可哈希,(不可变的数据类型 ...

  2. SDL的基础知识以及利用SDL播放视频

    原文地址:http://blog.csdn.net/i_scream_/article/details/52714378 此博文相关知识点从雷神的博客以及视频学习,截图也是用了他的课件, 雷神博客地址 ...

  3. Android学习之基础知识五—创建自定义控件

    下面是控件和布局的继承关系: 从上面我们看到: 1.所有控件都是直接或间接继承View,所有的布局都是直接或间接继承ViewGroup 2.View是Android中最基本的UI组件,各种组件其实就是 ...

  4. python基础知识五

    数据结构基本上就是---它们可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的. python中有三种内建的数据结构---列表.元祖和字典. 我们将会学习如何使用它们,以及它们如何使编程变得 ...

  5. Android学习之基础知识五—编写聊天界面

    第一步:在app/build.grandle添加RecyclerView依赖库 第二步:在activity_main.xml文件中编写主界面:聊天.发送框.发送按钮三个部分 第三步:编写Message ...

  6. Android学习之基础知识五—RecyclerView(滚动控件)

    RecyclerView可以说是增强版的ListView,不仅具有ListVIew的效果,还弥补许多ListView的不足. 一.RecyclerView的基本用法 与百分比布局类似,Recycler ...

  7. Android学习之基础知识五—ListView控件(最常用和最难用的控件)

    ListView控件允许用户通过上下滑动来将屏幕外的数据拉到屏幕内,把屏幕内的数据拉到屏幕外. 一.ListView的简单用法第一步:先创建一个ListViewTest项目,在activity_mia ...

  8. Android学习之基础知识五—Android常用的七大控件

    一.TextView控件:在界面上显示一段文本信息 先看XML代码和执行效果:         代码分析: 1.android:id属性,给当前控件定义了一个唯一的标识符 2.android:layo ...

  9. 【基础知识五】神经网络NN

    常用模型:BP神经网络,RBF神经网络 一.神经元模型 |  连接权,阈值,激活函数 1. 输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较, ...

随机推荐

  1. Lint found fatal errors while assembling a release target

    1.Android 打包错误信息 Generate signed Bundle or APK  打包时,报了一个错,错误信息如下: Error:Execution failed for task ´: ...

  2. 流控制、FlowControl

    这个选项基本上所有网卡都会有,但是叫法会有些差别,比如Realtek网卡叫做流控制,Intel网卡叫做流程控制,还有一些网卡选项干脆是英文的,叫做FlowControl,很多交换机上也有这个功能,也叫 ...

  3. Spring中bean标签的属性和值:

    Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...

  4. 归并排序(Python实现)

    目录 1. 归并排序--while版本 2. 测试用例 3. 算法时间复杂度分析 1. 归并排序--while版本 def merge_sort_while(b_list): '''归并排序--whi ...

  5. OGG学习笔记05-OGG的版本

    刚接触OGG的时候,很容易被众多的版本搞晕,虽然官方有提供各版本对应认证OS和DB的表格. 个人认为一个比较简单的方式,是直接去edelivery.oracle.com下载OGG,选定一个大版本后,这 ...

  6. 让sublime可以和visual studio一样自动在运算符前后添加空格的插件

    用过vs的人都知道,vs会自动在代码中运算符的前后加空格,比如 i=1; 换行后会自动变成i = 1; 开始觉得这个挺烦的,后来习惯了,发现这个功能还是挺好的,然代码更清晰. 最近换了sublimet ...

  7. win7共享打印机和防火墙配置

    今天给公司一台Win7电脑连接的打印机做共享.办公司共6台电脑,其中1台是连接了打印机,并安装了打印机驱动,可以正常本机使用打印机.现在需要其他5台电脑也共享使用打印机. 1.当共享的时候,提示“无法 ...

  8. Hdu2033 人见人爱A+B (贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2033 人见人爱A+B Time Limit: 2000/1000 MS (Java/Others)   ...

  9. flutter 获取设备屏幕大小

    import 'dart:ui'; var s = window.physicalSize;print(s);

  10. Python类的私有属性

    class Bar(object): __age = 18 sex = 'male' def __init__(self, ): pass def f(self): print(self.__age) ...