Tulisan Dasar Cracking
Selamat Datang................. Cracker..........
Tutorial Cracking :

AgileTP v1.1

Target  : AgileTP v1.1
Tool     : SoftIce v4.05, W32Dasm v8.93, Hex Workshop v4.10, BRW 4.5 /Symantec Resource Editor, Filemon v3.7

Program ini juga berjenis time trial, yakni waktu untuk mengevaluasi software yang terbatas, cuman 30 hari doank ... (Gua maunya seumur idup ... :)

Software ini juga memiliki serial number. Tapi IMHO programmernya tidak main main dengan ini, rutinnya sangat sulit ditemukan (inget bukan dipecahkan) tapi ditemukan !! Programmernya dengan cerdik menyembunyikan rutinnya dengan rapi.

Oh,ya satu lagi program ini juga "menandai" registry dengan suatu penanda, supaya ngak ada Luzer yang dengan hebatnya membalik tanggalan, supaya bisa mengevaluasi lebih lama. (Yeah it's jenius, let's clap our hand !!!) :

[HKEY_CLASSES_ROOT\.sjl] --->>> berisi dword bernama number, yang berisi jumlah hari pemakaian dalam hexa.

Oh,ya jangan lupa untuk sukses mengikuti tutorial ini setidaknya kamu butuh pengetahuan dasar di bidang cracking, butuh pengetahuan di API(Application Programming Interface), dan tidak lupa pengetahuan tentang registry di Win95/98.

  Jalankan AgileTP 1.1, pertama kali dijalankan kamu akan ketemu dengan nag screen. Yeah, ini salah satu fasilitas yang diupgrade dari versi 1.0 , versi 1.0 ngak ada nag screennya ...

Di Nag screen yang sama, juga ada jumlah hari sisa ..., dan tombol buat register. Seperti yang gua bilang programmernya cukup hebat menyembunyikan rutin serialnya. Sekarang kita akan gasak titik kelemahan software ini yang lain.

Hal pertama yang akan gua gasak adalah time limitnya ..., Oke, pertama gua bikin deadlist dulu. Terus majukan tanggalan computer elu 1 tahun kedepan misalnya. Cari pesan kesalahannya, AgileTP expired !!, di deadlist. Heyy ini juga ngak membawa kita kemana mana. Dengan kata lain teknik ini ngak bisa diterapkan. Kita coba cara lain. Pertama kamu kembalikan tanggal komputer ke normal. Jalankan Agile. Hmmm tetep expired, berarti dia menandai registry dengan sesuatu.

Q : Kenapa Registry ?

A : Betul, memang bisa yang lain misalnya dengan API writeprivateprofilestringa untuk menulis, katakanlah ke ini file. Tapi inget hal ini gampang banget ditrace, karena itu programmer lebih banyak memilih menyembunyikannya di registry.

Jalankan Regmon sebelum menjalankan agile. Sudah Ok ? Sekarang jalankan Agile, regmon akan mencatat registry apa saja yang diakses oleh Agile sebelum dia mengeluarkan pesan error !! , Ok analisa registrynya, kamu mustinya bisa tahu, kalau Agile mengakses key HKEY_CLASSES_ROOT\.sjl , Di Regmon muncul sebagai HKCR. Heyy, apaan yach ini perasaan gua belum pernah denger ??? Buka regedit, lalu pergi ke key tsb. Mustinya kamu akan menemukan key tersebut, berisi DWORD bernama Number, dan coba lihat nilainya ... : 0000001Eh !!! Hehehehe, gua mulai senyum senyum disini, 1E = 30 -->> kemungkinan besar adalah jumlah hari yang udah kepake. Oke, kita coba ganti 1E dengan 00, kita mau ngasih tahu bahwa kita baru make 1 hari doank. Jalankan Agile ... Shitt tetep aja expired (elu akan lihat kenapa hal ini bisa terjadi nanti) , lihat kembali di registry, hmmm nilai 00 tadi berubah lagi jadi 1E ..., menarik ..., sekarang kita ngak main main hapus key tsb !!! Yap, program jalan dengan mulus ... Sekarang kita yakin registry itu yang macem macem.

