Cara menggunakan program ollydbg. Kami memilih plugin paling menarik untuk OllyDbg

KE Cara memulai sesi debugging

Cara termudah adalah dengan meluncurkan OllyDbg, pilih File -> Buka dan pilih program yang ingin Anda debug. Jika program ini memerlukan parameter baris perintah apa pun, ketik parameter tersebut di kotak di bagian bawah kotak dialog, atau pilih salah satu baris parameter yang telah Anda gunakan di sesi sebelumnya.

OllyDbg dapat melakukan debugging DLL mandiri. Dalam hal ini, OllyDbg membuat dan menjalankan aplikasi kecil yang memuat perpustakaan dan, atas permintaan Anda, memanggil fungsi yang diekspor.
Jika Anda ingin memulai ulang program terakhir yang Anda debug, cukup tekan Ctrl+F2 (ini adalah tombol pintas untuk memulai ulang program) dan OllyDbg akan meluncurkannya dengan parameter yang sama. Alternatifnya, pilih menu File dan kemudian program dari riwayat. Anda juga dapat menyeret file yang dapat dieksekusi atau DLL dari Windows Explorer dan melepaskan ikonnya ke OllyDbg.

Tentu saja, Anda dapat menentukan nama program yang sedang di-debug dan parameternya pada baris perintah saat memulai OllyDbg. Misalnya, Anda dapat membuat pintasan desktop yang menunjuk ke OllyDbg, pilih Properti, buka Pintasan Program, dan tambahkan nama program ke baris perintah. Setiap kali Anda mengklik dua kali pintasan ini, OllyDbg akan meluncurkan program Anda secara otomatis. Harap dicatat bahwa DLL tidak mendukung baris perintah.

Anda dapat melampirkan OllyDbg ke proses yang sedang berjalan. Pilih File -> Lampirkan, dan pilih proses dari daftar. Namun perlu diperhatikan bahwa setelah Anda menutup OllyDbg, proses ini juga akan keluar. Jangan sekali-kali mencoba melampirkan ke proses sistem; hal ini dapat mengakibatkan sistem operasi mogok. (Agar adil, dalam banyak kasus, OS tidak mengizinkan Anda melampirkan ke proses sensitif).

OllyDbg dapat bertindak sebagai debugger JIT tepat waktu. Ini memerlukan pendaftaran di registri sistem. Pilih Opsi -> Debugging just-in-time, dan pada dialog yang muncul, pilih "Jadikan OllyDbg debugger just-in-time" ). Sekarang, setiap kali aplikasi mogok, Anda akan ditanya apakah Anda ingin men-debug aplikasi tersebut. Kemudian sistem operasi akan meluncurkan OllyDbg, yang akan berhenti langsung pada titik terjadinya kegagalan. Atau, jika Anda memilih untuk bergabung tanpa konfirmasi, OllyDbg akan diluncurkan tanpa pertanyaan apa pun. Untuk memulihkan debugger “just-in-time” sebelumnya, klik tombol yang sesuai dalam dialog yang disebutkan dan selesai.

Ada juga opsi lain untuk menambahkan OllyDbg ke menu konteks yang terkait dengan executable di Windows Explorer. (Ide ini milik JochenGerster). Dari menu utama OllyDbg, pilih “Options|Add to Explorer”, lalu klik “Add OllyDbg to menu in Windows Explorer”. Setelah itu, Anda dapat mengklik kanan pada file yang dapat dieksekusi, atau DLL, dan memilih OllyDbg dari menu. Opsi ini membuat 4 kunci di registri sistem:

HKEY_CLASSES_ROOT\exefile\shell\Buka dengan OllyDbg
HKEY_CLASSES_ROOT\exefile\shell\Buka dengan perintah OllyDbg\
HKEY_CLASSES_ROOT\dllfile\shell\Buka dengan OllyDbg
HKEY_CLASSES_ROOT\dllfile\shell\Buka dengan perintah OllyDbg\

OllyDbg dapat men-debug aplikasi konsol (berbasis teks).

OllyDbg tidak dapat men-debug aplikasi .NET. Program .NET terdiri dari kodesemu yang ditafsirkan atau dirakit oleh Windows dengan cepat menjadi perintah asli "86.

Perhatikan bahwa jika Anda menggunakan Windows NT, 2000 atau XP, Anda mungkin perlu memiliki hak administrator untuk men-debug program.

Breakpoint (titik kontrol)

OllyDbg mendukung beberapa jenis breakpoint:

- Titik henti reguler, byte pertama dari perintah yang ingin Anda hentikan diganti dengan perintah khusus INT3 (Debugger Trap). Anda dapat mengatur breakpoint ini dengan memilih perintah yang diperlukan di panel Disassembler dan menekan F2, atau dari menu konteks. Saat Anda menekan F2 untuk kedua kalinya, breakpoint akan dihapus. Perhatikan bahwa program berhenti sebelum menjalankan perintah dengan set breakpoint. Jumlah breakpoint INT3 yang dapat Anda atur tidak terbatas. Saat Anda menutup program yang sedang Anda debug, atau Debugger, OllyDbg secara otomatis menyimpan breakpoint ke disk. Jangan pernah mencoba menyetel breakpoint jenis ini pada data atau di tengah perintah! OllyDbg akan memperingatkan Anda jika Anda mencoba menyetel breakpoint di luar bagian kode. Anda dapat mematikan peringatan ini di opsi Keamanan. Dalam beberapa kasus, Debugger mungkin menyisipkan breakpoint INT3 sementara miliknya sendiri.

- Titik henti sementara bersyarat(Shift+F2) - breakpoint INT3 reguler dengan kondisi terkait. Ketika Debugger menemukan breakpoint ini, ia akan mengevaluasi kondisi dan jika hasilnya bukan nol atau kondisinya tidak valid, maka debugger akan menghentikan proses debug pada program. Namun, kemungkinan terjadinya overflow yang disebabkan oleh breakpoint kondisional yang salah sangat tinggi (terutama karena latensi sistem operasi). Pada PII 450 di Windows NT, OllyDbg memproses hingga 2500 titik henti sementara bersyarat palsu per detik. Kasus penting dari breakpoint bersyarat adalah berhenti di pesan Windows (seperti WM_PAINT). Untuk tujuan ini, Anda dapat menggunakan variabel semu MSG bersama dengan interpretasi parameter yang tepat. Jika jendela aktif, lihat pesan breakpoint yang dijelaskan di bawah.

- Breakpoint Bersyarat dengan rekaman(Shift+F4) - breakpoint bersyarat dengan kemampuan untuk mendaftarkan nilai beberapa ekspresi atau parameter fungsi yang diketahui setiap kali breakpoint dipicu atau ketika kondisi yang ditetapkan terpenuhi. Misalnya, Anda dapat menyetel breakpoint tulis pada beberapa prosedur jendela untuk mencatat semua panggilan ke prosedur ini (PANGGILAN), atau hanya pengidentifikasi pesan WM_COMMAND yang diterima, atau menyetelnya pada panggilan CreateFile dan mencatat nama file hanya-baca, dll. Breakpoint logging sama cepatnya dengan breakpoint bersyarat, dan tentunya jauh lebih mudah untuk melihat beberapa ratus pesan di jendela log daripada menekan F9 beberapa ratus kali. Dengan cara ini Anda dapat memilih interpretasi yang lebih tepat untuk kondisi Anda.

Anda dapat mengatur penghitung lintasan - penghitung yang dikurangi setiap kali kondisi berhenti terpenuhi. Jika jumlah kelulusan sebelum pengurangan tidak nol, OllyDbg akan melanjutkan eksekusi. Pertimbangkan sebuah loop yang berjalan 100 (desimal) kali. Mari kita letakkan breakpoint di tengah dan atur nilainya menjadi 99. (Desimal). OllyDbg akan dibatalkan pada iterasi terakhir.

Selain itu, breakpoint logging bersyarat memungkinkan Anda mengeluarkan satu atau lebih perintah ke plugin. Misalnya, ini bisa berupa permintaan ke plugin baris perintah untuk mengubah isi register dan melanjutkan.

- Pesan titik henti sementara- sama seperti breakpoint dengan kondisi tulis, kecuali OllyDbg secara otomatis menghasilkan kondisi yang memungkinkan Anda untuk memecahkan beberapa pesan (seperti WM_PAINT) pada titik masuk ke prosedur jendela. Anda dapat menginstalnya di kotak Windows.

- Lacak titik henti sementara(Trace breakpoint) - kasus kritis dari breakpoint INT3 yang disetel pada setiap perintah yang ditentukan. Jika Anda melakukan pelacakan hit, breakpoint akan dihapus dan alamat akan ditandai sebagai diteruskan setelah perintah tercapai. Jika Anda menggunakan run trace, OllyDbg akan menambahkan entri ke log jejak dan breakpoint akan tetap aktif .

- Breakpoint untuk Memori. OllyDbg memungkinkan Anda menyetel hanya satu breakpoint per memori. Anda memilih sebagian memori di panel Disassembler atau Dump pada jendela CPU dan menggunakan menu konteks untuk menetapkan breakpoint pada memori. Breakpoint memori sebelumnya, jika ada, akan dihapus secara otomatis. Anda memiliki dua opsi yang tersedia: batalkan akses memori (baca, tulis, atau jalankan di memori) atau batalkan hanya tulis. Untuk menyetel breakpoint ini, OllyDbg memodifikasi atribut blok memori yang berisi alokasi. Pada prosesor yang kompatibel dengan 80x86, memori didistribusikan dan dilindungi dalam blok 4096 byte. Jika Anda memilih satu byte saja, OllyDbg harus melindungi seluruh blok. Hal ini dapat menyebabkan banyak alarm palsu yang meluap-luap. Gunakan breakpoint jenis ini dengan hati-hati. Beberapa fungsi sistem (terutama pada Windows 95/98) menyebabkan program yang sedang di-debug terhenti alih-alih menghasilkan peristiwa debug saat mengakses memori yang dilindungi.

- Titik henti perangkat keras(hanya tersedia di Windows ME, NT, 2000 atau XP). Prosesor yang kompatibel dengan 80x86 memungkinkan Anda menyetel 4 breakpoint perangkat keras. Berbeda dengan breakpoint memori, breakpoint perangkat keras tidak memperlambat kecepatan eksekusi, namun hanya mencakup hingga 4 byte. OllyDbg dapat menggunakan breakpoint perangkat keras alih-alih INT3 saat menjalankan atau memindai kode.

- Interupsi akses memori tunggal(Istirahat satu kali pada akses memori) (hanya tersedia pada Windows NT, 2000 dan XP). Anda mengaturnya di jendela Memori pada seluruh blok memori dari menu konteks atau dengan menekan F2. Breakpoint ini sangat berguna jika Anda ingin menerima panggilan atau kembali ke beberapa modul. Setelah penghentian dilakukan, breakpoint dihapus.

- Menghentikan penelusuran normal(Jeda jejak jalan) (Ctrl+T) - kondisi pengaturan yang diperiksa pada setiap langkah proses jejak jalan. Anda dapat menghentikan pelacakan proses ketika EIP memasuki atau meninggalkan rentang lain, atau ketika suatu kondisi benar, atau ketika sebuah perintah cocok dengan salah satu pola yang ditentukan, atau ketika sebuah perintah mencurigakan, atau setelah sejumlah perintah tertentu telah dilacak. . Harap dicatat bahwa opsi ini dapat secara signifikan (hingga 20) memperlambat kecepatan run trace.

OllyDbg juga dapat menghentikan eksekusi program pada peristiwa debugging tertentu, seperti memuat atau membongkar DLL, memulai atau mematikan thread, atau ketika program mengirimkan string debug.

Membuang

Jendela Dump menampilkan isi memori atau file. Anda dapat memilih dari beberapa format tertentu: byte, teks, integer, float, alamat, pembongkaran atau PE Header.

Semua jendela dump mendukung fungsi pencadangan, pencarian, dan pengeditan. Area jendela Dump pada jendela CPU memungkinkan Anda menentukan tanda, mengatur breakpoint pada memori, menemukan referensi data dalam kode eksekusi, dan gambar terbuka dari memori yang dipilih dalam file yang dapat dieksekusi (.exe atau .dll). Menu Dump hanya menampilkan serangkaian perintah relatif yang tersedia.

Jika cadangan tersedia, klik Alamat/Cadangan di panel untuk mengalihkan mode tampilan antara cadangan dan tampilan normal. Tombol lain di panel memungkinkan Anda mengubah mode dump.

Seperti jendela Disassembler, Dump menyimpan sejarah panjang lokasi memori yang dikunjungi. Anda dapat menelusuri riwayat dengan menekan tombol "+" atau "-".

Untuk menelusuri data, tahan tombol Ctrl dan tekan panah Atas/Bawah.

Modul

Jendela Running Modules (pintasan keyboard: Alt+E) mencantumkan semua modul yang saat ini dimuat oleh proses yang sedang di-debug. Jendela ini juga menampilkan informasi berguna seperti ukuran modul, alamat entri, versi modul, atau jalur yang dapat dieksekusi. Beberapa informasi, seperti ukuran modul desimal, nama simbolis titik masuk, dll., biasanya disembunyikan oleh sistem. Untuk melihat data ini, tambah lebar kolom terkait. Menu konteks mendukung opsi berikut:

