Laman

Minggu, 13 Januari 2013

Crack Software Dengan Ollydbg

OllyDbg ( Melacak Jalan )
 
Run jejak pertama kali diperkenalkan di OllyDbg 1.04. Teknik debugging pada dasarnya sangat sederhana. Kode dijalankan langkah demi langkah, dan debugger protokol setiap perintah, bersama dengan register dan bendera, di buffer lingkaran besar. Ketika pengecualian terjadi, seseorang dapat backtrace beberapa (atau ratusan ribu) perintah terakhir dan menganalisis kondisi yang menyebabkan kesalahan.
OllyDbg 1.06 telah meningkatkan kemungkinan jejak run. Jalankan jejak menunjukkan register dimodifikasi dan membuat pesan penting dan operan fungsi diketahui. Satu dapat mengatur kondisi untuk menghentikan jejak menjalankan kode, profil ditelusuri, tulis menjalankan jejak ke disk untuk mengatasi keterbatasan memori atau untuk membandingkan dua berjalan, debug diri dimodifikasi program, menemukan ount ketika perintah di lokasi tertentu dieksekusi untuk terakhir kalinya, dan sebagainya.
Harap diingat, bagaimanapun, bahwa jejak berjalan lambat. Pada prosesor 500-MHz, OllyDbg dapat melacak hingga 2500 (Windows 95) atau (NT) 5000 perintah per detik. Untuk mempercepat jejak berjalan, seseorang dapat menandai kuasi-linear potongan kode (tanpa melompat ke luar) yang harus dijalankan sekaligus. Dan satu batasan lebih: OllyDbg tidak menyimpan isi memori diakses.
Untuk membuat Anda terbiasa dengan jejak run, mari kita coba untuk men-debug aplikasi konsol sederhana:
# Include
batal f1 (void) {printf ("a");};
batal f2 (void) {printf ("b");};
f3 kekosongan (void) {printf ("c");};
void (* f [3]) () = {f1, f2, f3};
void main (void) {
int i, j, k;
untuk (i = 0; i <100; i + +) {
for (j = 0; j <1000000; j + +); / / Panjang kode
k = i/33;
if (k> 3) melanjutkan;
f [k] (); / / Di sini error (ketika i == 99)!
};
printf ("\ n");
};
Fungsi f1, f2 dan f3 huruf cetak a, b, dan c. Program utama memanggil setiap fungsi 33 kali, kemudian mencetak newline dan berakhir ... setidaknya dalam teori. (Anda telah menemukan kesalahan, jangan Anda Well done,? Tetapi di sini kita belajar bagaimana untuk datang ke hasil yang sama dengan menggunakan jejak run). Cobalah untuk menjalankan rtrace.exe, dan dalam beberapa detik itu crash:
Oh, tidak! Sesuatu yang pasti salah! Seperti OllyDbg adalah just-in-time debugger pilihan Anda, Anda menekan "Debug", tapi jendela Disassembler kosong! Alamat 00620061 poin ke mana-mana, dan Anda memiliki sekali tidak tahu perintah yang melompat ke lokasi ini. Mari kita coba dari awal. Tekan Ctrl + F2 (shortcut untuk Restart), kemudian Ctrl + F11 (Trace ke dalam) dan menunggu satu atau dua menit. Konsol masih kosong. Mungkin beberapa bagian dari kode waktu terlalu lama untuk mengeksekusi? Jeda menjalankan jejak dengan menekan F12 (Jeda) atau Esc. Dalam modul executable, klik RTRACE dan pilih "Lihat profil run jejak":
Sebuah perintah atau urutan perintah di alamat 00401191 dieksekusi lebih dari 24000 kali. Ikuti baris ini di Disassembler:
Siklus 3-perintah singkat mengeksekusi F4240 (desimal 1000000) kali. Pada 5000 perintah per detik, OllyDbg akan membutuhkan 10 menit untuk melacak siklus ini. Perhatikan bahwa urutan kuasi-linear, yaitu tidak memiliki melompat ke luar. Dari menu pop-up, pilih "Run jejak | Loncat seleksi ketika menelusuri". Garis merah di kolom keempat menunjukkan bahwa perintah dikeluarkan dari jejak run. Ketika OllyDbg Encounters dikecualikan urutan, ia menetapkan breakpoint sementara pada perintah yang segera mengikuti blok dikecualikan (dalam kasus kami, 00.401.199), dan berjalan sekaligus. Tentu saja, setiap kembali atau melompat ke luar akan membuat benar melacak mungkin, sehingga OllyDbg memeriksa potongan kode Anda ingin mengecualikan dan dalam kasus-kasus sulit meminta Anda untuk konfirmasi.
Lanjutkan menjalankan jejak. Angka sekarang muncul dengan cepat. Dalam waktu 20 detik, OllyDbg laporan kesalahan:
Konfirmasi kesalahan ini, buka jendela Run jejak (tombol dengan periode '...' pada toolbar) dan gulir ke bawah:
Sekarang kita dapat melihat bahwa perintah yang melompat ke 00620061 adalah PANGGILAN EAX pada 004011AF, dan alamat tidak valid dihitung satu perintah sebelum panggilan. DoubleClick baris ini untuk melihatnya dalam disassembler. Register dan informasi yang berwarna abu-abu untuk menekankan bahwa mereka tidak sebenarnya, tetapi diambil dari jejak:
Alamat konstan 0040A128 poin ke array dari 3 fixups mengandung alamat dari fungsi f1, f2 dan f3. Ketika perintah ini dieksekusi untuk terakhir kalinya, EAX berisi indeks 3, di luar batas-batas array itu. Dua perintah sebelumnya harus melakukan batas pemeriksaan, tetapi kondisi tidak valid: jump diambil ketika EAX lebih besar dari 3. Kondisi yang benar akan "lebih besar atau sama". DoubleClick tidak valid line dan kondisi yang benar:
Setelah Anda merakit perintah baru, baris dalam Disassembler mendapat merah, menunjukkan perintah yang dimodifikasi. Pilih lagi dan dalam menu pop-up pilih item "Salin ke file eksekusi" kuat. Hal ini berlaku modifikasi langsung ke file eksekusi:
Yang Anda butuhkan adalah untuk menyimpan executable dimodifikasi (dengan nama yang berbeda, tentu saja) dan memeriksa. Sekarang program itu bekerja dengan benar! Itu mudah, bukan? ..
Anda dapat mendownload tutorial ini dan rtrace.exe sampel program di sini
Reaksi:

3 komentar:

  1. Mau tanya gan apa bisa mba olly merubah bentuk dialog" misalnya; apakah anda ingin keluar ya atau tidak" di suatu software? whimawan56@gmail.com

    BalasHapus