逆向分析技术总结 (1)

社区服务
高级搜索
猴岛论坛电脑百科逆向分析技术总结 (1)
发帖 回复
正序阅读 最近浏览的帖子最近浏览的版块
1个回复

[网络问题]逆向分析技术总结 (1)

楼层直达
不懂也不知道

ZxID:10586231

等级: 禁止发言

举报 只看楼主 使用道具 楼主   发表于: 2010-07-21 0
逆向分析技术总结 (1)
,今天把之前的关于逆向分析的一些心得总结一下,反正闲着也是闲着(本文不包含什么新的技术,只是将来源于各方的知识加上自己的心得进行总结而已,高手就不用看了)。

  我认为软件安全攻防其本质是分析与抗分析之间的斗争。因为无论安全技术做的多么先进,一旦其代码意图被分析者掌握,就不在有安全性可言。想要更快速的分析程序不但要了解各种各样的软件保护措施,还需要更加清晰的认识逆向分析技术。下面简单的谈谈我对逆向工程的一些心得。

  我认为逆向分析从总体上主要可以分为代码结构、数据结构、运算三点,以下进行详细说明(限于篇幅,下面只是大纲模式,具体内容相信网上都可以查到)。

  注:对于Debug版本和Release版本程序的处理思路上是一致的,因此下面没有特别区分。但实现方式却有很大区别,很多Release版本代码处理方式我还在摸索中,因此就不写了。

  一.  代码结构。

  代码结构决定了程序的执行过程以及数据走向。首先理解程序的代码结构,可以把整个程序的框架给勾勒出来。接下来进行各个部分的点缀。可以有效提高逆向速度。代码结构分析总的分为以下几点:

  1.  比较操作。

  A.  有符号数比较。

  B.  无符号数比较。

  C.  条件码(各种条件码的组合判断我记不住,可以列成表格以便查询。平时用上的不多,除非要精确还原代码)。

  2.  条件分支。

  A.  单分支条件(if)。

  B.  双分支条件(if-else)。

  C.  Switch条件。

  D.  组合条件。

  E.  纯算术实现逻辑分支(运算后条件码的判断,具体可参看加密解密第三版)。

  F.  条件设置指令(SETcc)。

  G.  条件传输指令(CMOVcc)。

  3.  循环。

  A.  先执行循环(do-while)。

  B.  后执行循环(for/while)。

  C.  循环控制及break/continue。

  4.  函数。

  A.  函数调用及功能的快速识别。

  B.  调用约定。

  C.  参数传递方式。

  D.  堆栈平衡。

  E.  函数导出及导入。

  5.  代码优化。

  A.  代码速度优化。

  B.  代码大小优化。

  二.  数据结构。

  当识别了代码结构并勾勒出整个代码框架之后,接着要做的就是识别程序中的各种数据结构。比如程序是一棵大树,现在已经有了枝干,我们要做的就是添加树叶。数据结构的分析我主要分为以下几点。

  1.  堆栈(Debug版与Release版的堆栈使用有很大区别)。

  2.  全局变量。

  3.  局部变量。

  A.  堆栈中的局部变量识别。

  B.  寄存器变量。

  4.  变量的导入导出。

  5.  常量。

  6.  数组。

  A.  简单数组。

  B.  多维数组。

  7.  结构体与联合体。

  8.  链表。

  A.  单向链表。

  B.  双向链表。

  C.  循环链表。

  D.  二叉树。

  E.  图等高级链表我没逆向过。写在这里只是说明一下思路。

  9.  类。

  Release版程序的类的还原我目前还不是很熟悉。对于Release版没被使用过的类成员的分析还在摸索中。

  A.  成员变量。

  B.  普通成员函数(容易与编译器默认的构造函数混淆)。

  C.  虚函数表及继承派生。

  D.  通过构造函数识别类与类的关系。

  E.  析构函数。

  F.  类的作用域。

  三.  运算。

  当数据结构识别完毕后,程序大树的树枝和树叶都有了,不过这棵树依然不是活的。而运算就像是血


本帖de评分: 1 条评分 DB +15
DB+15

感谢分享

┌.淫穆”

ZxID:10737016

等级: 上将
..

举报 只看该作者 沙发   发表于: 2010-07-21 0
感谢你的分享期待你的下次发帖哦。
« 返回列表
发帖 回复