Intellidoid是用于Android应用程序的分析工具,该工具提取呼叫路径导致特定行为,并在运行期间精确执行这些路径。当给出一组目标行为时,静态分析组件会遍历应用程序的呼叫图,以找到这些行为的路径。它还提取路径约束,用于确定可以触发这些路径的输入值。动态组件采用提取的路径/约束,并将输入值注入Android设备,从而触发目标行为。
有关更多详细信息,请参阅我们的论文和幻灯片(NDSS 2016)。
“框架分析”执行静态分析,以生成针对Android框架的约束。我们目前提供输出框架约束,以便可以将其添加到“ appanalysis”组件产生的应用程序约束中。
“ AppAnalysis”目录包含为Android应用程序生成约束的代码。
| 目录 | 描述 |
|---|---|
| 预处理 | 脚本要提取和预处理APK文件,然后再将其传递给工具。 |
| src | 源代码文件。 |
| libs | 依赖项,包括必要的wala库。 1 |
| 安卓 | 从AOSP版本4.4.2_R2编译了Android框架文件(待分析)。 |
1我们对Wala的Call Graph生成进行了一些更改,以提高IntellidiDroid的性能。修改后的源代码可以在此处找到。
该项目使用Gradle Build System。输出文件位于build/目录中。 Gradlew脚本是已经安装了Gradle的机器的包装器。如果您的开发计算机已经包含Gradle,则可以通过在下面的命令中替换使用./gradlew gradle使用自己的安装。首次编译代码时需要网络连接,以便Gradle可以自动下载依赖项。
使用JDK 1.6编制了android目录中的随附的Android框架文件,但是预处理脚本中使用的apktool需要JDK 1.7。我们建议使用JDK 1.7,因为这似乎最有效。如有必要,您可以替换android目录中的文件,以尝试不同版本的AOSP或JDK。
首先,应使用preprocess文件夹中的脚本进行预处理的目标APK文件。然后可以将结果目录(包含APK文件和提取的资源)传递给静态分析。
预处理脚本使用APKTool和Dare提取APK软件包。您可以使用自己的提取工具,但是您可能必须修改应用程序分析代码,以便Intellidodroid可以找到给定应用程序的字节码和清单文件。
./preprocess/PreprocessAPK.sh <APK file>
./preprocess/PreprocessDataset.sh <directory of APK files>
./gradlew build
./IntelliDroidAppAnalysis -o <output directory> <preprocessed app directory>
要查看其他命令行选项,请运行:
./IntelliDroidAppAnalysis --help
输出目录用于存储应用程序信息JSON文件和Z3约束文件。如果未指定,这些文件将存储在./pathOutput中。 IntelliDroidDynamicClient工具使用输出文件来识别呼叫路径并生成输入数据以触发这些路径。
在输出目录中产生的appInfo.json和constraintX_X.py文件对于动态客户端是必需的,但不是很可读。 -y标志可用于获得路径/约束结果的更可读(但输出)版本(在Stdout中打印)。
“ DynamicClient”目录包含Python程序,该程序与Android设备通信并发送触发所需事件的输入。
该程序预计将连接到系统的Android设备或模拟器。该设备必须运行包含IntellidDroidService的自定义Android OS(解释该程序发送并执行实际事件调用的命令)。 DynamicClient程序将通过端口TCP:12348上的套接字自动连接到设备。 adb工具将用于设置连接并运行某些命令,应该可以从PATH上触及(这可以通过将Android SDK Tools目录添加到PATH变量或通过在运行DynamicClient之前设置AOSP构建环境来完成。
另外,DynamicClient通过其Python API(Z3-PY)使用Z3约束求解器。这里提供了用Python绑定构建和安装Z3的说明。
IntellidoDRID使用的自定义Android OS作为一系列可以应用于基本AOSP源树的差异文件。 IntellidDroid当前针对Android 4.3(AOSP分支android-4.3_r1 )实施。有关如何下载和构建Android的说明,请参考AOSP文档。
下载并编译了正确的AOSP版本后,您可以应用位于androidPatches目录中的IntellidDroid补丁。提供patch.sh和unpatch.sh文件以帮助自动化此过程。修补后,重建AOSP(我们发现您可能必须make两次;否则,模拟器上的某些文件会变得不一致)。您可能还需要与make一起运行make update-api 。构建后,您可以使用logcat验证设备启动时的IntelliDroidService类是系统服务。
cd androidPatches
./patch.sh <path to AOSP directory>
./IntelliDroidDynamicClient.py
HELP (获取命令的描述)
INSTALL <APK file>
START <directory to app information, generated by IntelliDroidAppAnalysis>
TRIGGER <call path ID to trigger, as specified in appInfo.json>
EXECUTE <command to send to IntelliDroidService> 1
INFO <info requested from IntelliDroidService> 1
CLOSE
KILL
1这些命令仅用于调试目的。仅当您知道IntellidDroidService期望的确切参数时,才应该使用这些。
与TaintDroid集成相当简单。对于“ AppAnalysis”组件,请使用-t标志指定目标方法的不同列表(即提供的taintdroidTargets.txt文件)。
./IntelliDroidAppAnalysis -t taintdroidTargets.txt <preprocessed app directory>
在动态方面,请按照此处的指示下载并为Android 4.3构建塔特德病。一旦您验证了您的塔因构建起作用,请在DynamicClient/androidPatches中以与未修改的AOSP相同的方式应用这些补丁。
Intellidoid最初是由多伦多大学的米歇尔·王(Michelle Wong)作为硕士论文项目开发的,由大卫·李(David Lie)博士监督。
有关任何查询,请联系:
以下为Intellidoil贡献了代码:
IntellidDroid由MIT许可证发布。