Aktualisasikan - memindai ulang modul dan menghapus sorotan dari modul baru. Seringkali, OllyDbg mengurus dirinya sendiri.

Lihat memori - Membuka jendela Memori dan bergulir ke blok memori pertama milik modul yang sedang ditampilkan.

Lihat kode di CPU - membuka kode modul yang dapat dieksekusi di Disassembler.

Ikuti entri - Mengikuti titik masuk modul di Disassembler

Dump data in CPU - membuka bagian data modul di CPU Dump.

Lihat nama (Ctrl+N) - Menampilkan tabel yang berisi semua nama (ekspor, impor, perpustakaan, ditentukan pengguna) yang ditentukan atau digunakan dalam modul saat ini.

Tandai sebagai DLL sistem
Tandai sebagai DLL non-sistem - Menandai modul yang dipilih sebagai sistem atau non-sistem. Dengan menandai modul sebagai sistem, Anda mengecualikannya dari Jejak, sehingga mempercepat eksekusinya secara signifikan. Secara default, modul sistem adalah modul yang ditempatkan secara permanen di direktori sistem (biasanya c:\windows\system pada Windows 95/98, c:\winnt\system32 pada NT/2000/XP).

Perbarui file .udd sekarang - tulis semua data yang bergantung pada modul ini ke file .udd. File .udd menyimpan breakpoint, tanda, komentar, pengamat, analisis, dan sebagainya di antara sesi debugging. OllyDbg secara otomatis membuat file .udd saat modul dibongkar.

Lihat file yang dapat dieksekusi - Menampilkan dump dari file yang dapat dieksekusi.

Lihat semua sumber daya - Menampilkan daftar semua sumber daya yang ditentukan dalam modul bersama dengan informasi singkat. OllyDbg tidak mendukung sumber daya sebagai objek terpisah; yang dapat Anda lakukan hanyalah membuang sumber daya dan mengeditnya dalam bentuk biner.

Lihat string sumber daya - Menampilkan daftar sumber daya string dan ID-nya.

Lihat profil jejak proses - Menghitung profil untuk modul ini. Lihat juga Menjalankan pelacakan.

Analisis semua modul - memungkinkan Anda menganalisis semua modul sekaligus. Analisis mengekstrak informasi berguna dari kode yang dimuat; Proses debug biasanya lebih cepat dan lebih dapat diandalkan setelah kode dianalisis.
Dengan mengklik dua kali pada sebuah baris, Anda akan menuju ke kode yang berjalan di modul di panel Disassembler.

Kartu memori

Jendela Memory Map menampilkan semua blok memori yang digunakan oleh program yang sedang di-debug. Tidak ada alat standar untuk menyelesaikan tugas ini, jadi mungkin saja OllyDbg menggabungkan beberapa bagian memori terdistribusi ke dalam satu blok memori besar. Namun, dalam banyak kasus, penyelesaian yang tepat tidak diperlukan. Untuk mendapatkan daftar blok memori yang diminta oleh aplikasi melalui panggilan ke GlobalAlloc(), LocalAlloc(), dll., gunakan daftar Heap.

Jika blok memori adalah bagian dari beberapa modul yang dapat dieksekusi, OllyDbg akan memberi tahu Anda jenis data apa yang terdapat di blok tersebut: kode, data, sumber daya, dll.

Ada beberapa perbedaan antara Windows 95/98 dan Windows NT/2000. Pada Windows 95/98, OllyDbg tidak dapat menampilkan nama file yang ditampilkan. Selain itu, Windows 95/98 membatasi jenis akses memori yang diperbolehkan: baca dan tulis. Pertimbangkan juga bahwa Windows NT/2000 memiliki kemampuan yang lebih luas, termasuk akses eksekusi, copy-on-write, dan guard flag. OllyDbg mengabaikan atribut copy-on-write.

Jika OllyDbg mengenali bahwa program telah mengalokasikan blok memori baru atau mengalokasikan ulang blok memori yang ada, maka OllyDbg menyorot entri yang sesuai di jendela peta memori. Untuk mengatur ulang semua penyorotan, pilih Aktualisasikan dari menu konteks.

Anda dapat membuka jendela Memori dengan menekan Alt+M.

Item menu konteks berikut tersedia:

Aktualisasikan - Memperbarui daftar memori yang dialokasikan dan membatalkan alokasi blok memori baru.

Lihat di Disassembler - Membuka blok memori di Disassembler. Opsi ini hanya tersedia ketika blok memori berisi kode yang dapat dieksekusi atau ekstraktor mandiri dari beberapa modul.

Dump to CPU - Menampilkan konten blok memori di area jendela CPU Dump.

Dump - membuang isi blok memori ke jendela terpisah. Jika jenis blok memori diketahui, OllyDbg secara otomatis memilih format dump.

Lihat semua sumber daya - Jika blok berisi data sumber daya, daftar semua sumber daya dan data terkait. OllyDbg tidak mendukung sumber daya sebagai objek terpisah; yang dapat Anda lakukan dengan sumber daya tersebut hanyalah membuangnya dan mengeditnya dalam format biner.

Lihat string sumber daya - Jika blok berisi data sumber daya, maka Ollie mencantumkan semua string sumber daya dengan ID-nya.

Pencarian - Memungkinkan Anda mencari seluruh blok memori, dimulai dengan blok yang dialokasikan, sebelum menemukan string biner. Jika string ditemukan, OllyDbg menampilkan dump dari blok memori yang ditemukan. Peta Memori dan jendela dump berbagi pola pencarian yang sama, sehingga Anda dapat segera melanjutkan pencarian hingga kejadian berikutnya di dump yang muncul. Anda dapat menutup jendela dump dengan menekan Esc.

Setel break-on-access (F2; hanya tersedia pada Windows NT/2000) - melindungi seluruh blok memori. Setelah breakpoint, OllyDbg menghentikan program yang sedang di-debug dan menghapus breakpoint. Breakpoint ini sangat berguna jika Anda ingin menerima panggilan atau kembali ke beberapa modul.

Hapus break-on-access (F2) - Menghapus break-on-access yang diinstal dari blok memori.

Atur breakpoint memori pada akses(Atur breakpoint pada akses memori) - menetapkan breakpoint pada akses memori di seluruh blok memori. Program akan diinterupsi setiap kali program yang sedang di-debug mengakses blok memori ini. OllyDbg hanya mendukung satu breakpoint per memori. Pada Windows 95/98, program yang sedang di-debug mungkin macet ketika rutinitas sistem mengakses blok memori yang berisi breakpoint. Gunakan ini sebagai pilihan terakhir.

Setel titik henti memori saat menulis(Atur breakpoint untuk menulis ke memori) - menetapkan breakpoint di seluruh blok memori. Program akan menyela setiap kali menulis ke blok memori ini. Pada Windows 95/98, program yang sedang di-debug mungkin macet ketika rutinitas sistem mengakses blok memori yang berisi breakpoint. Gunakan ini sebagai pilihan terakhir.

Hapus breakpoint memori SFX - menghentikan pencarian pada titik masuk sebenarnya ke dalam program yang dikemas (SFX). Pencarian ini menggunakan tipe breakpoint memori khusus.

Tetapkan akses- menetapkan atribut perlindungan memori yang diinginkan ke seluruh blok memori.
Opsi yang memungkinkan:

Tidak ada akses
Hanya baca
Baca tulis
Menjalankan
Jalankan / baca

Akses penuh

Menyalin ke clipboard

Seluruh baris - menyalin entri yang dipilih ke clipboard sebagai teks multi-baris dengan penjelasan. Untuk mengecualikan kolom agar tidak disalin, kurangi lebarnya seminimal mungkin (kolom lainnya akan berubah menjadi abu-abu).

Seluruh tabel - menyalin seluruh kartu memori ke clipboard sebagai teks multibaris. Baris pertama teks ini berisi judul jendela (“MemoryMap”), baris kedua berisi judul kolom, dan semua baris berikutnya berisi catatan data memori. Salinannya mempertahankan lebar kolom. Untuk mengecualikan kolom agar tidak disalin, kurangi lebarnya ke minimum (kolom lainnya akan berubah menjadi abu-abu).

Pengamat dan inspektur

Jendela Observer berisi beberapa ekspresi. Ini menampilkan nilainya di kolom kedua. OllyDbg menyimpan ekspresi dalam file .udd modul utama sehingga ekspresi tersebut akan tersedia saat Anda melakukan debug berikutnya.

Inspektur adalah jendela yang berdiri sendiri yang dapat menampilkan konten variabel, larik 1 atau 2 dimensi, atau bahkan elemen terpilih dari larik struktur. Ekspresinya pada dasarnya sama dengan Observer, namun dapat mencakup dua parameter: %A dan %B. Saat Anda menginstal Inspector, Anda dapat menentukan batasan untuk parameter ini. OllyDbg kemudian menghitung semua kemungkinan kombinasi %A dan %B ke dalam ekspresi mulai dari 0 hingga batas (tidak termasuk), dan menampilkan hasilnya dalam tabel. Batas %B (jumlah kolom) tidak boleh melebihi 16.

Tumpukan panggilan

Jendela Call Stack (Alt+K) mencoba melacak urutan panggilan pada tumpukan thread yang dipilih dan menampilkannya, bersama dengan parameter yang diketahui atau disarankan dari fungsi yang dipanggil. Tugas ini mudah dilakukan ketika fungsi yang dipanggil membuat bingkai tumpukan standar (PUSH EBP; MOV EBP,ESP). Kompiler pengoptimalan modern tidak peduli dengan frame tumpukan, jadi OllyDbg menggunakan berbagai trik. Misalnya, OllyDbg mencoba melacak kode ke pengembalian berikutnya dan menghitung perubahan push, pop, atau ESP. Jika ini tidak membantu, OllyDbg mengambil pendekatan yang lebih berbahaya dan memakan waktu: OllyDbg memindai tumpukan, mencoba menemukan semua kemungkinan alamat pengirim dan pengujian tempat fungsi tersebut dipanggil oleh pernyataan terkait, termasuk perintah yang diurai. Ada juga heuristik lain yang agak meragukan. Penjelajahan tumpukan bisa sangat lambat. OllyDbg hanya memproduksinya jika jendela Call Stack terbuka.

Jendela Call Stack berisi 5 kolom: Address, Stack, Procedure, Called from, Frame.

Kolom Alamat berisi alamat pada tumpukan, Tumpukan menampilkan nilai alamat pengirim atau parameter yang sesuai.

Prosedur (atau Prosedur/argumen) - menampilkan di mana jendela Call Stack menempatkan alamat fungsi yang dipanggil pada stack. Dalam beberapa kasus, OllyDbg tidak yakin apakah alamat ini benar dan menambahkan salah satu penanda berikut:

Titik masuk yang ditemukan tidak dapat diandalkan

Mungkin OllyDbg tidak dapat menemukan titik masuk yang dapat diandalkan, alamat yang ditemukan perlu diperiksa menggunakan heuristik

Termasuk OllyDbg, tidak dapat menemukan titik masuk dan hanya mengetahui bahwa prosedur ini menyertakan alamat tampilan

Dengan mengklik tombol pada panel atau memilih “Sembunyikan/Tampilkan argumen” dari menu, Anda dapat mengaktifkan atau menonaktifkan parameter fungsi.

Dipanggil dari adalah alamat perintah yang dipanggil oleh prosedur ini.
Kolom terakhir, Frame, disembunyikan secara default dan menampilkan nilai penunjuk frame (register EBP) jika diketahui.

Lebih andal dan lebih cepat untuk memindai tumpukan ketika semua fungsi yang dipanggil dianalisis.

Pohon panggilan

Pohon panggilan (CALL) (tombol Ctrl+K di Disassembler) menggunakan hasil analisis untuk menyiapkan daftar fungsi yang dipanggil oleh prosedur tertentu, secara langsung atau tidak langsung, dan daftar semua panggilan yang diketahui ke fungsi tersebut. Efek samping - mengenali apakah prosedur yang dipilih bersifat rekursif secara eksplisit. "Secara eksplisit" berarti tidak dapat melacak permintaan dengan alamat yang tidak diketahui, seperti CALL EAX. Jika prosedur membuat panggilan tidak dikenal, Call Tree menambahkan penanda "Tujuan tidak diketahui".

Beberapa fungsi yang dipanggil dikomentari dengan salah satu kata berikut:

Leaf Tidak memanggil fungsi lainnya
Murni Tidak memanggil fungsi apa pun, tidak memiliki efek samping
RETN Terdiri dari satu perintah RETN
Fungsi Sys dalam sistem DLL. Menurut definisi, DLL sistem adalah DLL yang berada secara permanen di direktori sistem

Untuk menavigasi Pohon Panggilan, klik dua kali alamat di kolom Dipanggil dari atau kolom Panggilan/Panggilan langsung. Jendela "Pohon Panggilan" menyimpan riwayat tindakan Anda (tombol "-" dan "+").

Jika program yang Anda debug terdiri dari beberapa modul, saya sarankan menganalisis semua modul ini. Call Tree tidak mencoba menangani fungsi sistem.

