Advance Dialer 2.1

http://www.pysoft.com

Softice 3.24

oleh

BlackZ

 

Pengenalan Program

Advanced Dialer adalah salah satu alat dial-up networking yang mampu men-dial beberapa line telpon, otomatisasi koneksi internet, pencatatan pemakaian internet dan aplikasi lainnya. Dengan software ini koneksi internet akan lebih mudah dengan kemampuannya yang mampu mencatat jam pemakaian yang juga dapat di-lihat melalui grafik. Juga dilengkapi dengan kemampuan ping yang dapat mem-ping ISP anda sehingga mengurangi koneksi yang putus.

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 cukup mudah, dimana hasil perhitungan dalam heksadesimal merupakan serial numbernya.

Essay

Jalankan program Advance Dialer 2.1 dan klik ganda ikon program ini di tray menu lalu pilih menu Regiser - Register Key dan anda akan di minta mengisi nama dan kode registrasi. Coba tulis dulu dengan :

	Name     			: BlackZ
	Registration Code		: 123456

Sekarang kita jalankan softice (Ctrl-D) lalu ketik 'bpx hmemcpy'. Keluar lagi dari softice dan klik tombol OK dan kita akan masuk lagi ke layar softice. Tekan F12 sebanyak 12 kali dan anda akan mendapatkanrutin seperti ini :

:004B81F6	CALL 	004325F0
:004B81FB	MOV	EAX, [EBP-0214]			;nama kita
:004B8201	LEA	EDX, [EBP-0210]
:004B8207	CALL	0046C298			;masuk ke sini
:004B820C	MOV	EAX, [EBP-0210]			;serial asli

kamu bisa lagnsung melihat serial number asli hasil perhitungan nama yang kamu masukkan pada dialog box registrasi dengan menekan F10 terus sampai melewati alamat 004B820C lalu ketikan d eax maka kamu akan melihat serial asli pada isi register eax. Tapi kita kan mau membuat key generator, jadi kita lanjut saja. Nah kita masuk ke rutin CALL 0046C298 (F8) dan tekan F10 sebanyak 15 kali maka kamu akan melihat rutin seperti ini :

:0046C2C5	LEA	EAX, [EBP-08]
:0046C2C8	MOV	EDX, 0046C374			;berisi string "Adv Dialer v. 1.1."
:0046C2CD	CALL	00403E84			;hitung panjang string
:0046C2D2	MOV	EAX, [EBP-08]			;nama kita digabung dengan string di atas
:0046C2D5	CALL 	00403E7C			;hitung panjang string gabungan 
:0046C2DA	PUSH	EAX
:0046C2DB	LEA	EAX, [EBP-08]
:0046C2DE	CALL	0040404C			;masuk ke sini
:0046C2E3	POP	EDX
:0046C2E4	CALL	004522D8			;rutin mengenerate serial
:0046C2E9	MOV	[EBP-04], EAX			;nilai eax = serial asli yang belum tersusun
:0046C2EC	LEA	EAX, [EBP-10]
:0046C2EF	CALL	00403C00
:0046C2F4 	MOV	DWORD PTR [EBP-14], 00000001
:0046C2FB	LEA	EDX, [EBP-0118]
:0046C301	MOV	EAX, [EBP-14]
:0046C304	MOV	AL, [EAX+EBP-05]
:0046C308	CALL	00451D0C
:0046C30D	LEA	EDX, [EBP-0118]
:0046C313	LEA	EAX, [EBP-18]
:0046C316	CALL	00403E20
:0046C31B	LEA	EAX, [EBP-10]
:0046C31E	MOV	EDX, [EBP-18]
:0046C321	CALL	00403E84			;rutin penyusun serial asli
:0046C326	INC	DWORD PTR [EBP-14]
:0046C329	CMP	DWORD PTR [EBP-14], 05
:0046C32D	JNZ	0046C2FB
:0046C32F	MOV	EAX, [EBP-0C]

dari rutin diatas tampaknya kita harus masuk ke rutin CALL 004522D8 untuk mendapatkan rumusnya. Hasil yang akan didapat akan berupa angka-angka serial asli yang masih belum terusun. Okey kita masuk ke rutin itu dan kita akan menemukan rutin seperti dibawah ini, rutin ini merupakan rumus yang kita cari :

