Applet Headline Factory 4.00

http://www.coffeecup.com

W32Dasm 8.93

oleh

CHuPaCaBRa

 

Pengenalan Program

Applet Headline Factory adalah program untuk pembuatan Java Applet.

Program ini memberi kesempatan pada User untuk memasukan Username dan Password melalui menu Help - Registration Information. Dengan Username dan Password tersebut, User dapat menggunakan semua fungsi dari Applet Headline Factory ini.

Sedikit berbeda dengan tutorial - tutorial-ku sebelumnya, untuk program ini, aku akan menggunakan W32Dasm 8.93 dan mengKraknya secara "Dead Listing"

Essay

Sebelum melakukan apa - apa, coba masukan Username dan Password pada tempat yang telah disediakan dan perhatikan apa reaksi program selanjutnya. Ternyata jika kita memasukan Usernama dan Password yang tidak tepat, program akan menampilkan sebuah MessageBox dengan tulisan "Incorrect username and password".

Sekarang, setelah mengetahui rekasi program di atas, dissasembly file Applet Headline Factory.Exe dengan menggunakan W32Dasm. Setelah selesai, jangan lupa untuk mensave hasilnya terlebih dahulu sebelum menggunakannya. Proses dissasembly tadi akan menghasilkan 2 buah file dengan ukuran total 13.8 MB.

Oke, kita lanjutkan.......masih ingat pesan yang muncul setelah kita melakukan kesalahan memasukan Usernama dan Password tadi ??? Buka window String Data References ( menu : Refs - String Data References ), sebuah window baru akan muncul dengan sederetan string - string yang ada pada program tersebut. Tugas kamu selanjutnya adalah mencari String "Incorrect username and password" tadi di antara deretan String - string tersebut.

"ImmGetContext"
"ImmGetConversionStatus"
"ImmIsIME"
"ImmNotifyIME"
"ImmReleaseContext"
"ImmSetCompositionFontA"
"ImmSetCompositionWindow"
"ImmSetConversionStatus"
"ImmSetOpenStatus"
"Incorrect username and password."
"InitCommonControlsEx"
"InitializeFlatSB"
"Internet Explorer "
"IsControl"
"j_j"
"jpeg"
"jpg"

Klik 2 kali pada string tersebut dan kamu akan "dibawa" menuju baris - baris perintah yang bertugas untuk menampilkan tulisan tersebut.

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0048E284(C), :0048E2AC(C)
|

* Possible StringData Ref from Code Obj ->"Incorrect username and password."
|
:0048E33A B83CE44800 	mov eax, 0048E43C
:0048E33F E84856FCFF 	call 0045398C

Perhatikan Offset yang aku beri warna merah, di atas. Maksud dari potongan program ini adalah, baris - baris perintah yang menampilkan string "Incorrect....." tersebut dijalankan setelah melalui 2 buah Unconditional Jump yang ada di Offset 0048E284 dan 0048E2AC. Kalo begitu, kita harus tahu kenapa perintah Unconditional Jump di kedua atau salah satu Offset tersebut "memutuskan" untuk menampilkan string itu.

Gunakan fungsi W32Dasm untuk melompat ke Offset tertentu dengan memilih menu Goto - Goto Code Location, masukan lokasi Offset yang menjadi tujuan kita, untuk pertama kali, aku memasukan Offset 0048E284.

* Possible StringData Ref from Code Obj ->"h9ea7"
|
:0048E278 BA68E34800 	mov edx, 0048E368	;EDX = "h9ea7"
:0048E27D E812ABF7FF 	call 00408D94
:0048E282 85C0 		test eax, eax
:0048E284 0F85B0000000 	jne 0048E33A

Terlihat bahwa, program akan menampilkan string MessageBox jika Test EAX dinyatakan gagal. Hasil dari EAX itu sendiri, berasal dari Rutin Call di atasnya. Sebagai newbie, aku langsung pengen masuk ke dalam Rutin Call tersebut, tetapi tunggu dulu......perhatikan StringData yang ada di atas Rutin Call tersebut....."h9ea7". StringData apa lagi ini ??? Aku langsung bisa menebak apa yang harus User inputkan, pasti "h9ea7". Tapi untuk lebih yakin, aku akan memeriksa isi Rutin Call yang ada di bawahnya :

