ZC: 如何确定被调试程序已经来到了 未加壳的程序中?

ZC:  视频中是使用判断集中语言的特征

ZC:  我的方法:上面的方式 + ESP平衡

1、第1课

  (1)、单步跟踪(原则:向下的跳转==>正常F8,向上的跳转==>F4跳过(或者用F2 达到相同效果))

    【930】【05:10】一般来说,很大跨度的跳转,就跳到OEP了

  (2)、ESP定律法【1616】【08:58】

    【1733】【09:37】"pushad"之后,设置 硬件访问WORD断点

  (3)、2次内存镜像法【2235】【12:23】

    【2332】【12:55】找程序段的第1个".rsrc"节 --> F2 --> (shift)F9

    【2468】【13:41】在地址"0x00401000"处F2 --> (shift)F9

    【2486】【13:45】再单步执行

  (4)、一步直达法【2553】【14:10】

    该 方法不是上面壳 都可以用的。

    一般适用于 绝大部分的UPX壳 和 aspack壳

    【2653】【1442】反汇编窗口 --> 右键 --> 查找 --> 命令 (Ctrl+F),直接查找"PUSHAD"指令对应的"POPAD"指令

      【2750】【15:15】可选框"整个段块(E)" 我们一般不勾选它

      【2802】【15:33】下断 (F2 和 F4 的方式 都可以),然后接着单步

  脱壳的两种方法:【1010】【05:35】

    OD插件

      方式1【1065】【05:55】

      方式2【1093】【06:02】  该方式有时会出现假死的现象,稍等一会就好了

    LoadPE【1171】【06:28】:修正镜像大小-->完整转存

      【1335】【07:23】ImportREC(输入表重建程序)

ZC: 貌似 “Import REConstructor v1.6 最终版” 在 Win7x64 环境下,按钮“获取输入表”得到的信息不太全... 在XP下 就是OK的...

2、第2课

  基础脱壳教程2:手脱ASPACK壳

  ASPack 2.12 -> Alexey Solodovnikov
  工具:PEID和OD

  6种方法脱
    方法1:单步跟踪
    方法2:ESP定律
    方法3:一步直达

      【2165】【07:12】这里 直接搜索"popad",搜到的结果不一定是和开头的"pushad"是配套的,如何判断哪个"popad"是配套的?看下面有没有 大跨度的跳转?(ZC: 貌似不太靠谱啊...作为 备用方法吧...)
    方法4:2次内存镜像

    方法5:模拟跟踪
      tc eip<xxxxxx

      【3000】【10:00】".aspack"节 包含"SFX","imports","relocations" (ZC: 这是啥意思?它把 导入表 和 重定位表 都打包了?)

      【3090】【10:18】"tc eip<00430000",此时 OD的左上角 显示 "跟踪"两个字,说明OD已经在自动跟踪了,等一会 就会跳到OD的OEP去了。这个方法比较慢 (ZC: 视频中 没有等待跟踪结束... 他说 等一会 就会跳到OD的OEP去了,就算没有跳到OEP也可以继续单步跟)

    方法6:SFX

      【3543】【11:47】OD --> 选项 --> 调试设置 --> SFX -->【3678】【12:15】选择"块方式跟踪真正入口(不准确)",当然 有的要选"字节方式跟踪真正入口(很慢)" 视具体情况而定 --> OD重载一下 --> OD自动跳到了程序的入口点,来到了真正的OEP

【2795】【09:18】方法5 和 方法6 都可以 归类为 模拟跟踪法,共同之处 就是让OD自动去查找程序的OEP,当然也有不同之处

