Apk.sh adalah skrip bash yang membuat rekayasa terbalik aplikasi Android lebih mudah, mengotomatiskan beberapa tugas berulang seperti menarik, mendekodekan, membangun kembali dan menambal APK.
Apk.sh pada dasarnya menggunakan apktool untuk membongkar, mendekode dan membangun kembali sumber daya dan beberapa bash untuk mengotomatiskan proses injeksi gadget Frida. Ini juga mendukung bundel aplikasi/split apks.
⬅️ Menarik apk dari perangkat sederhana saat menjalankan ./apk.sh pull <package_name>
? Decoding apk sederhana saat menjalankan ./apk.sh decode <apk_name>
? Membangun kembali apk sederhana saat menjalankan ./apk.sh build <apk_dir>
apk.sh pull tarik apk dari perangkat. Ini mendukung bundel aplikasi/split apks, yang berarti bahwa split apks akan bergabung dalam APK tunggal (ini berguna untuk menambal). Jika paket tersebut adalah bundel aplikasi/APK split, apk.sh akan menggabungkan APK menjadi APK tunggal, memperbaiki semua pengidentifikasi sumber daya publik.
apk.sh patch patch apk untuk memuat frida-gadget.so start.
Frida-gadget.so adalah perpustakaan bersama Frida yang dimaksudkan untuk dimuat oleh program yang akan diinstrumentasi (ketika mode operasi yang disuntikkan tidak cocok). Dengan hanya memuat perpustakaan itu akan memungkinkan Anda untuk berinteraksi dengan menggunakan alat berbasis Frida yang ada seperti Frida-Trace. Ini juga mendukung pendekatan yang sepenuhnya otonom di mana ia dapat menjalankan skrip dari sistem file tanpa komunikasi luar.
Patching apk sederhana saat menjalankan ./apk.sh patch <apk_name> --arch arm .
Anda dapat menentukan konfigurasi gadget Frida di json ./apk.sh patch <apk_name> --arch arm --gadget-conf <config.json>
Jika Anda menemukan kesalahan "sudah diinternasi" apktool d seperti di #30, Anda dapat melewati bendera --only-main-classes , yang akan diteruskan ke apktool saat mendekodekan apk Anda.
Dalam interaksi default, Frida Gadget memperlihatkan antarmuka yang kompatibel dengan Frida-Server, mendengarkan Localhost: 27042 secara default. Untuk mencapai instrumentasi awal Frida, biarkan blok fungsi konstruktor Gadget sampai Anda attach() ke proses, atau panggilan resume() setelah melalui spawn() -> attach() -> ...apply instrumentation... langkah -langkah.
Jika Anda tidak ingin perilaku pemblokiran ini dan ingin membiarkan program boot langsung, atau Anda lebih suka mendengarkan pada antarmuka atau port yang berbeda, Anda dapat menyesuaikan ini melalui file konfigurasi JSON.
Konfigurasi default adalah:
{
"interaction" : {
"type" : " listen " ,
"address" : " 127.0.0.1 " ,
"port" : 27042 ,
"on_port_conflict" : " fail " ,
"on_load" : " wait "
}
} Anda dapat meneruskan file konfigurasi gadget ke apk.sh dengan opsi --gadget-conf .
Konfigurasi yang biasanya disarankan mungkin:
{
"interaction" : {
"type" : " script " ,
"path" : " /data/local/tmp/script.js " ,
"on_change" : " reload "
}
}Script.js bisa jadi seperti:
var android_log_write = new NativeFunction (
Module . getExportByName ( null , '__android_log_write' ) ,
'int' ,
[ 'int' , 'pointer' , 'pointer' ]
) ;
var tag = Memory . allocUtf8String ( "[frida-script][ax]" ) ;
var work = function ( ) {
setTimeout ( function ( ) {
android_log_write ( 3 , tag , Memory . allocUtf8String ( "ping @ " + Date . now ( ) ) ) ;
work ( ) ;
} , 1000 ) ;
}
work ( ) ;
android_log_write ( 3 , tag , Memory . allocUtf8String ( ">--(O.o)-<" ) ) ; adb push script.js /data/local/tmp
./apk.sh patch <apk_name> --arch arm --gadget-conf <config.json>
adb install file.gadget.apk
Tambahkan kode berikut untuk dicetak ke logcat output console.log .
// print to logcat the console.log output
// see: https://github.com/frida/frida/issues/382
var android_log_write = new NativeFunction (
Module . getExportByName ( null , '__android_log_write' ) ,
'int' ,
[ 'int' , 'pointer' , 'pointer' ]
) ;
var tag = Memory . allocUtf8String ( "[frida-script][ax]" ) ;
console . log = function ( str ) {
android_log_write ( 3 , tag , Memory . allocUtf8String ( str ) ) ;
} apk.sh [SUBCOMMAND] [APK FILE|APK DIR|PKG NAME] [FLAGS]
apk.sh pull [PKG NAME] [FLAGS]
apk.sh decode [APK FILE] [FLAGS]
apk.sh build [APK DIR] [FLAGS]
apk.sh patch [APK FILE] [FLAGS]
apk.sh rename [APK FILE] [PKG NAME] [FLAGS]
pull Pull an apk from device/emulator.
decode Decode an apk.
build Re-build an apk.
patch Patch an apk.
rename Rename the apk package.
-a, --arch <arch> Tentukan arsitektur target, wajib saat menambal.
-g, --gadget-conf <json_file> Tentukan file konfigurasi frida-gadget, opsional saat menambal.
-n, --net Tambahkan konfigurasi keamanan jaringan permisif saat membangun, opsional. Ini dapat digunakan dengan tambalan, tarik dan ganti nama juga.
-s, --safe jangan mendekode sumber daya saat decoding (yaitu apktool -r). Tidak dapat digunakan saat menambal.
-d, --no-dis tidak membongkar dex, opsional saat decoding (yaitu apktool -s). Tidak dapat digunakan saat menambal.
https://frida.re/docs/gadget/
https://lief-project.github.io/doc/latest/tutorials/09_frida_lief.html
https://koz.io/using-frida-on-android-without-root/
https://github.com/sensepost/objection/
https://github.com/nickstadb/patch-apk/
https://neoo-geo2.gitbook.io/adventures-on-security/frida-scripting-guide/frida-scripting-guide