Re-脱壳技术 脱壳学习(2): 脱壳七法

1. ESP定律

使用条件:OD载入之后F8单步一下,寄存器ESP中存放的值被改变(开始第一条语句为pushad

1. 用OD载入

在这里插入图片描述

2. 先F8单步运行一步

在这里插入图片描述
发现ESP寄存器被改变,可以使用ESP定律
在这里插入图片描述

3.设置硬件断点

右键数据窗口跟随,|| 或者直接点HW break[ESP],此插件会自动帮忙下好硬件断点
数据窗口设置
在这里插入图片描述
从最开始的数据开始选,(别选太少就行)然后右键→断点→硬件访问→这里的三个随便选一个都可以,我一般选word
此时菜单栏→调试→硬件断点 已经有了我们下的断点
在这里插入图片描述

4.触发断点

然后F9运行程序,来到这里,此时可以删除硬件断点了
在这里插入图片描述
然后F8单步往下在这里插入图片描述
如果遇到向上图这样的,向上的代码,则在下一行代码(上图中的为地址0x004052E8)右键→断点→运行到选定位置(快捷键F4
在这里插入图片描述
删除图中的灰色代码(db 00)可以选择右键→分析→从模块中删除分析
在这里插入图片描述
分析完的模样
在这里插入图片描述
然后继续F8,此时出现了一个jmp大跳转(说明离OEP很近了)我们继续F8向下。
此时我们来到了OEP
在这里插入图片描述

2. 单步跟踪

  1. 打开程序按F8单步向下, 尽量实现向下的jmp跳转
  2. 会经常遇到大的循环, 这时要多用 F4 来跳过循环
  3. 如果函数载入时不远处就是一个call(近call), 那么我们尽量不要直接跳过, 而是进入这个call
  4. 一般跳转幅度大的jmp指令, 都极有可能是跳转到了原程序入口点(OEP)

如果执行到某一个call程序运行起来了,在call下断点,重新载入F7步入call继续单步

3. 内存镜像法

大致步骤

  1. 选择菜单的选项->调试选项->异常,勾选所有的忽略异常
  2. 按下ALT+M, 打开内存镜像, 找到程序的第一个.rsrc, 按F2下断点, 然后按SHIFT+F9运行到断点
  3. 再按ALT+M, 打开内存镜像, 找到程序的第一个.rsrc上面的.text(在示例中是00401000处), 按F2下断点. 然后按SHIFT+F9(或者是在没异常情况下按F9)

1.OD设置

  1. OD菜单栏→选项→调试设置
    在这里插入图片描述
  2. 打开【异常】标签,将所有的框都勾选上,也就是忽略所有异常
    在这里插入图片描述

2. 内存镜像下.rsrc断点

  1. 打开内存镜像窗口(快捷键Alt+M)或点击下图按钮
    在这里插入图片描述
  2. 找到当前被调试程序的rsrc段
    在这里插入图片描述
  3. F2下断点
    在这里插入图片描述
  4. F9运行
    在这里插入图片描述

3.内存镜像下.text断点

  1. 下断点
    在这里插入图片描述
  2. 运行
    **加粗样式**

4.单步跟踪

单步到这里的时候有两个向上的jmp跳转,选择jmp的下一行代码,然后F4运行到选定位置
在这里插入图片描述
继续单步
在这里插入图片描述

来到OEP
在这里插入图片描述

4. 最后一次异常

  1. 点击选项->调试选项—>异常, 把里面的√全部去掉! 按下CTRL+F2重载下程序
  2. 按SHIFT+F9, 直到程序运行, 记下从开始按SHIFT+F9到程序运行的次数m
  3. CTRL+F2重载程序, 按SHIFT+F9(这次按的次数为程序运行的次数m-1次
  4. 在OD的右下角我们看见有一个"SE 句柄", 这时我们按CTRL+G, 输入SE 句柄前的地址
  5. 按F2下断点,然后按SHIFT+F9来到断点处, F8单步跟踪

1. OD设置

  1. OD菜单栏→选项→调试设置
    在这里插入图片描述
  2. 不忽略所有异常,取消全部的勾
    在这里插入图片描述
    重载程序

2.记下从开始按SHIFT+F9到程序运行的次数m

第一次
在这里插入图片描述
第二次打开,摁了两次,则m=2

3. 重载,摁m-1次shift+F9

4. 下断点

在这里插入图片描述

  1. 在【SE处理程序】或【SE句柄】右键→反汇编窗口跟随
    在这里插入图片描述
  2. F2下断点
  3. shift+F9运行

5.单步跟踪

单步跟踪来到OEP

5. SFX

  1. 设置OD, 忽略所有异常, 也就是说异常选项卡里面都打上勾
  2. 切换到SFX选项卡, 选择"字节模式跟踪实际入口(速度非常慢)", 确定
  3. 重载程序(如果跳出是否"压缩代码?“选择"否”, OD直接到达OEP)

1.OD设置

在这里插入图片描述

2. 切换至SFX选项卡

选择 字节方式跟踪真正入口出(速度非常慢)
在这里插入图片描述
点击【确定】

3. 重载程序

重载后会自动跟踪
在这里插入图片描述
只需等待即可

4.来到OEP

等待其跟踪完之后,来到OEP
在这里插入图片描述

5.使用完毕将OD设置还原

6. 出口标志

1.寻找压栈命令

这里最开始的压栈命令为pushad,则对应的出栈命令则为popad
在这里插入图片描述

2.查找popad命令

  1. 右键→查找→命令(或者使用快捷键ctrl+F)
    在这里插入图片描述

  2. 输入popad,并取消【整个块】前面的框勾选
    在这里插入图片描述

  3. 点击【查找】

  4. 先在popad那条命令,F4,执行到选定位置。
    如果程序运行,则寻找下一个popad,(快捷键ctrl+l)直到F4后程序不运行,则找到对应pushad的那个popad

第一次在这里插入图片描述
第二次

第三次
在这里插入图片描述
第四次
在这里插入图片描述
疑似,找到OEP,F4运行到此处的popad,发现程序没有运行
在这里插入图片描述
然后F8单步跟踪找到OEP
在这里插入图片描述
在这里插入图片描述

7. 模拟跟踪

1.使用内存镜像法

2.在内存镜像中寻找.nPack段

在命令框中输入tc eip < xxx其中xxx为.nPack段的地址
在这里插入图片描述
然后OD会自动跟踪,等结果就好

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
步骤 步骤 的概念: 所谓“”就是专门压缩的工具。 这里的压缩并不是我们平时使用的RAR、ZIP这些工具的压缩,的压缩指的是针对exe、com、和dll等程序文件进行压缩,在程序中加入一段如同保护层的代码,使原程序文件代码失去本来面目,从而保护程序不被非修改和反编译,这段如同保护层的代码,与自然界动植物的在功能上有很多相似的地方,所以我们就形象地称之为程序的的作用: 1.保护程序不被非修改和反编译。 2.对程序专门进行压缩,以减小文件大小,方便传播和储存。 和压缩软件的压缩的区别是 压缩软件只能够压缩程序 而经过压缩后的exe、com和dll等程序文件可以跟正常的程序一样运行 下面来介绍一个检测的软件 PEID v0.92 这个软件可以检测出 450种 新版中增加病毒扫描功能,是目前各类查工具中,性能最强的。 另外还可识别出EXE文件是用什么语言编写的VC++、Delphi、VB或Delphi等。 支持文件夹批量扫描 我们用PEID对easymail.exe进行扫描 找到的类型了 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 说明是UPX的 下面进行 步骤2 对一个加了的程序,去除其中无关的干扰信息和保护限制,把他的去,解除伪装,还原软件本来的面目。这个过程就叫做成功的标志 后的文件正常运行,功能没有损耗。 还有一般后的文件长度都会大于原文件的长度。 即使同一个文件,采用不同的软件进行,由于软件的机理不通,出来的文件大小也不尽相同。 关于有手动和自动 自动就是用专门的 很简单 按几下就 OK了 手动相对自动 需要的技术含量微高 这里不多说了 UPX是一种很老而且强大的 不过它的机随处就能找到 UPX本身程序就可以通过 UPX 文件名 -d 来解压缩 不过这些需要的 命令符中输入 优点方便快捷 缺点DOS界面 为了让大家省去麻烦的操作 就产生了一种叫 UPX SHELL的外软件 UPX SHELL v3.09 UPX 外程序! 目的让UPX的傻瓜化 注:如果程序没有加 那么我们就可以省去第二步的了,直接对软件进行分析了。 完后 我们进行 步骤3 运行程序 尝试注册 获取注册相关信息 通过尝试注册 我们发现一个关键的字符串 “序列号输入错误” 步骤4 反汇编 反汇编一般用到的软件 都是 W32Dasm W32dasm对于新手 易于上手 操作简单 W32Dasm有很多版本 这里我推荐使用 W32Dasm 无极版 我们现在反汇编WebEasyMail的程序文件easymail.exe 然后看看能不能找到刚才的字符串 步骤5 通过eXeScope这个软件来查看未能在w32dasm中正确显示的字符串信息 eXeScope v6.50 更改字体,更改菜单,更改对话框的排列,重写可执行文件的资源,包括(EXE,DLL,OCX)等。是方便强大的汉化工具,可以直接修改用 VC++ 及 DELPHI 编制的程序的资源,包括菜单、对话框、字符串表等 新版可以直接查看 加文件的资源 我们打开eXeScope 找到如下字串符 122,"序列号输入错误 " 123,"恭喜您成为WebEasyMail正式用户中的一员! " 124,注册成功 125,失败 重点是122 步骤6 再次返回 w32dasm * Possible Reference to String Resource ID=00122: "?鲹e ?" 但是双击后 提示说找不到这个字串符 不是没有 是因为 "?鲹e ?"是乱码 w32dasm对于中文显示不是太好 毕竟不是国产软件 先把今天会用到的汇编基本指令跟大家解释一下 mov a,b ;把b的值赋给a,使a=b call :调用子程序 ,子程序以ret结为 ret :返回主程序 je或jz :若相等则跳转 jne或jnz :若不相等则跳转 push xx:xx 压栈 pop xx:xx 出栈 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 我们搜索 Possible Reference to String Resource ID=00122 因为对E文支持很好 我们来到了 * Referenced by a (U)nconditional or

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forgo7ten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值