FileSplit 2.1

http://www.partridgesoft.com

Softice 3.24
Turbo Pascal 7.0

oleh

BlackZ

 

Pengenalan Program

Ini yang saya kutip dari menu helpnya :

FileSplit™ is a utility to split large files into smaller files so that they can be easily copied to floppy disks or transferred via e-mail. Files can be splitting directly from Windows Explorer by right clicking on any file and selecting Split File.

Features:

· Easy to use interface and fast 32-bit file splitting.
· Batch file generation for users who don’t own FileSplit™.
· Preserves all file information including file time, date, and attributes.
· Calculates CRC signature to detect file corruption when merging files.
· Can split multiple files in one operation.
· Files split with FileSplit™ are compatible with Splitty™ and MasterSplitter™

Tutorial ini melakukan pencarian S/N yang tepat sesuai dengan nama yang dimasukkan di dalam kotak registrasi. Software ini merupakan program yang berfungsi penuh. Jika kita meregristasikan program ini dengan serial yang benar maka nama kita akan muncul di dalam kotak dialog 'About'.

Essay

Jalankan program FileSplit 2.1 lalu klik menu 'About' lalu pilih menu 'Enter Registration Code' dan kamu 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 getdlgitemtexta'. Keluar lagi dari softice (Ctrl-D) dan klik tombol OK dan kita akan masuk lagi ke layar softice. Tekan F12 sebanyak 2 kali dan anda akan sampai ke rutin seperti ini :

:00404F05	CALL 	ESI
:00404F07	LEA	EAX, [ESP+14]
:00404F0B	LEA	ECX, [ESP+18]
:00404F0F	PUSH	EAX
:00404F10	LEA	EDX, [ESP+20]
:00404F14	PUSH	ECX
:00404F15	PUSH	EDX
:00404F16	LEA	EAX, [ESP+00000130]		;serial kita
:00404F1D	PUSH	00417AE4
:00404F22	PUSH	EAX
:00404F23	CALL	00409C80			;rutin memeriksa jumlah serial kita
:00404F28	ADD	ESP, 14
:00404F2B	CMP	EAX, 03				;apakah serial kita ada 3 ?
:00404F2E	JZ	00404F34			;lompat kalau ya dan serial kita di proses
:00404F30	XOR	EAX, EAX
:00404F32	JMP	00404F91
:00404F34	MOV	ECX, [ESP+1C]			;ecx = serial ke-1 dalam hexa
:00404F38	XOR	EDI, EDI			;nol-kan edi
:00404F3A	XOR	EDX, EDX			;nol-kan edx
:00404F3C	LEA	EAX, [ECX+00000FAC]		;eax = serial ke-1 + FACh
:00404F42	MOV	CL, [ESP+24]			;[esp+24] = nama kita
:00404F46	TEST	CL, CL				;apakah karakter nama sudah habis ?
:00404F48	JZ	00404F7B			;lompat jika ya.
:00404F4A	MOV	ESI, [ESP+18]			;serial ke-2
:00404F4E	MOV	EBP, EAX			;ebp = eax... rumus dimulai di sini
:00404F50	AND	EBP, 00004000
:00404F56	CMP	BP, 4000
:00404F5B	JZ	00404F61
:00404F5D	ADD	EAX, EAX
:00404F5F	JMP	00404F6A
:00404F61	AND	EAX, 00003FFF
:00404F66	SHL	EAX, 1
:00404F68	OR	AL, 1
:00404F6A	MOVSX	CX, CL
:00404F6E	XOR	EAX, ESI
:00404F70	XOR 	EAX, ECX			;rumus berakhir di sini
:00404F72	MOV	CL, [EDX+ESP+25]		;cl = kode ascii karakter nama kita
:00404F76	INC 	EDX				;edx di tambah 1
:00404F77	TEST	CL, CL				;apakah karakter nama sudah selesai
:00404F79	JNZ	00404F4E			;lompat jika masih ada
:00404F7B	MOV	ECX, [ESP+14]			;serial ke-3 kita
:00404F7F	MOVSX	EAX, AX				;serial ke-3 asli
:00404F82	CMP	EAX, ECX			;bandingkan serial ke-3 kita dengan yg asli
:00404F84	JNZ	00404F8F			;lompat jika salah

Hmmm... kalo kamu bisa membaca rutin-rutin ini dapat disimpulkan bahwa serial ke-1 dan ke-2 bisa berisi apa saja sedangkan serial ke-3 merupakan hasil pengolahan nama, serial ke-1 dan ke-2. Nah kalau kamu mengisi nama dan serial number seperti yang saya contohkan di awal maka nilai dari eax pada offset 00404F2B adalah 1. Nah kalau kita masuk ke rutin yang memanggil call pada offset 00404F23 yaitu CALL 00409C80 maka kamu akan menemukan rutin yang mengecek bahwa serial number harus 3 buah yang dipisahkan dengan karakter '-'. mari kita masuk ke CALL 00409C80 dan kamu akan melihat rutin seperti ini :