Petunjuk yang kita punya adalah :

1. Number

2. 1E

Nah, berarti di suatu bagian di program akan ada rutin semacam ini : Cmp xxx, 0000001E , lalu mungkin dibawahnya ada JB xxxx

Q : Bagaimana gua yakin jumlah harinya ngak diencrypt, plain 1E begitu ?

A : 3 alasan , pertama, kejadian di registry, gua jadi agak yakin dia ngak diencrypt. Kedua, protection seperti itu umum sekali dipake, karena programmer males buat ngencrypt tanggalan, ketiga yang bikin gua 100% yakin, gua udah ngecrack di versi 1.0 nya via BPX Getlocaltime, dan setelah gua trace dia membandingkannya dengan 1E ... :)

Cari text di deadlist, untuk ", 0000001E"

Kamu akan ketemu cukup banyak , sekitar 10 biji, tapi yang menarik (karena ada cmp, sementara yang lain cuman mov xxx, 0000001E , cuman beberapa) Dan dari beberapa itu yang palinggg menarik ada di sini :

:00414FA0 83FA1E CMP EDX,1E
:00414FA3 8955C8 MOV [EBP-38],EDX
:00414FA6 7608 JBE 00414FB0

Q : Kenapa ini yang paling menarik ?

A : Karena dia berada di dekat string NUMBER , masih inget ini apaan ?

Nah, pertama kita coba test pake SI, BPX di lokasi tersebut, dengan teknik di tutorial sebelumnya.

lihat nilai EDX, nah karena tadi baru diapus, maka edx bernilai 0, majukan kalender 1 hari, dia akan bernilai 1.

Berarti arti dari perintah diatas adalah : Apakah udah dipake selama 30 hari ? Jika belum nyampe silahkan lompat, jika lebih /sama dengan 30 hari lanjutkan !!!
:00414FA8 BA1E000000 MOV EDX,0000001E
:00414FAD 8955C8 MOV [EBP-38],EDX

Ooohh, jadi kalau lebih dari 30 hari, edx tetep akan diset 30 ...
:00414FB0 83F81E CMP EAX,1E
:00414FB3 7330 JAE 00414FE5

EAX, juga bernilai jumlah pemakaian hari, sama dengan edx. Tapi kalau kamu lihat rutin dibawah, maka eax tidak berpengaruh apa apa.
:00414FB5 8B45E0 MOV EAX,[EBP-20]
:00414FB8 8D55C8 LEA EDX,[EBP-38]
:00414FBB 6A04 PUSH 04
:00414FBD 52 PUSH EDX
:00414FBE 6A04 PUSH 04
:00414FC0 53 PUSH EBX
:00414FC1 68FCAB4700 PUSH 0047ABFC
:00414FC6 50 PUSH EAX
:00414FC7 FF159C594800 CALL [ADVAPI32!RegSetValueExA] -->> Set nilai DWORD Number dengan jumlah pemakaian hari !!!

Sekarang jelas khan kenapa kalau kita set Number dengan 0, maka akan balik lagi, karena dia juga mengecek tanggalan secara realtime (via Getlocaltime).


:00414FCD 8B55C8 MOV EDX,[EBP-38]
:00414FD0 B81E000000 MOV EAX,0000001E
:00414FD5 2BC2 SUB EAX,EDX
:00414FD7 33C9 XOR ECX,ECX
:00414FD9 3BC8 CMP ECX,EAX
:00414FDB 1BC9 SBB ECX,ECX
:00414FDD 23C8 AND ECX,EAX
:00414FDF 898F78040000 MOV [EDI+00000478],ECX
:00414FE5 83FA1E CMP EDX,1E
:00414FE8 720D JB 00414FF7

Bandingkan lagi EDX dengan 30 ? , ini adalah perbandingan yang sangat menentukan program akan berjalan jika OK, jika engga program akan menampilkan pesan expired ...
:00414FEA 8B571C MOV EDX,[EDI+1C]
:00414FED 53 PUSH EBX
:00414FEE 53 PUSH EBX
:00414FEF 682E1A0000 PUSH 00001A2E
:00414FF4 52 PUSH EDX
:00414FF5 EB0C JMP 00415003

  Nah, kamu mustinya udah tahu gimana cara ngecracknya, ada macam macam cara, misalnya dengan merubah JBE, menjadi JMP, tapi crack terbaik adalah :

