Scrollworks Cascader 1.02 |
Softice 3.24 |
oleh
BlackZ
Pengenalan Program |
Ini yang saya kutip dari helpnya program ini :
"Cascader allows you
to add cascading system menus to your Start Menu."
Program ini dapat memodifikasi Start Menu, misalnya
menambah menu Control Panel.
Tutorial ini melakukan pencarian S/N yang tepat sesuai dengan nama yang dimasukkan di dalam kotak registrasi. Software ini merupakan shareware 30 hari. Metode perhitungan serial number-nya lumayan mengecoh kalau tidak teliti, hasil perhitungan dalam heksadesimal merupakan serial numbernya.
Essay |
Jalankan program Cascader 1.02
dan klik tombol Regiser maka kamu akan di minta mengisi nama dan
kode registrasi. Coba tulis dulu dengan :
User Name : BlackZ
Registration Code : 123456
Sekarang kita jalankan softice (Ctrl-D) lalu ketik semua
breakpoint yang memungkinkan. Keluar lagi dari softice (Ctrl-D)
dan klik tombol OK dan kita akan masuk lagi ke layar softice. Dan
ternyata program menggunakan 'getwindowtexta'. Pertama-tama saya
tekan F12 sampai keluar dari layar softice (sebanyak 7 kali) lalu
saya ulangi lagi (tekan F12 dikurangi satu) sebanyak 6 kali dan
kamu akan mendapatkanrutin seperti ini :
:00402AA5 CALL 0041273D :00402AAA MOV EAX, [ESI+0000009C] :00402AB0 MOV ECX, [ESI+00000098] :00402AB6 PUSH EAX :00402AB7 PUSH ECX :00402AB8 PUSH 04 :00402ABA CALL 00402560 ;rutin yg menggenerate serial :00402ABF ADD ESP,0C :00402AC2 TEST EAX,EAX ;kalau serial benar maka eax tidak nol :00402AC4 JZ 00402B69 ;lompat kalau salah :00402ACA PUSH EBX
nah kemudian kita coba masuk ke rutin CALL 00402560 maka kamu akan mendapatkan rutin yang panjang ini :
:00402560 MOV EDX,[ESP+0C] ;user name kita :00402564 SUB ESP,0C :00402567 MOVSX EAX,WORD PTR [ESP+10] :0040256C MOV CL,EDX ;karakter user name ke cl :0040256E PUSH EBX :0040256F TEST CL,CL :00402571 PUSH ESI :00402572 JZ 00402C58 :00402574 PUSH EDI :00402575 MOV EDI,EDX :00402577 CMP CL,61 ;bandingkan dengan huruf 'a' :0040257A JL 00402584 ;lompat jika bukan huruf kecil :0040257C CMP CL,7A ;bandingkan dengan huruf 'z' :0040257F JG 00402584 ;lompat jika bukan huruf kecil :00402581 ADD CL,E0 ;jadikan huruf besar :00402584 CMP CL,41 ;bandingkan dengan 'A' :00402587 JL 0040258E ;lompat jika bukan huruf :00402589 CMP CL,5A ;bandingkan dengan 'Z' :0040258C JLE 00402598 ;lompat jika huruf besar :0040258E CMP CL,30 ;bandingkan dengan angka '1' :00402591 JL 004025BF ;lompat jika bukan huruf dan angka :00402593 CMP CL,39 ;bandingkan dengan angka '9' :00402596 JG 004025BF ;lompat jika bukan huruf dan angka :00402598 MOV ESI,00000008 ;loop sebanyak 8 kali :0040259D MOV EDX,EAX ;rumus dimulai di sini :0040259F MOV EBX,EAX :004025A1 SHR EDX,1C :004025A4 AND EDX,04 :004025A7 AND EBX,04 :004025AA XOR EDX,EBX :004025AC MOV BL,CL :004025AE SHR EDX,02 :004025B1 AND EBX,01 :004025B4 ADD EAX,EAX :004025B6 XOR EDX,EBX :004025B8 OR EAX,EDX :004025BA SAR CL,1 :004025BC DEC ESI ;kurangi nilai looping :004025BD JNZ 0040259D ;lompat jika esi = 0 (looping selesai) :004025BF MOV CL,[EDI+01] ;ke karakter selanjutnya :004025C2 INC EDI ;naikkan EDI :004025C3 TEST CL,CL ;apakah semua karakter nama habis ? :004025C5 JNZ 00402577 ;ulangi proses u/ karakter selanjutnya :004025C7 POP EDI :004025C8 AND EAX,3FFFFFFF :004025CD LEA ECX,[ESP+08] :004025D1 OR EAX,40000000 ;perhitungan selesai :004025D6 PUSH EAX ;serial asli (=EAX) dalam hexa :004025D7 PUSH 0041E17C :004025DC PUSH ECX :004025DD CALL [USER32!wsprintfA] ;rutin mengkonversi nilai eax ke string :004025E3 MOV ECX,[ESP+28] :004025EA ADD ESP,0C :004025EC XOR EAX,EAX :004025EF CMP BYTE PTR [ECX],20 ;apakah ada spasi ? :004025F1 MOV DL,[ECX+EAX+01] ;karakter selanjutnya ke DL :004025F5 INC EAX :004025F6 CMP DL,20 ;apakah spasi lagi ? :004025F9 JZ 004025F1 :004025FB XOR ESI,ESI :004025FD MOV DL,[ECX+EAX] ;serial palsu kita :00402600 MOV BL,[ESI+ESP+08] ;serial asli :00402604 INC EAX :00402605 CMP DL,BL ;serial palsu dibandingkan dgn yg asli :00402607 JNZ 00402631 ;keluar jika tidak sama :00402609 INC ESI ;bandingkan serial selanjutnya :0040260A CMP ESI,0A ;apakah sudah 10 kali ? :0040260D JL 004025FD ;teruskan sampai 10 angka...
Nah ternyata program ini akan selalu menghasilkan 10 angka sebagai serial numbernya. Proses di atas menghitung kode ascii dari user name satu persatu dimana satu karakter nama diproses sebanyak 8 kali (lihat offset 00402598). Disini kita bisa mengisi user name dengan karakter apa saja... tetapi karakter yg akan diproses adalah hanya angka dan huruf, di mana huruf kecil akan dijadikan huruf besar terlebih dahulu. Sebagai contoh : user name BlackZ akan memliki serial number yang sama dengan B-l*a%c+kZ!.
Nah dibawah ini key generatornya dalam pascal. Kalau kamu bisa membuatnya dalam bahasa pemrograman yang lain, tolong donk kirim ke saya. Thanks.
K R A K |
Keygenerator serial number menghasilkan 10 angka. Untuk nama "BlackZ" serial yang saya dapatkan adalah 1355893073.
Uses Crt;
Var nama : string[100];
eax,ebx,ecx,edx : longint;
i,j,bl,cl : integer;
Begin
clrscr;
writeln;writeln;writeln;writeln;
writeln(' Program perhitungan serial number');
writeln(' **** Scrollwork Cascader 1.02 ****');
writeln;writeln;writeln;
write (' Masukkan nama anda : ');read(nama);
eax := 4; {konstanta}
for i := 1 to length(nama) do nama[i] := upcase(nama[i]); {dijadikan huruf besar}
for i := 1 to length(nama) do
begin
if (ord(nama[i])>64) and (ord(nama[i])<91) or
(ord(nama[i])>64) and (ord(nama[i])<91) then
{dua baris diatas untuk memeriksa apakah nama yang dimasukkan huruf atau angka}
{kalau bukan huruf atau angka lewatkan atau lanjutkan keberikutnya, dalam arti}
{karakter yang dihitung adalah hanya huruf atau angka saja walau karakter lain}
{boleh diisikan ke string nama.}
begin
cl := ord(nama[i]);
for j := 1 to 8 do
begin
edx := eax; {mov edx,eax}
ebx := eax; {mov ebx,eax}
edx := edx shr 28; {shr edx,1C}
edx := edx and 4; {and edx,04}
ebx := ebx and 4; {and ebx,04}
edx := edx xor ebx; {xor edx,ebx}
ebx := cl; {mov ebx,cl == mov bl,cl}
edx := edx shr 2; {shr edx,02}
ebx := ebx and 1; {and ebx,1}
eax := eax + eax; {add eax,eax}
edx := edx xor ebx; {xor edx,ebx}
eax := eax or edx; {or eax,edx}
cl := cl shr 1; {shr cl,1 == sar cl,1}
end;
end;
end;
eax := eax and $3FFFFFFF; {and eax,3FFFFFFF}
eax := eax or $40000000; {or eax,40000000}
{di softice atau wdasm hasil eax dalam hexa, nah desimalnya adalah serialnya}
{jadi cuma sampai disini formula untuk menggenerate serialnya}
write(' Serial : ');
write(eax);
writeln;writeln;writeln;
write(' *** BlackZ@Copyright-Juli 1999 ***');
readkey;
End.
Catatan |
Salah satu cara saya setiap kali memulai cracking saya coba trial dengan menekan F12 sampai muncul pesan bahwa saya mengisi serial yang salah. Nah selanjutnya saya ulang sambil melihat rutin mana yang mencurigakan nah kebetulan untuk program ini saya langsung ketemu rutinnya dan dapet deh tuh deretan angka di register ESP, soalnya ada intruksi compare dengan serial palsu yang saya masukkan. Lalu saya catet angka itu dan mulai saya cari rutin pembentuk serial numbernya dengan pegangan serial asli yang sudah saya ketahui. Nah ternyata lumayan panjang... dan setelah di teliti saya salah. Rutinnya pendek! hasil serialnya yang masih dalam heksa di konversikan dulu ke desimal. Nah rutin konversi ini yang membuat saya salah sangka karena saya mengira rutin ini termasuk rutin keygenerator. Wah jangan sampai kena tipu lagi deh. Buang2 waktu.
© Juli1999