软件逆向分析介绍
感谢您的关注
以上有不当之处,请大家给与批评指 正,谢谢大家!
请输入内容 工具结合使用,分析手段动静结合
– 如理解有价值的二进制程序,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)