3、第3课

  基础脱壳教程3:手脱NSPACK(北斗)

  nSPack 1.3 -> North Star/Liu Xing Ping

  NsPacK V3.7 -> LiuXingPing *

  at GetVersion

  ESP定律法

  单步跟踪法

  【1428】【04:45】2次内存镜像法。找不到"QQ个性网"的".rsrc"节,找不到".rsrc"节就不能用内存镜像法了吗?当然不是。

    【1580】【05:15】理解PE知识的都知道,程序运行过程中 是从上向下开始解压的。我们以前先在".rsrc"节下断点,然后再在0x00401000处下断点,它把资源段解压完毕之后,code段当然也已经解压完毕。【1700】【05:40】既然没有找到资源文件,∴我们直接在0x00401000处下断点 (ZC: 这个有点跳tong啊...不是应该在code段的下面一个节上下断点,然后第2次再在code段[0x00401000处]上下断点的吗?),【1745】【05:48】断下来的地方是0x003F0273,然后 再来 单步跟。【2020】【06:43】来到壳的出口。【2045】【06:49】来到OEP。

    ZC: 这里不理解的点:在"code"节(也就是0x00401000处)下了断点,为什么断下来的地方是0x003F0273?难道是 壳把代码放置到那边 然后在运行?

  【2080】【06:55】用模拟跟踪法的话,输入"tc eip<00430000"

  【2386】【07:57】这个壳(程序"nspack 1.3.exe"的壳)比较特殊,我们还可以使用一种比较巧妙的方法。北斗使用VC++写的,于是可以直接下这个断点"at GetVersion"

    【2590】【08:38】单步一下。(ZC: 来到用户代码领空后) 向上拉一下,发现 这就是OEP

    ZC: "nspack 1.3.exe"就是加壳程序,它用自己把自己加了一下壳

    【2727】【09:05】这种方法,一般情况下适合于 北斗3.0以前的壳

  【2915】【09:43】PEiD上面也没发现的时候,看"EP区段" 这里是"nsp0" 也就是nspack 也就是北斗,它的EP区段显示为北斗的壳

4、第4课

  基础脱壳教程4:手脱FSG壳
  FSG 2.0 -> bart/xt

  重点为修复
  手动、查找IAT

  00425000 77DA6BF0 ADVAPI32.RegCloseKey
  00425280 7C838DE8 kernel32.LCMapStringA

  【210】【01:10】注意这里的连续3个跳转.【258】【01:25】仔细观察这个无条件跳转,脱壳多了 经验多了 就知道 壳作者为了防止被脱壳 不会直接将OEP的地址以明文显示 一般都是放在寄存器中,我们运行到这里试一下,【350】【01:56】来到OEP

    ZC: 这里 他锁定JMP的讲解 还是理由不充分,应该只是怀疑然后验证一下(大胆假设,小心验证),然后 得到结论 这个JMP确实很关键

  【550】【03:05】讲授“手动、查找IAT”

    【760】【04:13】OD命令"d 425210"

      ZC: 貌似 如果这里键入命令"dd 425210"的话 只会显示数值,而 "d 425210" 会显示注释(里面是API名字) 。错了,两者效果差不多,不知有何区别?还是说"d"后面不跟"w"/"c"/"d"等(如"dd"/"dc"/"dw"等)的话,默认就是"dd"?

    【870】【04:50】向下拉,拉到什么地方呢,就是下面全是0的位置

      【890】【04:56】拉到这个位置(ZC: 他说要拉到"下面全是0的位置",但是 这里明显不是 他所说的位置啊...)

      ZC: 这里 OD中的手动查到的 IAT是这样的,那么 用LoadPE查看 加了壳的exe的IAT 是什么样子的呢?用LoadPE查看 用LoadPE脱了壳的exe的IAT 是什么样子的呢?

      【1045】【05:48】importREC1.6中 IAT的大小 的懒惰设置方式:直接填入 16进制的 1000。 当然 输入 1000 之后,会带来很多的垃圾指针

        【1133】【06:17】"显示无效函数"(ZC: 注意此时显示的 无效指针的ptr为0x7FFFFFFF,这样的指针估计就是垃圾指针 应该不可能有这样的指针的 而且还是多个指针都是0x7FFFFFFF),直接“剪切指针”

  【1233】【06:50】以后遇到修复完之后 还是无法运行的时候,我们可以用这种方法去尝试一下。

  【1450】【08:05】(ZC: 前面讲解了 单步跟踪法 和 ESP定律法)这里讲解另一种方法,暂且称之为 特殊的ESP定律法(没有遵循 堆栈平衡。ZC: 这样也行?)

    【1550】【08:35】开始操作

    【1600】【08:53】重新来(ZC: ESP: 0x12FFC4-->0x47A1E8-->0x47A208) 【1640】【0906】看此时的堆栈

      ZC: pushad/popad 各个寄存器的顺序是什么?

    【1755】【09:45】ZC: 反汇编窗口-->某条指令处-->右键-->断点--> 可以设置各种断点 (注意 其中有一个 硬件执行断点)。ZC: 当有时候 F2/F4 都没有效果的时候,可以使用这里的设置断点的方式。

      ZC: 有时,上面的设置断点的方式也不行... 我的情况就是这样,弄来弄去 感觉像是在单步执行 而且还会跳到系统代码空间去执行... 很无奈...

      ZC: 我这里找到另一种方式,可以行的通:

      ZC:  "dd 指令所在地址"-->在 数据窗口中设置 硬件执行断点--> (Shift)F9 (或者直接设置硬件执行断点 "he 指令所在地址")

