安卓逆向分析:FART脱壳技术解析

需积分: 0 4 下载量 48 浏览量 更新于2024-08-03 收藏 6.18MB DOCX 举报
"这篇文档是关于安卓逆向工程的学习笔记,特别关注了FART工具在脱壳过程中的应用。文档中提到了多个可选的脱壳点,这些脱壳点对于理解和分析Android应用的保护机制至关重要。" 在Android逆向工程中,脱壳是一个关键步骤,它涉及到移除应用的保护层,以便更深入地理解应用程序的工作原理。FART(Fast Android Reversing Tools)是一个流行的工具,用于分析和逆向Android应用。本文档详细讨论了在FART中使用的一些脱壳策略,特别是针对不同Android版本的脱壳点选择。 首先,文档提出了“可选脱壳点”的概念,这些点主要用于解决函数抽取问题。在脱壳组件获取到指令框架后,采用不同的方法来主动调用组件以获取指令内容。其中,`ArtMethod* method` 是一个关键对象,它代表了Android运行时环境中的一个方法。 在基础校验部分,文档提到了两种实现方式,虽然具体细节未详述,但可以推测这些校验可能涉及验证当前执行环境是否适合进行脱壳操作,以及确保目标函数的正确性。 接下来,文档指出了Android 6.0及8.0以后版本的变化。在Android 6.0中,可以通过`artmethod`的`GetDexFile`方法获取到与其相关的`DexFile`对象。而在Android 8.0之后,这种方法不再被推荐使用,可能是由于系统安全性的增强。 在脱壳点的选择上,文档特别提到了两个常见的脱壳点:`0penCommon脱壳点`和`DexFile::DexFile脱壳点`。前者可能是在通用的开放操作中进行脱壳,而后者可能是在`DexFile`对象创建时进行。在`Execute`函数进入解释器之前,是一个理想的插入脱壳代码的时机,因为这样可以捕获到更多应用程序的执行路径。 文档还展示了不同脱壳点的运行结果,强调了每个加载到系统中的类都会产生一个`dex`文件。`DexFile`对象在类的初始化函数中被`dump`,这表明在类加载过程中可以找到合适的脱壳点。 此外,文档中还讨论了C语言和C++实现的结构体和类,这可能涉及到如何在原生代码层面进行脱壳。只要函数参数或返回值包含`DexFile`,就可以作为潜在的脱壳点。选择一个好的脱壳点的标准是这个点应该被大多数应用所经过,并且由于该点是内联函数,加固工具很难通过hook技术来改变其内部逻辑。 总结起来,这份文档详细探讨了FART在Android逆向工程中寻找和利用脱壳点的策略,对于想要深入学习Android应用逆向和保护机制的开发者来说是一份宝贵的参考资料。