File yang mengekstraksi sendiri (SFX).

File SFX terdiri dari unpacker dan program asli yang dikemas. Saat memeriksa file terkompresi, Anda biasanya ingin melewati pengepakan dan berhenti di titik masuk program ("entri sebenarnya"). OllyDbg berisi beberapa fitur yang membuat tugas ini lebih mudah.

Biasanya unpacker dimuat ke alamat yang berada di luar bagian program aslinya. Dalam hal ini, OllyDbg mengenali file tersebut sebagai SFX.

Ketika opsi SFX memerlukan pelacakan masukan nyata, OllyDbg menetapkan titik henti memori di seluruh bagian kode. Biasanya kosong atau berisi data terkompresi. Ketika sebuah program mencoba menjalankan beberapa perintah di dalam kawasan lindung yang bukan RET atau JMP, OllyDbg melaporkan masukan sebenarnya. Beginilah cara kerja ekstraksi byte demi byte.

Metode ini sangat lambat. Ada metode lain yang lebih cepat. Setiap kali pengecualian terjadi saat membaca data, OllyDbg membaca dari blok memori 4K tersebut, dan menonaktifkan jendela baca sebelumnya. Pada setiap pengecualian penulisan data, ini mengizinkan penulisan ke blok ini dan melarang penulisan ke blok sebelumnya. Ketika sebuah program menjalankan perintah di area yang tidak dilindungi, OllyDbg melaporkan masukan sebenarnya. Namun, jika masukan sebenarnya berada di dalam jendela baca atau tulis, lokasinya akan dilaporkan secara tidak benar.

Anda dapat memperbaiki alamat login secara manual. Pilih alamat entri baru dan di menu konteks jendela Disassembler, pilih Breakpoint-> Set real SFX entry here. Jika opsi SFX yang sesuai diaktifkan, OllyDbg akan melewati unpacker dengan cepat dan andal di lain waktu.

Anda menelusuri program yang sedang Anda debug dengan menekan F7 (langkah dengan entri) atau F8 (langkah dengan bypass). Perbedaan utama antara metode-metode ini adalah jika perintah saat ini memanggil suatu fungsi, F7 akan memasuki fungsi tersebut dan berhenti pada perintah pertamanya, sedangkan F8 akan segera mencoba menjalankan fungsi tersebut. Jika Anda melewati suatu fungsi, setiap breakpoint atau peristiwa debugging dalam fungsi tersebut akan menghentikan sementara eksekusi program utama, namun breakpoint sementara setelah pemanggilan prosedur akan tetap aktif, dan Anda akan mencapainya cepat atau lambat.

Jika program yang sedang di-debug berhenti pada suatu pengecualian, Anda dapat meneruskan pengecualian tersebut ke pengendali yang diinstal dengan program yang sedang di-debug. Cukup tekan Shift bersama dengan perintah lanjutan apa pun.

Daripada menekan F7 atau F8 beberapa ratus kali, Anda dapat menggunakan animasi (Ctrl+F7 atau Ctrl+F8). Dalam hal ini, OllyDbg secara otomatis mengulangi F7 atau F8 setelah langkah sebelumnya selesai dan semua jendela diubah. Proses berhenti ketika:

  • Anda menekan Esc atau menjalankan perintah lanjutan lainnya, atau
  • OllyDbg akan memenuhi breakpoint yang ditetapkan sebelumnya, atau
  • Program yang sedang di-debug akan memunculkan pengecualian.

Dengan menggunakan tombol "+" dan "-", Anda dapat memundurkan riwayat eksekusi.

Perhatikan bahwa OllyDbg menarik sebagian besar jendela setiap kali eksekusi dihentikan sementara. Jika animasi tampak sangat lambat, coba tutup atau setidaknya minimalkan semua jendela yang tidak digunakan.

Cara lain yang lebih cepat untuk menelusuri kembali eksekusi program adalah Jalankan jejak. Dalam hal ini, OllyDbg membuat log eksekusi dan memberi tahu Anda kapan dan berapa kali perintah ini dijalankan.

Pelacakan langkah demi langkah

Penelusuran langkah demi langkah memberi Anda kemampuan untuk mencatat bagian mana dari kode yang dieksekusi dan mana yang tidak. Cara yang diterapkan di OllyDbg cukup sederhana. Ini menetapkan breakpoint INT3 pada setiap tim dalam area yang ditentukan. Saat breakpoint dijalankan, OllyDbg menghapusnya dan menandai perintah telah diteruskan. Karena setiap trace breakpoint dijalankan hanya sekali, metode ini sangat cepat.

Saat menggunakan penelusuran tambahan, berhati-hatilah agar tidak menetapkan titik henti sementara pada data, karena ini akan menyebabkan aplikasi membuat kesalahan. Oleh karena itu, Anda harus menguraikan kode untuk mengaktifkan opsi menu yang sesuai. Saya menyarankan Anda memilih prosedur pengenalan yang ketat atau heuristik. Opsi fuzzy terlalu toleran terhadap kesalahan dan sering kali menemukan prosedur yang tidak ada.

Saat Anda menetapkan titik henti sementara pelacakan, bahkan pada satu perintah dalam modul, OllyDbg menetapkan buffer jejak dua kali ukuran bagian kode.

Perhatikan bahwa saat Anda menghapus data pelacakan langkah, Anda juga menghapus jejak paksa.

Penelusuran langsung

Penelusuran maju adalah cara untuk membalikkan eksekusi program, yang diperlukan dalam beberapa kasus. Anda juga dapat menggunakan penelusuran langsung untuk pembuatan profil sederhana. Pada dasarnya, OllyDbg menjalankan program yang sedang di-debug selangkah demi selangkah, seperti animasi, tetapi tidak mengubah jendela dan - yang paling penting - menyimpan alamat, mendaftarkan konten, pesan, dan operan yang diketahui dalam buffer jejak. Jika kode yang Anda debug dapat dimodifikasi sendiri, Anda dapat tetap menggunakan perintah aslinya. Mulai pelacakan maju dengan menekan Ctrl+F11 (pelacakan masukan) atau Ctrl+F12 (memotong jejak). Hentikan penelusuran - tombol F12 atau Esc.

Anda dapat menentukan serangkaian kondisi yang diperiksa pada setiap langkah eksekusi pelacakan maju (tombol pintas: Ctrl+T). Penelusuran ke depan berhenti ketika menemukan suatu kondisi. Ketentuannya meliputi:

Tentu saja, penelusuran langsung memerlukan banyak memori, rata-rata 16 hingga 35 byte per instruksi tergantung pada modenya, dan sangat lambat. Pada prosesor 500 MHz yang menjalankan Windows NT, proses ini dapat melacak hingga 5000 instruksi per detik. Pada Windows 95 lebih lambat: hanya 2200 perintah per detik. Namun dalam banyak kasus, misalnya ketika sebuah program melompat ke alamat yang tidak ada, ini adalah satu-satunya cara untuk menemukan solusi terhadap masalah tersebut. Anda dapat mengecualikan urutan instruksi kuasi-linier (dengan satu keluaran di akhir urutan) dari proses penelusuran maju. Ketika OllyDbg menemukan urutan yang dikecualikan, OllyDbg menetapkan breakpoint sementara pada perintah yang segera mengikuti blok yang dikecualikan dan segera mengeksekusinya. Tentu saja, pengembalian atau lompatan apa pun ke kode eksternal membuat peninjauan yang tepat menjadi tidak mungkin, jadi OllyDbg memeriksa bagian kode yang ingin Anda kecualikan, dan dalam kasus sulit meminta konfirmasi Anda.

Dalam kebanyakan kasus, Anda tidak perlu melacak kode API sistem. Opsi "Selalu lacak DLL sistem" memungkinkan Anda melacak tanpa memasukkan API fungsional saat menelusuri dan menganimasikan dengan entri. OllyDbg mengasumsikan bahwa modul tersebut adalah sistem jika ditempatkan secara permanen di folder sistem. Di jendela Modul, Anda dapat menandai perpustakaan mana pun sebagai sistem atau non-sistem.

Untuk mempercepat eksekusi, Anda dapat membatasi prosedur penelusuran langsung ke perintah atau bagian kode tertentu dengan mengatur breakpoint untuk mulai menelusuri dan menjalankan program. Saya menyebutnya "pelacakan paksa". Pada dasarnya, breakpoint perutean adalah breakpoint jejak langkah yang tidak dapat dilepas. Jika Anda menghapus jejak langkah, Anda juga menghapus jejak maju.

Perintah pelacakan yang disebutkan di awal bagian ini secara otomatis membuka buffer jejak. Anda dapat menentukan ukurannya (hingga 64 MB) di Opsi. Buffer ini berbentuk lingkaran dan ketika penuh, entri terlama akan ditimpa.

Anda dapat membuka atau menghapus buffer run trace dengan memilih Debug -> Open atau clear run trace dari menu utama OllyDbg. Setelah buffer jejak terbuka, OllyDbg akan mencatat semua jeda dalam eksekusi, bahkan jeda yang tidak disebabkan oleh jejak langsung. Misalnya, Anda dapat menelusuri program dengan menekan F7 atau F8 lalu menelusuri kembali kode menggunakan tombol Plus dan Minus. Perhatikan bahwa kunci ini melihat riwayat ketika buffer jejak ditutup. Jika Anda melacak suatu program, area Register dan Informasi pada jendela berubah menjadi abu-abu, menekankan bahwa data register yang ditampilkan bukanlah data aktual. Buffer jejak tidak menyimpan bagian atas tumpukan atau isi memori yang digunakan oleh register. Register, Informasi, dan Stack menggunakan status memori aktual untuk menafsirkan register dari buffer jejak.

OllyDbg dapat menghitung berapa kali setiap perintah muncul di buffer jejak maju. Di jendela Disassembler, pilih “Lihat -> Data profil”. Perintah ini menggantikan kolom Komentar dengan kolom Profil. Atau, jika panel ditampilkan, klik beberapa kali hingga menampilkan informasi Profil. Perhatikan bahwa penghitung yang ditampilkan bersifat dinamis dan tidak menghitung perintah lama yang dihapus dari buffer jejak. Anda juga dapat melihat data profil untuk seluruh modul, diurutkan dengan beberapa klik, di jendela Profil terpisah

Perintah khusus di jendela Disassembler “Runtrace -> Tambahkan entri semua prosedur” memungkinkan Anda memeriksa seberapa sering setiap prosedur yang dikenali dipanggil. Perintah lain, Runtrace -> Tambahkan cabang dalam prosedur, memaksa semua tujuan cabang yang dikenali dalam prosedur untuk dilacak. Dalam hal ini, profil memungkinkan Anda menemukan transisi yang paling sering dijalankan dan mengoptimalkannya untuk meningkatkan kecepatan.

Opsi “Search for -> Last record in run trace” di menu konteks jendela Disassembler menemukan kapan perintah yang ditandai dieksekusi, dan apakah perintah tersebut dieksekusi atau tidak, untuk terakhir kalinya.
Jendela pelacakan langsung menampilkan konten buffer jejak. Untuk setiap perintah, ada isi register tertentu yang diubah oleh perintah tersebut (lebih tepatnya, diubah antara entri di sumber dan yang diperbarui). Jika Anda mengklik dua kali pada suatu perintah, jendela pop-up akan memilih semua referensi ke perintah tersebut di buffer jejak dan Anda dapat dengan cepat melihatnya dengan menekan tombol Plus atau Minus. Jika opsi "Trace -> Synchronize CPUandRuntrace" dicentang, Disassembler akan menuju ke jendela pelacakan maju.

Perhatikan bahwa saat Anda menghapus jejak langkah, Anda juga menghapus jejak maju yang dipaksakan.

Bak pasir

pemain baru 7 Januari 2016 pukul 13:36

Dasar-dasar bekerja dengan OllyDebug, menggunakan contoh "menyembuhkan" pengarsip

  • Perakit

Hari ini saya akan menunjukkan kepada Anda bagaimana Anda dapat menggunakan "Olka" untuk "menyembuhkan" salah satu pengarsip terkenal. Untuk ini kita membutuhkan: OllyDBG, plugin “CommandBar”.

Kami menginstal pengarsip, setelah 40 hari kami melihat gambar:


Hal pertama yang terlintas dalam pikiran adalah mengubah pemeriksaan lisensi atau pemeriksaan durasi penggunaan program. Mari kita ambil cara mudah - cari fungsi WinAPI yang menerima GetLocalTime saat ini. Di menu konteks pilih

Cari -> Nama (label) di modul saat ini.


Kita cari fungsi yang berhubungan dengan waktu, oh itu dia, hampir ketinggalan.

Sekarang Anda perlu menyetel breakpoint pada fungsi ini. Di jendela plugin CommandBar, masukkan

dan sekarang ketika kita memanggil fungsi ini, debugger kita akan berhenti di tempat yang kita perlukan.

Kami mulai men-debug, kunci F9. Breakpoint kita berhasil dijalankan dan kita menemukan diri kita di awal fungsi GetLocalTime, mari kita ke titik keluar dari fungsi ini (Ctr+F9), ambil satu langkah (F7). Di sini kita melihat bahwa setelah menerima waktu, fungsi di alamat 004B8C00 dipanggil, saya sarankan Anda masuk ke dalamnya dan melihat apa yang mungkin menarik di sana, kita menggunakan langkah dengan entri (F7).