Rubah :00414FA8 BA1E000000 MOV EDX,0000001E menjadi

:00414FA8 BA00000000 MOV EDX,00000000

Sekarang biarpun program lewat dari 30 hari, tetep akan diset ke 0 dan akan meletakkan nilai 0 diregistry, dan di :00414FE5 83FA1E CMP EDX,1E

Kita akan lewat dengan sukses ...

Oke, sekarang patch dengan hexeditor favorit, lihat offset 00414fa8, di wdasm, lihat di bawah akan ada offset sebenarnya untuk nilai tersebut.

Masalah #2

Masih inget dengan nagscreennya, kita ngak suka khan ? Kita akan memperbaiki ini juga ...

Pertama pasang BPX di APi untuk membuat Window, seperti messageboxa, dialogbox, dialogboxindirectparama. Hmmm, ngak ada yang berhasil !!! Cara kedua, cari string about agile di wdasm, dan lihat !!! Gilaaa, kita ketemu banyak sekali, mo dipatch dengan cara apaan nih ?

Gua terhenti satu hari dimasalah ini, sebelum dapet ide. Program setelah kita mencet OK, maka program akan menutup Nag Screenya !!!

Berarti program paling tidak akan memanggil API DestroyWindow !!! Iya khan ? Jalankan Agile, pas di nag, sebelum teken Continue, pasang BPX di DestroyWindow !!! Sekarang balik ke SI, teken OK. Binggo !!! Dapet boo, kita terlempar ke kernelnya windows, teken F12 untuk kembali kebadan program.

:00433D80 57 PUSH EDI
:00433D81 53 PUSH EBX
:00433D82 6A00 PUSH 00
:00433D84 E8D6F6FFFF CALL 0043345F
:00433D89 59 POP ECX
:00433D8A FF761C PUSH DWORD PTR [ESI+1C]
:00433D8D 8BC8 MOV ECX,EAX
:00433D8F E855E5FFFF CALL 004322E9
:00433D94 8B4E38 MOV ECX,[ESI+38]
:00433D97 8BF8 MOV EDI,EAX
:00433D99 85C9 TEST ECX,ECX
:00433D9B 750B JNZ 00433DA8
:00433D9D FF761C PUSH DWORD PTR [ESI+1C]
:00433DA0 FF15985E4800 CALL [USER32!DestroyWindow] -->> Tutup Window !!
:00433DA6 EB05 JMP 00433DAD -->> Kamu disini !!
:00433DA8 8B01 MOV EAX,[ECX]
:00433DAA FF5058 CALL [EAX+58]
:00433DAD 85FF TEST EDI,EDI
:00433DAF 8BD8 MOV EBX,EAX
:00433DB1 7507 JNZ 00433DBA
:00433DB3 8BCE MOV ECX,ESI
:00433DB5 E892F7FFFF CALL 0043354C
:00433DBA 8BC3 MOV EAX,EBX
:00433DBC 5B POP EBX
:00433DBD 5F POP EDI
:00433DBE 5E POP ESI
:00433DBF C3 RET

Sekarang kita udah tahu dia tutup windownya gimana, tapi kita juga butuh tahu, gimana caranya dia mengenerate windownya. teken F12 :

