逆向分析技术总结(转)

转自:https://blog.csdn.net/yxylwt/article/details/20841027

好久没写过文档了,今天把之前的关于逆向分析的一些心得总结一下,反正闲着也是闲着(本文不包含什么新的技术,只是将来源于各方的知识加上自己的心得进行总结而已,高手就不用看了)。
我认为软件安全攻防其本质是分析与抗分析之间的斗争。因为无论安全技术做的多么先进,一旦其代码意图被分析者掌握,就不在有安全性可言。想要更快速的分析程序不但要了解各种各样的软件保护措施,还需要更加清晰的认识逆向分析技术。下面简单的谈谈我对逆向工程的一些心得。
我认为逆向分析从总体上主要可以分为代码结构、数据结构、运算三点,以下进行详细说明(限于篇幅,下面只是大纲模式,具体内容相信网上都可以查到)。
注:对于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. 类的作用域。

三. 运算。
当数据结构识别完毕后,程序大树的树枝和树叶都有了,不过这棵树依然不是活的。而运算就像是血液一样将数据结构和代码结构紧紧的联合在一起。当运算处理完毕后,这个树才是个活生生的树,可以完成各项生命活动。运算分析我主要分为以下几点。
1. 逻辑运算。
2. 数据类型转换。
A. 零扩展。
B. 符号扩展。
3. 浮点运算。
A. 数据格式。
B. FPU寄存器。
C. 浮点操作。
4. 整数运算。
A. 加法减法。
B. 乘法除法。
C. 模运算。
D. 16、32位运算。
E. 大数运算。
5. 标志位。
A. 溢出标志位(CF/OF)。
B. 零标志位(ZF)。
C. 符号标志位(SF)。
D. 奇偶标志位(PF)。
6. 运算的代码优化及识别。

当然,真正的代码逆向分析绝对不会是按照以上的顺序死板的进行,而是灵活运用。以上所述纯粹是基础。当这些都掌握了之后,代码的逆向速度会明显的提高。这些知识整理在大脑中就像书的目录一样可以快速定位到所需要的部分(每个人的思维方式都不一样,别人怎样思维更快速我不知道)。
以上的框架也是我自己的一个学习过程。看上去和程序设计差不多,我学习的时候是通过C、C++程序的各种处理方式反过来一点一点的学习。学习一遍之后心里自然有了个简单的框架,我认为逆向分析作为基础,如果能够熟练掌握可以加快其他方面的学习进度,比如:漏洞分析、外壳分析等。磨刀不误砍柴时嘛。本文旨在抛砖引玉,希望有高手能够提供一些关于Release版的类的还原心得给我,呵呵。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容