Apa Itu Frida?#

Frida adalah toolkit instrumentasi dinamis yang memungkinkan pengembang, reverse engineer, dan peneliti keamanan untuk menyuntikkan script mereka sendiri ke dalam proses aplikasi yang sedang berjalan. Dengan Frida, Anda dapat mengamati dan memodifikasi perilaku aplikasi secara real-time tanpa perlu mengubah kode sumbernya. Toolkit ini mendukung berbagai platform, termasuk Windows, macOS, Linux, iOS, Android, FreeBSD, dan QNX, sehingga memberikan fleksibilitas tinggi dalam analisis dan pengujian aplikasi.

Salah satu fitur utama Frida adalah kemampuannya untuk melakukan hooking pada fungsi-fungsi tertentu dalam aplikasi, memungkinkan Anda untuk memantau panggilan fungsi, memeriksa dan mengubah parameter yang diteruskan, serta memodifikasi nilai pengembalian. Hal ini sangat berguna dalam reverse engineering untuk memahami bagaimana suatu aplikasi beroperasi, mengidentifikasi potensi kerentanan keamanan, atau bahkan mem-bypass mekanisme perlindungan tertentu. Selain itu, Frida menyediakan API yang kaya untuk scripting, yang memungkinkan pembuatan alat khusus untuk kebutuhan analisis tertentu.

Frida juga menawarkan alat command-line seperti frida-trace, yang memudahkan proses tracing fungsi secara interaktif. Dengan frida-trace, Anda dapat dengan cepat mengidentifikasi dan memantau fungsi-fungsi yang relevan dalam suatu aplikasi tanpa perlu menulis script dari awal. Kemampuan ini mempercepat proses analisis dan memungkinkan peneliti untuk dengan mudah mengamati perilaku aplikasi dalam berbagai skenario.1


Kapan Kita menggunakan Frida?#

Frida adalah alat yang sangat berguna dalam berbagai skenario, terutama dalam analisis keamanan dan rekayasa balik aplikasi. Baik itu aplikasi iOS, Android, maupun Desktop. Berikut beberapa contoh kasus di mana Frida dapat diterapkan:

1. Bypass Proteksi Aplikasi

Banyak aplikasi menerapkan mekanisme proteksi seperti certificate pinning untuk mencegah serangan man-in-the-middle. Dengan Frida, Anda dapat melakukan hooking pada fungsi yang memeriksa sertifikat dan memodifikasinya agar selalu menerima sertifikat yang tidak tepercaya. Hal ini memungkinkan pengujian keamanan lebih lanjut tanpa harus memodifikasi aplikasi secara langsung.

2. Analisis Malware

Dalam analisis malware, Frida memungkinkan peneliti untuk memantau dan memodifikasi perilaku kode berbahaya secara real-time. Dengan menyuntikkan script ke dalam proses malware, peneliti dapat mengamati aktivitas mencurigakan, seperti akses file atau jaringan, dan memahami cara kerja malware tersebut tanpa menjalankannya dalam lingkungan yang sepenuhnya tidak terkendali.

3. Pengujian Aplikasi Mobile

Frida sangat berguna dalam pengujian aplikasi mobile, terutama untuk mem-bypass mekanisme keamanan seperti deteksi jailbreak atau root. Dengan memodifikasi fungsi yang memeriksa status perangkat, penguji dapat mengakses fitur aplikasi yang biasanya dibatasi, sehingga memungkinkan pengujian yang lebih menyeluruh terhadap potensi kerentanan.

4. Debugging Aplikasi Tanpa Source Code

Ketika source code tidak tersedia, debugging menjadi tantangan. Frida memungkinkan developer untuk menyuntikkan script debugging ke dalam aplikasi yang sedang berjalan, memantau panggilan fungsi, dan memodifikasi parameter atau nilai pengembalian. Ini memfasilitasi pemahaman alur kerja aplikasi dan identifikasi bug tanpa akses ke kode sumber.

5. Evaluasi Keamanan Perangkat IoT

Perangkat Internet of Things (IoT) sering kali memiliki keterbatasan dalam debugging dan analisis. Dengan Frida, peneliti dapat menyuntikkan script ke dalam proses yang berjalan pada perangkat IoT, memungkinkan analisis perilaku perangkat, identifikasi kerentanan, dan pengembangan patch keamanan yang sesuai.

Dalam semua kasus ini, Frida memberikan fleksibilitas dan kontrol yang diperlukan untuk menganalisis dan memodifikasi perilaku aplikasi secara efektif, menjadikannya alat yang tak ternilai dalam bidang keamanan dan rekayasa balik.


Frida Hooking#

hooking adalah teknik yang memungkinkan Anda untuk mencegat dan memodifikasi eksekusi fungsi atau metode dalam aplikasi yang sedang berjalan. Dengan hooking, Anda dapat memantau panggilan fungsi, mengubah parameter yang diteruskan, atau bahkan mengubah nilai yang dikembalikan oleh fungsi tersebut. Frida menyediakan API yang memudahkan proses ini, memungkinkan Anda untuk menyuntikkan script JavaScript ke dalam proses target dan mengimplementasikan logika hooking sesuai kebutuhan.

