Anda tidak ingin memiliki sekitar sebuah program yang memungkinkan Anda untuk memecahkan mainan, shareware dan software trial, dan segala sesuatu yang berjalan pada komputer? Saya pikir itu akan. Dan program seperti itu ada! Dan cukup lama. Ini SoftICE dari NuMega Software. Cukup diasumsikan bahwa penggunaan adalah programmer takdir dipilih berpengalaman dalam arsitektur prosesor, perangkat keras, dalam bahasa assembly dan prinsip-prinsip sistem operasi. Namun pada kenyataannya, dan pengetahuan yang minim sudah cukup untuk bekerja dengan program ini. Pertama, kami memperkenalkan Anda tali.
SoftICE adalah debugger paling kuat sampai saat ini (yaitu, prog, yang dapat membongkar bata demi bata setiap prog lainnya dan setiap batu bata dari perubahan seperti yang Anda inginkan). Ini berarti bahwa dapat digunakan untuk mengeksplorasi segalanya: dari kernel Windows ke program di C + +. Organisasi ini dibentuk untuk debugging aplikasi 32-bit, driver untuk Win NT dan Win 95/98 dan program-program lain di bawah Win dan Dos (jadi setidaknya mengatakan pengembangnya;). Tetapi orang-orang dari seluruh dunia telah menemukannya aplikasi tambahan:)) Untuk apa yang merupakan setiap Trial-program? Tidak lebih dan tidak kurang dari 32-bit WIN aplikasi. Dan debug nya? Itu benar - penghapusan perlindungan: baik ujian waktu, atau periksa Key-file, atau apa pun.
Karena kenyataan bahwa banyak program telah dibajak oleh SI, vendor mulai menjahit di kreasi mereka dari kode memeriksa keberadaan SI dalam sistem dan, jika ditemukan, tidak memberikan pekerjaan program di semua (mereka pikir ini akan membantu - yang naif)!. Oleh karena itu, Anda mungkin perlu beberapa program yang menyembunyikan debugger dari mencongkel mata. Saya menyarankan Anda untuk mengunjungi www.dore.ru, atau lebih tepatnya www.dore.ru departemennya / files / debugger, yang menyajikan prog yang bermanfaat, yaitu dirinya SI di bawah WIN 95/98 dan di bawah WIN NT, lotion, mencegah prog lain menentukan adanya SI dalam sistem, tambahan plug-in untuk itu, membuat bekerja dengan dia lebih menyenangkan dan nyaman. Jika Anda membutuhkan SoftICE untuk Win ME, Win 2000 atau Win XP, kemudian menulis ulang update yang sesuai dari produsen: www.numega.com / drivercentral / icecentral.asp. Di bawah setiap update ditulis sebagai untuk menginstalnya. Jadi, jika Anda sudah memiliki SoftICE diinstal, Anda dapat melewati bagian berikutnya, jika tidak, maka menerimanya dicatat.
Instalasi
setup adalah kompleks apa-apa, hanya setelah itu HARUS memodifikasi file winice.dat (itu harus di direktori tempat anda menginstal SI), yaitu, hapus tanda komentar itu beberapa baris:
; ***** Contoh simbol ekspor yang dapat dimasukkan untuk Windows 95 *****
; Ubah path ke drive yang sesuai dan direktori
EXP = c: \ windows \ system \ kernel32.dll - ini;
EXP = c: \ windows \ system \ user32.dll - garis yang diperlukan;
EXP = c: \ windows \ system \ gdi32.dll - komentar;
Hal ini diperlukan untuk melihat nama fungsi API Win (fungsi standar yang digunakan oleh program pada saat berjalan di bawah Win). Dan pada mereka kami akan menangkap program, tetapi lebih pada nanti.
Apa yang benar-benar dapat membuat SoftICE dan bagaimana mengaturnya?
Umumnya SoftICE terdiri dari beberapa jendela: register, data, kode dan perintah. Pada jendela kode yang Anda lihat teks program dalam bahasa assembly, dan di jendela perintah untuk mengetik perintah yang mengendalikan SI. Menavigasi antara jendela merasa nyaman dengan mouse, tetapi bisa dilakukan tanpa itu, walaupun sulit untuk memulai.
Dasar perintah (sangat penting)
BPX alamat / nama fungsi - untuk mengatur alamat atau panggilan untuk breakpoint (masih menyebutnya istirahat opintom).
Alamat BPM - set breakpoint pada alamat memori.
BL - daftar semua breakpoints terpasang (masing-masing memiliki nomor sendiri).
BD jumlah dari breakpoints - untuk membuat titik dengan angka yang sesuai tidak aktif.
BE jumlah breakpoints - tim, sebaliknya sebelumnya.
SM jumlah breakpoints - Menghapus sebuah breakpoint.
Bahkan, tim lain Anda dan saya tidak perlu. Jadi, dengan bantuan SI adalah mungkin untuk membekukan semua program kapan saja (misalnya, disebut fitur standar atau perintah dijalankan pada alamat tertentu). Bila Anda crack prog, Anda dapat membandingkan dengan ahli bedah, menyodok di sekitar manusia batiniah, komputer Anda - dari meja operasi, dan SI - dengan pisau bedah, gunting, dan anestesi.
Jika Anda ingin istirahat beberapa jenis program, tugas utama Anda adalah untuk mengetahui pada titik untuk memanggil SI (jika Anda memperpanjang analogi, dalam apa tempat untuk dipotong:) dan cari program di-pasien. Oleh karena itu, Anda dan saya harus memasang perangkap untuk menangkap mereka dalam program saat itu adalah salah satu membandingkan nomor serial Anda ke kanan, atau terlihat, apa tanggal hari ini (sehingga mengatakan: "Aha!" Sisa dari saya berakhir Daftar Facebook, dan aku tersinggung dan tidak. Aku akan bekerja ")!.
Perangkap. Dan dia benar-benar hacking
Jadi, kita harus memilih kapan harus mengambil kendali program. Cara termudah untuk memecahkan menekuk menggunakan fungsi Win API. (Ini adalah fitur standar yang memfasilitasi pemrograman bawah WIN Sebagai contoh, jika Anda ingin membuat sebuah jendela pada desktop, Anda cukup memanggil beberapa fungsi dengan parameter dan tidak menulis kode yang menciptakan jendela dari awal..) Artinya, Anda akan perlu menentukan untuk menantang setiap fungsi ini akan merespon SI. Algoritma tindakan Anda harus sebagai berikut:
1. Putuskan apa yang Anda akan menangkap program anda. Apa jenis fungsi API.
2. Set dalam tantangan kepada breakpoint (bpx nama fungsi).
3. Jalankan prog anda dan memprovokasi panggilan ke fungsi ini.
4. Menekan F11, pergi ke suatu tempat dalam program (di alamat itu), di mana hal itu menyebabkan.
5. Menetapkan breakpoint pada baris perintah pelaksanaan di alamat ini.
6. Sekali lagi memicu panggilan untuk fungsi ini.
7. Melihat register, Anda mempelajari data yang diperlukan (misalnya, nomor seri) atau alamat dari baris di mana hasil olahan dari fungsi panggilan (ini dapat setiap instruksi perakitan: cmp atau melompat).
8. Hiew berjalan atau sesuatu seperti itu, membuat perubahan yang diperlukan (cmp bisa diganti dengan perintah nop kosong, tetapi beberapa jenis perintah lompat bersyarat - alamat jmp tanpa syarat yang sama). Hal ini karena beberapa paragraf terakhir adalah bahwa pengetahuan assembler sangat diinginkan saat bekerja dengan SI.
Yang paling sering digunakan Win API fungsi:
MessageBoxIndirect - Bekerja dengan kotak pesan. Digunakan dalam aplikasi 16-bit.
MessageBox - Bekerja dengan kotak pesan. Digunakan dalam aplikasi 16-bit.
MessageBoxA - sama, tapi aplikasi 32-bit.
MessageBoxIndirectA - hal yang sama seperti MessageBoxIndirect, tapi aplikasi 32-bit.
GetWindowText - baris input biasa seperti Windows Edit. Digunakan dalam aplikasi 16-bit.
GetWindowTextA - sama, tapi aplikasi 32-bit. Byte string digunakan.
GetDlgItemText - kurang lebih sama dengan fungsi sebelumnya, perbedaan dalam detail. Digunakan dalam aplikasi 16-bit.
GetDlgItemTextA - sama, tapi aplikasi 32-bit. Byte string digunakan.
Perlu dicatat bahwa GetWindowTextA dan MessageBoxA sangat sering digunakan saat memeriksa nomor seri. Sebelum melanggar merekomendasikan melihat properti yang melanggar program dan menentukan kapasitas (klik pada label, klik kanan kotak dialog Properties muncul, ada di sudut kiri atas biasanya ditulis "16" atau "32 bit", ini adalah aplikasi bit).
Praktek
Saya suka teori kalian semua ditata. Sekarang praktek: contoh klasik. Mungkin contoh adalah agak sulit, tetapi bahkan jika Anda akan ingat setidaknya sebagian kecil, dapat merasa seperti ahli bedah, seorang pembunuh berantai mencari semua korban baru. Jadi prog-hubungan pasien disebut TaskLock. Kami akan menangkap GetWindowTextA (perintah ": getwindowtexta bpx"). Anda dapat memeriksa, apakah perintah breakpoint ": bl". Sebagai hasilnya, Anda akan melihat sesuatu seperti: "00) BPX USER32 GetWindowTextA C = 01!". Berikutnya PUSH F5. Lanjutkan. Coba masukkan beberapa nilai di jendela pendaftaran dan klik OK. Anda akan menerima pesan bodoh mengatakan bahwa kode tersebut salah. Jadi bukan GetWindowTextA fungsi. Mari kita coba GetDlgItemTextA. Menghapus breakpoint lama ": bc 0" (0 - adalah jumlah breakpoints dalam daftar breakpoint) dan menetapkan baru ": getdlgitemtexta bpx". Masukkan nomor lagi. Sekarang Anda berada dalam SoftICE, di awal fungsi GetDlgItemTextA. Untuk sampai di sana, di mana ia dipanggil, tekan F11. Sekarang anda berada di SGLSET.EXE modul. Sekarang Anda sudah bisa melarang reaksi ke fungsi panggil ": bd 0.
Baris pertama di jendela kode tampak seperti ini: "CALL [USER32 GetDlgItemTextA!]"
Untuk melihat garis di atasnya, aku tekan Ctrl + Up ("tangan up") sampai waktu tersebut hingga Anda melihat bagian bawah kode. Jika Anda tidak mengerti apa-apa dalam perakit, saya telah menambahkan komentar yang mungkin bisa membantu.
RET; Akhir fungsi
PUSH EBP; awal fungsi lain
MOV EBP, ESP; ...
SUB ESP, 0000009C; ...
PUSH ESI; ...
> LEA EAX, [EBP-34]; EAX =-EBP 34
PUSH EDI; ...
PINDAHKAN ESI, ECX; ...
PUSH 32; Max. panjang string
> PUSH EAX; Alamat buffer teks
PUSH 000003F4; Identifier
PUSH DWORD PTR [ESI +1 C]; dialog ID
CALL [USER32 GetDlgItemTextA!]; Dapatkan teks
perintah PUSH berarti nilai toko untuk penggunaan masa depan. Saya sudah menandai baris penting 'karakter'. Melihat kode ini, kita melihat bahwa alamat buffer teks yang tersimpan dalam daftar EAX, dan itulah EBP EAX-34h. Oleh karena itu berguna untuk melihat EBP-34h ": d ebp-34". Anda harus melihat teks yang Anda masukkan dalam kotak dialog. Sekarang Anda harus menemukan tempat di mana nomor Anda dibandingkan dengan nomor seri yang sebenarnya. Oleh karena itu, kami secara bertahap menelusuri program menggunakan F10 sampai sampai hits sesuatu di-EBP 34. Dalam waktu kurang dari beberapa detik, ketika anda menemukan kode berikut:
> LEA EAX, [EBP + FFFFFF64]; EAX = EBP-9C
LEA ECX, [EBP-34]; ECX =-EBP 34
PUSH EAX; Toko EAX
PUSH ECX; Toko ECX
> CALL 00403DD0; fungsi Panggilan
ADD ESP, 08; menghapus informasi yang tersimpan
TEST EAX, EAX; Cek nilai fungsi
JNZ 00402BC0, Jumps, jika tidak "nol"
Saya berpikir bahwa itu tampak seperti panggilan untuk membandingkan dua string. Fungsi ini bekerja seperti ini: input - dua baris di pintu keluar - 0 jika mereka sama, dan nilai lain, jika tidak sama. Dan apa program untuk membandingkan beberapa jenis sesuai dengan yang Anda masukkan di kotak dialog? Ya, dan kemudian untuk memeriksa akurasinya. Oleh karena itu, nomor ini bersembunyi di [EBP + FFFFFF64]. SoftICE tidak cukup bekerja dengan benar dengan angka negatif, sehingga alamat yang sebenarnya harus menghitung: 100000000 - FFFFFF64 = 9C.
Anda dapat melakukan perhitungan ini langsung dalam SoftICE: "0-FFFFFF64?". Nomor 100000000 terlalu besar untuk SoftICE, dan pengurangan 0 memberikan hasil yang sama. Akhirnya sudah waktunya untuk melihat apa yang terletak di EBP-9C (perintah ": d ebp-9c"). Pada jendela data SoftICE Anda akan melihat garis panjang nomor - nomor seri! Tapi program memiliki dua jenis registrasi, oleh karena itu, dua nomor seri yang berbeda. Oleh karena itu, setelah Anda dicatat pada nomor seri bumazhechku pertama, pergi untuk melacak program menggunakan F10. Kami tiba di potongan kode berikut:
> LEA EAX, [EBP-68]; EAX =-EBP 68
LEA ECX, [EBP-34]; ECX =-EBP 34
PUSH EAX; Toko EAX
PUSH ECX; Toko ECX
> 00403DD0 CALL; lagi panggilan
ADD ESP, 08; menghapus informasi yang tersimpan
TEST EAX, EAX; Cek nilai fungsi
JNZ 00402BFF, Jumps, jika tidak "nol"
Dan apa yang anda lihat di EBP-68? Nomor seri kedua! Itu semua ...
SoftICE adalah debugger paling kuat sampai saat ini (yaitu, prog, yang dapat membongkar bata demi bata setiap prog lainnya dan setiap batu bata dari perubahan seperti yang Anda inginkan). Ini berarti bahwa dapat digunakan untuk mengeksplorasi segalanya: dari kernel Windows ke program di C + +. Organisasi ini dibentuk untuk debugging aplikasi 32-bit, driver untuk Win NT dan Win 95/98 dan program-program lain di bawah Win dan Dos (jadi setidaknya mengatakan pengembangnya;). Tetapi orang-orang dari seluruh dunia telah menemukannya aplikasi tambahan:)) Untuk apa yang merupakan setiap Trial-program? Tidak lebih dan tidak kurang dari 32-bit WIN aplikasi. Dan debug nya? Itu benar - penghapusan perlindungan: baik ujian waktu, atau periksa Key-file, atau apa pun.
Karena kenyataan bahwa banyak program telah dibajak oleh SI, vendor mulai menjahit di kreasi mereka dari kode memeriksa keberadaan SI dalam sistem dan, jika ditemukan, tidak memberikan pekerjaan program di semua (mereka pikir ini akan membantu - yang naif)!. Oleh karena itu, Anda mungkin perlu beberapa program yang menyembunyikan debugger dari mencongkel mata. Saya menyarankan Anda untuk mengunjungi www.dore.ru, atau lebih tepatnya www.dore.ru departemennya / files / debugger, yang menyajikan prog yang bermanfaat, yaitu dirinya SI di bawah WIN 95/98 dan di bawah WIN NT, lotion, mencegah prog lain menentukan adanya SI dalam sistem, tambahan plug-in untuk itu, membuat bekerja dengan dia lebih menyenangkan dan nyaman. Jika Anda membutuhkan SoftICE untuk Win ME, Win 2000 atau Win XP, kemudian menulis ulang update yang sesuai dari produsen: www.numega.com / drivercentral / icecentral.asp. Di bawah setiap update ditulis sebagai untuk menginstalnya. Jadi, jika Anda sudah memiliki SoftICE diinstal, Anda dapat melewati bagian berikutnya, jika tidak, maka menerimanya dicatat.
Instalasi
setup adalah kompleks apa-apa, hanya setelah itu HARUS memodifikasi file winice.dat (itu harus di direktori tempat anda menginstal SI), yaitu, hapus tanda komentar itu beberapa baris:
; ***** Contoh simbol ekspor yang dapat dimasukkan untuk Windows 95 *****
; Ubah path ke drive yang sesuai dan direktori
EXP = c: \ windows \ system \ kernel32.dll - ini;
EXP = c: \ windows \ system \ user32.dll - garis yang diperlukan;
EXP = c: \ windows \ system \ gdi32.dll - komentar;
Hal ini diperlukan untuk melihat nama fungsi API Win (fungsi standar yang digunakan oleh program pada saat berjalan di bawah Win). Dan pada mereka kami akan menangkap program, tetapi lebih pada nanti.
Apa yang benar-benar dapat membuat SoftICE dan bagaimana mengaturnya?
Umumnya SoftICE terdiri dari beberapa jendela: register, data, kode dan perintah. Pada jendela kode yang Anda lihat teks program dalam bahasa assembly, dan di jendela perintah untuk mengetik perintah yang mengendalikan SI. Menavigasi antara jendela merasa nyaman dengan mouse, tetapi bisa dilakukan tanpa itu, walaupun sulit untuk memulai.
Dasar perintah (sangat penting)
BPX alamat / nama fungsi - untuk mengatur alamat atau panggilan untuk breakpoint (masih menyebutnya istirahat opintom).
Alamat BPM - set breakpoint pada alamat memori.
BL - daftar semua breakpoints terpasang (masing-masing memiliki nomor sendiri).
BD jumlah dari breakpoints - untuk membuat titik dengan angka yang sesuai tidak aktif.
BE jumlah breakpoints - tim, sebaliknya sebelumnya.
SM jumlah breakpoints - Menghapus sebuah breakpoint.
Bahkan, tim lain Anda dan saya tidak perlu. Jadi, dengan bantuan SI adalah mungkin untuk membekukan semua program kapan saja (misalnya, disebut fitur standar atau perintah dijalankan pada alamat tertentu). Bila Anda crack prog, Anda dapat membandingkan dengan ahli bedah, menyodok di sekitar manusia batiniah, komputer Anda - dari meja operasi, dan SI - dengan pisau bedah, gunting, dan anestesi.
Jika Anda ingin istirahat beberapa jenis program, tugas utama Anda adalah untuk mengetahui pada titik untuk memanggil SI (jika Anda memperpanjang analogi, dalam apa tempat untuk dipotong:) dan cari program di-pasien. Oleh karena itu, Anda dan saya harus memasang perangkap untuk menangkap mereka dalam program saat itu adalah salah satu membandingkan nomor serial Anda ke kanan, atau terlihat, apa tanggal hari ini (sehingga mengatakan: "Aha!" Sisa dari saya berakhir Daftar Facebook, dan aku tersinggung dan tidak. Aku akan bekerja ")!.
Perangkap. Dan dia benar-benar hacking
Jadi, kita harus memilih kapan harus mengambil kendali program. Cara termudah untuk memecahkan menekuk menggunakan fungsi Win API. (Ini adalah fitur standar yang memfasilitasi pemrograman bawah WIN Sebagai contoh, jika Anda ingin membuat sebuah jendela pada desktop, Anda cukup memanggil beberapa fungsi dengan parameter dan tidak menulis kode yang menciptakan jendela dari awal..) Artinya, Anda akan perlu menentukan untuk menantang setiap fungsi ini akan merespon SI. Algoritma tindakan Anda harus sebagai berikut:
1. Putuskan apa yang Anda akan menangkap program anda. Apa jenis fungsi API.
2. Set dalam tantangan kepada breakpoint (bpx nama fungsi).
3. Jalankan prog anda dan memprovokasi panggilan ke fungsi ini.
4. Menekan F11, pergi ke suatu tempat dalam program (di alamat itu), di mana hal itu menyebabkan.
5. Menetapkan breakpoint pada baris perintah pelaksanaan di alamat ini.
6. Sekali lagi memicu panggilan untuk fungsi ini.
7. Melihat register, Anda mempelajari data yang diperlukan (misalnya, nomor seri) atau alamat dari baris di mana hasil olahan dari fungsi panggilan (ini dapat setiap instruksi perakitan: cmp atau melompat).
8. Hiew berjalan atau sesuatu seperti itu, membuat perubahan yang diperlukan (cmp bisa diganti dengan perintah nop kosong, tetapi beberapa jenis perintah lompat bersyarat - alamat jmp tanpa syarat yang sama). Hal ini karena beberapa paragraf terakhir adalah bahwa pengetahuan assembler sangat diinginkan saat bekerja dengan SI.
Yang paling sering digunakan Win API fungsi:
MessageBoxIndirect - Bekerja dengan kotak pesan. Digunakan dalam aplikasi 16-bit.
MessageBox - Bekerja dengan kotak pesan. Digunakan dalam aplikasi 16-bit.
MessageBoxA - sama, tapi aplikasi 32-bit.
MessageBoxIndirectA - hal yang sama seperti MessageBoxIndirect, tapi aplikasi 32-bit.
GetWindowText - baris input biasa seperti Windows Edit. Digunakan dalam aplikasi 16-bit.
GetWindowTextA - sama, tapi aplikasi 32-bit. Byte string digunakan.
GetDlgItemText - kurang lebih sama dengan fungsi sebelumnya, perbedaan dalam detail. Digunakan dalam aplikasi 16-bit.
GetDlgItemTextA - sama, tapi aplikasi 32-bit. Byte string digunakan.
Perlu dicatat bahwa GetWindowTextA dan MessageBoxA sangat sering digunakan saat memeriksa nomor seri. Sebelum melanggar merekomendasikan melihat properti yang melanggar program dan menentukan kapasitas (klik pada label, klik kanan kotak dialog Properties muncul, ada di sudut kiri atas biasanya ditulis "16" atau "32 bit", ini adalah aplikasi bit).
Praktek
Saya suka teori kalian semua ditata. Sekarang praktek: contoh klasik. Mungkin contoh adalah agak sulit, tetapi bahkan jika Anda akan ingat setidaknya sebagian kecil, dapat merasa seperti ahli bedah, seorang pembunuh berantai mencari semua korban baru. Jadi prog-hubungan pasien disebut TaskLock. Kami akan menangkap GetWindowTextA (perintah ": getwindowtexta bpx"). Anda dapat memeriksa, apakah perintah breakpoint ": bl". Sebagai hasilnya, Anda akan melihat sesuatu seperti: "00) BPX USER32 GetWindowTextA C = 01!". Berikutnya PUSH F5. Lanjutkan. Coba masukkan beberapa nilai di jendela pendaftaran dan klik OK. Anda akan menerima pesan bodoh mengatakan bahwa kode tersebut salah. Jadi bukan GetWindowTextA fungsi. Mari kita coba GetDlgItemTextA. Menghapus breakpoint lama ": bc 0" (0 - adalah jumlah breakpoints dalam daftar breakpoint) dan menetapkan baru ": getdlgitemtexta bpx". Masukkan nomor lagi. Sekarang Anda berada dalam SoftICE, di awal fungsi GetDlgItemTextA. Untuk sampai di sana, di mana ia dipanggil, tekan F11. Sekarang anda berada di SGLSET.EXE modul. Sekarang Anda sudah bisa melarang reaksi ke fungsi panggil ": bd 0.
Baris pertama di jendela kode tampak seperti ini: "CALL [USER32 GetDlgItemTextA!]"
Untuk melihat garis di atasnya, aku tekan Ctrl + Up ("tangan up") sampai waktu tersebut hingga Anda melihat bagian bawah kode. Jika Anda tidak mengerti apa-apa dalam perakit, saya telah menambahkan komentar yang mungkin bisa membantu.
RET; Akhir fungsi
PUSH EBP; awal fungsi lain
MOV EBP, ESP; ...
SUB ESP, 0000009C; ...
PUSH ESI; ...
> LEA EAX, [EBP-34]; EAX =-EBP 34
PUSH EDI; ...
PINDAHKAN ESI, ECX; ...
PUSH 32; Max. panjang string
> PUSH EAX; Alamat buffer teks
PUSH 000003F4; Identifier
PUSH DWORD PTR [ESI +1 C]; dialog ID
CALL [USER32 GetDlgItemTextA!]; Dapatkan teks
perintah PUSH berarti nilai toko untuk penggunaan masa depan. Saya sudah menandai baris penting 'karakter'. Melihat kode ini, kita melihat bahwa alamat buffer teks yang tersimpan dalam daftar EAX, dan itulah EBP EAX-34h. Oleh karena itu berguna untuk melihat EBP-34h ": d ebp-34". Anda harus melihat teks yang Anda masukkan dalam kotak dialog. Sekarang Anda harus menemukan tempat di mana nomor Anda dibandingkan dengan nomor seri yang sebenarnya. Oleh karena itu, kami secara bertahap menelusuri program menggunakan F10 sampai sampai hits sesuatu di-EBP 34. Dalam waktu kurang dari beberapa detik, ketika anda menemukan kode berikut:
> LEA EAX, [EBP + FFFFFF64]; EAX = EBP-9C
LEA ECX, [EBP-34]; ECX =-EBP 34
PUSH EAX; Toko EAX
PUSH ECX; Toko ECX
> CALL 00403DD0; fungsi Panggilan
ADD ESP, 08; menghapus informasi yang tersimpan
TEST EAX, EAX; Cek nilai fungsi
JNZ 00402BC0, Jumps, jika tidak "nol"
Saya berpikir bahwa itu tampak seperti panggilan untuk membandingkan dua string. Fungsi ini bekerja seperti ini: input - dua baris di pintu keluar - 0 jika mereka sama, dan nilai lain, jika tidak sama. Dan apa program untuk membandingkan beberapa jenis sesuai dengan yang Anda masukkan di kotak dialog? Ya, dan kemudian untuk memeriksa akurasinya. Oleh karena itu, nomor ini bersembunyi di [EBP + FFFFFF64]. SoftICE tidak cukup bekerja dengan benar dengan angka negatif, sehingga alamat yang sebenarnya harus menghitung: 100000000 - FFFFFF64 = 9C.
Anda dapat melakukan perhitungan ini langsung dalam SoftICE: "0-FFFFFF64?". Nomor 100000000 terlalu besar untuk SoftICE, dan pengurangan 0 memberikan hasil yang sama. Akhirnya sudah waktunya untuk melihat apa yang terletak di EBP-9C (perintah ": d ebp-9c"). Pada jendela data SoftICE Anda akan melihat garis panjang nomor - nomor seri! Tapi program memiliki dua jenis registrasi, oleh karena itu, dua nomor seri yang berbeda. Oleh karena itu, setelah Anda dicatat pada nomor seri bumazhechku pertama, pergi untuk melacak program menggunakan F10. Kami tiba di potongan kode berikut:
> LEA EAX, [EBP-68]; EAX =-EBP 68
LEA ECX, [EBP-34]; ECX =-EBP 34
PUSH EAX; Toko EAX
PUSH ECX; Toko ECX
> 00403DD0 CALL; lagi panggilan
ADD ESP, 08; menghapus informasi yang tersimpan
TEST EAX, EAX; Cek nilai fungsi
JNZ 00402BFF, Jumps, jika tidak "nol"
Dan apa yang anda lihat di EBP-68? Nomor seri kedua! Itu semua ...