:00432D7E 8B75E8 MOV ESI,[EBP-18]
:00432D81 8B7DE0 MOV EDI,[EBP-20]
:00432D84 33DB XOR EBX,EBX
:00432D86 834DFCFF OR DWORD PTR [EBP-04],-01
:00432D8A 395DE4 CMP [EBP-1C],EBX
:00432D8D 7409 JZ 00432D98
:00432D8F 6A01 PUSH 01
:00432D91 57 PUSH EDI
:00432D92 FF15F05F4800 CALL [USER32!EnableWindow]
:00432D98 3BFB CMP EDI,EBX
:00432D9A 7412 JZ 00432DAE
:00432D9C FF15EC5F4800 CALL [USER32!GetActiveWindow]
:00432DA2 3B461C CMP EAX,[ESI+1C]
:00432DA5 7507 JNZ 00432DAE
:00432DA7 57 PUSH EDI
:00432DA8 FF158C5E4800 CALL [USER32!SetActiveWindow]
:00432DAE 8B06 MOV EAX,[ESI]
:00432DB0 8BCE MOV ECX,ESI
:00432DB2 FF5060 CALL [EAX+60] -->> Tutup Window !!
:00432DB5 8BCE MOV ECX,ESI -->> Kamu Disini !!
:00432DB7 E86FFEFFFF CALL 00432C2B
:00432DBC 8B462C MOV EAX,[ESI+2C]
:00432DBF 8B4DF4 MOV ECX,[EBP-0C]
:00432DC2 5F POP EDI
:00432DC3 5E POP ESI
:00432DC4 64890D00000000 MOV FS:[00000000],ECX
:00432DCB 5B POP EBX
:00432DCC C9 LEAVE
:00432DCD C3 RET

Disini seperti yang kamu lihat program udah mengenerate nag screennya, dibuktikan dengan adanya API EnableWindow, ini penjelasanya diambil dengan paksa dari WIN32SDK Borland C++ gua ;) :

The EnableWindow function enables or disables mouse and keyboard input to the specified window or control. When input is disabled, the window does not receive input such as mouse clicks and key presses. When input is enabled, the window receives all input.

BOOL EnableWindow(

HWND hWnd,    // handle to window
BOOL bEnable     // flag for enabling or disabling input
);

Oh,ya sebelum lupa ini keterangan mengenai DestroyWindow :

The DestroyWindow function destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it. The function also destroys the window's menu, flushes the thread message queue, destroys timers, removes clipboard ownership, and breaks the clipboard viewer chain (if the window is at the top of the viewer chain).

If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window. The function first destroys child or owned windows, and then it destroys the parent or owner window.
DestroyWindow also destroys modeless dialog boxes created by the CreateDialog function.

BOOL DestroyWindow(

HWND hWnd     // handle to window to destroy
);   

Ini kenapa JosephCo dari Mexellite, menggunakan HWND via WM_DESTROY, tapi gua heran ngapain pake itu langsung ajah pake DESTROYWINDOW ...

Q : Kenapa ngak kita periksa ajah satu satu call di atas enablewindow ? Khan udah pasti salah satu call tsb adalah pengenerate Nag Screen ?

A : Ngak bisa sayang, program akan error, soalnya program akan memanggil DESTROY Window, padahal kalo kita patch dengan cara tersebut, Window ngak pernah ada(digenerate) ya,kan ?

Karena begitu, teken F12 lagi :

:00405C28 C78424E8000000000000MOV DWORD PTR [ESP+000000E8],00000000
:00405C33 E831D00200 CALL 00432C69 -->> Bikin, persiapkan,  dan hancurkan Window (NagScreen)
:00405C38 8D8C24DC000000 LEA ECX,[ESP+000000DC]
:00405C3F C78424E8000000030000MOV DWORD PTR [ESP+000000E8],00000003
:00405C4A E869100300 CALL 00436CB8
:00405C4F 8D8C249C000000 LEA ECX,[ESP+0000009C]
:00405C56 C68424E800000002 MOV BYTE PTR [ESP+000000E8],02

Yesss, disini kamu tinggal mengnop offsett tersebut, tapi biar lebih pro kita ilangkan ajah call tersebut dengan :

inc ax, dec ax, nop (5 bytes)

Ganti E831D00200 dengan 6640664890

Sip, save filenya. Jalankan Agile ... Yeah !!! Ngak ada batas waktu, ngak ada nagscreen !!!

PS : Teknik ini ada kekurangannya karena about digenerate dengan rutin yang sama, yang udah kita hilangkan, maka kalo kamu teken Help, About ngak akan keluar apa apa. Tapi siapa yang butuh aboutnya ... ;)

WebMaster
Terus      Kembali
Komentar dan Mailing List
Crack One Software Every Day Make You The Real Cracker