Intellidroid adalah alat analisis untuk aplikasi Android yang mengekstraksi jalur panggilan yang mengarah ke perilaku spesifik dan menjalankan jalur ini tepat selama waktu berjalan. Saat diberi satu set perilaku yang ditargetkan , komponen analisis statis melintasi grafik panggilan aplikasi untuk menemukan jalur ke perilaku ini. Ini juga mengekstraksi kendala jalur, yang digunakan untuk menentukan nilai input yang dapat memicu jalur ini. Komponen dinamis mengambil jalur/kendala yang diekstraksi dan menyuntikkan nilai input ke dalam perangkat Android, memicu perilaku yang ditargetkan.
Untuk perincian lebih lanjut, silakan lihat kertas dan slide kami (NDSS 2016).
'Frameworkanalysis' melakukan analisis statis untuk menghasilkan kendala untuk kerangka Android. Kami saat ini memberikan kendala kerangka kerja output sehingga mereka dapat ditambahkan ke kendala aplikasi yang dihasilkan oleh komponen 'appanalysis'.
Direktori 'Appanalysis' memegang kode yang menghasilkan kendala untuk aplikasi Android.
| Direktori | Keterangan |
|---|---|
| preprocess | Skrip untuk mengekstrak dan preprocess apk file sebelum meneruskannya ke alat. |
| SRC | File kode sumber. |
| Libs | Dependensi, termasuk perpustakaan WALA yang diperlukan. 1 |
| Android | Compiled Android Framework Files (akan dianalisis), dari AOSP versi 4.4.2_R2. |
1 Kami telah membuat sedikit perubahan pada generasi grafik panggilan WALA untuk meningkatkan kinerja intelidroid. Kode sumber yang dimodifikasi dapat ditemukan di sini.
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.
File kerangka Android yang disertakan di direktori android dikompilasi menggunakan JDK 1.6 tetapi apktool yang digunakan dalam skrip preprocessing memerlukan JDK 1.7. Kami merekomendasikan menggunakan JDK 1.7, karena itu tampaknya paling berhasil. Jika perlu, Anda dapat mengganti file di direktori android untuk mencoba berbagai versi AOSP atau JDK.
File APK target yang akan dianalisis pertama -tama harus diproses dengan menggunakan skrip di folder preprocess . Direktori yang dihasilkan (berisi file APK dan sumber daya yang diekstraksi) kemudian dapat diteruskan ke analisis statis.
Script preprocessing menggunakan apktool dan berani untuk mengekstrak paket APK. Anda dapat menggunakan alat ekstraksi Anda sendiri, tetapi Anda mungkin harus memodifikasi kode analisis aplikasi sehingga intelidroid dapat menemukan bytecode dan file manifes untuk aplikasi yang diberikan.
./preprocess/PreprocessAPK.sh <APK file>
./preprocess/PreprocessDataset.sh <directory of APK files>
./gradlew build
./IntelliDroidAppAnalysis -o <output directory> <preprocessed app directory>
Untuk melihat opsi baris perintah lainnya, jalankan:
./IntelliDroidAppAnalysis --help
Direktori output digunakan untuk menyimpan file Info JSON dan file kendala Z3. Jika tidak ditentukan, file -file ini akan disimpan di ./pathOutput . File output digunakan oleh alat IntelliDroidDynamicClient untuk mengidentifikasi jalur panggilan dan untuk menghasilkan data input untuk memicu jalur ini.
File appInfo.json dan constraintX_X.py yang diproduksi di direktori output diperlukan untuk klien dinamis, tetapi tidak terlalu mudah dibaca. Bendera -y dapat digunakan untuk mendapatkan versi yang lebih mudah dibaca (tetapi output -berat) dari hasil jalur/kendala (dicetak di stdout).
Direktori 'DynamicClient' berisi program Python yang berkomunikasi dengan perangkat Android dan mengirimkan input yang memicu peristiwa yang diinginkan.
Program ini mengharapkan perangkat Android atau emulator terhubung ke sistem. Perangkat ini harus menjalankan OS Android khusus yang berisi IntellidroidService (yang menafsirkan perintah yang dikirim oleh program ini dan melakukan doa peristiwa aktual). Program DynamicClient akan secara otomatis terhubung ke perangkat melalui soket di port TCP: 12348. Alat adb akan digunakan untuk mengatur koneksi dan menjalankan perintah tertentu, dan harus dapat dijangkau dari PATH (ini dapat dilakukan dengan menambahkan direktori Android SDK Tools ke variabel PATH atau dengan mengatur lingkungan build AOSP sebelum menjalankan dinamisclient.
Selain itu, DynamicClient menggunakan Z3 Constraint Solver melalui Python API (Z3-PY). Instruksi untuk membangun dan menginstal Z3 dengan binding Python tersedia di sini.
OS Android khusus yang digunakan oleh Intellidroid disediakan sebagai serangkaian file diff yang dapat diterapkan pada pohon sumber AOSP dasar. Intellidroid saat ini diimplementasikan untuk Android 4.3 (AOSP Branch android-4.3_r1 ). Silakan merujuk ke dokumentasi AOSP untuk instruksi tentang cara mengunduh dan membangun Android.
Setelah Anda mengunduh dan menyusun versi AOSP yang benar, Anda dapat menerapkan tambalan intelidroid, yang terletak di direktori androidPatches . File patch.sh dan unpatch.sh disediakan untuk membantu mengotomatisasi proses ini. Setelah menambal, membangun kembali AOSP (kami menemukan bahwa Anda mungkin harus menjalankan make Twice; jika tidak, file -file tertentu pada emulator menjadi tidak konsisten). Anda mungkin juga perlu menjalankan make update-api bersama dengan make . Setelah dibangun, Anda dapat menggunakan logcat untuk memverifikasi bahwa kelas IntelliDroidService dimulai sebagai layanan sistem ketika perangkat boot.
cd androidPatches
./patch.sh <path to AOSP directory>
./IntelliDroidDynamicClient.py
HELP (dapatkan deskripsi perintah)
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 Perintah ini hanya untuk tujuan debugging. Anda hanya harus menggunakan ini jika Anda tahu parameter yang tepat yang diharapkan oleh IntellidroidService.
Integrasi dengan Taintdroid cukup mudah. Untuk komponen 'appanalysis', gunakan flag -t untuk menentukan daftar metode yang ditargetkan (yaitu file taintdroidTargets.txt yang disediakan).
./IntelliDroidAppAnalysis -t taintdroidTargets.txt <preprocessed app directory>
Di sisi dinamis, ikuti instruksi di sini untuk mengunduh dan membangun taintdroid untuk Android 4.3. Setelah Anda memverifikasi bahwa build Anda dari Taintdroid berfungsi, terapkan tambalan di DynamicClient/androidPatches dengan cara yang sama seperti untuk AOSP yang tidak dimodifikasi.
Intellidroid awalnya dikembangkan sebagai proyek tesis master oleh Michelle Wong di University of Toronto, yang diawasi oleh Dr. David Lie.
Untuk pertanyaan apa pun, silakan hubungi:
Berikut ini telah menyumbangkan kode untuk intelidroid:
Intellidroid dirilis di bawah lisensi MIT.