Anda di halaman 1dari 3

Tutorial Ollydbg (by request) - Final Tutorial Published by : viperfx07, on Friday, 10 August 2007 20:06 Visited 113 times,

voted 2 times, popularity : 55%

Pertama download dulu file crackit3.exe di http://www.net-force.nl/challenge/lev el503/crackit3.zip buat demonya. NB: untuk debugging diperlukan kesabaran tinggi ^^ Program tersebut mengeluarkan pesan: "ACCESS GRANTED" atau "ACCESS DENIED" buka ollydbgnya dan scroll ke bagian yang ada text "ACCESS GRANTED"-nya. Dapat d ilihat ini berada pada alamat 00402DC1 liat snippet berikut: 00402DC1 > baFreeObj 00402DC7 . 00402DCA . ......... ......... 00402DDE . 00402DE3 . 8B35 D4104000 MOV ESI,DWORD PTR DS:[<&MSVBVM60.__vbaFr>; MSVBVM60.__v 8D4D 98 LEA ECX,DWORD PTR SS:[EBP-68] FFD6 CALL ESI ; <&MSVBVM60.__vbaFreeObj> 68 48214000 PUSH CRACKIT3.00402148 ; UNICODE "ACCESS GRANTED" 57 PUSH EDI

pada address 00402DF5 kita dapat menemukan pesan "ACCESS DENIED": 00402DF5 > 00402DFB . 00402DFE . 00402DFF . ......... ......... 00402E5C . 00402E5E . 00402E63 . FF91 00030000 CALL DWORD PTR DS:[ECX+300] 8D55 98 LEA EDX,DWORD PTR SS:[EBP-68] 50 PUSH EAX 52 PUSH EDX 8BF8 MOV EDI,EAX 68 6C214000 PUSH CRACKIT3.0040216C ; UNICODE "ACCESS DENIED" 57 PUSH EDI

jadi, apa yg menyebabkan JUMP ke "ACCESS DENIED" atau "ACCESS GRANTED" ?!? Jika kamu liat sepotong kode yang diatas "ACCESS GRANTED", kamu akan menemukan sebuah JNZ (Jump if not zero) pada address 00402D6D. Perintah JNZ ini memeriksa nilai tertentu, dan jika nilai ini adalah 0, program akan men-skip kode yg menampilkan pesan "ACCESS GRANTED" dan langsung loncat ke kode yang menampilkan "ACCESS DEN IED". snippet ini menunjukkan JNZ yg dimaksud: 00402D6D . 85C0 TEST EAX,EAX 00402D6F . 0F85 80000000 JNZ CRACKIT3.00402DF5 Kita ingin mencegah hal ini terjadi. Jika kita hanya tertarik untuk menampilkan ACCESS GRANTED, kita daat dengan mudah mengganti JNZ dengan JZ (Jump if Zero)... . JZ berlaku sama dengan JE (Jump if Equal).

snippet: 00402D6F 0F84 80000000 JE CRACKIT3.00402DF5 00402D75 . FF91 00030000 CALL DWORD PTR DS:[ECX+300] Kita dapat membuat perubahan ini dengan menggunakan fungsi edit dengan menggunak an menu klik kanan. Sekarang program tersebut akan merespon berlawanan. Jika nil ainya 0, akan menampilkan ACCESS GRANTED. Jika memasukkan password yg benar akan menghasil ACCESS DENIED Bagaimanapun, karena kita ingin mengambil nilai passwordnya, ini akan sedikit "t ricky" untuk menemukan password yg benar kita perlu melihat di atas JNZ pada address 00 402D6F. Karena kita akan mengasumsikan bahwa program berjalan sebagai berikut: - input yg diterima - input yg dicek - jump ke pesan yg "baik" dan yg "buruk" ^^ ketika kita lihat diatasnya JNZ, kita menemukan sebuah code yg aneh, dengan cuku p byk JE dan nomor unicode...liat dibawah ini: 00402964 . 0040296A . 0040296D . baStrCopy 00402973 . 00402977 . 0040297D . 0F80 AD050000 JO CRACKIT3.00402F17 8945 C0 MOV DWORD PTR SS:[EBP-40],EAX FF15 98104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCo>; MSVBVM60.__v 0FBF45 D8 MOVSX EAX,WORD PTR SS:[EBP-28] 8985 0CFFFFFF MOV DWORD PTR SS:[EBP-F4],EAX 68 AC204000 PUSH CRACKIT3.004020AC ; UNICODE "164"

Kita dapat menemukan 7 dari nomor unicode jadi kita dapat mengasumsikan bahwa pa njang dari password tersebut adalah 7. Bagaimanapun untuk lebih yakin, kita liha t beberapa instruksi sebelum nomor2 ini. Pada address 0402469:

00402469 . FF15 10104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenBs>; MSVBVM60.__v baLenBstr 0040246F . 33C9 XOR ECX,ECX 00402471 . 83F8 07 CMP EAX,7

CALL MSVBVM60.__vbaLenBstr artinya bahwa panjang dari string dikalkulasi. Seperti yg dpt kita liat nilai yg dikalkulasi oleh perintah CAL dibandingkan den gan angka 7 00402471 . 83F8 07 CMP EAX,7 Jadi bener, bahwa panjang password berjumlah 7. Sekarang kita balik ke bagian UNICODE number, address 00402964. Disini program m ulai untuk mengecek huruf pertama dari password. Instruksi JE ini mengecek bahwa huruf yg kita masukkan sama dengan password yg benar. JE = Jump if Equal: 0040299C . F6C4 40 TEST AH,40 0040299F . 0F84 2C010000 JE CRACKIT3.00402AD1

Kita akan menggunakan address ini untuk men-set breakpoint. Dengan mensetting br eakpoint kita akan meng-interupt eksekusi normal dari sebuah program. Jika kita men-set breakpoint pada 3 JE pertama (kita lakukan ini dengan menekan F2). Progr am akan berhenti berjalan ketika mencapai salah satu breakpoint yg kita pasang. Sekarang ke address 0040299F dan tekan F2, alamat akan sekarang di highlight den gan warna merah. Lakukan hal yg sama pada 004029D0 dan 00402A02. Karena password panjangnya 7 char, kita akan menjalankan program (dgn menekan F5 ) dan masukkan "aaaaaaa" sebagai password. Program akan berhenti pada address 00 40299F. Sekarang kita akan menekan F9 untuk melanjutkan eksekusi. Program akan b erhenti lagi pada 0040299F dan akan menampilkan ACCESS DENIED. Kita dapat mengam bil kesimpulan bahwa huruf pertama bukan "a". Karena checknya adalah case sensit ive, kita juga akan mencoba "Aaaaaaa". Coba semua kemungkinan dari alphabet besa r,kecil dan simbol dengan shift maupun tidak. Kita lihat bahwa saat kita memasuk kan "Haaaaaa" ollydbg loncat ke breakpoint kedua, ketika kita menekan F9 dan tid ak menampilkan ACCESS DENIED. Selamat, kita telah menemukan huruf pertama. Huruf nya adalah "H" Lanjutkan langkah2 yg kita lakukan diatas, dan kita dapat menemukan bahwa "H4aaa aa" akan menghantarkan kita ke breakpoint ke 3. Sekarang kita sudah tau step2nya. Tinggal pasang breakpoint di 4 terakhir JE-nya dan ulangi step2 tersebut sampe ketemu deh tujuh2nya.

Anda mungkin juga menyukai