5、第5课 (用9中方法来脱壳)

  基础脱壳教程5:手脱PECompact2.X的壳
  PECompact 2.x -> Jeremy Collake

  1、单步
  2、ESP定律

【578】【03:12】介绍几种 比较特殊的方式,问我为什么要这么做,我也没法告诉大家...

  ZC: 我的理解,下面的几种 bp api的方式,肯定是研究过 这个壳的源码,知道这个壳用了这几个api 。

  3、BP VirtualFree  【568】【03:38】
    SHIFT+F9,取消断点
    ALT+F9     (这个快捷键是 OD-->调试-->返回到用户代码(U))
    查找 push 8000(特征码)  【750】【04:10】push 8000 这个 特征码,我们记住,可以以后脱强壳的时候 我们还会用到 【815】【04:30】在反汇编窗口 直接搜索"push 8000"
    运行到这
    单步跟
  4、BP VirtualFree  【915】【05:05】
    两次SHIFT+F9 
    中断后取消断点,Alt+F9返回
    单步走。
  5、【1100】【06:06】

    0040A86D > B8 74DE4500 mov eax,qqspirit.0045DE74
    bp 0045de74

    【1260】【06:59】这里,如果我们单步的话,程序走到"retn",程序就跑起来了,∴ 我们在"retn"的下一行设置断点 (ZC: 这个说法有点扯淡吧?单步走程序就会跑飞,而F2+Shift&F9+F2 就不会跑飞?在OD里面,直接运行到所选位置,不是一条一条汇编指令执行的?有什么特殊?是OD的问题 还是 程序里面对单步调试做了处理?)(ZC: 根据 “【2330】【12:55】”处的现象,这里使用 类似F4的方式 纯粹是 经过N次测试后的结论,而非理论分析的结果,∵ "retn"后面的指令 完全有可能不会执行,从这里看 没有十足的证据能够证明程序一定会执行"retn"下面的指令)
  6、【1420】【07:52】

    bp VirtualAlloc SHIFT+F9运行  【1515】【08:25】
    取消断点
    ALT+F9
    向下拉,看到JMP。运行到这

  7、最后一次异常法;  【1685】【09:20】
    取消所有异常。
    2次跑飞。
    找SE句柄

    转到SE xxxx处 (ZC: 或者 堆栈窗口"SE处理程序"处-->右键-->反汇编窗口中跟随)

    F2 --> Shift+F9 --> F2

      【2015】【11:11】Ctrl+G "0045DE74",来到的地址就是 “【1260】【06:59】”处
  8、两次内存  【2255】【12:30】ZC: 这里有".rsrc"节

    【2325】【12:53】第2次在0x00401000处设置断点,然后来到的地址也是 “【1260】【06:59】”处

      【2330】【12:55】然后我们单步跟 (ZC: 这里又 单步跟 了...然后 转了几下 程序跑飞了...)

    【2480】【13:45】ZC: 这里,可以看到,2次内存断点 就隔了几个指令的位置... 而且 也就是“【1260】【06:59】”处

    ZC: 2次内存镜像法,每次断下来的指令地址 值得研究一下,看看是否符合 我的理解... (经测试查看 这里断下来 实际上效果就相当于内存访问断点被断下来)
  9、at GetVersion  【2855】【15:50】

    ZC: 利用的是 被加壳程序是 VC++程序,里面 一般会调用 GetVersion

6、

7、

8、

转载于:https://www.cnblogs.com/debugskill/p/5576511.html

