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許可證發布。