当前位置:文档之家› 软件逆向分析介绍

软件逆向分析介绍


感谢您的关注
以上有不当之处,请大家给与批评指 正,谢谢大家!
请输入内容 工具结合使用,分析手段动静结合
– 如理解有价值的二进制程序,IDA可以全局把握整个程序的架 构和构造,并在可知的执行路径上进行相关的实际跟踪;
– 又如免杀处理OllyDbg和C32Asm都可以结合使用进行免杀时 的脱壳和写覆盖处理;
– 密码算法的识别中IDA的运用。
5.实际工作中相关的逆向分析
1.软件逆向工程的概念
• 逆向工程 从任何人造的东西中提取知识或者设计规划的过程。
说明:逆向工程的概念早在计算机或者说现代技术出现之前就已 经存在。因此逆向工程的范围也不止计算机领域,还包括科学研 究和工业制造等。
• 计算机领域的逆向工程
逆向分析
硬件逆向 软件逆向
大范围的分析观察,整体把握 系统级逆向
可执行文件
CoderSurfer/x86
IDA Pro
解析 二进制
构造 控制流图 (CFG)
连接器 Connector
值集分析 (VSA)
CodeSurfer
构建 系统依赖图
(SDG)
代码浏览
安全分析 反编译器 代码重构 用户脚本
4.软件逆向分析的发展现状
– Hex-rays 反汇编调试器IDA的商业插件,针对Intel x86系列下的程序, 在IDA反汇编的基础上进行全局或者拒不的代码逆向分析,得 到类C的高级代码表示。
2.软件逆向工程的应用
• 帮助理解
Atari和Nintendo游戏开发兼容
– 交互协同工作 – 算法的理解学习
根据算法特征进行(主要密码算法)
– 代码检查 比较程序的相似性 • 比较代码
• 查找恶意软件
• 查找软件漏洞 • 查找软件BUG
漏洞的利用和挖掘(还需结合软件调试技术)
• 代码编译
– 平台上优化 – 平台间移植 在逆向分析得到的代码高级抽象表示基础上进行正向工程
– 其它开源反汇编引擎
静态反汇编: •IDA最全面强大; •C32Asm比较轻快;
4.软件逆向分析的发展现状
• 反编译 – dcc/UQBT/Boomerang • dcc:Cristina Cifuentes在澳大利亚昆士兰大学博士论文中 的反编译原型系统,作为从DOS到C反编译EXE文件的先 驱代表,主要通过传统编译优化技术和图论来执行相关分 析操作,1994年停止发展更新,有许多的局限,只是概念 上的证明程序。 • UQBT:主要作者Cristina Cifuentes,其作为一个通用的二 进制翻译框架,输入的二进制代码通过逆向分析产生高级 的C代码,再通过普通的C编译器编译和优化,最终生成目 标平台上对应代码。UQBT目标识二进制翻译,但其框架 中前端技术可供逆向分析借鉴使用。 • Boomerang 主旨为通过开源社区发展一个通用的反编译器。 其重用了dcc和UQBT中的相关技术,并成为新代码逆向研 究的主题,不过其也存在不足。
现研究的是动态二进制翻译——UQDBT
4.软件逆向分析的发展现状
– CodeSurfer和CodeSufer/x86
• CodeSurfer:GRAMMATECH公司的一款功能强大的代码 分析、理解、查看工具。
• CodeSurfer/x86:整合IDA Pro和CodeSufer两大工具,后者 在前者反汇编的结果上进行逆向分析,目标是Inte x86下的 可执行文件,作用在于帮助用户进行代码理解和安全性分 析等,并被美国空军、海军和其它安全部门广泛采用。
逆向工程
(Reverse Engineering)
• 正向工程解决了功能的实现,说明了哪些功能需要增加和删除;
• 逆向工程解决了程序理解的问题;
• 再工程改变了系统的功能和方向,最具根本和深远影响的扩展 (再工程除了正向和逆向的分析,还有重构的问题,它是在抽象 的层次上改变表示形式,改变了系统,但不改变功能)。
数据流分析 (Data Flow Analysis)
控制流分析 (Control Flow Analysis)
其它分析和优化 (Other级抽象代码
4.软件逆向分析的发展现状
根据应用用途大致分为反汇编核反编译两个发展方向 • 反汇编
– IDA • 全名(IDA Pro Disassembler and Debugger), DataRescue公司的强大专业反汇编调试软件; • 最好的静态反汇编工具,针对80X86架构作了许多的优化 和额外的识别分析(现今分析最为透彻的产品),当然也 支持其它架构的处理器,另外也支持跟踪调试。 • 强大的功能扩展 – Processor:扩展处理器支持 研究比较成熟(OpenRCE) – Plug-in:IDA功能扩展 – Loader:支持不同的可执行文件支持 – Debugger:不同平台和(远程)调试的支持
• 反编译 常用工具Hex-rays,主要用于局部函数的反编译,便于理解函数。
• 其它 – 内核调试 深入底层研究的重要必备手段,也是之后技术突破所必须的, 现阶段内核调试都是用Windbg进行联机调试,而调试的代码 及汇编语言代码。 – 漏洞挖掘利用 需要对目标代码进行动态的跟踪调试。
二者都是在反汇编的基础上进行——反汇编使前提和基础
静态密码算法识别有很广泛应用,特别是嵌入式系统的非X86结构
4.软件逆向分析的发展现状
– OllyDbg
32位Windows系统环境下的二进制文件分析调试工具,其重点 在于动态跟踪分析二进制代码,但由于这些操作都是在目标代 码进行反汇编后进行,因此也常被作为一款反汇编工具使用。
– D32Aam
国产的针对Windows平台下PE格式文件的优秀反汇编器,其提 供快速的静态反汇编和16进制文件编辑功能,另外还有一些便 利的内存操作和修改功能。
– 其它 国外对逆向分析的研究一直在发展进行,国内的研究在80年代 合肥工业大学进行一系列的研究后,没有再进行较为系统的研 究开发。
5.实际工作中相关的逆向分析
结合实际工作,可能使用最多的逆向分析技术为反汇编,其 次是(局部)反编译。
• 反汇编 常用工具IDA、OllyDbg和C32Asm – IDA:全面系统的静态分析,把握整体结构和某些代码细节; – OllDbg:动态跟踪调试常用软件; – C32Asm:快速静态反汇编和修改。
代码级逆向
程序二进制码中提取设计理念和算法
1.软件逆向工程的概念
• 软件逆向工程
编译器或反编译器作 编译、链接 词法和语法分析
高 级 语
中 间 语
具 体 目
exe lib


标 dll


代 sys






反编译

反汇编


编译和反编译不一定要生成汇编代码,一般生成某种设计好的中间语言。 但在反编译的二进制解码过程中,首先会生成一种类汇编或汇编代码,因 此二进制解码也可称为反汇编,并且反编译的过程中中间代码也有很多级 别,类汇编或汇编代码只是低级中间语言。
软件逆向工程简介
目录
1. 软件逆向工程的概念 2. 软件逆向工程的应用 3. 软件逆向分析的一般流程 4. 软件逆向分析的发展现状 5. 实际工作中相关的逆向分析
1.软件逆向工程的概念
再工程 (Reengineering)
正向工程 (Forward Engineering)
抽象逻辑设计
具体物理实现
•熟练的汇编语言基础 •熟练掌握常用反汇编调试工具的使用 •熟练掌握相关操作系统的知识及调试技巧
2.软件逆向工程的应用
• 实际工作重要应用——反汇编(续)
– 代码恢复理解
分析有价值的二进制程序,获取并理解其(关键)功能结构,
提高自己的技术水平,扩展学习、获取技术的渠道,摆脱自身
研究的不足。 – 算法的识别
– 修复BUG
– 添加新的特性
– 代码恢复
分析理解目标代码,学习吸收别人的技术思路,并向更深层次发展
2.软件逆向工程的应用
• 实际工作重要应用——反汇编 – 漏洞挖掘和利用 对原于意操是作根系权统限和工具应,用而软实件际,中漏常洞指的使用挖了掘R和oo利tk用it技,术是的主病动毒攻、击木的 重马要,手他段与,传一统旦木马成(功R效3)果的明不显同,在应于用:起通过来加也载比一较个广驱泛动,或难者其度工 作它量手较段大,,使现部阶分代段码的或一者般全研部究代方码法都在是内在核反(R汇0编)中分进析行的基础上, 结合动态跟踪、调试技术来进行。 – Rootkit的深入
•••《 《 《RR软Oe件vOR层上e调rTos,进Keo试IEtT谁行》nkSgi知内—,tinVeW张道核eSri银in更的nHdg奎o多调IwCP,os没试S内d电(e有,核w子主公探i的t工h机安开索业ID入全的底出A侵防P版底层r检护o社层未》》测内知,)B容的u:tl,部er胜,这分J/负H需,o取g要网l决u在上nd于,反发G谁,汇表清做华编的得大的都更学基是底出础过版社 时的或者不是非常重要的“点拨”。
可能有些时候还需要脱壳方面的技术
利用(密码)算法在汇编级别的特征,进行相关的算法识别; 当然也有在抽象语言级别上进行的(现阶段研究不太成熟,非 主要手段)。
3.软件逆向分析的一般流程
解码/反汇编 (Decode/Disassemble)
中间语言翻译 (Intermedia Language Translate)
相关主题