Semua langkah yang disebutkan di bawah ini ada di macOS Mojave
Instal frida-tools
dengan pip3
Jalankan perintah $ pip --version
dan $ pip3 --version
untuk memeriksa pip mana yang berasal dari Python 3x . Misalnya Anda akan melihat informasi versi seperti di bawah ini:
$ pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
Kemudian jalankan perintah pip yang tepat untuk menginstal frida-tools
, misalnya pip3
$ pip3 install frida-tools
Hasil sukses:
....
Successfully built frida-tools frida
Installing collected packages: colorama, frida, six, wcwidth, prompt-toolkit, pygments, frida-tools
Successfully installed colorama-0.4.1 frida-12.4.7 frida-tools-1.3.2 prompt-toolkit-2.0.9 pygments-2.3.1 six-1.12.0 wcwidth-0.1.7
Menguji instalasi Anda
Salin biner cat
ke folder sementara, misalnya /tmp/cat
lalu jalankan cat
dari direktori tersebut:
$ mkdir ~ /frida
$ cp /bin/cat /frida/cat
$ /frida/cat
Di terminal lain, buat file example.py
dengan isi sebagai berikut:
import frida
def on_message ( message , data ):
print ( "[on_message] message:" , message , "data:" , data )
session = frida . attach ( "cat" )
script = session . create_script ( """'use strict';
rpc.exports.enumerateModules = function () {
return Process.enumerateModulesSync();
};
""" )
script . on ( "message" , on_message )
script . load ()
print ([ m [ "name" ] for m in script . exports . enumerate_modules ()])
Kemudian jalankan skrip example.py
dengan perintah di bawah ini
$ python3 example.py
Outputnya harus serupa dengan ini (tergantung pada platform dan versi perpustakaan Anda):
[ u'cat' , …, u'ld-2.15.so' ]
Perintah adb
Android
Pastikan adb
dapat melihat perangkat Anda:
$ adb devices -l
Ini juga akan memastikan bahwa daemon adb berjalan di desktop Anda, yang memungkinkan Frida menemukan dan berkomunikasi dengan perangkat Anda terlepas dari apakah Anda menghubungkannya melalui USB atau WiFi.
frida-server
di Emulator (atau Perangkat Asli)Langkah-langkah di bawah ini didasarkan pada Android Emulator Nexus 6P (x86) api 23 di macOS Majave.
Pertama, unduh frida-server
terbaru untuk Android dari halaman rilis frida-server, misalnya untuk emulator Android x86
, Anda harus mengunduh frida-server-12.4.7-android-x86.xz, dan menjalankannya di emulator Anda:
$ adb root # might be required
$ adb push frida-server /data/local/tmp/
$ adb shell " chmod 755 /data/local/tmp/frida-server "
$ adb shell " /data/local/tmp/frida-server & "
Untuk langkah terakhir, jika Anda melihat kesalahan di bawah ini:
Unable to load SELinux policy from the kernel: Failed to open file “/sys/fs/selinux/policy”: Permission denied
Maka Anda perlu menjalankan frida-server
menggunakan shell root, misalnya
$ adb shell
angler:/ $ su
angler:/ # /data/local/tmp/frida-server &
[1] 12089
angler:/ #
[1] 12089
adalah id proses frida-server
.
Sekarang, di desktop Anda, saatnya memastikan dasar-dasarnya berfungsi. Berlari:
frida-ps -U
Ini akan memberi Anda daftar proses seperti:
PID Name
----- ---------------------------------------------------
721 ATFWD-daemon
4450 adbd
730 [email protected]
407 [email protected]
408 [email protected]
409 [email protected]
410 [email protected]
406 [email protected]
Untuk mengubah nilai Boolean
di dalam kode sumber Java, yaitu Boolean bTamperingSucces = false;
, atau kode lain yang Anda minati.
apktool
dapat diambil dari situs Apktool. Cukup ikuti langkah-langkah di dalam halaman ini untuk menginstal apktool.
adb
dikirimkan dengan Android SDK, dapat ditemukan dari direktori <your-some-path>/Android/sdk/platform-tools/adb
apksigner
adalah menandatangani apk Anda dengan file keystore. Alat ini dapat ditemukan di direktori <ANDROID_HOME>/Android/sdk/build-tools/28.0.3/apksigner
, dan penggunaannya didokumentasikan di apksigner baris perintah.
Kloning proyek contoh dari DecompileApk.
Temukan file apk yang sudah dikompilasi DecompileApk/app/release/app-release.apk
.
Dekompilasi menggunakan apktool .
$ cd < your-path > /DecompileApk/app/release/
$ apktool d --no-res -f app-release.apk
Anda akan melihat keluaran di bawah ini
I: Using Apktool 2.4.0 on app-release.apk
I: Copying raw resources...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
Cari DecompileApk/app/release/app-release/smali/com/arophix/decompileapk/MainActivity.smali
di bawah direktori kode smali dan temukan kode di bawah ini
const / 4 p1 , 0x0
Ubah saja 0x0
(artinya false
) menjadi 0x1
(artinya true
) dan simpan filenya.
Menggunakan apktool untuk membuat apk yang dirusak.
apktool b app - release
Anda akan melihat keluaran di bawah ini
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Copying raw resources...
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
Temukan apk yang baru dibuat dari direktori dist
DecompileApk/app/release/app-release/dist/app-release.apk
Tanda tangani apk menggunakan apksigner dan keystore yang terletak di DecompileApk/app/decompileapk.jks
(harap ubah jalur untuk keystore dan apk sesuai kasus Anda),
$ < ANDROID_HOME > /sdk/build-tools/28.0.3/apksigner sign --ks ../decompileapk.jks app-release.apk
Anda akan melihat output di bawah dan masukkan kata sandi 123456
Keystore password for signer # 1:
Instal apk yang ditandatangani menggunakan perintah adb.
$ adb install < path-to-the-tampered-apk > /app-release.apk
Daripada melihat "Hello from C++"
dari layar, Anda sekarang akan melihat "Hello, Android reverse engineer!"
.
Mengaitkan kode sumber Java Android menggunakan Frida.
Temukan skrip dari hook_java_methods.py dan jalankan menggunakan perintah di bawah ini, lalu klik tombol aplikasi Android Anda yang dimulai.
$ python3 hook_java_methods.py
[ * ] Running CTF
[ * ] onClick
[ * ] Called - isPhoneRooted ()
[ * ] onClick
[ * ] Called - isPhoneRooted ()
Jika Anda melihat kesalahan seperti di bawah ini:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Ingatlah bahwa Anda telah memulai frida-server
di emulator Anda.
Sementara itu, di layar emulator Anda, Anda akan melihat pesan toast berubah menjadi Device not rooted
jika berhasil.
Mengaitkan kode sumber Android C menggunakan Frida.
Dekompilasi APK
Pertama, dekompilasi apk menggunakan apktool untuk mengekstrak perpustakaan bersama, yaitu libnative-lib.so
.
$ cd DecompileApk/app/release
$ apktool d --no-res app-release.apk
Temukan metode JNI target
Kedua, gunakan perintah di bawah ini untuk menemukan fungsi JNI yang akan dihubungkan.
$ nm --demangle --dynamic app-release/lib/x86/libnative-lib.so
Anda akan melihat keluaran di bawah ini:
00004d80 T Java_com_arophix_decompileapk_MainActivity_stringFromJNI
000090b0 T std::bad_typeid::what () const
00005cf0 T std::bad_exception::what () const
00005e70 T std::bad_array_length::what () const
00005df0 T std::bad_array_new_length::what () const
00008ff0 T std::bad_cast::what () const
...
Kaitkan fungsi C berdasarkan nama
Temukan skrip dari hooknative-by-function-name.py dan jalankan menggunakan perintah di bawah ini, lalu klik tombol aplikasi Android Anda yang dimulai.
$ python3 hooknative-by-function-name.py
[ * ] Running Arophix Hook Test ...
Java_com_arophix_decompileapk_MainActivity_stringFromJNI called with:
ret: 0x200019
Jika Anda melihat kesalahan seperti di bawah ini:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Ingatlah bahwa Anda telah memulai frida-server
di emulator Anda.
Sementara itu, di layar emulator Anda, Anda akan melihat teks diubah menjadi Frida is hooking this displayed text from Native layer by function name.
jika sukses.
Fungsi kait C berdasarkan alamat
Temukan skrip dari hooknative-by-function-address.py dan jalankan menggunakan perintah di bawah ini, lalu klik tombol aplikasi Android Anda yang dimulai.
$ python3 hooknative-by-function-address.py
[ * ] Running Arophix Hook Test ...
[+] membase: 0xb2acd000
[+] addressOfStringFromJni: 0xb2ad1d80
[++] addressOfStringFromJni: 0xb2ad1d80
ret: 0x19
Jika Anda melihat kesalahan seperti di bawah ini:
$ frida.ServerNotRunningError: unable to connect to remote frida-server: closed
Ingatlah bahwa Anda telah memulai frida-server
di emulator Anda.
Sementara itu, di layar emulator Anda, Anda akan melihat teks berubah menjadi Frida is hooking this displayed text from Native layer by function address.
jika sukses.