Kami melihat tanda-tanda yang menguntungkan.

Programnya kita telusuri melalui F8, sebelum pengecekan di alamat 004B8C26, amati TEST AL,AL.

Izinkan saya mengingatkan Anda bahwa AL adalah register rendah EAX, sekarang sudah kosong. Perintah TEST AL,AL mengecek apakah register AL sama dengan nol, jika sama maka flag ZF akan menyala.Perintah selanjutnya JE SHORT 004B8C44, dikirim ke alamat 004B8C44, jika flag ZF dihidupkan. Baiklah, saya mengusulkan untuk menghapus pemeriksaan transisi ini. Tekan spasi dan masukkan nop, tekan Assemble beberapa kali hingga kedua perintah ini habis.

Kami memulai debugging (F9) dan melihat bahwa kami telah berhenti di breakpoint kami lagi, mari kita hapus (F2) dan lanjutkan debugging lagi (F9). Sekarang kita melihat bahwa tidak ada yang menghalangi kita untuk bekerja dan di kolom registrasi ada tulisan yang mengatakan bahwa program tersebut telah terdaftar.

Tag: Rekayasa terbalik, Assembler, OllyDebug

Artikel ini tidak dapat dikomentari, karena penulisnya belum menjadi anggota penuh komunitas. Anda akan dapat menghubungi penulis hanya setelah dia menerimanya

Tujuan dari "Pengenalan Cracking dari Awal Menggunakan OllyDbg" ini adalah untuk memberikan pengetahuan dasar kepada mereka yang baru mulai menguasai seni cracking, dan pada saat yang sama, melakukannya sedemikian rupa sehingga pengetahuan ini memungkinkan mereka untuk membacanya nanti. dan memahami tutorial lebih lanjut seperti , yang dapat ditemukan di “Kursus Baru dari CracksLatinos”, yang tentunya tetap terbuka untuk penambahan dan penambahan baru.

Ide untuk kursus ini lahir dari kenyataan bahwa banyak tutorial di Kursus CracksLations Baru terlalu sulit untuk pemula, dan mereka yang gagal mencapai level yang disyaratkan merasa frustrasi dan dalam banyak kasus, menolak untuk melanjutkan. Oleh karena itu, tujuan dari “Pengantar…” ini bukan untuk mengulangi tutorial yang sangat baik dari “Kursus Baru…”, yang jumlahnya telah melebihi 500, tetapi untuk meletakkan dasar agar mereka yang menyelesaikan kursus ini akan dapat membaca tutorial yang lebih kompleks. Hal ini, seperti segala sesuatu dalam kerajinan kami, memerlukan upaya yang besar, dan tujuan utamanya adalah mengurangi jumlah ini, memberikan pengetahuan dasar dan memungkinkan pemahaman lebih lanjut tentang materi yang lebih kompleks.

Mengapa OLLYDBG?

Kami tidak akan berbicara di sini tentang konfrontasi abadi antara Soft-Ice dan OllyDbg; Saya pikir bahkan para fanatik Soft-Ice pun mengakui bahwa lebih mudah untuk memulai dengan OllyDbg, karena ada banyak informasi tentangnya dan lebih mudah untuk dipelajari. Kita perlu memasuki dunia cracking melalui pintu yang disebut "OllyDbg", dan hanya kemudian siapa pun yang membutuhkannya dapat beralih ke debugger lain yang diperlukan, karena hanya metode penggunaannya yang berubah, tetapi esensinya tetap sama.

Mulai dari awal

Pertama, Anda perlu mempersenjatai diri dengan alat yang terutama akan kita gunakan, lalu klik dan unduh.

Karena kita memulai dari awal, pertama-tama kita perlu membongkar arsip yang diunduh ke dalam folder di hard drive Anda yang mudah dijangkau. Ide yang bagus adalah membuat folder di drive C:/. Meskipun ini akan berfungsi di lokasi lain mana pun, saya berasumsi bahwa drive C:/ dipilih.

Setelah file dibongkar, buka folder yang dibuat dan lihat:

Ini berisi file yang dapat dieksekusi OLLYDBG.exe, yang perlu kita jalankan, dan untuk kenyamanan saya membuat pintasan di desktop saya.

Oke, semuanya siap diluncurkan. Klik pada OllyDbg:

Kami melihat pesan bahwa DLL yang terletak di perpustakaan lebih tua dari DLL sistem yang sama, dan jika kita memilih "Ya", DLL lama akan dihapus dari folder, dan DLL sistem akan digunakan. Meskipun saya tidak melihat banyak perbedaan di antara keduanya, saya tetap lebih memilih yang disertakan dengan distribusinya, jadi saya selalu mengklik "Tidak".

Ini murni OllyDbg, dan program pertama yang akan kita buka hanya untuk mengenal OllyDbg adalah CrackMe CrueHead yang terkenal, yang dilampirkan pada tutorial ini.

Untuk membuka file di OllyDbg, buka File -> Buka atau klik ikon:

Sebuah jendela akan terbuka di mana Anda dapat menemukan file yang diinginkan, dalam hal ini adalah crackme CrueHead.

Crackme yang disebutkan di atas akan terbuka, dan saat ini tidak masalah sama sekali tidak jelas apa arti tampilan yang terbuka bagi kita - untuk saat ini kita hanya akan membahas berbagai bagian dan fungsi OllyDbg dan beberapa pengaturan, sehingga ketika di tutorial berikutnya dikatakan, katakanlah, “pergi ke DUMP”, Anda setidaknya tahu di mana opsi ini berada.

Di sini kita akan melihat empat bagian jendela utama OllyDbg:

1) Kode yang dibongkar

Disebut juga daftar. Di sini Ollie menunjukkan kepada kita kode program yang akan kita debug; Secara default, Ollie dikonfigurasi untuk menganalisis program ketika dibuka. Ini dapat diubah di Opsi -> OPSI DEBUGGING.

Artinya, jika kotak centang “AUTO START ANALISIS OF MAIN MODULE” dicentang, OllyDbg akan menganalisis program dan menampilkan informasi tambahan tentangnya.

Ini adalah awal dari daftar crack CrueHead yang telah diurai, dan jika kita membukanya tanpa parsing, kita dapat melihat perbedaannya.

Jendela analisis berisi banyak informasi, yang meskipun belum begitu jelas bagi kami, namun terlihat sangat menarik. Pada saat yang sama, senang mengetahui bahwa Anda dapat menghapusnya kapan saja jika analisisnya ternyata tidak terlalu akurat atau jika ada kesalahan yang menyusup ke dalamnya.

Seringkali OllyDbg salah menampilkan beberapa bagian program karena salah menafsirkan kode yang dapat dieksekusi sebagai data, dan kemudian menampilkan sesuatu seperti ini:

Dalam hal ini, Anda dapat menghapus analisis secara manual dengan mengklik kanan pada daftar dan memilih “ANALISIS -> REMOVE ANALYSIS FROM MODULE”.

Dan kemudian daftarnya akan ditampilkan dengan benar.

Opsi lain yang dapat Anda gunakan untuk mempermudah dan yang secara pribadi tidak terlalu saya sukai (tetapi rasanya berbeda-beda) adalah penyorotan lompat dan panggilan - klik kanan pada daftar dan pilih “PENAMPILAN -> HIGHLIGHTING -> LUMPS AND CALLS.”

Anda akan mendapatkan yang berikut ini:

Di sini kita melihat bahwa panggilan disorot dengan warna biru, dan transisi disorot dengan warna kuning.

Daftarnya sekarang lebih mudah dibaca, tapi kami belum tahu apa artinya, tapi ada baiknya alat ini siap digunakan di masa mendatang.

2) Daftar

Jendela penting kedua adalah jendela register.

Ingatlah bahwa jendela pendaftaran ada di sisi paling kanan OllyDbg, dan ada sejumlah besar informasi yang ditampilkan di sana.

Masih banyak lagi informasi yang tidak kami lihat, namun Anda dapat mengatur mode tampilan ke tiga keadaan (“VIEW FPU REGISTERS” – menampilkan register FPU, “VIEW 3D NOW REGISTERS” – menampilkan register “3D NOW” dan “VIEW DEBUG REGISTERS ” – menampilkan register debug). Secara default, yang pertama ditampilkan.

3) Tumpukan atau timbunan

Sekarang mari kita beralih ke "tumpukan atau heap". Opsi konfigurasi di sini tidak terlalu banyak, selain kemampuan menampilkan informasi mengenai register ESP dan EBP.

Secara default, mode untuk menampilkan informasi terkait ESP (dan juga yang paling berguna), tetapi dapat diubah ke mode untuk menampilkan informasi terkait EBP, yang perlu Anda klik kanan di jendela ini dan pilih “ GO TO EBP”, dan penggunaan item “GO TO ESP” selanjutnya akan mengembalikan kita ke mode sebelumnya.

Saya akan menjelaskan fungsi tumpukan secara lebih rinci di bab selanjutnya, namun untuk saat ini kami hanya akan membahas apa yang dapat diubah melalui konfigurasi.

4) Buang

Jendela dump memiliki banyak mode tampilan yang dapat diubah dengan mengklik kanan di jendela dump dan memilih salah satu yang Anda perlukan. Mode defaultnya adalah 8-byte Hex/ASCII.

Mode default juga yang paling sering digunakan, tetapi pada saat yang sama, kami memiliki kemampuan untuk mengubahnya untuk menampilkan kode yang telah dibongkar (DISASSEMBLE), teks (TEXT) dan format lainnya (SHORT, LONG, FLOAT).

Dan terakhir, opsi SPECIAL -> PE HEADER, yang seperti akan kita lihat di bab selanjutnya, bisa sangat berguna.

Sekarang kita telah mengetahui bagian utama dari jendela utama OllyDbg, namun ada juga jendela yang tidak dapat diakses secara langsung, tetapi dapat dipanggil melalui menu atau melalui tombol pada panel kontrol.

Mari kita lihat masing-masingnya.

Tombol L atau VIEW->LOG menunjukkan kepada kita apa yang ditulis OllyDbg di jendela log. Ini dapat dikonfigurasi untuk menampilkan berbagai jenis informasi, dan secara default jendela log menyimpan semua informasi startup, serta informasi yang terkait dengan BREAKPOINTS CONDICIONAL LOGS. Kita akan menemui yang terakhir nanti, tapi untuk saat ini mari kita lihat informasi tentang proses yang sedang berjalan (dalam kasus kita, ini adalah crack CrueHead) dan perpustakaan yang dimuatnya.

Salah satu opsi terpenting di jendela ini adalah masuk ke file jika kita ingin menyimpan informasi dalam file teks. Untuk mengaktifkan opsi ini, klik kanan dan pilih "LOG TO FILE".

Tombol E atau VIEW->EXECUTABLES menunjukkan kepada kita daftar modul yang digunakan program: exe, dll, ocx dan lain-lain.

Di sini juga, tombol kanan mouse menampilkan banyak opsi yang tidak akan kita lihat untuk saat ini, tetapi telah kita lihat saat menjelajahi jendela utama OllyDbg.

Tombol M atau VIEW->MEMORY menampilkan memori yang ditempati oleh program kita. Di sini kita melihat bagian aplikasi, perpustakaan yang digunakan oleh proses, tumpukan dan berbagai bagian yang ditempati oleh sistem, dan seringkali program menempati bagian memori baru selama eksekusi.

Dengan mengklik kanan, kita dapat melakukan SEARCH di memori untuk menemukan berbagai jenis string (teks, heksadesimal, unicode), ada juga kemampuan untuk menyorot breakpoint di bagian, serta kemampuan untuk mengubah hak akses ke yang terakhir ( pilih ATUR AKSES).

Tombol T atau VIEW->THREADS menunjukkan kepada kita daftar thread (utas) dari program.

Meskipun sekarang kita tidak tahu apa itu, dan kita hanya akan mengetahuinya di bab-bab berikutnya, tidak akan berlebihan jika kita membiasakan diri dengan masing-masing jendela. Kita akan mempelajari cara menggunakannya nanti.

Tombol W atau VIEW->WINDOWS menampilkan jendela program, namun karena belum berjalan, daftar jendela tetap kosong.

Tombol H atau VIEW->HANDLES menampilkan pegangan, nanti saya akan menjelaskan fungsinya.

Tombol C atau VIEW->CPU mengembalikan kita ke jendela utama OllyDbg.

Tombol / atau VIEW->PATCHES menampilkan daftar patch yang diterapkan jika program telah diubah. Karena belum ada perubahan yang dilakukan, jendela tetap kosong untuk saat ini.

Tombol K atau VIEW->CALL STACK menampilkan “call stack”, daftar panggilan yang kita temui hingga program berhenti.

Tombol B atau VIEW->BREAKPOINTS menampilkan daftar breakpoint normal yang terletak di program. Tidak ada breakpoint perangkat keras atau breakpoint memori, hanya breakpoint biasa.

Tombol R atau LIHAT->REFERENSI menunjukkan jendela tautan yang kami terima sebagai hasil pencarian tautan di Ollie

