Tiro adalah kerangka deobfuscation iteratif hibrida untuk aplikasi android. Namanya adalah singkatan dari empat langkah: Target , Instrument , Run , dan Observe . Pendekatan Tiro menggunakan gagasan eksekusi yang ditargetkan (lihat alat kami sebelumnya, Intelliidroid) untuk secara statis mengidentifikasi lokasi -lokasi kebingungan yang mungkin dan menentukan input untuk memicu lokasi kode ini. Dengan instrumen lokasi-lokasi ini dan melaksanakannya menggunakan informasi penargetan, informasi deobfuscation run-time dapat dikumpulkan dan diteruskan kembali ke analisis statis untuk menghilangkan aplikasi dan mencapai hasil analisis yang lebih lengkap.
Untuk perincian lebih lanjut, silakan lihat makalah kami, yang diterbitkan di Usenix Security 2018.
Saat ini, kode dalam repositori ini berisi kode dasar untuk langkah Target dan terutama merupakan port komponen statis intelidroid untuk kerangka kerja jelaga. Kami berencana untuk melepaskan kode untuk langkah -langkah Tiro lainnya di masa depan.
Analisis statis Tiro terdiri dari langkah -langkah Target dan Instrument . Pada langkah Target , lokasi kebingungan diidentifikasi dan jalur panggilan ke lokasi -lokasi tersebut diekstraksi. Untuk setiap jalur, Tiro mengumpulkan kendala yang menentukan input yang harus disuntikkan untuk memicu jalur secara dinamis. Kami saat ini menggunakan pemecah kendala Z3 dan mengonversi kendala ke dalam format Z3-Py dan Z3-Java.
Komponen analisis statis membutuhkan Java 8 (JDK 1.8).
Repositori ini berisi ketergantungan ke repositori android-platforms , yang berisi pustaka kerangka Android yang digunakan oleh aplikasi. Ketergantungan ini adalah submodule dalam proyek. Untuk mengkloning tiro dengan submodule, jalankan:
git clone --recursive [email protected]:miwong/tiro.git
Atau, jika Anda sudah mengkloning tiro tanpa submodule, jalankan:
git submodule update --init --recursive
Ini membuat beberapa menit, karena perpustakaan Kerangka Android besar.
Proyek ini menggunakan sistem build gradle. File output terletak di Direktori build/ . Script GradleW adalah pembungkus untuk mesin yang tidak memiliki gradle yang sudah diinstal. Jika mesin pengembangan Anda sudah berisi Gradle, Anda dapat menggunakan instalasi sendiri dengan mengganti ./gradlew dengan gradle di perintah di bawah ini. Koneksi jaringan diperlukan saat menyusun kode untuk pertama kalinya sehingga Gradle dapat secara otomatis mengunduh dependensi.
Untuk membangun:
./gradlew build
Untuk membangun dan menjalankan:
./TIROStaticAnalysis <APK>
Secara default, Tiro menulis hasil analisis statis ke direktori tiroOutput . Opsi -o memungkinkan ini diubah. Untuk melihat opsi baris perintah lainnya, jalankan:
./TIROStaticAnalysis --help
Saat ini, output analisis statis Tiro (yaitu appInfo.json ) tidak kompatibel dengan intelidroid. Saat kami merilis komponen dinamis Tiro, kami juga akan memperbarui klien dinamis yang digunakan dalam intelidroid sehingga ekstraksi kendala Tiro dapat diintegrasikan ke dalam analisis dinamis.
Tiro dibangun di atas kerangka analisis statis jelaga. Beberapa modifikasi dilakukan pada generasi call-graph Syot untuk meningkatkan grafik panggilan dengan tepi yang mewakili aliran eksekusi khusus android (misalnya maksud). Modifikasi diterbitkan dalam repositori terpisah di sini.
Karena aplikasi Android didorong oleh peristiwa, titik masuk ke dalam aplikasi harus dihitung untuk mencapai analisis lengkap. Tiro menggunakan penemuan titik masuk yang diimplementasikan dalam flowdroid. Modifikasi kecil dibuat pada kode titik masuk ini untuk mengekstrak informasi yang diperlukan oleh analisis Tiro; Perubahan ini disimpan dalam static/src/soot/ dan static/src/tiro/target/entrypoint/ .
Berikut ini telah menyumbangkan kode untuk Tiro:
Tiro dikembangkan sebagai proyek PhD oleh Michelle Wong di University of Toronto. Untuk pertanyaan apa pun, silakan hubungi Michelle di [email protected].
Tiro dirilis di bawah GNU Lesser General Public License, versi 2.1.