ARTist 是一个灵活的开源插桩框架,用于Android应用及Java中间件。它基于Android运行时(ART)的编译器,在设备端编译过程中修改代码。与现有插桩框架不同,它保留应用的原始签名,并在指令级别上操作。
本仓库是ARTist生态系统的核心,即插桩框架的实际实现。它被集成到AOSP的Android运行时(ART)项目中,以创建设备端 dex2oat 编译器的专用版本,并为开发者提供一套Module API,使其能够全面控制目标的完整Java源代码(以编译器的中间表示形式呈现)。ARTist允许最终用户使用已有的Module,开发者自行创建针对应用和Android系统的插桩,研究人员分析和扩展应用及系统行为。
ARTist可通过两种方式部署:其一,作为常规应用,使用我们的ArtistGui项目,在已root设备上进行非侵入式应用插桩;其二,作为自定义ROM的系统编译器,此时还能额外插桩系统服务(Package Manager Service、Activity Manager Service等)以及Android框架类(boot.oat)。它支持Android 6.0 Marshmallow 及之后的版本。
有关ARTist生态系统的详细教程和更深入的信息,请参阅我们的官方文档并加入我们的Gitter聊天室。
你可能会在代码中发现检查特定Android版本的守卫,因为我们内部使用的一些API可能随版本变化。ART项目在不断变化,因此我们尝试将所有版本相关代码隔离到我们的ART分支中,或将其隐藏在更便捷的版本无关API之后。总体目标是让Module开发者无需关心版本依赖,从而使生成的Module兼容ARTist支持的所有Android版本。
在当前pre-beta版本中,Module在modules文件夹下创建,并与ARTist一起编译。然而,即将推出的beta版本(见下文)将包含一个专用SDK,允许独立于ARTist源码开发Module,因此不再需要AOSP,也无需硬编码Module,而是可以动态选择针对特定目标使用哪些Module。
如果你只想创建自己的插桩,无需关心构建ARTist。请遵循上述说明即可。但如果你希望参与插桩框架本身的开发,以下内容将帮助你入门:
ARTist是ART编译器 dex2oat 的扩展,因此它作为子模块嵌入在我们的定制ART分支中。要构建ARTist,你需要将ART分支作为AOSP的一部分进行构建。我们所说的ARTist版本的 dex2oat 实际上是 dex2oat 二进制文件加上多个库(例如 libart-compiler),它们共同构成了我们的插桩编译器。ArtistGui 项目提供了现成的脚本,用于构建ART和ARTist,并将生成的二进制文件及库复制到ArtistGui的正确目录中,以便分发到设备进行测试。
我们即将进入beta阶段,这将给整个ARTist生态系统带来许多变化,包括用于简化Module开发的专用ARTist SDK、基于语义化版本的发版和版本命名方案、改进和更新的在线文档、出色的新Module以及更多改进。然而,尤其是在过渡期间,某些信息(如仓库中README.md文件的内容以及 https://artist.cispa.saarland 上的文档)可能略有不同步。对于由此带来的不便,我们深表歉意,并欢迎在Gitter上提供反馈。要了解当前进展,请关注Project: ARTist仓库的beta里程碑,并查看 https://artist.cispa.saarland 上的新博客文章。
我们希望在Project ARTist周围建立一个活跃的开发者、研究人员和用户社区,因此非常欢迎各种形式的贡献和反馈。参与并帮助项目的方式有很多,例如测试和编写Module、提供关于哪些功能是关键或缺失的反馈、报告bug和其他问题,或者一般性地分享你的经验。团队正在积极监控Gitter和仓库,我们很高兴与大家联系并讨论。目前我们还没有完整的贡献指南,但很快就会推出(见上面的beta公告)。
ARTist基于一篇名为ARTist - The Android Runtime Instrumentation and Security Toolkit的论文,发表于第二届IEEE欧洲安全与隐私研讨会(EuroS&P'17)。全文可在此处获取:PDF。如果你在研究论文中引用ARTist,请使用以下参考文献条目:
@inproceedings{artist,
title={ARTist: The Android runtime instrumentation and security toolkit},
author={Backes, Michael and Bugiel, Sven and Schranz, Oliver and von Styp-Rekowsky, Philipp and Weisgerber, Sebastian},
booktitle={2017 IEEE European Symposium on Security and Privacy (EuroS\&P)},
pages={481--495},
year={2017},
organization={IEEE}
}
还有一篇后续论文,我们利用ARTist从第三方应用中裁剪出广告库,将该库移动到一个专用应用(独立的安全主体),并通过自定义Binder IPC协议重新连接两者,同时通过将远程广告显示为浮动视图来保持视觉保真度。完整论文The ART of App Compartmentalization: Compiler-based Library Privilege Separation on Stock Android发表于2017年ACM SIGSAC计算机与通信安全会议(CCS'17),可在此处获取:PDF。