Debugging DLL
OllyDbg 1.10 dapat men-debug DLL mandiri. Windows tidak dapat memulai DLL secara langsung, sehingga OllyDbg menggunakan executable kecil bernama
loaddll.exe. Program ini disimpan sebagai sumber daya dikemas. Jika file Anda mencoba untuk membuka sebuah perpustakaan link dinamis, OllyDbg otomatis ekstrak
loaddll.exe dan mulai itu, melewati nama perpustakaan sebagai parameter.
Dengan bantuan
loaddll, Anda dapat memanggil fungsi-fungsi yang diekspor oleh perpustakaan debugged. Saya akan menjelaskan fitur ini pada contoh fungsi API Windows
'MessageBox dan
wsprintf yang berada di user32.dll.
1. Memuat DLL dalam cara yang sama seperti
biasa. File
exe. OllyDbg mengeluarkan peringatan:
Tentu saja, kita menjawab dengan "Ya". OllyDbg mulai
loaddll, perpustakaan beban dan jeda pada breakpoint yang segera preceeds loop jendela utama. Alamat ini diberi label sebagai
Firstbp. Kemudian OllyDbg menganalisis DLL dan menampilkan kode. Perhatikan bahwa Windows secara otomatis mengeksekusi kode DLL startup ketika DLL dimuat ke memori.
2. Dari menu utama, pilih "Debug | ekspor Panggil DLL". Dialog muncul adalah non-modal, sehingga Anda masih memiliki akses penuh ke semua fitur OllyDbg. Anda dapat menelusuri kode dan data, breakpoints set, memodifikasi memori dan sebagainya.
3. Pilih fungsi yang ingin Anda panggil. Kami akan mulai dengan
MessageBox. Perhatikan bahwa nama ini adalah generik, pada kenyataannya ada versi ASCII
MessageBoxA dan UNICODE versi
MessageBoxW. Mari kita coba dengan yang kedua. Seperti yang kita pilih itu, persegi panjang ke kanan mengatakan:
Jumlah argumen: 4. Analyzer menetapkan bahwa fungsi berakhir dengan
RET 10 dan jumlah benar diakui parameter.
RET nnn
khas untuk fungsi-fungsi yang menggunakan konvensi pemanggilan PASCAL
(parameter yang berlalu di stack, parameter pertama didorong terakhir,
fungsi menghapus parameter setelah panggilan). Windows yang paling 'API fungsi PASCAL-gaya.
4. Mengatur jumlah argumen tumpukan. Dalam kasus kami ini tidak diperlukan, karena OllyDbg sudah tahu jumlah argumen dalam panggilan ke
MessageBoxW. Tapi, tentu saja, Anda dapat mengganti keputusan ini kapan saja dengan mengklik kotak centang yang sesuai ke kiri.
5. Isi daftar argumen. Dialog ini mendukung hingga 10 parameter tumpukan. Parameter adalah setiap ekspresi yang valid yang tidak menggunakan register. Jika poin operan ke memori, Dump jendela ke kanan dari argumen menampilkan isi memori ini
Loaddll.exe cadangan 10 buffer memori, 1 K masing-masing, dicap sebagai
Arg1 ..
Arg10, bahwa Anda dapat dengan bebas menggunakan untuk tujuan apapun.. Selain itu, dialog mendukung dua pseudovariables: menangani dari
<Hwnd> orangtua jendela diciptakan oleh
loaddll.exe dan menangani dari
<Hinst> contoh
loaddll 's.
Untuk kenyamanan Anda, bila Anda menggunakan ekspor Panggilan untuk
pertama kalinya, OllyDbg menambahkan mereka ke daftar sejarah.
MessageBoxW mengharapkan 4 parameter:
- menangani jendela pemilik. Di sini, kita hanya pilih <Hwnd>;
- alamat teks UNICODE dalam kotak pesan. Pilih Arg2 dan tekan Enter. Dump menampilkan isi buffer memori dalam format heksadesimal. Penyangga ini awalnya diisi dengan nol. Klik kanan pada Dump dan pilih "Text | UNICODE (32 chars)" presentasi. Pilih karakter pertama dan tekan Ctrl + E (atau, sebaliknya, pilih "Binary | Edit" dari menu). Pada, tipe window "Teks dalam kotak" muncul atau teks lainnya untuk menampilkan;
- alamat judul UNICODE dari kotak pesan. Pilih Arg3 dan menulis "judul Kotak" dalam format UNICODE memori menunjuk;
- gaya kotak pesan sebagai kombinasi dari konstanta MB_xxx. OllyDbg tahu mereka, ketik di sini MB_OK | MB_ICONEXCLAMATION.
6. Set mendaftar argumen. Daftar argumen jarang dalam fungsi diekspor. Namun demikian, dukungan OllyDbg mendaftar argumen, juga.
7. Pilih opsi. Sembunyikan panggilan berarti bahwa kotak dialog harus menghilang dari layar ketika fungsi dijalankan. Opsi ini berguna saat eksekusi membutuhkan waktu yang signifikan, atau jika Anda mengatur breakpoints. Anda juga dapat menutup dialog secara manual. Bila fungsi disebut selesai eksekusi, OllyDbg otomatis akan membuka kembali ekspor Panggil.
Jeda setelah panggilan berarti bahwa aplikasi debugged akan berhenti setelah eksekusi.
Jika semuanya dilakukan dengan benar, dialog akan terlihat seperti gambar ini:
8. Memanggil fungsi dengan menekan
Call
OllyDbg otomatis backup semua Dumps, memverifikasi dan menghitung
parameter dan register, menghilangkan dialog dari layar dan kemudian
memanggil
MessageBoxW.. Seperti yang diharapkan, kotak pesan muncul di layar:
Bingo! Tekan
OK. MessageBoxW kembali dan Call ekspor sukses laporan. Perhatikan bahwa sekembalinya EAX berisi 1. Ini adalah nilai numerik dari IDOK konstan ("OK ditekan"). Ini adalah sederhana, bukan?
1. Pilih fungsi. Saya berharap, ekspor Panggilan masih terbuka? Seperti
MessageBox, wsprintf juga memiliki dua bentuk: ASCII
wsprintfA dan UNICODE
wsprintfW. Kami akan bermain dengan bentuk ASCII nya. Seperti
wsprintf menerima jumlah variabel argumen, menggunakan C konvensi pemanggilan.
Perbedaan utama dari PASCAL adalah bahwa hal itu adalah tanggung jawab
memanggil kode untuk membersihkan tumpukan dari parameter setelah
panggilan. Fungsi C berakhir dengan
RET dan Analyzer tidak dapat menentukan jumlah argumen.
2. Mengatur jumlah argumen tumpukan wsprintfA memiliki jumlah variabel argumen,. Berapa banyak - tergantung pada format string. Mari kita coba panggilan berikut:
wsprintf (Arg1, "Arg3 =% i, Arg4 =% 08X", 100,0 x12345678);
Seperti yang Anda lihat, kami memiliki 4 argumen, jadi klik pada kotak centang "4".
3. Isi daftar argumen.
- Argumen pertama adalah buffer. Pilih <Arg1> dan mengubah format dump untuk ASCII (32 chars);
- Argumen kedua adalah format string. Pilih <Arg2> dan mengubah dump untuk ASCII (32 karakter). Pilih karakter pertama, tekan Ctrl + E (biner edit) dan jenis format string di bidang ASCII;
- Argumen ketiga adalah 100 konstanta desimal. Secara default, OllyDbg mengasumsikan format heksadesimal. Titik desimal di akhir desimal pasukan konstan;
- Argumen keempat adalah konstanta heksadesimal, ketik saja seperti. OllyDbg menerima segala bentuk: 0x12345678, 12345678h atau hanya 12345678;
4. Memanggil fungsi. Jika semuanya dilakukan dengan benar, Anda akan mendapatkan hasil sebagai berikut:
Karakter disorot dalam dump Arg1 adalah yang dimodifikasi oleh panggilan. Dalam register
EAX, wsprintf kembali jumlah karakter dalam string output: 0x17 (desimal 23.).
Rincian dan sumber
loaddll. exe adalah aplikasi Win32 kompak ditulis dalam Assembler. Silahkan lihat pada kode sumbernya
di sini . Eksekusi dimulai pada
MULAI. Loaddll
mendapatkan baris perintah, melompat nama executable (harus diambil
dalam tanda kutip ganda!), Ekstrak path ke DLL dan lolos ke
LoadLibrary. Pada kesalahan, ia menempatkan pointer ke pesan kesalahan pada lokasi tetap dan keluar dengan kode 0x1001. Pada keberhasilan, menciptakan jendela utama sederhana dan jeda pada
Firstbp. Breakpoint ini diatur oleh OllyDbg pada startup.
Semua komunikasi dengan OllyDbg dilakukan melalui daerah penghubung 128-byte. Daerah ini harus dimulai di alamat 0x420020 segera setelah keyphrase. Beberapa kata pertama berisi alamat di
loaddll.exe
digunakan oleh OllyDbg untuk mengatur breakpoints dan parameter,
diikuti dengan alamat fungsi untuk memanggil, isi register, jumlah
argumen dan argumen itu sendiri. Jumlah argumen dibatasi hingga 10. Jika argumen adalah pointer ke memori, Anda dapat menggunakan 10 buffer data, 1 Kbyte masing-masing, yaitu sebagai
Arg1, Arg2, ...,
Arg10. Ini dan beberapa nama lainnya yang diekspor dan dengan demikian dikenal OllyDbg.
Ketika
loaddll melewati jendela utama loop
(WINLOOP), terus-menerus memeriksa apakah alamat fungsi diekspor dalam
PROCADR tidak 0. Jika hal ini terjadi,
loaddll menghemat isi
ESP dan
EBP dan mendorong 16 nol ke dalam stack. Hal ini diperlukan untuk menghindari kecelakaan jika pengguna menentukan valid sejumlah argumen. Kemudian mendorong argumen dan register set. Pada
Prepatch alamat ada 16
NOP s yang dapat Anda gunakan untuk patch kecil. Jika Anda memerlukan lebih banyak ruang, Anda dapat melompat ke
Patcharea 2 Kbytes panjang. Perhatikan bahwa OllyDbg tidak ekstrak
loaddll.exe dari sumber daya jika file dengan nama ini sudah ada.
Pada
CallDLL ekspor disebut. Perintah ini diikuti oleh 16
NOP s. Kemudian rutin menghemat register dimodifikasi dan offset
ESP setelah panggilan.
Jika Anda menyediakan nomor yang tidak valid argumen untuk
PASCAL-fungsi gaya, OllyDbg akan dapat melaporkan kesalahan ini kepada
Anda. Akhirnya, loaddll mengembalikan
ESP dan
EBP, nol
PROCADR dan istirahat di
INT3 di alamat
Selesai. Ketika titik ini tercapai, OllyDbg tahu eksekusi itu selesai.
Perlakukan LOADDLL.ASM sebagai freeware.
Saya tidak akan protes jika Anda menggunakan program ini sebagai bagian
keseluruhan atau (tanpa hak cipta) dalam program Anda sendiri. Tapi jangan berani menggunakan Bug Hijau (LOADDLL.RC) dalam proyek-proyek yang tidak berhubungan dengan OllyDbg! Itu saja untuk saat ini, nikmatilah!
Download Ollydbg 1.10
disini
Download Cmdline 1.10
disini
Download Plugin 1.10
disini
Download Ollydbg 2.00
disini
Lihat sumber asli artikel klik
DISINI