
Alat untuk mengotomatisasi interaksi dengan perangkat Android - termasuk ADB, Androguard, dan Interaktivitas Frida.
Autodroid adalah alat Python untuk interaksi massal scripting secara terprogram dengan satu atau lebih perangkat Android. Kemungkinan penggunaan termasuk:
Untuk menggunakan AutoDroid, Anda perlu menginstal dependensi, ini ditentukan dalam file persyaratan dan dapat diinstal dengan mengikuti perintah di bawah ini.
pip install -r REQUIREMENTS.txtAutodroid perlu diberikan file konfigurasi JSON yang valid sebagai argumen baris perintah. Di bawah ini menunjukkan contoh file konfigurasi sederhana yang akan mengambil semua aplikasi dari semua perangkat yang terhubung satu per satu dan mengekstrak apks ke ritsleting menggunakan androguard.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " reverse: !app_id.apk " ]
} Setelah Anda membuat file konfigurasi autodroid yang valid, Anda dapat memulai interaksi perangkat dengan menjalankan file python AutoDroid.py dengan file konfigurasi karena parameter baris perintahnya.
python AutoDroid.py example_config.json File konfigurasi autodroid dapat disediakan dengan serangkaian perintah untuk dieksekusi pada perangkat target, perintah ini dijalankan secara lokal di mesin Anda sehingga program dan file yang dipanggil harus ada. Perintah -perintah ini dapat berada dalam format daftar (seperti yang dapat dilihat pada contoh di atas) atau sebagai peta/ dikte pasangan nilai kunci. Pasangan nilai kunci ini didefinisikan sebagai blok perintah, di mana kunci adalah nama blok dan nilainya adalah daftar perintah. block:<block name> dapat digunakan untuk menjalankan blok dan menyediakan fitur loop/ panggilan balik sederhana. Contoh menggunakan blok dapat dilihat di bawah ini.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"test_user_input" :[ " adb -s !device_id shell monkey -v 5 -p !app_id " ],
"retrieve_apk" :[ " adb -s !device_id pull !app_path !app_id.apk " , " sleep:5 " ]
}
} Dua bidang tambahan yang berperan penting untuk Autodroid adalah bidang devices dan apps . Bidang -bidang ini menentukan ID perangkat ADB untuk perangkat yang ditargetkan (daftar string) dan aplikasi notasi domain terbalik aplikasi (yaitu com.example.application ) untuk aplikasi yang ditargetkan pada perangkat (daftar string). Kedua bidang ini dapat kosong, daftar string, atau didefinisikan sebagai * di mana semua perangkat dan aplikasi yang tersedia akan ditargetkan. Dalam backend cara kerjanya adalah ketika nilai disediakan di bidang ini, program akan mengulangi semua perintah agar untuk setiap aplikasi pada setiap perangkat. Contoh menentukan perangkat dan aplikasi tertentu dapat dilihat di bawah ini:
{
"devices" : [ " 09261JEC216934 " ],
"apps" : [ " com.google.android.networkstack.tethering " ],
"commands" : [ " adb -s !device_id pull !app_path !app_id.apk " ]
} Ketika bidang perangkat tidak kosong (yaitu bukan "devices":[], ) variabel (lihat di bawah) dari !device_id dibuat. Variabel ini dapat digunakan dalam perintah Anda untuk menunjukkan ID perangkat ADB untuk perangkat yang ditargetkan saat ini. Demikian pula variabel !app_id , dan !app_path ditambahkan ketika bidang aplikasi tidak kosong dan dapat digunakan dalam perintah untuk menentukan nama notasi domain reverse aplikasi dan jalur ke file apk aplikasi tersebut.
Untuk menghemat waktu, Autodroid memungkinkan jumlah variabel yang tak terbatas diatur dalam skrip. Variabel -variabel ini dibangun dalam format pasangan nilai kunci. Ketika kunci suatu variabel terletak di perintah itu akan diganti untuk nilainya. Contoh konfigurasi yang menggunakan variabel dapat dilihat di bawah ini, dalam file konfigurasi ini variabel !test telah ditambahkan sebagai tangan pendek untuk perintah ADB monkey dan variabel bawaan !app_id juga digunakan.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"variables" : { "!test" : " adb -s !device_id shell monkey -v 500 -p " },
"commands" : [ " !test !app_id " ]
} Standar yang disukai untuk menggunakan variabel adalah mendahului mereka dengan A ! dan menggunakan _ bukan spasi.
Variabel dapat diatur saat runtime menggunakan ? operator. Di mana operator diikuti oleh nama variabel diatur ke salah satu dari perintah output berikut atau jika perintah tidak memiliki output perintah itu sendiri. Contoh dapat dilihat di bawah:
{
"devices" : [],
"apps" : [],
"commands" : [ " ?!files dir " , " print: !files " ]
}Di bawah ini adalah daftar variabel yang dipesan yang sudah digunakan di Autodroid dan harus dihindari untuk menambah file konfigurasi Anda. Jika variabel -variabel ini ditambahkan, mereka akan ditimpa saat runtime.
!device_id - Ketika satu atau lebih perangkat disediakan di konfigurasi, variabel ini diisi saat runtime. Dan diatur sebagai ID perangkat ADB untuk perangkat saat ini. Setiap perangkat dililitkan secara bergantian dengan perintah yang dikonfigurasi sedang dijalankan untuk setiap perangkat.!adb_connect -Ini adalah variabel steno yang diterjemahkan menjadi adb -s !device_id , menggunakan ini alih -alih adb akan memastikan bahwa semua perintah ADB dijalankan pada perangkat yang benar.!app_id - Ketika satu atau lebih aplikasi disediakan di konfigurasi, variabel ini diisi saat runtime. Dan ditetapkan sebagai nama notasi domain terbalik aplikasi (yaitu com.example.myapplication ) untuk aplikasi saat ini. Setiap aplikasi dililitkan secara bergantian dengan perintah yang dikonfigurasi sedang dijalankan untuk setiap aplikasi.!app_path - Mirip dengan yang di atas. Ketika satu atau lebih aplikasi disediakan di konfigurasi, variabel ini diisi saat runtime. Dan ditetapkan sebagai jalur ke file apk aplikasi saat ini pada perangkat target. Setiap aplikasi dililitkan secara bergantian dengan perintah yang dikonfigurasi sedang dijalankan untuk setiap aplikasi. Konstanta adalah perintah khusus untuk autodroid dan berhubungan dengan fungsionalitas tertentu. Biasanya dipecah menjadi kata kunci diikuti oleh : dan kemudian satu atau lebih parameter yang dipisahkan oleh A ; . Konstanta ini harus digunakan pada awal perintah dan harus selalu dalam huruf kecil. Contoh akan diberikan di bagian individual.
Autodroid telah membangun fungsionalitas untuk menjalankan file Frida JavaScript sebagai bagian dari run autodroid. Konstanta ini didefinisikan sebagai frida: dan harus disediakan jalur ke file JavaScript yang digunakan, diikuti oleh A ; dan kemudian aplikasi membalikkan nama notasi aplikasi yang ditargetkan. Selain menerapkan variabel pada perintah, variabel juga diterapkan pada isi file yang disediakan.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " frida:myJavascript.js;!app_id " ]
}Catatan sementara integrasi Frida diimplementasikan, saat ini belum diuji.
Autodroid mendukung APK Reverse Engineering melalui Androguard. Konstanta ini disusun sebagai reverse: dan mengambil jalan ke APK yang disimpan secara lokal. Menggunakan ini akan menyimpan versi APK yang tidak terikat sebagai zip dengan nama <application name>.apk .
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb -s !device_id pull !app_path !app_id.apk " , " reverse: !app_id.apk " ]
} Saat menggunakan konstanta terbalik, jalur APK dapat diikuti oleh sejumlah paramiter ( manifest oleh A ; ), ini termasuk info (yang akan menyimpan file informasi aplikasi JSON, decompile (yang di zip akan menyimpan ringkasan TXT dari metode yang tidak terurai. Parameter ini dapat dilihat di bawah:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"get_app" : [ " adb -s !device_id pull !app_path !app_id.apk " ],
"reverse_app" :[ " reverse: !app_id.apk;info " ,
" reverse: !app_id.apk;manifest;decompile " ]
}
} Konstanta ini memberikan fungsionalitas sederhana untuk menghentikan eksekusi perkakas untuk waktu tertentu. Konstanta ini disusun sebagai sleep: diikuti dengan jumlah detik untuk menunggu.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " sleep:5 " ]
} Konstanta blok memberikan perulangan sederhana dan fungsionalitas panggilan kembali. Konstanta ini disusun sebagai block: diikuti dengan nama blok perintah untuk dieksekusi. Jika tidak ada blok yang disediakan (IE perintah telah disediakan dalam format daftar), maka perintah ditambahkan ke blok yang disebut main .
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"test_user_input" :[ " adb shell monkey -v 5 -p !app_id " ],
"retrieve_apk" :[ " adb pull !app_path !app_id.apk " ],
"test_again" : [ " block: test_user_input " , " sleep:5 " ]
}
}Kata kunci 'Find' diikuti oleh jalur ke APK dan string regex untuk menemukan keduanya akan mencetak ke konsol jalur ke APK dan string yang ditemukan jika ada dalam APK. Ini dapat digunakan bersama dengan perintah lain untuk menjalankan string temukan di semua aplikasi yang diproses. Contohnya dapat dilihat di bawah:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " adb pull !app_path !app_id.apk " , " find: !app_id.apk;my_string " ]
} Konstanta sederhana lainnya. print: Konstanta dapat digunakan untuk mencetak pesan ke konsol. Contoh penggunaan ini dapat dilihat di bawah:
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " print: device id !device_id, app id !app_id, app path !app_path " ]
} Konstanta tulis memungkinkan variabel atau perintah ditulis ke file. Digunakan dengan string write: diikuti oleh file untuk ditulis, diikuti oleh ; , dan kemudian perintah atau variabel untuk menulis ke file.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : {
"get_stats" : [ " ?!stats device id !device_id, app id !app_id, app path !app_path " ],
"write_stats" : [ " write: !device_id-!app_id-stats.txt;!stats " ]
}
} Konstanta read: disediakan jalur ke file untuk dibaca, diikuti oleh ; , dan kemudian variabel untuk menyimpan output ke. Variabel ini dapat berupa variabel yang baru dideklarasikan atau yang ada.
{
"devices" : [],
"apps" : [],
"commands" : [ " read:test.txt;!data " , " print: !data " ]
} Mirip dengan menulis. Konstanta Append memungkinkan variabel atau perintah ditulis ke file. Digunakan dengan append: String diikuti oleh file untuk ditulis, diikuti oleh A ; , dan kemudian perintah atau variabel untuk menulis ke file. Tidak seperti menulis yang akan membuat atau menulis melalui file yang ada, Append hanya akan menambah file yang ada. Jika file tidak ada maka autodroid akan kesalahan.
{
"devices" : [ " * " ],
"apps" : [ " * " ],
"commands" : [ " append:test.txt;!app_id !app_path " ]
}Di bawah ini adalah contoh menggunakan Autodroid untuk menguji malware potensial pada perangkat Android. Konfigurasi ini menginstal malware potensial, merekam layar, mengambil tangkapan layar, dan menghapus instalasi aplikasi.
{
"devices" : [ " * " ],
"apps" : [],
"commands" : {
"record_screen" : [ " adb shell screenrecord /data/local/tmp/test.mp4 --time-limit 120 " ],
"install_eicar" :[ " adb install com.fsecure.eicar.antivirus.test.apk " ],
"user_input" :[ " adb shell monkey -p com.fsecure.eicar.antivirus.test -v 1 " , " sleep: 20 " ],
"uninstall" : [ " adb uninstall com.fsecure.eicar.antivirus.test " ],
"get_video" : [ " adb pull /data/local/tmp/test.mp4 " , " sleep: 20 " , " adb shell rm /data/local/tmp/test.mp4 " ]
}
}Di bawah ini adalah contoh menggunakan implementasi Androguard Autodroid untuk membalikkan rekayasa APK dari perangkat dan mengambil JSON info tentang aplikasi, ringkasan metode yang didekompilasi, file manifes XML, dan file zip yang tidak terikat dari APK.
{
"devices" : [ " * " ],
"apps" : [ " me.jamesstevenson.onelist " ],
"commands" : {
"get_app" : [ " adb pull !app_path !app_id.apk " ],
"reverse_app" :[ " reverse: !app_id.apk;info;decompile;manifest;zip " ]
}
}Lisensi Publik Umum GNU v3.0