Reverse Engineering: Patch Program Sederhana

Dengan melakukan reverse engineering dan menganalisa kode sebuah program (assembler), kita bisa melakukan patching terhadap sebuah program dengan merubah alur program tersebut sesuai dengan yang kita inginkan.

Pada tulisan kali ini, saya akan coba sedikit menjelaskan bagaimana melakukan patching tersebut.

Kita akan menggunakan program sederhana berikut ini:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define password "p4ss"

int main(int argc, char *argv[])
{
char pass[100];

printf("Please enter your passwordnn");
scanf("%s", pass);
if ( strcmp(pass, password) == 0 )
{
printf("Congrats!! Correct Passnn");
}
else
{
printf("Wrong Passnn");
}

system("PAUSE");
return 0;
}

Program di atas adalah program pengecekan password sederhana, dimana jika kita memasukan “p4ss” sebagai password kita, kita akan mendapatkan pesan “Congrats!! Correct Pas”, sebaliknya jika password kita salah maka kita kan mendapatkan pesan “Wrong Pass”.

Sebenarnya dengan melakukan analisa string pada program di atas(sudah tercompile) dengan menggunakan hexeditor, kita bisa menemukan password tersebut.

Tapi pada tulisan ini kita akan mencoba melakukan patching terhadap program ini, sehingga apapun yang kita masukan sebagai password akan menghasilkan jawaban yang benar.

Dengan menggunakan IDA kita bisa melihat flow dari program tersebut.

Jika kita menganalisa flow program diatas, maka kita dapat melihat terdapat “call strcmp”, inilah bagian dimana proses pembandingan antara password yang kita input dengan password yang tersimpan(hardcoded) dalam program.

kemudian pada bagian “jnz short loc_401361” program akan bereaksi terhadap password yang kita masukan(memanfaatkan zero flag di register). Jika password yang kita masukan salah, maka program akan loncat ke bagian pesan “Wrong Pass”, namun jika benar maka program akan menampilkan pesan “Congrats!! Correct Pas”. Pada bagian inilah yang akan kita modifikasai sehingga apapun yang kita masukan sebagai password akan selalu menampilkan pesan “Congrats!! Correct Pas”.

kita akan menggunakan immunity debugger untuk melakukan pengetesan terhadap patch yang akan kita lakukan, setelah meload program di atas pada immunity debugger, kita ujicoba program dengan memasukan password yang salah.

ok, program berjalan dengan sebagaimana mestinya, selanjutnya kita hanya perlu mencari bagian yang akan kita edit.

Jika terjadi kesalahan, program akan melakukan locatan ke alamat 00401361, di bagian inilah kita akan menlakukan perubahan sehingga program hanya akan loncat ke kode berikut dibawahnya (00401353).

ok, kita bisa melihat perubahan yang terjadi terhadap kode program tersebut, perhatikan hex dari kode yang berubah, sebelumnya “75 0E” menjadi “75 00“, langkah selanjutnya kita cek apakah patching kita berjalan dengan baik..??

ok, ternyata patching berjalan dengan baik, selanjutnya setelah kita mendapatkan hex yang harus kita rubah, kita akan melakukan patching program menggunakan hexeditor.

Dengan menggunakan hexeditor kita mencari hex dari kode di bagian bawah kode yang akan kita edit (metode pencarian bebas).

setelah mendapatkan bagian yang kita cari, kita cukup mencari bagian yang harus kita edit.

lalu edit “75 oE” menjadi “75 00“.

simpan program yang kita patch dengan nama baru (misal: tebak-patch.exe), lalu coba program tersebut.. ?

jika kita melihat program yang sudah kita patch dengan IDA, maka kita bisa melihat bahwa flow program sudah berubah.

ok, kurang lebih begitulah langkah-langkah dalam melakukan patching dengan reverse engineering pada program yang sangat sederhana di atas. mudah-mudahan penjelasan di atas bisa dimengerti. ?

PS: sori kalo ada penjelasan yang kurang/salah, maklum masih belajar.. ?