脱壳->模拟追踪脱壳法原理

目录

  • 模拟追踪脱壳法

    • 一丶模拟追踪

      • 1.1 模拟追踪简介
      • 1.2 模拟追踪法的原理
      • 1.3 网络上的内存镜像法与模拟追踪
    • 二丶调试工具的使用
      • 2.1 x64dbg追踪的使用
      • 2.2 Ollydbg工具的使用
      • 三丶总结

模拟追踪脱壳法

一丶模拟追踪

1.1 模拟追踪简介

模拟追踪 重点是模拟两字, 含义就是程序代替人手工的F7(步进) 或者 F8(步过)

回想我们手工脱壳的时候,最笨的方法就是遇到Call跳过(F8) 如果跑飞就遇到Call F7

但是往往最笨的方法就是最好用的方法. 原理也说过.单步跟踪法是 壳代码在执行之后总会跳转到OEP

执行的,其中到达OEP的方式很多中,但是原理就是修改EIP (push + ret jmp)

单步跟踪方法就是模拟人手工这样操作了, 你下一个条件断点. 那么我们主要学习的就是这个条件断点.这个思路.

网络上有很多种,我们只知其一不知其二,这里原理也说一下,做一下补充.

其中原理懂了,就不在乎我们使用什么调试器了.

网络上有内存镜像法 + 模拟追踪法

1.2 模拟追踪法的原理

我们学习模拟追踪法,学习的其实就是条件断点的设置,让程序自动单步或者步过,那么条件该怎么设置?

不知道大家有想过这么一个问题吗. 壳代码执行之后总会跳转到OEP,而且是一个大跳

紧接着因为跳转了,所以EIP会进行修改了 那么我们条件断点着重就在于这个EIP上.

我们随便打开一个程序观看其内存镜像

首先我列一个表格如下

镜像基址 大小 节(镜像)名称
0x0040000 0x1000 dxpack.exe
0x00401000 0x4000 .text
0x00405000 0x1000 .data
0x00406000 0x5000 .idata
0x0040C000 0x1000 .reloc
0x40D000 0x1000 .dxpack

请注意最后一个节,是壳代码的自身节. 其基地址为0x40D000

那么我们条件断点怎么设置.

可以设置为 当 EIP < 0x40D000 则进行中断 为什么是 <

1.首先,脱壳的时候OEP会有一个大跳,直接从0x40D000跳转到 .text节中的OEP位置. 而.text节的基址 + 大小,明显小于0x40D000的.

2.为什么要跟.text节对比.原因是OEP是在代码区,熟悉PE的应该知道.text节中,会有我们OEP,也就是代码会从OEP开始执行, 壳不管怎么来说.都是最后要跳转到OEP.所以要 < 壳自身

1.3 网络上的内存镜像法与模拟追踪

首先说一下为什么使用网络镜像法,在使用模拟追踪, 原因就是模拟追踪只不过是调试器自动跟你你设置的条件来进行单步或者步入的,以我们自己来说,如果我们知道哪里是壳代码,我们还会去追踪吗. 根本不会. 你只是寻找OEP而已.所以会不断的(F7 F8) 而内存镜像法其实就是给追踪设置一个起点.

让其在这个起点位置进行追踪.进而更快的到达你的断点处. 也就是你的条件断点.

当然你如果不想设置起点,直接在入口点就设置条件断点也是可以的,只不过就是时间问题.时间的快慢而已.

二丶调试工具的使用

2.1 x64dbg追踪的使用

如下图

随便点击一个

让其自动跟踪即可.

2.2 Ollydbg工具的使用

OllyDbg 以及 X64都可以使用命令进行快速设置的.以及其调试界面也集成了追踪可以自由选择

ollydbg中首先要设置条件 (CTRL + T) 而后才能使用 跟踪步过(CTRL + F12) 或者跟踪步入(CTRL + F11)

三丶总结

总结来说就是