Misalnya, jika Anda ingin memantau penggunaan fungsi enkripsi dalam sebuah aplikasi, Anda dapat menggunakan Frida untuk hook fungsi enkripsi tersebut. Dengan demikian, setiap kali fungsi tersebut dipanggil, script Anda dapat mencatat data yang dienkripsi atau didekripsi, serta kunci yang digunakan. Hal ini sangat berguna dalam analisis keamanan untuk memahami bagaimana data diproses dan memastikan bahwa praktik enkripsi yang digunakan sudah sesuai standar.

Frida menggunakan modul bernama Interceptor untuk melakukan hooking pada fungsi native. Dengan Interceptor, Anda dapat menentukan alamat fungsi yang ingin di-hook dan menyediakan implementasi baru atau modifikasi yang akan dijalankan saat fungsi tersebut dipanggil. Selain itu, Frida juga menyediakan API untuk hooking metode dalam lingkungan Java atau .NET, sehingga Anda dapat melakukan hooking pada berbagai jenis aplikasi dan platform.


Frida Agent#

Frida Agent merujuk pada script JavaScript yang disuntikkan ke dalam proses target untuk melakukan instrumentasi dinamis. script ini memungkinkan Anda untuk mengintersep dan memodifikasi perilaku aplikasi secara real-time, seperti melakukan hooking pada fungsi tertentu, memantau aktivitas jaringan, atau menganalisis penggunaan enkripsi dalam aplikasi. Dengan Frida Agent, Anda dapat menulis logika khusus yang dijalankan di dalam konteks proses target, memberikan fleksibilitas tinggi dalam pengujian dan analisis aplikasi.

Untuk mempermudah pengembangan Frida Agent, komunitas telah menyediakan contoh dan template yang dapat digunakan sebagai dasar. Misalnya, repositori frida-agent-example di GitHub menyediakan contoh Frida Agent yang ditulis dalam TypeScript. Dengan memanfaatkan contoh ini, Anda dapat mempelajari struktur dan praktik terbaik dalam penulisan Frida Agent, serta menyesuaikannya dengan kebutuhan spesifik Anda.

Setelah menulis Frida Agent, Anda dapat menggunakan alat seperti frida-compile untuk mengompilasi script tersebut menjadi format yang siap disuntikkan ke dalam proses target. Alat ini membantu mengelola dependensi dan memastikan bahwa script Anda dikompilasi dengan benar sebelum digunakan. Informasi lebih lanjut tentang frida-compile dapat ditemukan di repositori resminya.


Analisis Aplikasi Android#

Sekarang kita akan mencoba menerapkan penggunaan frida untuk sebuah aplikasi Android. Bayangkan, Anda ingin melakukan intercept network request pada sebuah aplikasi Android menggunakan BurpSuite. Namun ternyata data yang dikirim dienkripsi menggunakan AES. Untuk menganalisis enkripsi AES dalam aplikasi Android menggunakan Frida di Windows, ikuti langkah-langkah berikut:

