Binary Patching menggunakan IDA Pro (part 1)

Halo Folks~ selamat datang kembali di artikel tutorial CSC. Pada kali ini, yang akan kita bahas adalah tutorial bagaimana melakukan Patching sederhana pada sebuah program menggunakan software disassembler Ida Pro. Artikel ini ditujukan buat kamu-kamu semua yang mungkin tertarik pada Reverse Engineering dan ingin belajar bagaimana dasarnya melakukan Patching. So, sebelum kita mulai mari kita pelajari apa arti patching dan apa itu IDA terlebih dahulu.

Apa itu Patching?

Binary Patching atau biasa disebut Patching, adalah sebuah proses memodifikasi byte-byte atau assembly instruction yang terdapat pada sebuah program executable (ELF, .exe, dsb.) ketika dijalankan. Sederhananya, Patching memungkinkan kita untuk melakukan perubahan terhadap nilai-nilai variabel yang ada di dalam sebuah program.

Apa itu IDA?

IDA (Interactive Data Assembler) adalah sebuah tool yang mampu membongkar sebuah Compiled Executable dan memaparkannya dalam bentuk Assembly Code. Sementara IDA Pro adalah versi premium/berbayar dari IDA, dengan fitur yang lebih banyak dan khususnya mampu meng-generate Pseudocode dari program tersebut sehingga lebih mudah dibaca manusia. Software ini merupakan salah satu yang paling sering digunakan dalam proses Reverse Engineering karena memiliki banyak fitur berguna seperti Decompiling, membaca alur program, debugging, dan yang akan kita bahas setelah ini, yaitu patching.

Patching Variabel Integer menggunakan IDA Pro

Untuk percobaan Patching ini, saya sudah menyiapkan sebuah kodingan bahasa C yang saya compile menggunakan gcc menjadi format ELF (Executable and Linkable Format) dengan command:

gcc script.c -o percobaan

Source Code:

#include <stdio.h>

#include <string.h>




int main(){

    int angkanya = 5;

    printf("selamat datang di tes ngepatching.\n");

    printf("angkanya adalah: %d\n", angkanya);




    return 0;

}

Compile & Output: 

Sederhana sekali bukan? Kodingan ini hanya melakukan print variabel “angkanya” yang berisi nilai yang sudah ditentukan sebelumnya, yaitu 5. Nah, yang mau dilakukan sekarang adalah kita ingin mencoba mengubah nilai “angkanya” yang tadinya 5 menjadi nilai lain, misalnya 21 menggunakan teknik patching.

Pertama-tama kita jalankan dulu IDA Pro nya, lalu klik New dan cari di mana file yang mau di-Patch berada (program yang sudah di-compile ya, bukan source code-nya).

Lalu load file-nya dalam bentuk ELF64 seperti di gambar, setelah itu tunggu hingga dia selesai loading.

Setelah itu, tampilannya akan berubah menjadi seperti ini. Pada bagian ini kita sudah bisa melihat alur program dalam bentuk graph/text yang isinya instruction-instruction dalam bahasa Assembly.

dalam bentuk graph

 

Dalam bentuk text (klik kanan->text view)

.text:000000000000114D mov [rbp+var_4], 5

Pada Instruction tersebut, kita bisa melihat angka 5 seperti nilai variabel “angkanya” di source code, yang menandakan bahwa nilai 5 di-store ke dalam memori program melalui instruction tersebut. Untuk mengubah nilainya, tinggal select angka 5 nya, lalu ke tab Edit->Patch Program->Change byte.

 

Maka akan muncul Pop-up seperti di gambar.

Value bytes-nya akan ditampilkan dalam bentuk Hexadecimal, dan kita bisa melihat nilai 05 00 00 00 dimana 05 adalah nilai hex dari 5. Karena kita ingin mengubahnya menjadi 21 yang mempunyai nilai hex 15, maka tinggal kita ubah bagian 05 00 00 00 menjadi 15 00 00 00. 

Setelah itu klik ok dan lihat perubahannya.

Instruction yang tadinya mov [rbp+var_4], 5 sekarang telah berubah menjadi instruction  mov [rbp+var_4], 15 (15h artinya 21 dalam decimal). Kita sudah mengubah nilainya, sekarang kita recompile lagi menjadi ELF dengan byte yang sudah diubah. Caranya dengan klik tab Edit->Patch program->Apply patches to input file. 

Nah, setelah keluar pop-up seperti ini kita tinggal klik OK dan file program yang kita masukkan tadi akan ter-overwrite dengan program baru yang sudah kita patch. Atau kita bisa meng-checklist Create Backup jika tidak mau file yang lama ter-overwrite dengan yang baru.

Setelah itu, tinggal kita run dan bandingkan outputnya.

Before Patch:

After Patch:

Yak, dari output-nya kita sudah bisa melihat bahwa variabel “angkanya” yang kita print sudah berubah nilai dari 5 menjadi 21. Selamat, kita sudah berhasil melakukan Patching.

Yah, kira-kira itu saja langkah-langkah dasar untuk Binary Patching. Untuk part-part selanjutnya kita akan mengupas lebih dalam tentang Patching dan hal-hal apalagi yang bisa kita Patching-in. So, terima kasih sudah membaca dan tunggu artikel-artikel kami berikutnya :D.

Nuel Siahaan & Delbert Giovanni Lie