Tombol “…” atau VIEW->RUN TRACE menampilkan hasil dari perintah RUN TRACE. Disini kita juga bisa memilih opsi LOG TO FILE untuk menyimpan hasil trace ke dalam file teks.

Kami telah membahas panel dengan tombol-tombol paling penting sehingga Anda akan terbiasa dengan kemampuan yang diberikannya saat kami mulai mempelajarinya lebih dalam di bab-bab selanjutnya.

Cara mengkonfigurasi OllyDbg menjadi JIT (JUST IN TIME DEBUGGER)

Tentu saja, kami tidak akan menggunakan JIT sepanjang waktu, tetapi hanya dalam kasus khusus, karena jika terjadi kesalahan dengan program apa pun yang sedang berjalan di mesin kami, maka kami tidak memerlukan Ollie untuk digunakan sama sekali (secara default, dr.watson adalah digunakan sebagai JIT).

Untuk menjadikan OllyDbg sebagai debugger JIT, Anda harus membuka OPTIONS->JUST IN TIME DEBUGGING

Dan tekan tombol MAKE OLLYDBG JUST IN TIME DEBUGGER dan DONE secara berurutan

Untuk menghapus fungsi ini, Anda perlu mengklik KEMBALIKAN DEBUGGER HANYA DALAM WAKTU dan SELESAI di tempat yang sama.

Menghubungkan plugin di OllyDbg

OllyDbg memungkinkan Anda menghubungkan plugin yang mungkin berguna untuk memecahkan masalah tertentu. Untuk saat ini, kami akan membatasi diri untuk menghubungkan plugin COMMAND BAR untuk mempelajari cara melakukan ini.

Setelah itu, unzip plugin dan lihat isi folder tempat ini dilakukan:

Pertama-tama, Anda perlu membuat folder untuk plugin. Saya akan membuatnya di C:/ dan menyebutnya PLUGIN.

Tentu saja, plugin dapat ditempatkan di mana saja, tapi saya suka menghosting semuanya di C. Bagaimanapun, sekarang kita perlu mengkonfigurasi OllyDbg agar mengenali folder ini sebagai lokasi semua plugin.

Untuk melakukan ini, buka OPSI-> PENAMPILAN.

Dan di jendela yang terbuka, buka tab DIRECTORIES.

Kami melihat bahwa jalur ke plugin adalah direktori tempat OllyDbg.exe berada, dan kami dapat meletakkan plugin di sana, tetapi saya ingin memisahkannya, lalu klik PLAGIN PATH->BROWSE untuk menemukan folder yang kami buat .

Pilih folder PLUGINS dan simpan perubahannya.

Artinya, Anda perlu me-restart Ollie agar mengenali folder baru dengan plugin, tetapi pertama-tama Anda perlu menyalin plugin yang terakhir diunduh ke dalamnya.

Salin seluruh isi arsip ke folder PLUGINS.

Sekarang semua file plugin "Command Bar" terletak di folder PLUGINS, dan sisanya juga harus ditempatkan di dalamnya (seringkali Anda tidak dapat menyalin semua file dalam arsip, tetapi hanya dll).

Sekarang tutup OllyDbg, jika masih ditutup, dan luncurkan lagi. Kita melihat bahwa COMMAND BAR dan pilihannya telah muncul di menu PLUGINS.

Di bagian bawah OllyDbg kita melihat COMMAND BAR yang terpasang.

Ini adalah kolom teks untuk memasukkan perintah yang dapat berguna bagi kita dalam banyak kasus, dan nanti kita akan melihat kegunaannya, tetapi untuk saat ini penting untuk mempelajari cara menghubungkan plugin.

Untuk menghapus instalasi PLUGIN, cukup hapus dll yang sesuai dari folder PLUGINS dan mulai ulang OllyDbg, dan plugin akan hilang. Namun, sebaiknya selalu tetap mengaktifkan COMMAND BAR.

Mari kita buka kembali crack CrueHead di OllyDbg.

Kunci yang paling berguna di OllyDbg adalah:

F7: Mengeksekusi satu baris kode (jika kita sedang CALL, masuk ke dalam bagian kode yang dipanggil)

F8: Mengeksekusi satu baris kode (jika kita sedang melakukan PANGGILAN, ia hanya menjalankan panggilan tanpa masuk ke dalam dan berpindah ke baris berikutnya setelah PANGGILAN).

Kedua jenis penelusuran manual ini sangat berbeda dan dalam hal apa menggunakan masing-masing penelusuran tersebut, kami akan mempertimbangkannya nanti.

F2: Menetapkan breakpoint normal pada garis yang ditandai. Untuk menghapus breakpoint ini, tekan F2 lagi.

Misalnya:

Kami ingin mengatur titik instalasi pada posisi 40101A, jadi kami menandai baris ini dengan mouse.

Dengan satu klik mouse, itu ditandai dan menjadi abu-abu seperti pada gambar. Lalu tekan F2.

Kita melihat bahwa posisi terkait di kolom pertama berubah menjadi merah, yang menunjukkan adanya breakpoint di sini. Dengan menekan F2 lagi Anda dapat menghapusnya.

F9: Menjalankan program yang akan berjalan hingga mencapai breakpoint, memunculkan pengecualian, atau berhenti berjalan karena alasan tertentu. Saat program sedang berjalan, kata RUNNING ditampilkan di pojok kanan bawah OllyDbg.

Dengan meluncurkan crackme CrueHead, kita akan melihat yang berikut:

Untuk menghentikan sementara menjalankan program, tekan F12 atau DEBUG->PAUSE.

Kami melihat OllyDbg menampilkan kata PAUSED. Anda dapat terus menjalankan program dengan menekan F9 atau DEBUG->RUN.

Untuk menutup program yang sedang di-debug, pilih DEBUG->CLOSE.

Ini adalah ikhtisar singkat tentang OllyDbg, dan kami akan terus mengeksplorasi banyak opsi dan kemampuannya secara lebih mendalam di bab-bab berikutnya. Hal utama adalah Anda mengunduh program, mengkonfigurasinya, melihat kembali semua yang telah dibahas dalam tutorial ini, menghubungkan juga plugin, memulai dan menghentikan crack CrueHead, coba atur breakpoints sehingga di bab berikutnya semua hal ini tidak terjadi. menimbulkan masalah, Anda ragu-ragu dan ragu.


Artikel ini disediakan untuk tujuan informasi saja. Tim proyek DAXA tidak bertanggung jawab apa pun.


"Memecahkan pelajaran dengan OllyDbg"
Saya rasa banyak orang tertarik pada bagaimana program rusak?, bagaimana cara melewati registrasi, atau bagaimana cara melewati batasan suatu program? Pada artikel kali ini saya akan memberikan contoh sederhana cara bypass registrasi, saya akan mencoba menjelaskan semuanya dengan sangat sederhana agar semua orang bisa memahaminya. Dianjurkan untuk memiliki setidaknya gambaran kasar tentang apa itu assembler, tetapi jika Anda tidak memiliki pengetahuan ini, jangan khawatir, saya rasa setelah pengalaman ini, Anda pasti akan mempelajari dasar-dasar assembler.

Setelah mengunduh semua perangkat lunak yang diperlukan, instal di mana pun Anda mau. Semua program tidak memerlukan instalasi. Pertama-tama, kami meluncurkan debugger OllyDbg kami, ketika Anda pertama kali memulainya akan meminta Anda untuk menentukan jalur ke UDD dan Plugin, mari bantu dengan masuk ke Opsi->Penampilan->Direktori dan mendaftarkan kedua jalur (cukup tentukan folder di mana OllyDbg berada). Jangan terintimidasi oleh banyaknya jendela, kita hanya perlu 3 untuk berfungsi.

1.CPU
2. Titik henti
3.Patch

Saya sarankan menutup semua jendela lainnya agar tidak mengganggu kita. Sekarang saya akan menjelaskan tugas kita, kita perlu membuat program menerima kunci apa saja atau tidak menampilkan pesan pendaftaran sama sekali dan melupakannya selamanya :). Jadi mari kita mulai, saya akan mencoba menjelaskan semuanya langkah demi langkah.

1.Buka program kita di debugger. Untuk melakukan ini, buka menu File->Open dan pilih program pengujian kami. Setelah memuat, kita akan melihat gambar ini di jendela CPU.

Ini adalah kode perakitan program kami.
Sekarang izinkan saya menjelaskan sedikit beberapa baris:
DORONG EBP; Mulai dari fungsi lain
Tes PANGGILANP.00405С60; Memanggil suatu fungsi
Ini sudah cukup bagi kita untuk saat ini.
2.Sekarang kita perlu menemukan fungsi yang menampilkan jendela yang meminta Anda memasukkan kunci. Untuk melakukan ini, jalankan program langkah demi langkah dengan menekan tombol F8 hingga muncul jendela yang meminta input. Setelah beberapa klik, jendela input muncul.

Sekarang kita tahu bahwa di suatu tempat di fungsi ini (TestP.004523B8) jendela kita akan ditampilkan. Kita perlu sampai ke bagian bawah fungsi yang menampilkan jendela; untuk ini kita perlu masuk ke fungsi ini. Sekarang sebelum baris ini CALL TestP.004523B8 kita perlu meletakkan breakpoint. Untuk melakukan ini, pilih garis di depannya dan tekan F2 dan lihat bahwa baris ini telah ditambahkan ke jendela Breakpoints.

Selanjutnya, klik tombol ini untuk mengunduh kembali program kami. Sekarang kita perlu mencapai breakpoint, untuk melakukan ini kita klik untuk menjalankan program kita dan kita melihat bahwa eksekusi telah berhenti di breakpoint kita. Untuk masuk ke fungsinya, tekan tombol F7. Saya rasa Anda sudah memahami perbedaan antara F8 dan F7, yang pertama menelusuri program tanpa memasukkan fungsi, yang kedua dengan memasukkan fungsi. Kami melihat gambar ini.

Kita perlu melanjutkan sampai kita menemukan fungsi yang menampilkan jendela dan proses menekan tombol OK dan menentukan apakah kita memasukkan kunci dengan benar atau tidak. Lanjutkan, tekan juga F8 hingga muncul jendela.

Sekali lagi kami menetapkan breakpoint di depannya.

Kami menekan dan lagi, kami melihat bahwa eksekusi telah berhenti pada breakpoint pertama kami, tetapi kami harus melanjutkan ke breakpoint kedua, untuk melakukan ini kami menekan lagi, eksekusi akan mencapai breakpoint kedua. Kita masuk ke fungsinya dengan tombol F7, kita melihat yang berikut ini.

Sekali lagi kami menetapkan breakpoint dan kembali ke sini, masuk ke fungsinya, saya pikir Anda sudah memahami bagaimana ini dilakukan. Setelah memasuki fungsinya kita melihat yang berikut ini.

Kami melanjutkan pencarian dengan menekan F8. Saat kita menekan F8, kita melihat fungsi API mulai muncul,

Jadi kita sudah dekat. Tekan perlahan dan perhatikan kapan jendela muncul. Inilah yang terjadi, saat menelusuri program, jendela kita muncul di baki tugas,

Itu keluar dari baris ini,

Tetapi ketika Anda mengkliknya dengan mouse, jendela tidak muncul, yang berarti kita berada di tempat yang kita butuhkan, fungsi inilah yang menggambar jendela dan di suatu tempat di sini kunci yang kita masukkan dicentang. Kami terus menelusuri programnya lebih jauh (F8!) dan melihatnya di tempat ini

Semacam siklus yang terus berulang, jari kita sudah sakit untuk menahannya F8 , tapi tidak kunjung berakhir, untuk melakukan ini kita atur breakpoint pada baris pertama setelah siklus (MOV DWORD PTR SS:,EAX)

Dan kita menekan tombol tersebut dan melihat bahwa jendela telah sepenuhnya digambar, menunggu masukan dari kita, program telah berhenti di sini, di loop. Selanjutnya, masukkan kunci apa saja dan klik OK.

Jendela ditutup dan kami kembali ke jendela debugger, eksekusi berhenti di breakpoint kami. Sekarang kita perlu menemukan fungsi yang menampilkan jendela dengan pemberitahuan bahwa kunci yang dimasukkan salah. Untuk melakukan ini, lacak (F8) program kita hingga jendela notifikasi muncul.

Di sini kita akan mencari tahu apa itu. Baris pertama yang menarik perhatian Anda adalah ini adalah kunci kami yang benar, tetapi jangan berharap Anda akan menemukannya dengan mudah di program lain, biasanya kunci tidak hanya terletak di memori, jadi tugas kita adalah memastikan bahwa kunci tersebut program menerima kunci apa saja! Sekarang mari kita menganalisis kode sebelum memanggil fungsi (CALL TestP.00427294) yang menampilkan jendela dengan pemberitahuan kesalahan. Pertama-tama, kita melihat jendela register, yang terletak di jendela

