TIRO是用于Android应用的混合迭代DEOBFUSCATION框架。它的名称代表了四个步骤: Target , Instrument , Run和Observe 。 Tiro的方法使用针对性执行的想法(请参阅我们以前的工具,IntellidDroid)静态地识别可能的混淆的位置,并确定触发这些代码位置的输入。通过对这些位置进行启动并使用目标信息执行它们,可以收集运行时间的去量限定信息,并将其转回静态分析,以消除应用程序并获得更完整的分析结果。
有关更多详细信息,请参阅我们的论文,发表在USENIX Security 2018上。
当前,此存储库中的代码包含Target步骤的基本代码,并且主要是IntellidDroid到烟灰框架的静态组件的端口。我们计划将来发布其他TIRO步骤的代码。
Tiro的静态分析由Target和Instrument步骤组成。在Target步骤中,确定了混淆的位置,并提取到这些位置的呼叫路径。对于每条路径,TIRO收集确定必须注入的输入以动态触发路径的约束。目前,我们使用Z3约束求解器并将约束转换为Z3-PY和Z3-JAVA格式。
静态分析组件需要Java 8(JDK 1.8)。
该存储库包含对android-platforms存储库的依赖性,该存储库包含应用程序使用的Android Framework库。此依赖性是项目中的子模块。要用subsodule克隆tiro,请运行:
git clone --recursive [email protected]:miwong/tiro.git
另外,如果您已经在没有subsodule的情况下克隆tiro,请运行:
git submodule update --init --recursive
这需要几分钟,因为Android框架库很大。
该项目使用Gradle Build System。输出文件位于build/目录中。 Gradlew脚本是已经安装了Gradle的机器的包装器。如果您的开发计算机已经包含Gradle,则可以通过在下面的命令中替换使用./gradlew gradle使用自己的安装。首次编译代码时需要网络连接,以便Gradle可以自动下载依赖项。
构建:
./gradlew build
建造和运行:
./TIROStaticAnalysis <APK>
默认情况下,Tiro将静态分析结果写入tiroOutput目录。 -o选项允许更改此功能。要查看其他命令行选项,请运行:
./TIROStaticAnalysis --help
当前,TIRO的静态分析输出(IE appInfo.json )与IntellidDroid不兼容。当我们发布TIRO的动态组件时,我们还将更新Intellidoid中使用的动态客户端,以便将TIRO的约束提取可以集成到动态分析中。
Tiro建立在烟灰静态分析框架上。对Soot的呼叫编程生成进行了几次修改,以增强呼叫图,并用代表特定于Android的执行流(例如意图)的边缘。修改在此处发表在单独的存储库中。
由于Android应用程序是由事件驱动的,因此必须计算进入应用程序的入口点以实现完整的分析。 TIRO使用FlowDroid中实现的入口点发现。对此入口处代码进行了少量修改,以提取Tiro分析所需的信息;这些更改存储在static/src/soot/和static/src/tiro/target/entrypoint/ 。
以下为tiro贡献了代码:
Tiro是由多伦多大学的Michelle Wong作为博士项目开发的。有关任何查询,请通过[email protected]与Michelle联系。
TIRO根据GNU较少的通用公共许可证(版本2.1)发布。