:00409C7F 	CC	INT 3
:00409C80 	SUB	ESP, 20
:00409C83 	PUSH	EDI
:00409C84 	MOV	EDI, [ESP+28]
:00409C88 	OR	ECX, -01
:00409C8B 	XOR	EAX, EAX
:00409C8D 	MOV	[ESP+0C], EDI
:00409C91 	MOV	[ESP+04], EDI
:00409C95 	REPNZ	SCASB
:00409C97 	NOT 	ECX
:00409C99 	DEC	ECX
:00409C9A 	LEA	EAX, [ESP+30]
:00409C9E 	MOV	[ESP+08], ECX
:00409CA2 	MOV	ECX, [ESP+2C]			;coba kamu ketik d ecx
:00409CA6 	PUSH	EAX
:00409CA7 	LEA	EDX, [ESP+08]
:00409CAB 	PUSH	ECX
:00409CAC 	PUSH 	EDX
:00409CAD 	MOV	DWORD PTR [ESP+1C], 00000049
:00409CB5 	CALL	0040B840			;disini dicek apakah ada 3 serial ?
:00409CBA 	ADD	ESP, 0C
:00409CBD 	POP 	EDI
:00409CBE 	ADD	ESP, 20
:00409CC1 	RET

Nah coba kamu d ecx saat kamu sudah mentrace sampai ke offset 00409CA6. Kamu akan melihat seperti ini :

:00417AE4    25 64 2D 25 64 2D 25 64-00 00 00 00 43 6F 64 65      %d-%d-%d....Code

Nah... kamu lihat ada string %d-%d-%d. Itu berarti ada tiga serial dengan format serial1-serial2-serial3 dan dipisahkan oleh karakter '-'. Karena itu saya keluar dari softice dan mengulang isian serial number saya seperti dibawah ini dan saya trace ulang program ini sampai saya berhasil mendapatkan rumus key generatornya :

	Name     			: BlackZ
	Registration Code		: 1234-12345-123456

Nah dibawah ini key generatornya dalam pascal. Seperti biasa kalau kamu bisa membuatnya dalam bahasa pemrograman yang lain, tolong donk kirim ke saya. Thanks.

K R A K

Program ini menggunakan 3 serial number yang dipisahkan dengan karakter '-', nah disini dua serial pertama bisa apa saja. Untuk keygen yang saya buat saya tetapkan serial pertama = 12345 dan serial kedua = 67890, jadi formatnya seperti ini 12345-67890-xxxxx. Nah dalam program ini serial pertama dan serial kedua dikalkulasi dengan kode ascii user name yang kita masukkan. Kemudian hasilnya adalah serial number kteiga. Untuk nama "BlackZ" serial yang saya dapatkan adalah 12345-67890-8119.

Uses Crt;


Var   nama                           : string[100];
      eax,ebx,ecx,edx,edi,esi,ebp    : longint;
      i,j,exa,al,al1,al3,al2,al4,bil : longint;
      serial1, serial2,serial3       : longint;
      hex                            : string;

Begin
     clrscr;
     writeln;writeln;writeln;writeln;
     writeln('                      Program perhitungan serial number');
     writeln('                           **** FileSplit 2.1 ****');
     writeln;writeln;writeln;
     write  ('                      Masukkan nama anda   : ');read(nama);
     edi := 0;
     edx := 0;
     serial1 := 12345;
     serial2 := 67890;
     eax := serial1;
     esi := serial2;
     eax := eax + $FAC;
     for i := 1 to length(nama) do
     begin
          ebp := eax;
          ebp := ebp and $4000;
          if ebp = $4000 then
          begin
               eax := eax and $3FFF;
               eax := eax shl 1;
               exa := eax;
               bil := eax div 16;
               al1 := eax mod 16;
               al2 := bil mod 16;
               al2 := al2 * 16;
               al  := al1 + al2;
               eax := exa - al;
               al  := al or 1;
               eax := eax + al;
          end
          else
          eax := eax + eax;
          eax := eax xor esi;
          eax := eax xor ord(nama[i]);
{dibawah ini rutin yang dalam assembly sama dengan mov eax,ax}
          al1 := eax mod 16;
          eax := eax div 16;
          al2 := eax mod 16;
          eax := eax div 16;
          al3 := eax mod 16;
          eax := eax div 16;
          al4 := eax mod 16;
          eax := al1 + (al2*16) + (al3*256) + (al4*256*16);
{eax pada rutin terakhir merupakan hasil dari instruski mov eax,ax}
     end;
     write('                      Kode Registrasi Anda : ',serial1,'-',serial2,'-',eax);
     writeln;writeln;writeln;
     write('                      *** BlackZ@Copyright-Juli 1999 ***');
     readkey;
End.

Catatan

Nggak susah kan ?

BlackZ

© Juli1999