Dan kita melihat bahwa register EAX berisi alamat kunci yang kita masukkan ke dalam memori dan, karenanya, apa yang kita masukkan (saya memasukkan 23). Di sini semuanya sedikit lebih rumit dan Anda harus memiliki setidaknya sedikit pengetahuan tentang operator dasar assembler. Kami berpikir bahwa program harus membandingkan kunci kami dengan kunci lain atau memeriksa kebenarannya dengan cara lain, tetapi untuk ini program harus memanggil fungsi yang akan melakukan semua ini. Jadi kita mencari kira-kira struktur berikut

MOV EAX, ...  //menulis alamat jalur kita ke EAX
...................
PANGGILAN...          //memanggil fungsi yang akan memeriksa kebenaran fungsi kita
JNZ(atau JE) ...// lompatan bersyarat (baca tentangnya!)

Sedikit tentang lompatan bersyarat, dengan menggunakan operator ini Anda dapat pergi ke baris kode tertentu, alamatnya ditunjukkan setelah operator. Artinya setelah memanggil fungsi tersebut, jika kunci dimasukkan dengan benar setelah memanggil operator ini, maka kunci tersebut akan menuju ke baris setelah program kita akan dimulai. Jika tidak, maka kode setelahnya akan dieksekusi. Jadi kita cari, kode ini langsung menarik perhatian kita

MOV EAX, DWORD PTR SS:
MOV EDX,UjiP.00453BA4
PANGGILAN TesP.00404258
JE Tes SINGKATP.00453B4A

Sekarang jalankan kembali potongan kode ini langkah demi langkah dan Anda akan melihat operator ini
Tes SINGKAT JEP.00453B4A dilewati dan tidak membuang kita kemana-mana, artinya fungsi kita inilah yang memeriksa kode kita dan ternyata salah, itulah sebabnya operator JE tidak membuang kita kemana-mana. Saya akan menjelaskan kepada Anda bagaimana operator ini memeriksa kebenarannya, kami melakukan semuanya dengan "kaku" :). Artinya jika kode dimasukkan maka operator ini akan mengirimkan kita ke alamat 00453B4A dan semuanya akan baik-baik saja :). Kami mengganti operator ini dengan lompatan tanpa syarat (JMP), yang bagaimanapun juga akan mentransfer kami ke alamat ini. Lihat di mana alamat ini berada (garis yang disorot dengan warna biru).

Kami melihat bahwa panggilan ke fungsi yang menampilkan pemberitahuan bahwa kuncinya salah dilewati.
Untuk mengganti sebuah garis, pilih dan tekan Spasi dan gantilah
hal ini.
Kami melihat garis itu Tes SINGKAT JEP.00453B4C diganti di jendela Tambalan baris ditambahkan.

Sekarang kami memeriksa apakah itu berfungsi. Tekan tombol, di jendela Breakpoints, klik kanan dan pilih Disable All dari menu. Selanjutnya, di jendela Patches, klik kanan pada baris kita dan pilih Apply Patch dari menu. Setelah itu tekan tombol, akan muncul jendela yang meminta kunci, masukkan kunci apa saja, tekan ok dan program kita terdaftar. Program khusus ini akan selalu meminta kunci, karena ini hanyalah sebuah tes, dan program sebenarnya akan mencatat sendiri bahwa Anda memasukkan kunci dengan benar.

Catatan! Di sini kami dapat segera menemukan potongan kode yang kami butuhkan, tetapi semuanya tidak selalu sesederhana itu. Terkadang Anda harus mencoba semua struktur jenis ini secara bergantian.

3. Langkah terakhir adalah menanamkan patch ke dalam program, untuk itu kita memerlukan Hex editor. Jadi kita membukanya dan memilih program kita, awan digit heksadesimal akan terbuka. Kita perlu menemukan string JE SHORT TestP.00453B4A dalam heksadesimal dan menandainya dengan milik kita. Saya rasa Anda memperhatikan bahwa di jendela CPU (OllyDbg), bentuk heksadesimalnya ditulis di seberang setiap baris. Untuk menemukan baris ini secara akurat, kita mencari seperti ini, jangan hanya masuk ke pencarian 74 2B, dan ambil baris kode sebelumnya dan cari seperti ini E8 3B 07 FB FF 74 2B

Dalam file exe, kodenya berantai, itulah sebabnya kita mengambil baris sebelumnya. Mengapa kita melakukan ini? Hanya saja garis kecil seperti 74 2B dapat diulang beberapa kali, jadi kita ambil baris sebelumnya untuk menemukan apa yang kita butuhkan. Selanjutnya kita lihat seperti apa string JMP SHORT TestP.00453B4A yang kita modifikasi dalam kode heksadesimal, tampilannya seperti ini EB 2B jadi kita ganti string yang ditemukan dengan milik kita, untuk melakukan ini kita tekan tombol dan ganti string seperti ini

Simpan perubahan dan tutup editor. Itu saja, program ini akan menerima kunci apa pun yang diperlukan. Saya sarankan Anda mencoba memastikan bahwa program tidak meminta Anda memasukkan kunci sama sekali.

PENTING!! Sebelum Anda mulai memanipulasi program, Anda perlu memeriksa apakah file *.exe telah dikemas. Untuk melakukan ini, Anda memerlukan utilitas PEiD. Bagaimana semua ini dilakukan adalah topik artikel terpisah, saya sarankan Anda mencari tahu sendiri.

Halo semua. Hari ini saya akan menjelaskan OllyDebugger. OllyDebugger (selanjutnya Olly) adalah debugger yang luar biasa (ring-3). Popularitas debugger ini berkembang pesat :). Untuk pemula, debugger ini tepat; bagi profesional yang tahu cara menggunakannya dengan baik, ini adalah alat yang sangat diperlukan. Artikel ini akan menjelaskan semua yang bisa saya lakukan di Olly.

1. Apa itu Olly Debugger

Diambil dari referensi: Olly adalah debugger tingkat assembler 32-bit dengan antarmuka yang intuitif. Sangat berguna jika kode sumber tidak tersedia atau ketika Anda mengalami masalah dengan kompiler Anda.

Prosesor yang didukung. Olly mendukung semua 80x86, Pentium, MMX, 3DNow!, termasuk ekstensi Athlon, perintah SSE dan format data terkait.

Format data. Jendela pembuangan menampilkan data dalam semua format umum: heksadesimal, ASCII, Unicode, bilangan bulat bertanda tangan/tidak bertanda/heksadesimal 16 dan 32-bit, disassembler (MASM, IDEAL, atau HLA).

Meluncurkan. Anda dapat menentukan file yang dapat dieksekusi pada baris perintah, memilih dari menu, menyeret file ke Olly, memulai ulang program terakhir yang Anda debug, atau melampirkan ke proses yang sudah berjalan. Tidak diperlukan instalasi, Anda dapat menjalankan Olly dari floppy disk!

Men-debug DLL. Dengan Olly, Anda dapat men-debug pustaka tautan dinamis mandiri (DLL). Olly secara otomatis meluncurkan executable kecil yang memuat perpustakaan dan memungkinkan Anda memanggil fungsi yang diekspor.

Analisis. Penganalisis adalah salah satu bagian terpenting dari Olly. Ia mengenali prosedur, loop, tabel, konstanta dan string yang tertanam dalam kode, konstruksi rumit, permintaan fungsi API, nomor parameter fungsi, bagian impor, dan sebagainya. Analisis membuat kode ganda lebih mudah dibaca, mempermudah proses debug, dan mengurangi kemungkinan crash. Penganalisis ini tidak berorientasi pada kompiler dan bekerja sama baiknya dengan semua program Windows.

Pemindai objek. Olly memindai file atau pustaka objek (format OMF DAN COFF), mengekstrak kode darinya, mengelompokkannya, dan menempatkannya dalam program yang sedang di-debug.

Dukungan Unicode penuh. Hampir semua operasi yang tersedia untuk string ASCII juga tersedia untuk string Unicode, dan sebaliknya.

2. Tombol pintas

Dengan “hot key” saya ingin memulai cerita, karena... Tanpa mereka, Anda harus menghabiskan banyak waktu untuk menelusuri menu dan debugger akan segera kehilangan kenyamanannya. Mari kita mulai dengan panel kontrol:

Tombol pertama adalah membuka file (kunci horizontal F3)
Tombol kedua adalah me-restart file (tombol horizontal Ctrl+F2)
Tombol ketiga adalah menutup file (tombol horizontal Alt+F2)
Tombol keempat untuk memulai program (tombol horizontal F9)
Tombol kelima untuk menjeda peluncuran (tombol horizontal F12)
Tombol keenam adalah menelusuri dengan masuk ke subrutin (kunci horizontal F7)
Tombol ketujuh adalah menelusuri tanpa memasukkan subrutin (tombol horizontal F8)
Tombol kedelapan adalah memulai penelusuran otomatis dengan memasukkan subrutin (tombol horizontal Ctrl+F11)
Tombol kesembilan adalah memulai penelusuran otomatis tanpa memasukkan subrutin (tombol horizontal Ctrl+F12)
Tombol kesepuluh untuk menjalankan program sebelum keluar dari subrutin (tombol horizontal Ctrl+F9)
Tombol kesebelas – menuju ke alamat (tombol horizontal Ctrl+G)

Semua tombol lain pada panel kontrol akan dibahas nanti.

Perintah yang diperlukan:
Ctrl+A – menganalisis kode
Ctrl+C – menyalin data
Ctrl+F7 – mengaktifkan mode di mana kode akan dieksekusi seolah-olah Anda menekan dan tidak melepaskan tombol F7
Ctrl+F8 – mengaktifkan mode di mana kode akan dieksekusi seolah-olah Anda menekan dan tidak melepaskan tombol F8
Shift+F8 – melanjutkan penelusuran program meskipun terjadi pengecualian
Shift+F9 – terus menjalankan program meskipun terjadi pengecualian
Ctrl+T – pengaturan pelacak otomatis
Ctrl+F11 – Mulai penelusuran otomatis dengan memasukkan subrutin
Ctrl+F12 – Memulai penelusuran otomatis tanpa memasukkan subrutin
F2 – Tempatkan breakpoint pada garis yang dipilih

3. Plugin

Anda mungkin mulai marah karena saya membicarakan segalanya, tetapi bukan tentang debugger itu sendiri. Sebagai tanggapan, saya akan mengatakan: "Saya akan melihat bagaimana Anda men-debug program, setidaknya tanpa plugin CommandBar." Ya, memang benar bahwa jauh lebih sulit untuk men-debug suatu program tanpa plugin. Sekarang saya akan memberikan daftar plugin yang telah saya instal dan sepanjang jalan saya akan menjelaskan apa itu:

1. IsDebuggerPresent – ​​​​Menyembunyikan debugger dari deteksi menggunakan fungsi IsDebuggerPresent.
2. Sembunyikan Debugger – Menyembunyikan debugger dari deteksi menggunakan fungsi IsDebuggerPresent.
3. Olly Script – memungkinkan Anda menulis skrip untuk membantu debugging. Saya tidak menggunakan plugin ini karena... Saya rasa tidak perlu mengotomatiskan proses debug.
4. Olly Dump – memungkinkan Anda membuang proses yang sedang di-debug dan sekaligus memulihkan impornya. Plugin super. Saya menasihati semua orang.
5. Command Bar - memungkinkan Anda melakukan keajaiban. Sebuah baris muncul di debugger tempat Anda dapat memasukkan perintah yang sangat cerdas. IMHO tanpa plugin ini debugging tidak mungkin dilakukan :). Saya menerjemahkan sertifikat dari plagia dan akan memberikannya tambahan No.1.

4. Kenalan pertama

Seperti yang saya katakan, debugger sangat mudah digunakan. Berikut adalah tampilan standar jendela utama dengan program yang dimuat untuk debugging:

Saya bilang itu jendela standar, saya bohong, saya ubah warnanya :). Sekarang semuanya beres. Urutan deskripsi: Jendela utama, Jendela register, Panel tumpukan, Panel menu.

Jendela utama: Jendela ini adalah tempat proses debug sebenarnya dilakukan. Semua instruksi disediakan dalam bentuk yang dibongkar. Anda dapat memindahkan garis indeks menggunakan kursor. Dengan menggunakan garis indeks, Anda dapat memilih data mana yang akan disalin (semuanya jauh lebih sederhana di sini daripada di SoftIce. Dipilih. Ctrl+C, pergi ke tempat yang tepat Ctrl+V), perintah mana yang harus diubah, di mana meletakkan breakpoint, dll. . Alamat yang harus dieksekusi selanjutnya disorot di samping. Di antara kolom alamat dan kolom daftar yang dibongkar terdapat kolom dengan instruksi kode mesin. Kolom terakhir berisi komentar.

Jendela Daftar: Jendela Daftar menampilkan semua register 32-bit, register flag, dan berbagai register lainnya. Untuk mengubah register, Anda perlu mengklik nilainya 2 kali dan memasukkan nilai baru. Anda dapat membalikkan daftar bendera dengan mengklik dua kali salah satunya.

Panel tumpukan: Di panel tumpukan, Anda dapat mengubah byte yang Anda perlukan di memori, mengatur titik henti sementara, dan mencari reg yang benar. kode, dll.

Menu Bar: Menu bar akan dibahas dalam bab yang lebih besar karena... topik ini sangat penting.

5. Mengenal menu utama