:004522D8 	PUSH	EBP
:004522D9 	MOV	EBP, ESP
:004522DB 	ADD	ESP, -1C
:004522DE 	MOV	[EBP-12], DX			;panjang string gabungan
:004522E2 	MOV	[EBP-10], EAX			;string gabungan
:004522E5 	MOV	DWORD PTR [EBP-02], 0000
:004522EB 	MOV	DWORD PTR [EBP-04], 0000
:004522F1 	MOVZX	EAX, WORD PTR [EBP-12]
:004522F5 	MOV	[EBP-18], EAX
:004522F8 	MOV	AX, [EBP-18]
:004522FC 	TEST	AX, AX
:004522FF 	JBE	00452355
:00452301 	MOV	[EBP-1A], AX
:00452305	MOV	WORD PTR [EBP-06], 0001
:0045230B 	MOVZX	EAX, WORD PTR [EBP-06]		;counter eax
:0045230F 	MOV	EDX, [EBP-10]			;string gabungan
:00452312 	MOV	AL, [EAX+EDX-01]
:00452316 	MOV	[EBP-7], AL
:00452319 	PUSH	AX
:0045231B 	PUSH	BX
:0045231D 	PUSH	CX
:0045231F 	PUSH	DX
:00452321 	MOV	DX, [EBP-02]			;dx = 0
:00452325 	MOV	BX, [EBP-04]			;bx = 0
:00452329 	MOV	CX, [EBP-06]			;cx = 1
:0045232D 	XOR	AX, AX				;ax = 0
:00452330 	MOV	AL, [EBP-07]			;proses per karakter
:00452333 	XOR	DX, AX				;dx = dx xor ax
:00452336 	MUL	CL				;ax = al * cl
:00452338 	ADD	BX, AL				;bx = bx + al
:0045233B 	MOV	[EBP-02], DX			;simpan dx
:00452343 	POP	DX
:00452345 	POP	CX
:00452347 	POP	BX
:00452349 	POP	AX
:0045234B 	INC	WORD PTR [EBP-06]		;naikkan counter
:0045234F 	DEC	WORD PTR [EBP-1A]
:00452353 	JNZ	0045230B			;ulangi proses u/ karakter selanjutnya
:00452355 	MOV	AX, [EBP-04]			;4 angka serial asli yg belum tersusun
:00452359 	MOV	[EBP-0C], AX
:0045235D 	MOV	AX, [EBP-02]			;4 lagi angka serial asli 
:00452361 	MOV	[EBP-0A], AX
:00452365 	MOV	EAX, [EBP-0C]			;gabungkan menjadi 8 angka
:00452368 	MOV	ESP, EBP
:0045236A 	POP	EBP
:0045236B 	RET

Nah gabungan 8 angka pada register EAX di alamat 00452365 merupakan angka-angka serial asli yang belum tersusun. Tapi kita tidak memerlukan rutin penyusunnya, alasannya kamu baca di 'catatan' di bagian bawah.

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 8 angka. Untuk nama "BlackZ" serial yang saya dapatkan adalah 47510100.

Uses Crt;

Const namatetap     = 'Adv Dialer v. 1.1.';

Var   nama          : string[100];
      serial        : array[0..8] of longint;
      ax,bx,cx,dx,i : longint;
      seri          : array[0..8] of string;
      l,m           : integer;

Procedure konv_des_ke_hexa(var j,k : integer);
begin
     for i := j downto k do
     begin
          serial[i] := serial[0] mod 16;
          if serial[i]= 10 then seri[i] := 'A' else
          if serial[i]= 11 then seri[i] := 'B' else
          if serial[i]= 12 then seri[i] := 'C' else
          if serial[i]= 13 then seri[i] := 'D' else
          if serial[i]= 14 then seri[i] := 'E' else
          if serial[i]= 15 then seri[i] := 'F' else
          str(serial[i],seri[i]);
          serial[0] := serial[0] div 16;
     end;
end;

Begin
     clrscr;
     writeln;writeln;writeln;writeln;
     writeln('                         Program perhitungan serial number');
     writeln('                            **** Advance Dialer 2.1 ****');
     writeln;writeln;writeln;
     write  ('                         Masukkan nama anda : ');read(nama);
     for i := 1 to length(nama) do nama[i] := upcase(nama[i]);
     nama := nama + namatetap;
     dx := 0;
     bx := 0;
     cx := 1;
     for i := 1 to length(nama) do
     begin
          ax := ord(nama[i]);
          dx := dx xor ax;
          ax := ax * cx;
          bx := bx + ax;
          inc (cx);
     end;
     serial[0] := bx;
     l := 8; m := 5;
     konv_des_ke_hexa(l,m);
     seri[1] := seri[7];
     seri[2] := seri[8];
     seri[3] := seri[5];
     seri[4] := seri[6];
     if (dx <= 9) then
     begin
          for i := 5 to 8 do seri[i] := '0';
          seri[6] := sisadx;
     end;
     if (dx<=255) and (dx>9) then
     begin
          for i := 5 to 8 do seri[i] := '0';
          serial[0] := dx;
          l := 6; m := 5;
          konv_des_ke_hexa(l,m);
     end;
     write('                         Serial             : ');
     for i := 1 to 8 do write(seri[i]);
     writeln;writeln;writeln;
     write('                        *** blackZ@copyright-Juni 1999 ***');
     readkey;
end.

Catatan

Nama yang kita masukkan akan digabungkan dengan string 'Adv Dialer v. 1.1.' tetapi nama kita dalam huruf kapital. Jadi kalau nama saya dimasukkan akan menjadi 'BLAKCZAdv Dialer v. 1.1.' Program ini memproses string gabungan tersebut dihasilkan 4 angka dalam hexadesimal (misalkan urutannya KLMN) digabung dengan 4 angka nilai dx dalam hexadesimal (misalkan urutannya OPQR) sebagai sisa xor dari dx dan ax. Jadi total serial number adalah 8 angka. Nah urutan serial number yang benar adalah MNKLQROP. Hal yang penting adalah bahwa nilai O dan P adalah nol. Why ?

BlackZ

© Juni1999