模拟追踪是调试器模拟 F7 F8 重要的是条件断点的设置,条件断点原理就是OEP会在.text节中.

而EIP始终会跳转到.text节中.而.text节小于壳代码,所以设置的就是 EIP < 壳代码基址

原文地址:https://www.cnblogs.com/iBinary/p/12683394.html

时间: 2024-10-14 04:58:20

脱壳->模拟追踪脱壳法原理的相关文章

AX中四种库存ABC分析法原理研究

库存ABC分类,简单的说就是抓大放小,是为了让我们抓住重点,用最大精力来管理最重要的物料,而对于不太重要的物料则可以用较少的精力进行管理.它和我们平常说的八二法则有异曲同工之妙. 既然要应用库存ABC方法,那么我们首先要决定,哪些物料是最重要的A类,哪些物料是一般重要的B类,哪些物料是最不重要的C类. 最简单的办法自然就是在物料主表中直接把ABC填上去,然后在日常业务中,我们随时都可以看到这是哪一类物料,从而决定了我们对其采取的管理方式(最重要的一个不能差,最不重要的,差一点半点可以容忍).为了

主成分分析法原理及其python实现

主成分分析法原理及其python实现 前言: 这片文章主要参考了Andrew Ng的Machine Learning课程讲义,我进行了翻译,并配上了一个python演示demo加深理解. 本文主要介绍一种降维算法,主成分分析法,Principal Components Analysis,简称PCA,这种方法的目标是找到一个数据近似集中的子空间,至于如何找到这个子空间,下文会给出详细的介绍,PCA比其他降维算法更加直接,只需要进行一次特征向量的计算即可.(在Matlab,python,R中这个可以

操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)

实验二 进程调度 一.     实验目的 1.       理解进程运行的并发性. 2.       理解处理器的三级调度. 3.       掌握先来先服务的进程调度算法. 4.       掌握短进程优先的进程调度算法. 5.       掌握时间片轮转的进程调度算法. 二.     实验设备 1.     安装windows或者linux操作系统的PC机 2.     C程序编译环境 三.     实验内容 用c语言编程模拟实现至少一个操作系统的常见进程调度算法.常见的进程调度算法有先来先

Python模拟登陆万能法-微博|知乎

Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入requests,最终用requests进行网站的抓取.优点就是不但规避了"selenium"其本身抓取速度慢的问题

Python模拟登陆万能法

此文转自:https://zhuanlan.zhihu.com/p/28587931   转录只是为了方便学习,感谢他的分享 Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入reque

KCF追踪方法流程原理

读"J. F. Henriques, R. Caseiro, P. Martins, J. Batista, 'High-speed tracking with kernelized correlation filters'" 笔记 KCF是一种鉴别式追踪方法,这类方法一般都是在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集进而更新目标检测器.而在训练目标检测器时一般选取目标区域为正样本,目标的周围区域为负样本,当然越靠近目

百度之星1002——模拟——列变位法解密

Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文. 比如: 原文:123456789 密钥:4 变换后的矩阵: 1234 5678 9xxx (最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同) 密文:159263748 再比如: 原文:Hello, welcome to my dream w

直接插入排序法原理及其js实现

直接插入排序法就像我们打扑克牌时整理牌面一样,先让我们脑补一下我们打牌的过程. 首先摸了一张6, 接着摸到一张4,比6小,插到6的前面: 又摸到一张7,比6大,插到6的后面: 又摸到一张5,比6小,比4大,插到4和6中间: .... 以上的过程,其实就是典型的直接插入排序,每次将一个新数据插入到有序队列中的合适位置里. 步骤: 1.首先将数组第1个数看成是一个有序序列. 2.将数组的第2个数按照关键字大小插入到这个有序序列中,插入后得到了一包含两个数的有序序列. 3.接下来再重复上面的步骤将第3

php 乘除法原理

w $wdays = ceil(($wmaxutime-$wminutime)/(24*3600)); $wdays = ceil(($wmaxutime-$wminutime)/243600); 二者区别.