* Referenced by a CALL at Addresses:
|:0048E27D , :0048E2A5 
|
:00408D94 57 		push edi
:00408D95 56 		push esi
:00408D96 89D7 		mov edi, edx	;EDI = EDX ( EDX = "h9ea7" )
:00408D98 89C6 		mov esi, eax	;ESI = EAX
:00408D9A B9FFFFFFFF 	mov ecx, FFFFFFFF
:00408D9F 31C0 		xor eax, eax
:00408DA1 F2 		repnz
:00408DA2 AE 		scasb
:00408DA3 F7D1 		not ecx
:00408DA5 89D7 		mov edi, edx	;EDI = EDX
:00408DA7 31D2 		xor edx, edx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408DCF(C)
|
:00408DA9 F3 		repz		
:00408DAA A6 		cmpsb		;Penting !!!
:00408DAB 7424 		je 00408DD1
:00408DAD 8A46FF 	mov al, byte ptr [esi-01]
:00408DB0 80F861 	cmp al, 61	;AL lebih kecil dari 61h ( = a ) ???
:00408DB3 7208 		jb 00408DBD
:00408DB5 80F87A 	cmp al, 7A	;AL lebih besar dari 7Ah ( = z ) ???
:00408DB8 7703 		ja 00408DBD
:00408DBA 80E820 	sub al, 20	;AL = AL - 20h

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00408DB3(C), :00408DB8(C)
|
:00408DBD 8A57FF 	mov dl, byte ptr [edi-01]
:00408DC0 80FA61 	cmp dl, 61	;DL lebih kecil dari 61h ( = a ) ???
:00408DC3 7208 		jb 00408DCD
:00408DC5 80FA7A 	cmp dl, 7A	;DL lebih besar dari 7Ah ( = z ) ???
:00408DC8 7703 		ja 00408DCD
:00408DCA 80EA20 	sub dl, 20	;DL = DL - 20h

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00408DC3(C), :00408DC8(C)
|
:00408DCD 29D0 		sub eax, edx	;EAX = EAX - EDX
:00408DCF 74D8 		je 00408DA9	;Jika EAX = 0, lompat ke 00408DA9

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408DAB(C)
|
:00408DD1 5E 		pop esi
:00408DD2 5F 		pop edi
:00408DD3 C3 		ret

Perhatikan baris yang aku beri tanda "Penting !!!", perintah CMPSB itulah yang memberi petunjuk penting. Perintah CMPSB adalah perintah untuk membandingkan 2 buah string, byte-per-byte. String mana yang dibandingkan ??? String yang dibandingkan pada perintah CMPSB ini adalah string yang tersimpan di dalam Register EDI dan ESI.

Seperti yang telah kita ketahui sebelumnya, EDX menyimpan string "h9ea7" ( liat Offset 0048E278 ). Pada Offset 00408D96, Register EDI diisi dengan string yang terdapat pada register EDX, ini berarti EDI sekarang menampung "h9ea7". Lalu apa yang ada di ESI ??? ESI menyimpan nilai yang sama dengan yang ada di EAX, karena aku sekarang menggunakan W32Dasm, aku tak bisa tau pasti apa yang ada di dalam ESI ato EAX tapi secara logika, tentunya ESI dan EAX menyimpan salah satu String ( nama ato password ) yang kita masukan dan dengan sedikit "meraba-raba", aku kira yang ada di dalam ESI adalah Username yang diinputkan oleh User.

Pada saat perintah CMPSB dijalankan, kedua string yang ada di dalam EDI dan ESI akan dibandingkan, jika keduanya sama, maka username tersebut langsung dianggap valid. Tapi bagaimana dengan password-nya ???

Setelah kembali ke Rutin Call pemanggilnya, kamu bisa meliat perintah - perintah selanjutnya :

:0048E28A 8D55FC 	lea edx, dword ptr [ebp-04]
:0048E28D 8B8318030000 	mov eax, dword ptr [ebx+00000318]
:0048E293 E89034FAFF 	call 00431728
:0048E298 8B45FC 	mov eax, dword ptr [ebp-04]
:0048E29B E8D05CF7FF 	call 00403F70

* Possible StringData Ref from Code Obj ->"to78r"
|
:0048E2A0 BA70E34800 	mov edx, 0048E370
:0048E2A5 E8EAAAF7FF 	call 00408D94
:0048E2AA 85C0 		test eax, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048E245(C)
|
:0048E2AC 0F8588000000 	jne 0048E33A

Pada Offset 0048E2A0  terdapat StringData lain, sekarang adalah "to78r". Rutin Call di bawahnya adalah Rutin Call yang sama dengan yang telah kita liat tadi, karena itu aku ngak perlu lagi meneliti lebih dalam ke Rutin Call tersebut. Aku langsung bisa menduga bahwa Password yang harus kita masukan adalah "to78r".

K R A K

Username : h9ea7
Password : to78r

Catatan

Ini adalah sistem proteksi yang sangat lemah, dengan mudah kita bisa mengKrak-nya. Sistem Proteksi seperti ini disebut Hardcoded yaitu sebuah Sistem Proteksi yang hanya memakai satu s/n atau kode tertentu yang dimasukan ke dalam programnya, untuk digunakan oleh semua user.

chupacabra@softhome.net

© Juni1999