脱壳_详细_使用的方法_01相关推荐

  1. python绘制剖面图_干货!告诉你详细的剖面图绘图方法和步骤

    首先,我们总结一下制图7步: 01.分析图纸剖面图首先要进行分析,分析已知条件和图纸,方便进行体块的拆解,接下来才能开始进入绘制阶段. 02.定位绘制从定位开始,所有绘制出来的图样,都需要对它们进行定 ...

  2. oracle怎么自动备份数据,ORACLE数据库自动备份_详细步骤

    <ORACLE数据库自动备份_详细步骤>由会员分享,可在线阅读,更多相关<ORACLE数据库自动备份_详细步骤(9页珍藏版)>请在人人文库网上搜索. 1.ORACLE数据库自动 ...

  3. pythonselenium实战 excel读取和写入_Python3.6+selenium2.53.6自动化测试_读取excel文件的方法...

    环境: 编辑工具: 浏览器: 安装xlrd 安装DDT 一 分析 1 目录结构 2 导入包 二 代码 import xlrd class ExcelUtil(): def __init__(self, ...

  4. 外部方法调用内部_私有属性和私有方法

    私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...

  5. ava_212_反射机制_动态操作_构造器_方法_属性_练习

    package java_212_反射机制_动态操作_构造器_方法_属性_练习; /** 属性 */ public class User { private int id; private int a ...

  6. 技术系统进化法则包括_技术系统进化法则_十六种典型创新方法

    技术系统进化法则_十六种典型创新方法 技术进化法则是技术系统为提高自身的有用功能,从一种状态过渡到另一种状态时,系统内部组件之间.系统组件与外界环境间本质关系的体现.即技术系统与生物系统一样,也有一个 ...

  7. 玉米社:什么是长尾关键词_举例_拓词方法思路

    什么是长尾关键词_举例_拓词方法思路 长尾关键词主要针对核心关键词而言,给核心关键词加上前缀.后缀.中间修辞词,即形成相应的长尾关键词. 例如,你的核心词为网络营销培训,那么深圳网络营销培训.专业网络 ...

  8. python课本答案上海交大第五章_高等数学课后习题答案上海交大版完整版非常详细_.pdf...

    高等数学课后习题答案上海交大版完整版非常详细_ 一诺整理 一诺整理 一一诺诺整整理理 高等数学 高等数学 课后习题答案 课后习题答案 (上海交大版) (上海交大版) ((上上海海交交大大版版)) /w ...

  9. 约战精灵再临服务器维护,约战精灵再临进不了游戏怎么办_无法进入游戏解决方法...

    约战精灵再临进不了游戏怎么办?相信有小伙伴遇到了游戏开服后进不了游戏等各种情况,这些情况往往重启游戏也解决不了,比较棘手,本篇就为大家带来约战精灵再临进不了游戏解决方法介绍,一起来看看吧! 约战精灵再 ...

最新文章

  1. 基于图形剪切的图像分割
  2. Python的locals()函数
  3. 我们可以无损放大一个Transformer模型吗?
  4. mockito接口_什么是Mockito Extra接口?
  5. 如何设计安全的用户登录功能
  6. iPhone 13外观四年以来首次改动:真的尽力了
  7. 【ubuntu】开机一直“/dev/sda3:clean, XXX files, XXXX blocks”解决方法
  8. 录制方式及一些脚本字段信息
  9. kettle使用文件导入到Postgresql出现如下几种问题的总结
  10. Linux卸载JDK的方法
  11. mysql分页查询公式
  12. 前端组件化开发实践总结
  13. 杭州市民卡领取查询网址
  14. 【ros学习】11.ros建模时遇到No transform from [back_caster_link] to [base_link]不显示轮子
  15. html 链接nofollow,ueditor给超链接默认添加rel=nofollow标签
  16. 安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告...
  17. C++项目和解决方案的区别
  18. UML中各图形或图标表示的意思
  19. 浅谈Object.assign
  20. VS 2013 产品密钥

热门文章

  1. mysql断开同步并记录位置_数据库同步自动断开问题的处理
  2. java中不能定义为变量名称_Java,“变量名”不能解析为变量
  3. 按条件分类_保税仓储企业能否同时存储非保货物?“仓储货物安装台分类监管”如何申请?...
  4. php hugepage,【原创】解决Redis启动报错:Transparent Huge Pages (THP) support enabled in your kernel...
  5. mysql安装与配置的截图_windows下MySQL5.6版本安装及配置过程附有截图和详细说明...
  6. c语言case多语句的取值,Switch Case语句中多个值匹配同一个代码块的写法
  7. 后台系统可扩展性学习笔记(十二)NoSQL
  8. 【C++基础】异常处理机制概要
  9. c++ cdi+示例_C ++'not'关键字和示例
  10. java uuid静态方法_Java UUID timestamp()方法与示例