脱壳_详细_使用的方法_01

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 函数式编程_Android开发人员的函数式编程-第1部分

android 函数式编程by Anup Cowkur通过安纳普考库(Anup Cowkur) Android开发人员的函数式编程-第1部分 (Functional Programming for Android Developers — Part 1) Lately, I’ve been spending a lot of time learning Elixir, an awesome functional programming language…

java编程 内存_Java编程技术之浅析JVM内存

JVMJVM->Java Virtual Machine:Java虚拟机,是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。基本认知&#xff1a;1.JVM是用于运行Java代码的假象计算机&#xff0c;主要有一套字节码指令…

bzoj1116: [POI2008]CLO

传送门&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id1116 题目大意&#xff1a;Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得&#xff1a;每个town都有且只有一个入度 题解&am…

java排序算法大全_各种排序算法的分析及java实现

排序一直以来都是让我很头疼的事&#xff0c;以前上《数据结构》打酱油去了&#xff0c;整个学期下来才勉强能写出个冒泡排序。由于要找工作了&#xff0c;也知道排序算法的重要性(据说是面试必问的知识点)&#xff0c;所以又花了点时间重新研究了一下。排序大的分类可以分为两…

Cocos2d-x 3.0 简捷的物理引擎

Cocos2d-x 3.0 开发&#xff08;九&#xff09;使用Physicals取代Box2D和chipmunk http://www.cocos2d-x.org/docs/manual/framework/native/physics/physics-integration/zh -- 官网Demo 水墨鱼的专栏 http://www.cocos2d-x.org/docs/catalog/zh --- 官方 搭“server” 须要哪…

google i/o_Google I / O 2017最有希望的突破

google i/oby Aravind Putrevu通过Aravind Putrevu Google I / O 2017最有希望的突破 (The most promising breakthroughs from Google I/O 2017) Google I/O is one of the biggest developer conferences. This year was particularly exciting. There were two keynotes: o…

java clex 中的 IloLPMatrix

最近看 cplex 在 java 的 callback&#xff0c;发现它给的 callback 例子中&#xff0c;都是用 IloLPMatrix 这个类放约束条件&#xff0c;在 IloLPMatrix 中&#xff0c; 每个约束条件存储在 IloRange 中。 使用 IloLPMatrix 的好处是&#xff0c;这个类可以方便查看模型中的求…

6/12 Sprint2 看板和燃尽图

转载于:https://www.cnblogs.com/queenjuan/p/5578551.html

mailto 附带附件_我和我的朋友如何将附带项目发展为每月$ 17,000的业务

mailto 附带附件In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we oursel…

转:PHP应用性能优化指南

程序员都喜欢最新的PHP 7&#xff0c;因为它使PHP成为执行最快的脚本语言之一&#xff08;参考PHP 7 vs HHVM 比较&#xff09;。但是保持最佳性能不仅需要快速执行代码&#xff0c;更需要我们知道影响性能的问题点&#xff0c;以及这些问题的解决方案。本文涵盖了保障PHP应用平…

java 运行异常处理_Java编程异常处理和I/O流

重点&#xff1a;  1&#xff0e;在编写程序时&#xff0c;要正确地使用捕获例外和声明抛出异常的两种例外处理的方法。2&#xff0e;遇到实际问题时&#xff0c;要根据需要正确使用各种输入&#xff0f;输出流&#xff0c;特别是对中文使用适当的字符输入流。3&#xff0e;正…

反射练习

1.反射 一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。 新建一个Person类&#xff1a; public class Person { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age age; } pu…

开源 物联网接入_我们刚刚推出了开源产品。 那么接下来会发生什么呢?

开源 物联网接入by Victor F. Santos由Victor F.Santos 我们刚刚推出了开源产品。 那么接下来会发生什么呢&#xff1f; (We just launched an open source product. So what happens next?) Last month me and the ninja god Pedro launched GitShowcase, a plug-and-play p…

Class? getClass()

getClass()方法属于Object的一部分,它将产生对象的类,并且在打印该类时,可以看到该类类型的编码字符串,前导"["表示这是一个后满紧随的类型的数组,而紧随的"I"表示基本类型int, //: initialization/OptionalTrailingArgrments.java package object;import …

log4j使用说明

1.log4j代码中修改输出级别&#xff1a;如&#xff1a; protected final Logger logger LoggerFactory.getLogger(Test.class); 将其转成实现类&#xff0c;修改输出级别即可System.out.println(logger.isDebugEnabled()?"debug is true":"debug is false&quo…

java list集合增删改_Java中集合类list的增删改查

今天给大家带来的是Java中list类的使用&#xff0c;java.util 包提供了list类来对线性数据操作List接口是Collection接口的子接口&#xff0c;List有一个重要的实现类--ArrayList类&#xff0c;List中的元素是有序排列的而且可重复&#xff0c;所以被称为是序列List可以精确的控…

IIS6、IIS7和IIS8各版本的差别

一、写在前面 目前市面上所用的IIS版本估计都是>6.0的.所以我们主要以下面三个版本进行讲解 服务器版本IIS默认版本server20036.0server20087.0server20128.0二、IIS6的请求过程 由图可知,所有的请求会被服务器中的http.sys组件监听到,它会根据IIS中的 Metabase 查看基于该 …

Android Studio 插件的使用

1、GsonFormat https://github.com/zzz40500/GsonFormat 2、Android SelectorChapek http://blog.csdn.net/weifei554287925/article/details/41727541

函数式编程基础_在收件箱中免费学习函数式编程的基础

函数式编程基础by Preethi Kasireddy通过Preethi Kasireddy 在收件箱中免费学习函数式编程的基础 (Learn the fundamentals of functional programming — for free, in your inbox) If you’re a software developer, you’ve probably noticed a growing trend: software ap…

安卓Java虚拟机大小_虚拟机为安卓流畅度背锅,是因为关系数十万程序员饭碗?...

导读&#xff1a;虚拟机相当于应用程序在不同运行环境中的翻译。说起谷歌安卓系统的“虚拟机”&#xff0c;很多人爱拿它和苹果iOS做比较&#xff0c;结果&#xff0c;安卓的很多短腿儿都让虚拟机背了锅&#xff0c;比如安卓手机运存容量是iPhone的两到三倍&#xff0c;流畅度却…