1. Persiapan

  • Instalasi Python dan Frida Tools: Pastikan Python 3.x terinstal di sistem Anda. Kemudian, instal Frida Tools dengan perintah:

    pip install frida-tools
    

    cek apakah frida-tools telah berhasil diinstall dengan menjalankan perintah frida --help pada terminal Anda. Jika berhasil terinstall, maka akan muncul output seperti ini:

      usage: frida [options] target
    
      positional arguments:
      args                  extra arguments and/or target
    
      options:
      -h, --help            show this help message and exit
      -D ID, --device ID    connect to device with the given ID
      -U, --usb             connect to USB device
      -R, --remote          connect to remote frida-server
      -H HOST, --host HOST  connect to remote frida-server on HOST
      --certificate CERTIFICATE
                              speak TLS with HOST, expecting CERTIFICATE
      --origin ORIGIN       connect to remote server with “Origin” header set to ORIGIN
      --token TOKEN         authenticate with HOST using TOKEN
      --keepalive-interval INTERVAL
                              set keepalive interval in seconds, or 0 to disable (defaults to -1 to auto-select based on transport)
      --p2p                 establish a peer-to-peer connection with target
      --stun-server ADDRESS
                              set STUN server ADDRESS to use with --p2p
      --relay address,username,password,turn-{udp,tcp,tls}
                              add relay to use with --p2p
      -f TARGET, --file TARGET
                              spawn FILE
      -F, --attach-frontmost
                              attach to frontmost application
      -n NAME, --attach-name NAME
                              attach to NAME
      -N IDENTIFIER, --attach-identifier IDENTIFIER
                              attach to IDENTIFIER
      -p PID, --attach-pid PID
                              attach to PID
      -W PATTERN, --await PATTERN
                              await spawn matching PATTERN
      --stdio {inherit,pipe}
                              stdio behavior when spawning (defaults to “inherit”)
      --aux option          set aux option when spawning, such as “uid=(int)42” (supported types are: string, bool, int)
      --realm {native,emulated}
                              realm to attach in
      --runtime {qjs,v8}    script runtime to use
      --debug               enable the Node.js compatible script debugger
      --squelch-crash       if enabled, will not dump crash report to console
      -O FILE, --options-file FILE
                              text file containing additional command line options
      --version             show program's version number and exit
      -l SCRIPT, --load SCRIPT
                              load SCRIPT
      -P PARAMETERS_JSON, --parameters PARAMETERS_JSON
                              parameters as JSON, same as Gadget
      -C USER_CMODULE, --cmodule USER_CMODULE
                              load CMODULE
      --toolchain {any,internal,external}
                              CModule toolchain to use when compiling from source code
      -c CODESHARE_URI, --codeshare CODESHARE_URI
                              load CODESHARE_URI
      -e CODE, --eval CODE  evaluate CODE
      -q                    quiet mode (no prompt) and quit after -l and -e
      -t TIMEOUT, --timeout TIMEOUT
                              seconds to wait before terminating in quiet mode
      --pause               leave main thread paused after spawning program
      -o LOGFILE, --output LOGFILE
                              output to log file
      --eternalize          eternalize the script before exit
      --exit-on-error       exit with code 1 after encountering any exception in the SCRIPT
      --kill-on-exit        kill the spawned program when Frida exits
      --auto-perform        wrap entered code with Java.perform
      --auto-reload         Enable auto reload of provided scripts and c module (on by default, will be required in the future)
      --no-auto-reload      Disable auto reload of provided scripts and c module
    
  • Instalasi Android Debug Bridge (ADB): Unduh dan instal ADB dari situs resmi Android. Tambahkan direktori ADB ke variabel PATH sistem Anda untuk akses mudah melalui command prompt.

2. Menyiapkan Frida Server di Perangkat Android

  • Identifikasi Arsitektur Perangkat: Hubungkan perangkat Android Anda dan jalankan:

    adb shell getprop ro.product.cpu.abi
    

    Ini akan menampilkan arsitektur CPU perangkat (misal, arm64-v8a).

  • Unduh Frida Server: Kunjungi halaman rilis Frida dan unduh versi Frida Server yang sesuai dengan arsitektur perangkat Anda.

  • Transfer dan Jalankan Frida Server:

    adb push frida-server /data/local/tmp/
    adb shell
    cd /data/local/tmp/
    chmod +x frida-server
    ./frida-server &
    

    Perintah di atas akan menyalin Frida Server ke perangkat, mengubah izin agar dapat dieksekusi, dan menjalankannya di latar belakang.

3. Mengidentifikasi Fungsi Enkripsi AES dalam Aplikasi

  • Analisis Statis: Gunakan alat seperti APKTool untuk mendekompilasi APK dan mencari penggunaan kelas javax.crypto.Cipher yang mengindikasikan enkripsi AES.

  • Analisis Dinamis dengan Frida: Gunakan script Frida untuk memonitor inisialisasi objek Cipher dan mode operasinya.

4. Membuat dan Menjalankan script Frida untuk Hooking

  • script JavaScript untuk Hooking:

    
      Java.perform(function () {
      var Cipher = Java.use('javax.crypto.Cipher');
      Cipher.init.overload('int', 'java.security.Key').implementation = function (mode, key) {
      var operation = mode === 1 ? 'Encryption' : 'Decryption';
      console.log('[*] Cipher init for ' + operation);
      console.log(' Key: ' + key);
      return this.init(mode, key);
      };
      Cipher.doFinal.overload('[B').implementation = function (data) {
      var result = this.doFinal(data);
      console.log('[*] Cipher.doFinal called');
      console.log(' Input data: ' + data);
      console.log(' Result: ' + result);
      return result;
      };
      });
      

    script ini akan meng-hook metode init dan doFinal dari kelas Cipher untuk mencatat informasi kunci dan data yang dienkripsi atau didekripsi.

  • Menjalankan script dengan Frida:

    frida -U -l your_script.js -f com.example.targetapp --no-pause
    

    Gantilah your_script.js dengan nama file script Anda dan com.example.targetapp dengan package name aplikasi target.

5. Menganalisis Output

Setelah menjalankan script, perhatikan output di terminal yang akan menampilkan informasi tentang kunci enkripsi dan data yang diproses. Analisis ini membantu memahami bagaimana enkripsi AES diterapkan dalam aplikasi dan memungkinkan identifikasi potensi kelemahan atau area untuk perbaikan.2


Karena saya bingung mau menulis apalagi untuk artikel kali ini, jadi saya cukupkan sampai sini aja. Saya akan mencontohkan langsung implementasinya untuk analisis aplikasi Android di lain artikel. Silahkan cek di tag #Frida atau Reverse Engineering. Silahkan tinggalkan komentar jika Anda ingin saya membahas mengenai artikel lainnya.