ScanDisk Manager ver 1.1

http://www.ics.uci.edu/~dmyers/software/

SoftICE 3.24

oleh

CHuPaCaBRa

 

Pengenalan Program

Sedikit penjelasan dari ScanDisk Manager 1.1 :

"This program will disable (with the option of re-enabling ) ScanDisk. Just remember, ScanDisk is a very useful program, it keeps your hard drive from developing bad blocks, etc. If you use this program please run Scandisk from within Windows every once and a while."

Essay

Pada Unregistered Version, User diharuskan untuk membaca dan menyetujui syarat - syarat penggunaan ScanDisk Manager sebagai sebuah Shareware. Pada "Nag Message" itu juga disediakan tempat untuk memasukan nama dan s/n. Seperti biasa aku memasukan :

		Name      : CHuPaCaBRa
		Reg. Code : 123454321

Sebelum menekan tombol Register, pastikan bahwa kamu sudah menyiapkan BreakPoint pada fungsi - fungsi API yang "mencurigakan" seperti GetWindowTextA, GetDlgItemTextA atau GetDlgItemInt. Ternyata, setelah menekan tombol Register, kita akan terlempar ke dalam SoftICE, tepatnya di dalam fungsi GetWindowTextA. Tekan F12 untuk keluar dari fungsi API tersebut.

:00401986 call esi
:00401988 mov eax, dword ptr [00409430]		;Kita ada di sini
:0040198D lea edx, dword ptr [esp+14]

Periksa apa isi EDX dengan menggunakan perintah D EDX

:d edx
017F:0063F1E8 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
017F:0063F1F8 00 00 00 00 43 48 75 50-61 43 61 42 52 61 00 00 ....CHuPaCaBRa..
017F:0063F208 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

EDX sendiri tidak berisi sesuatu yang menarik, tapi perhatikan pada baris bawahnya, di situ terdapat nama yang aku masukan. Agar kita mengetahui saat nama tersebut akan diproses, kita harus memasang BreakPoint di lokasi Memory tersebut. Karena itu, ketikan perintah D 017F:0063F1F8+4

:d 017F:0063F1F8+4
017F:0063F1FC 43 48 75 50 61 43 61 42-52 61 00 00 00 00 00 00 CHuPaCaBRa......

Pada lokasi inilah kita harus memasang BreakPoint ( BPM 017F:0063F1FC ).

:00401991 push 00000014
:00401993 push edx
:00401994 push 00000401
:00401999 push eax
:0040199A call ebp
:0040199C push eax
:0040199D call esi			;GetWindowTextA
:0040199F lea edi, dword ptr [esp+14]

Periksa isi EDI :

:d edi
017F:0063F1E8 31 32 33 34 35 34 33 32-31 00 00 00 00 00 00 00 123454321.......

Pasang BreakPoint di lokasi memory yang menyimpan s/n tersebut, BPM 017F:0063F1E8

:004019A3 or ecx, FFFFFFFF
:004019A6 xor eax, eax
:004019A8 repnz
:004019A9 scasb
:004019AA not ecx
:004019AC dec ecx
:004019AD cmp ecx, 00000003     	;Cek panjang s/n yang kita masukan
:004019B0 ja 004019D7
:004019D7 xor eax, eax
:004019D9 mov cl, byte ptr [esp+eax+14]
:004019DD mov byte ptr [esp+eax+10], cl
:004019E1 mov byte ptr [esp+eax+3C], cl
:004019E5 inc eax
:004019E6 cmp eax, 00000003
:004019E9 jl 004019D9

Perintah - perintah di atas ( 004019D7 - 004019E9 ) dimaksudkan untuk mengcopy 3 angka terdepan dari s/n yang kita masukan pada 2 lokasi ( [esp+eax+10] dan [esp+eax+3C] )

:004019EB lea edi, dword ptr [esp+28]		;EDI = 'CHuPaCaBRa'
:004019EF or ecx, FFFFFFFF
:004019F2 xor eax, eax
:004019F4 lea edx, dword ptr [esp+10]
:004019F8 repnz
:004019F9 scasb
:004019FA not ecx
:004019FC dec ecx
:004019FD push edx
:004019FE mov esi, ecx
:00401A00 add esi, 00000003
:00401A03 call 00401C80

Setelah keluar dari dalam Rutin Call di atas, EAX akan berisi 7B hexa atau sama dengan 123 decimal yang merupakan 3 angka pertama dari s/n yang aku masukan tadi.

:00401A08 add esp, 00000004
:00401A0B cmp esi, 00000003
:00401A0E jle 00401A2D
:00401A10 xor ecx, ecx				;ECX = 0

