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)發布。