本文档是一份关于安卓逆向工程的深入学习笔记,重点关注FART(Fast Android Runtime)主动调用组件的设计与源码剖析。FART是Android系统从Dalvik虚拟机切换到ART(Android Runtime)后引入的一种关键技术,它改变了应用程序的执行方式,提高了性能。
首先,文章介绍了如何构造主动调用链。开发者通过`GetDexFile()`方法获取到一个对象,这个过程涉及到了DEX文件的处理。DEX文件是Android应用的编译形式,是Dalvik和ART共同理解的可执行文件。
接下来,作者强调了在ART环境下,尤其是在处理异常处理部分的重要性。在解析代码时,提到`triesSize`在78字节的位置,这是ART异常处理结构的一部分,用于存储try-catch块的信息。例如,0003处的GDA(Global Dictionary Address)解析,这是一种特殊的地址表示,用于高效地存储类信息。
文档中提到了类的列表,其中包含16个字节的固定头部信息,接着是8*3字节的大小信息,这些数据用于确定类的数量。随后,通过`methodindex`索引来找到对应的函数名,这涉及到ClassList的解析,即从已加载的类中获取方法列表。
进一步深入,讲解了如何通过反射机制加载每个类并调用其方法。在这个过程中,作者指出,针对某些壳化后的应用,可能只需要从特定的ClassLoader中取出`pathlist`,这是因为这些应用可能会替换掉系统默认的ClassLoader以隐藏其内部逻辑。
对于ClassLoader的处理,文档提供了两种解决方案:一是直接替换,适用于那些替换掉了系统ClassLoader的应用;二是插入到ClassLoader中间,以控制加载过程,确保只加载预期的类。在解析ClassLoader时,通过反射逐步获取到`mcookie`等关键属性,这对于理解和操作应用的运行环境至关重要。
这篇笔记详细地探讨了安卓逆向工程中的FART组件,涉及了DEX文件的获取、异常处理机制、类和方法的解析、ClassLoader管理以及相关的源码技术。对于Android开发者和逆向工程师来说,这是一个深入理解ART运行机制和调试优化策略的重要参考资料。