Mari kita mulai dengan menu bernama File. Menu ini memiliki tab: Buka, Lampirkan, Keluar. Buka – membuka file untuk debugging, Lampirkan – bergabung dengan proses yang sudah berjalan untuk debugging, Keluar – keluar.

Melihat
Log – Melihat log tentang pengunduhan file, dll. (tombol pintas: Alt+L)
Modul yang dapat dieksekusi – Melihat semua modul yang digunakan oleh aplikasi yang sedang di-debug. (tombol pintas: Alt+E)
Memori – Melihat kartu memori. Berikut perkiraan penampakannya:

Kolom pertama adalah alamat tempat berbagai bagian file, perpustakaan DLL, dimuat. Kolom kedua adalah ukuran memori bagian tersebut. Kolom ketiga biasanya berisi nama modul. Kolom keempat adalah nama bagian. Kolom kelima adalah apa yang terdapat pada bagian tersebut. Semua kolom lainnya tidak penting, karena mereka mencerminkan atribut bagian dalam memori. (tombol pintas: Alt+M)

Threads – Lihat semua thread program, bekukan, p`glnpnghr| mereka, ubah prioritasnya, bunuh mereka.
Windows – Melihat hingga x.. informasi tentang windows, kelas, dll. digunakan oleh program.
Pegangan – Lihat Pegangan.
CPU – Buka jendela utama. (tombol pintas: Alt+C)
SEH Chain – Lihat, beri breakpoint pada semua Seh yang diumumkan.
Patch – Melihat daftar semua perubahan yang Anda buat pada program, membatalkan semua perubahan, dll. (tombol pintas: Ctrl+P)
Call Stack – Melihat semua panggilan yang menjalankan kode di tumpukan. (tombol pintas: Alt+K)
Breakpoints – Lihat semua breakpoint, nonaktifkan, hapus. (tombol pintas: Alt+B)
Jalankan Jejak – Melihat log jejak.
File – Editor file heksadesimal.

Men-debug
Jalankan – Luncurkan aplikasi.
Jeda – Menjeda eksekusi aplikasi.
Mulai Ulang – Mulai ulang program yang sedang di-debug.
Tutup – Menutup program yang sedang di-debug.
Masuk ke – Setara dengan F7.
Melangkah – Setara dengan F8.
Animasikan ke – Setara dengan terus menekan F7.
Animate over – Setara dengan terus menekan F8.
Jalankan hingga kembali – Jalankan program sebelum keluar dari subrutin.
Telusuri ke – Penelusuran otomatis dengan masuk ke subrutin.
Telusuri – Penelusuran otomatis tanpa memasukkan subrutin.
Tetapkan kondisi – Menetapkan kondisi untuk penelusuran otomatis.
Tutup penelusuran proses – Menghentikan penelusuran otomatis.
Titik henti perangkat keras – Melihat titik henti perangkat keras.

Segala sesuatu yang lain dalam menu ini tidak penting.

Pilihan
Penampilan – Pengaturan antarmuka debugger. Saya tidak akan memikirkan pengaturan ini, karena... Itu tidak wajib dan Anda bisa mengetahuinya sendiri.
Opsi debug (kunci horizontal – Alt+O) – Pengaturan debugger. Ini yang paling menarik, bab selanjutnya akan saya curahkan untuk item menu ini.
Debugging tepat waktu – Dalam pengaturan ini, Anda dapat menetapkan Olly sebagai debugger yang akan diluncurkan ketika beberapa aplikasi menyebabkan kesalahan serius.
Tambahkan ke Explorer – menambahkan item untuk men-debug program ke menu konteks Explorer.

6. Pengaturan program utama

Saya hanya akan menjelaskan opsi yang paling penting.

Keamanan
Peringatkan ketika breakpoint berada di luar bagian kode – Laporkan jika Anda ingin menempatkan breakpoint di luar bagian kode. Tentu saja pilihan ini tidak boleh dipilih.
Peringatkan saat menghentikan proses aktif – Tanyakan: “Apakah Anda benar-benar ingin menghentikan proses?” Opsi ini harus dipilih.
Peringatkan jika bukan administrator – Untuk mengganggu Anda jika Anda bukan administrator. Opsi ini untuk sadomasokisme :)

Men-debug
Tetapkan prioritas tinggi saat menelusuri proses debug – Tetapkan prioritas b(qnjhi) untuk aplikasi saat menelusuri. Opsi ini harus dipilih “sesuai selera” (Saya sudah memilihnya).

Acara
Jeda pertama pada – Lakukan pemberhentian pertama pada. Dalam hal ini, tiga opsi ditawarkan: Titik henti sistem, Titik masuk ke modul utama, Jendela utama. Sekali lagi, Anda semua harus memilih opsi terbaik. Saya memilih titik masuk ke modul utama.
Hancurkan modul baru DLL – berhenti di setiap perpustakaan baru yang dimuat.
Break on module unloading – Berhenti saat membongkar perpustakaan DLL dari memori.
Break on new thread – Hentikan saat membuat thread baru.
Putus di ujung utas – Hentikan saat utas berakhir.

Pengecualian
Abaikan pelanggaran akses memori di KERNEL32 – Abaikan kesalahan memori di Kernel32.
Istirahat Int3 - Jangan berhenti pada perintah int3. Opsi ini SANGAT membantu saat membongkar beberapa pelindung. Baca artikel unboxing saya untuk lebih jelasnya.

Jejak
Ukuran buffer jejak proses – Ukuran buffer jejak. Lebih baik mengatur nilai maksimum.
Perintah log – Menyimpan log operasi pelacak. Opsi ini sedikit memperlambat penelusuran, sehingga harus disetel bila diperlukan.
Selalu lacak DLL sistem – Selalu lacak perpustakaan sistem sebelumnya. Opsi ini harus dipilih untuk semua orang.
Setelah Eksekusi hingga RET, lewati RET – Opsi ini memungkinkan Anda berhenti ketika menekan Ctrl+F9 bukan pada RET, tetapi setelah dijalankan. Menurut saya opsi ini sangat nyaman, jadi saya menyarankan Anda untuk memilihnya.

SFX
Ketika modul utama dapat diekstraksi sendiri - Di sini kita diminta untuk memilih salah satu dari tiga opsi: Berhenti di awal kode unpacker, Lacak ke OEP dalam blok, Lacak ke OEP per byte. Apa yang bisa saya katakan, opsi untuk freeloader. Pencarian otomatis OER! Benar, terkadang Olly salah menentukan apakah program tersebut dikemas atau tidak.

string
Ya, semuanya jelas di sini. Menguraikan berbagai karakter.

Alamat
Pilihan ini tidak penting, karena mereka menentukan bagaimana alamat akan ditampilkan.

Perintah
Opsi ini hanya diperlukan bagi orang yang sangat menyukai listingan ASM yang sangat indah.

Disisme
Pengaturan pembongkaran. Anda dapat mengklik semua opsi dan melihat tampilan daftar asm. Semua pengaturan lainnya menurut saya tidak penting.

7. Debugging pertama

Kami akan men-debug Fant0m crackme 4. Anda dapat mendownloadnya dari sini: http://fant0m.cjb.net/. Dari crackme ini kami akan mencoba mendapatkan reg yang benar. nomor untuk nama Anda. Muat crackme di bawah debugger dan tekan F9 untuk menjalankan. Masukkan nama orang yang ingin kita daftarkan crackme ini. Masukkan kata sandi apa pun. Jadi, sekarang kita perlu mengatur breakpoint untuk membaca nama dan password. Beralih ke Olly dan dalam perintah qrpnje tulis bpx GetDlgItemTextA . Klik Periksa. Kami segera menemukan diri kami di Olly di tempat ini:

00401217 E8 62010000 PANGGILAN 0040121C 68 00010000 DORONG 100 00401221 68 84314000 DORONG 00403184 00401226 68 E9030000 DORONG 3E9 ; |ControlID = 3E9 (1001.) 0040122B FF75 08 PUSH DWORD PTR SS: ; |hWnd 0040122E E8 4B010000 PANGGILAN 00401233 FF75 08 PUSH DWORD PTR SS: 00401236 E8 BE000000 CALL 004012F9 0040123B 83F8 00 CMP EAX, 0 0040123E 74 15 JE SHORT 00401255 00401240 6A 40 DORONG 40 00401242 68 29304000 DORONG 00403029 ; |Judul = "Periksa Serial" 00401247 68 60304000 PUSH 00403060 ; |Text = "You got it! Congrats! :)" 0040124C 6A 00 PUSH 0 ; |hOwner = NULL 0040124E E8 49010000 CALL !} >

Jelas sekali bahwa dalam prosedur di alamat 004012F9 sedang dilakukan pemeriksaan registrasi. Kami menerima panggilannya menggunakan F8 dan memasukkannya menggunakan F7. Apa yang kami lihat:

004012F9 55 PUSH EBP 004012FA 8BEC MOV EBP, ESP 004012FC 56 PUSH ESI 004012FD 57 PUSH EDI 004012FE 8D3584304000 LEA ESI, DWORD PTR DS: 00401304 8D3D84324 000 LEA EDI, DWORD PTR DS: 0040130A 33C0 XOR EAX, EAX 0040130C 33C9 XOR ECX, ECX 0040130E B31A MOV BL, 1A 00401310 803E00 CMP BYTE PTR DS:, 0 00401313 7415 JE SHORT 0040132A 00401315 8A06 MOV AL, BYTE PTR DS: 00401317 02C1 ADD AL, CL 00401319 32C 1 XOR AL, CL 0040131B F6F3 DIV BL 0040131D 66C1E808 SHR AX, 8 00401321 0441 TAMBAHKAN AL, 41 00401323 8807 MOV BYTE PTR DS:, AL 00401325 47 INC EDI 00401326 46 INC ESI 00401327 41 INC ECX 00401328 EBE6 JMP PENDEK 00401310 0040132A C 60700 MOV BYTE PTR DS:, 0 0040132D 33C0 XOR EAX, EAX 0040132F 83F900 CMP ECX , 0 00401332 741A JE PENDEK 0040134E 00401334 6884324000 PUSH 00403284 ; /String2 = "" 00401339 6884314000 TEKAN 00403184 ; |String1 = "qwerty" 0040133E E8A1000000 PANGGILAN 00401343 83F800 CMP EAX, 0 00401346 7404 JE PENDEK 0040134C 00401348 33C0 XOR EAX, EAX 0040134A EB02 JMP PENDEK 0040134E 0040134C 8BC1 MOV EAX, ECX 0 040134E 5F POP EDI 0040134F 5E POP ESI 00401350 C9 TINGGALKAN 00401351 C20400 RETN 4
Dari kode ini jelas bahwa di alamat 0040133E kode Anda dibandingkan dengan yang benar. Tempatkan breakpoint di alamat ini dan tekan F9. Komentar String2 = "" akan berubah menjadi seperti ini String2 = "ODMZAMHN". Jadi, untuk tempat ODMZAMHN Anda akan memiliki reg Anda. kode untuk namamu. Tekan F9, masukkan kode yang benar, tekan Periksa, hapus semua breakpoint, tekan F9 dan bersukacitalah.

Lampiran No.1

Bantuan dengan Bilah Perintah. Penjelasan perintah Command Bar. Semua perintah yang saya anggap tidak perlu telah dihapus dari daftar ini.

Ekspresi
CALC [ekspresi] - Menghitung nilai suatu ekspresi

Pembongkar
AT [ekspresi] - Pergi ke alamat di disassembler
IKUTI [dengan ekspresi] - Pergi ke alamat di disassembler
ORIG - Pergi ke alamat saat ini (EIP)
* - Pergi ke alamat saat ini (EIP)

Buang dan susun
D [ekspresi] - Pergi ke alamat di dump
DUMP [ekspresi] - Pergi ke alamat di dump
DA [ekspresi] - Buang dalam format assembler
DB [ekspresi] - Buang dalam heksadesimal
DC [ekspresi] - Buang dalam pengkodean ASCII
DD [ekspresi] - Buang sebagai alamat (format tumpukan)
DU [ekspresi] - Buang dalam pengkodean UNICODE
DW [ekspresi] - Buang dalam format kata heksadesimal
STK [ekspresi] - Pergi ke alamat di tumpukan

Siaran
A [ekspresi] [, perintah] - Bongkar alamat

Tag dan komentar
Ekspresi L, label - Mengaitkan label simbolis dengan alamat
Ekspresi C, komentar - Menetapkan komentar untuk suatu alamat

Titik henti sementara
BP [ekspresi] [,kondisi] - Tetapkan breakpoint
BPX [nama fungsi] - Tetapkan breakpoint pada semua instruksi dalam modul yang memanggil [nama fungsi]
BC [alamat] - Hapus titik kontrol di alamat
MR ekspresi1 [,ekspresi2] - Tetapkan breakpoint pada memori untuk akses ke area tertentu
Ekspresi MBT1 [, ekspresi2] - Tetapkan breakpoint di memori untuk menulis ke area tertentu
MD - Hapus breakpoint dari memori
HR [alamat] - Setel breakpoint Perangkat Keras ke satu byte per akses ke alamat
HW [alamat] - Setel breakpoint Perangkat Keras ke satu byte per penulisan di alamat
HE [alamat] - Atur breakpoint Perangkat Keras untuk menjalankan perintah di alamat
HD [nomor breakpoint] - Hapus nomor breakpoint Perangkat Keras

Perintah Jejak
BERHENTI - Jeda jejak
JEDA - Jeda penelusuran
JALAN - Jalankan programnya
G [alamat] - Jalankan ke alamat
GE - Jalankan ke alamat
S - Setara dengan F7
SI - Setara dengan F7
JADI - Setara dengan F8
TR - Jalankan program hingga keluar dari subrutin

Jendela OllyDbg
LOG - Jendela tampilan log
MOD - Lihat modul yang dapat dieksekusi
MEM - Buka jendela kartu memori
CPU - Buka jendela program utama
BRK - Buka jendela tampilan breakpoint
MEMILIH - Pengaturan

Berbagai tim
KELUAR - Keluar dari Olly
BERHENTI - Keluar dari Olly
BUKA [nama file] - Buka file untuk debugging
TUTUP - Menutup program yang sedang di-debug
RST - Mulai ulang program yang sedang di-debug
BANTUAN - tampilkan bantuan (teks ini, tetapi belum diterjemahkan)
BANTUAN - Olly tunjukkan bantuan Oll
BANTUAN APIfungsi - bantuan pada fungsi API

Lampiran No.2

Titik henti sementara. Olly mendukung beberapa jenis breakpoint:
- Breakpoint reguler, di mana byte pertama dari perintah yang ingin Anda hancurkan digantikan oleh INT3 (Trap to Debugger). Anda dapat menempatkan breakpoint dengan memilih perintah di disassembler dan menekan F2, atau melalui menu pop-up. Ketika Anda menekan F2 untuk kedua kalinya ketika breakpoint telah ditetapkan, maka breakpoint tersebut akan dihapus. Jumlah breakpoint INT3 tidak terbatas. Saat Anda menutup program yang sedang Anda debug, atau debugger, Olly secara otomatis menyimpan breakpoint. Jangan pernah mencoba menyetel breakpoint pada data atau di tengah perintah! Olly akan memperingatkan Anda jika Anda mencoba menyetel breakpoint di luar bagian kode. Anda dapat mematikan peringatan ini di pengaturan perlindungan Anda. Dalam beberapa kasus, Debugger mungkin menyisipkan breakpoint INT3 sementara miliknya sendiri.

Breakpoint bersyarat (tombol horizontal Shift+F2) - breakpoint INT3 reguler dengan syarat. Setiap kali debugger menemukan breakpoint tersebut, debugger mengevaluasi ekspresinya dan, jika hasilnya bukan nol atau ekspresi tidak valid, menghentikan program yang sedang di-debug.

Breakpoint bersyarat dengan logging (kunci horizontal Shift+F4) - breakpoint bersyarat dengan logging untuk mencatat nilai ekspresi atau parameter fungsi yang diketahui setiap kali breakpoint dijalankan.

Breakpoint untuk memori. Olly memungkinkan Anda menyetel satu breakpoint di memori dalam satu waktu. Anda memilih sebagian memori di disassembler atau CPU dump dan menggunakan menu pop-up untuk menyetel breakpoint ke o`lr|. Breakpoint memori sebelumnya, jika ada, akan dihapus secara otomatis. Anda mempunyai dua pilihan: berhenti pada akses memori (baca, tulis atau jalankan) dan tulis saja. Untuk menyetel breakpoint, Olly memodifikasi atribut blok memori yang berisi data.