:00401A12 movsx edx, byte ptr [esp+ecx+2B]	;EDX = Dimulai dari Karakter ke 4
:00401A17 add edx, eax				;EDX = EDX + EAX (EAX = '123')
:00401A19 inc ecx				;ECX = ECX + 1
:00401A1A lea edx, dword ptr [esp+edx+53]

Apa yang akan dimasukan ke dalam EDX ??? Cek dengan mengetikan perintah D [ESP+EDX+53]

:d EDX+ESP+53
017F:0063F2F2 31 30 39 37 35 36 36 35-39 33 33 34 34 36 31 32  1097566593344612
017F:0063F302 38 34 37 35 36 34 38 32-33 33 37 38 36 37 38 33  8475648233786783
017F:0063F312 31 36 35 32 37 31 32 30-31 39 30 39 31 34 35 36  1652712019091456
017F:0063F322 34 38 35 36 36 39 32 33-34 36 30 33 34 38 36 31  4856692346034861
017F:0063F332 30 34 35 34 33 32 36 36-34 38 32 31 33 33 39 33  0454326648213393
017F:0063F342 36 30 37 32 36 30 32 34-39 31 34 31 32 37 33 37  6072602491412737
017F:0063F352 32 34 35 38 37 30 30 36-36 30 36 33 31 35 35 38  2458700660631558

Oops...apaan nich ??? :-) Kalo kamu menggunakan Data Window untuk melihat isi Memory, gunakan Alt + Up /  Down Arrow untuk melihat lokasi memory sebelum atau sesudahnya. Kamu bakalan melihat berbagai angka yang cukup membingungkan.....guna angka - angka ini akan aku jelaskan nanti, untuk sementara ini, perhatikan angka 1 yang aku beri warna berbeda di atas. Pada perintah berikutnya, angka itu akan sangat berguna.

:00401A1E mov dl, byte ptr [edx+ecx-01]		;DL = EDX + ECX - 01 = '1'
:00401A22 mov byte ptr [esp+ecx+3E], dl		;[ESP + ECX + 3E] = DL
:00401A26 lea edx, dword ptr [ecx+03]
:00401A29 cmp edx, esi				;Apakah EDX = ESI ???
:00401A2B jl 00401A12

Langkah - langkah di atas akan dilakukan sebanyak 10 kali.

:00401A2D lea esi, dword ptr [esp+14]		;ESI = s/n yang kita masukan
:00401A31 lea eax, dword ptr [esp+3C]		;EAX = s/n yang valid
:d esi
017F:0063F1E8 31 32 33 34 35 34 33 32-31 00 00 00 00 00 00 00  123454321.......
:d eax
017F:0063F210 31 32 33 31 37 30 36 33-35 32 35 38 32 00 00 00  1231706352582...

Aha...ternyata s/n yang tepat bagi aku adalah 1231706352582. Perintah - perintah di bawahnya ngak akan aku bahas karena berikutnya adalah perbandingan seperti biasa dan tentu aja akan menghasilkan pesan "Invalid Registration Code" :-)

K R A K

Program ini sebenarnya bisa dibuat KeyGenZ-nya tetapi teramat susah karena adanya daftar angka yang cukup panjang yan berhubungan dengan s/n yang akan dihasilkan ( Lihat catatan di bawah ) karena itu aku ngak akan repot - repot membuat KeyGenZ-nya tapi aku akan mencoba melakukan patching.

Pada saat berada di Offset 00401A2D, aku menggunakan perintah A untuk merubah kode Assembly pada Offset tersebut :

:a
0177:00401A2D LEA ESI, [ESP+3C]
0177:00401A31			<Tekan Enter>

Atau dengan menggunakan HexEditor :

Rubah kode 8D 74 24 14  menjadi 8D 74 24 3C

Dengan melakukan perubahan di atas, maka program akan membandingkan 2 buah s/n yang sama yaitu s/n yang valid dan karena kedua s/n tersebut sama maka s/n tersebut langsung "disetujui" :-)

Catatan

Kenapa tidak bisa menggunakan KeyGenZ ??? Sebenarnya kamu bisa membuat KeyGenZ untuk ini tetapi seperti yang sudah aku singgung di atas bahwa untuk membuat KeyGenZ ini, kamu akan mendapatkan cukup banyak kesulitan. Angka - angka yang tadi telah kamu lihat pada Offset 00401A1A adalah angka - angka yang akan menjadi angka dari s/n kita berdasarkan perhitungan sebelumnya. Angka - angka tersebut tidaklah sedikit  sehingga untuk membuat KeyGenZ-nya, akan dibutuhkan sebuah array yang sangat panjang atau sebuah file tersendiri yang berisi angka - angka itu.

chupacabra@softhome.net

© Juli1999