Breakpoint perangkat keras (hanya tersedia saat menggunakan debugger pada Windows ME, NT, 2000 atau XP). Prosesor yang kompatibel dengan 80x86 memungkinkan Anda menyetel 4 breakpoint perangkat keras. Berbeda dengan breakpoint memori, breakpoint perangkat keras tidak memperlambat kecepatan eksekusi, namun hanya mencakup hingga 4 byte.

Akses memori tunggal berhenti (hanya tersedia pada Windows NT, 2000 dan XP). Anda dapat mengaturnya di jendela Memori ke seluruh blok memori melalui menu pop-up atau dengan menekan F2. Breakpoint ini sangat berguna jika Anda ingin mencegat permintaan ke modul tertentu.

Pelacakan Otomatis – Anda harus menentukan kondisi (tombol horizontal Ctrl+T) di mana debugger akan menghentikan program. Harap dicatat bahwa opsi ini dapat memperlambat kecepatan eksekusi program secara signifikan (hingga 20%).

OllyDbg juga dapat menghentikan eksekusi program pada kejadian tertentu, seperti ketika DLL dimuat atau dibongkar, atau thread dibuat atau dihentikan.

Lampiran No.3

Pengaturan debugger saya.
Jika Anda ingin menggunakan pengaturan saya, ganti semua data dengan teks ini di file ollydbg.ini, yang terletak di folder yang sama tempat debugger diinstal.

Periksa versi DLL=0 Tampilkan toolbar=1 Status di toolbar=0 Gunakan breakpoint perangkat keras untuk langkah=1 Pulihkan windows=104191 Gulir MDI=1 Gulir horizontal=0 Jendela paling atas=0 Indeks font default=1 Indeks warna default=0 Indeks penyorotan sintaks default=0 Indeks ukuran buffer log=0 Jalankan indeks ukuran buffer jejak=7 Kelompokkan perintah yang berdekatan di profil=1 Register jejak yang disorot=-1 Mode pembongkaran IDEAL=0 Bongkar dalam huruf kecil=0 Pisahkan argumen dengan TAB=0 Spasi ekstra antar argumen=1 Tampilkan segmen default=1 Pengubah lompat DEKAT=0 Gunakan perintah string bentuk pendek=0 Mnemonik sensitif ukuran=1 Mode decoding ukuran SSE=0 Bagian atas tumpukan FPU=1 Selalu tampilkan ukuran memori=1 Decode register untuk IP apa pun =0 Tampilkan alamat simbolik=1 Tampilkan nama modul lokal=0 Data abu-abu digunakan sebagai pengisian=1 Tampilkan arah lompatan=0 Tampilkan jalur lompat=0 Tampilkan jalur lompatdari=0 Tampilkan jalur jika lompatan tidak dilakukan=0 Garis bawahi perbaikan=1 Tengah DIIKUTI command=0 Tampilkan bingkai tumpukan=1 Tampilkan nama lokal di tumpukan=1 Pelacakan tumpukan yang diperluas=0 Sinkronisasi sumber dengan CPU=1 Sertakan ekstraktor SFX dalam kode=1 Mode pelacakan SFX=0 Gunakan entri SFX asli dari proses sebelumnya=1 Abaikan pengecualian SFX =1 Jeda pertama=1 Hentikan DLL baru=0 Hentikan pembongkaran DLL=0 Hentikan thread baru=0 Hentikan thread akhir=0 Hentikan string debug=0 Dekode register SSE=0 Aktifkan kesalahan terakhir=1 Abaikan pelanggaran akses di KERNEL32=1 Abaikan INT3=1 Abaikan TRAP=0 Abaikan pelanggaran akses=0 Masuk perintah yang tidak diketahui=1 Abaikan pembagian dengan 0=0 Abaikan instruksi ilegal=0 Abaikan semua pengecualian FPU=0 Peringatkan bila sering jeda=0 Peringatkan bila tidak ada pembobolan kode=0 Autoreturn=1 Simpan perintah asli di jejak=1 Tampilkan ESP yang dilacak=1 Animasikan DLL sistem=1 Perintah penelusuran string=1 Sinkronisasi CPU dan Jalankan jejak=0 Abaikan pengecualian khusus=1 Pembaruan cerdas=1 Tetapkan prioritas tinggi= 1 Tambahkan argumen=1 Gunakan ExitProcess=1 Izinkan injeksi untuk mendapatkan WinProc=0 Urutkan WM_XXX berdasarkan nama=0 Jenis breakpoint WinProc terakhir=0 Gambar bebas salju=1 Hapus nama simbolik=0 Simpan ordinal dalam nama=1 Hanya ASCII yang dapat dicetak dalam dump=0 Izinkan simbol diakritik=1 Penguraian string=0 Peringatkan jika bukan administrator=0 Peringatkan saat menghentikan proses=1 Sejajarkan dialog=1 Gunakan font pemanggil window=0 Font dialog yang ditentukan=0 Kembalikan posisi jendela=1 Kembalikan lebar kolom= 0 Sorot kolom yang diurutkan=0 Kompres data analisis=1 File UDD cadangan=1 Isi sisa perintah dengan NOPs=1 Mode pencarian referensi=0 Pencarian global=0 Pencarian selaras=0 Izinkan margin kesalahan=0 Pertahankan ukuran pilihan edit hex=0 Ubah tag register FPU=1 Batas inspektur hex=1 Mode tampilan MMX=0 Kartu opsi yang terakhir dipilih=15 Kartu tampilan yang terakhir dipilih=6 Abaikan huruf besar-kecil dalam pencarian teks=1 Tombol huruf dalam Disassembler=1 Kelonggaran analisis kode=1 Dekode pascal strings=1 Tebak jumlah argumen=1 Terima panggilan jauh dan kembali=0 Terima modifikasi segmen langsung=0 Dekode panggilan VxD=0 Terima perintah istimewa=0 Terima perintah I/O=0 Terima NOP=1 Terima perpindahan di luar jangkauan=0 Terima prefiks yang berlebihan=0 Terima awalan LOCK=0 Terima operasi tumpukan yang tidak selaras=1 Terima formulir perintah non-standar=1 Tampilkan ARG dan LOCAL dalam prosedur=0 Simpan analisis ke file=1 Analisis modul utama secara otomatis=1 Analisis struktur kode=1 Dekode ifs as switch=0 Simpan jejak ke file=0 Lacak isi register=1 Fungsi melestarikan register=0 Trik dekode=0 Pilih jenis register secara otomatis=1 Tampilkan argumen yang didekode=1 Tampilkan argumen yang didekode dalam tumpukan=1 Tampilkan argumen dalam panggilan tumpukan= 1 Tampilkan panggilan yang diinduksi=1 Mode tampilan label=0 Label berisi nama modul=0 Sorot label simbolik=0 Sorot RETURN dalam tumpukan=1 Abaikan jalur dalam file data pengguna=1 Abaikan stempel waktu dalam file data pengguna=1 Abaikan CRC dalam file data pengguna =1 Mode pengurutan default di Nama=1 Tabulasi kolom di file log=0 Tambahkan data ke file log yang ada=0 Siram data yang dikumpulkan ke file log=0 Lewati spasi di komentar sumber=1 Sembunyikan file sumber yang tidak ada=1 Tab berhenti= 8 Mode grafik file=2 Tampilkan nama pegangan internal=0 Sembunyikan pegangan yang tidak relevan=0 Gunakan RET sebagai ganti RETN=0 Tampilkan tanda yang dilacak=1 Jumlah baris yang mengikuti EIP=0 Simpan data pengguna di luar modul=0 CPU=194,324,812,360 ,3 Subjendela CPU=327,798,321,798,537,771,479,909 OllyTest=0,0,1024,746,1 Referensi=256,420,256,210,1 Breakpoint=75,248,626,168,1 Run trace=246,391,432,176,1 Patch= 0,210,256,210,1 Modul yang dapat dieksekusi=263,41,636,175,1 Peta memori=357 ,41,519,274,1 Bookmark=110,145,624,175,1 Profil=132,174,624,182,1 Windows=132,177,614,179,1 Thread=155,204,492,124,1 Data log=421,107,378,221,1 Sumber=256,2 1 0,256,210,1 Pegangan=196,325,647,175,1 File sumber=205,268,473,168,1 Panggilan tumpukan=0,420,256,210 ,1 Pohon panggilan=132,132,791,175,1 Rantai SEH=0,0,256,210,1 Ekspresi tontonan=256,0,256,210,1 Skema CPU=0 Pembongkaran CPU=7,0,0,0,0 CPU Dump=7,0, 1,0 ,4353.0 CPU Stack=7,0,0,0 Info CPU=7,0,0,0 Register CPU=7,0,0,0 Referensi=7,0,1,0,0 Breakpoints=1, 0 ,1,0,0 Jalankan jejak=1,0,1,0,0 Tambalan=1

Penyelesaian

Ini adalah akhir dari perkenalan Anda dengan debugger OllyDebugger yang luar biasa. Tentu saja, tidak mungkin untuk menjelaskan semua kemampuan debugger ini di artikel, tetapi saya mencobanya, dan saya harap berhasil. Beberapa kemungkinan berada di luar cakupan artikel ini, tetapi saya yakin Anda akan menemukan sendiri peluang ini. Saya mengajar Olly tanpa artikel apa pun, dan Anda akan dapat terus membiasakan diri dengan debugger tanpa bantuan siapa pun. Jika Anda memiliki pertanyaan, saran, kata-kata makian, dll. kirim semuanya ke [dilindungi email].

P.S. Pastikan untuk membaca artikel saya tentang unboxing menggunakan Olly.

Halo

Halo semuanya di cracklab, dan terutama untuk MozgC dan Bad_guy, ALEX, Kerghan, Mario555, Hex dan semua orang yang membaca artikel ini.