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

Copyto v2.12

Target  : Copyto v2.12
Tool     : SoftIce v4.05

Protectionnya berupa kombinasi User Name dengan Serial Number. IMHO proteksi software ini cukup baik, jika kamu nekat mengdissasm software ini, maka kamu akan tersesat dengan cepat. Tanda bahwa programmernya cukup tahu cara memproteksi softwarenya. Matematiknya juga sangat unik gua sendiri belum pernah melihat protection dengan matematik sedemikian "ngotot" :)

Jalankan Copyto, pilih opsi Help lalu About, pilih registration.

Pertama kamu akan ditanya username, masukkan "Freeware-[eKH]" tanpa kutip, gua harap elu memasukkan nama yang sama dengan yang gua pake, karena SEMUA contoh di tutorial ini akan mengacu pada perhitungan dengan nama Freeware-[eKH] tsb.

Setelah sukses memasukkan nama, sekarang masukkan serial, masukkan 123454323, sebelum teken enter, pasang BPX di Hmemcpy, jangan lupa gua harap juga serial yang elu masukin sama dengan yang gua pake karena seperti yang gua bilang sebelumnya ini butuh matematik yang cukup baik.

Sekarang teken enter, Boom kembali ke SoftIce ..., teken F12 sampe masuk ke badan program, tapi sampe di badan tersebut (setelah teken F12 7 kali) hanya didapat POP xxx POP yyy, ini jelas tidak menarik, teken F12 sampe kamu sampe ke kode berikut :

0177:0046603D 837DF000 CMP DWORD PTR [EBP-10],00
0177:00466041 0F84E8000000 JZ 0046612F

Youuuwww, ini jelas sangat menarik, gimana gua tahu ? Gampang lihat isi dari EBP-10 dengan softice, ketikkan D *(EBP-10) maka akan didapat serial yang tadi kita masukin. Maksud dari perintah diatas D *(EBP-10) adalah lihat isi dari DWORD yang ditunjuk oleh EBP-10. Kalau gua berhubung males banget di Setting SoftIce (dalam SI Loader) gua mendeklarasikan macro dengan nama See , dan dengan isi : D *(%1) sekarang gua kalo mo lihat DWORD pada EBP-10, cukup gua ketikkan See EBP-10 ...menarik eh ?

Opcodes diatas, berarti : bandingkan serial kita dengan 00(NULL) , apakah kita sudah memasukkan serial, jika belum sana cabut !!!


0177:00466047 8B55F0 MOV EDX,[EBP-10] -->> ketikkan d edx, maka akan didapat serial kamu.
0177:0046604A A1CCA84600 MOV EAX,[0046A8CC]
0177:0046604F E8C8FDFFFF CALL 00465E1C
0177:00466054 84C0 TEST AL,AL -->> nah ini dapat dipastikan rutin good guy/bad guy.
0177:00466056 7516 JNZ 0046606E
0177:00466058 6A00 PUSH 00
0177:0046605A 33C9 XOR ECX,ECX

Bagaimana gua tahu kalau 466054 itu adalah "yang penting" ? gampang lihat ajah sebelum call data yang diutak atik adalah data serial kita. Sudah dapat ditebak, kalau JNZ di offset 466056 adalah lompatan "nakal" :)

Masuk ke 00465E1C ... (F8)

0177:00465E1C 55 PUSH EBP
0177:00465E1D 8BEC MOV EBP,ESP
0177:00465E1F 6A00 PUSH 00
0177:00465E21 6A00 PUSH 00
0177:00465E23 6A00 PUSH 00
0177:00465E25 53 PUSH EBX
0177:00465E26 56 PUSH ESI
0177:00465E27 57 PUSH EDI
0177:00465E28 8955FC MOV [EBP-04],EDX
0177:00465E2B 8B45FC MOV EAX,[EBP-04]
0177:00465E2E E835D9F9FF CALL 00403768
0177:00465E33 33C0 XOR EAX,EAX
0177:00465E35 55 PUSH EBP
0177:00465E36 68935E4600 PUSH 00465E93
0177:00465E3B 64FF30 PUSH DWORD PTR FS:[EAX]
0177:00465E3E 648920 MOV FS:[EAX],ESP
0177:00465E41 33DB XOR EBX,EBX
0177:00465E43 8B45FC MOV EAX,[EBP-04] -->> EAX = Serial Kita
0177:00465E46 E869D7F9FF CALL 004035B4 -->> Rutin Penghitung panjang serial
0177:00465E4B 83F808 CMP EAX,08 -->> Apakah panjang serial = 8 ?
0177:00465E4E 7528 JNZ 00465E78 -->> pergi jika tidak sama !!!

Ohhh, jadi serial kita musti 8 karakter ? OK, berhubung serial kita tadi 9 karakter, ulang prosedur dimuka, isikan serial dengan 12345432


0177:00465E50 8D55F4 LEA EDX,[EBP-0C]
0177:00465E53 8B45FC MOV EAX,[EBP-04] -->> ketikkan D EAX , akan menunjukkan serial kita !!!

017F:00C035C0 31 32 33 34 35 34 33 32-00 69 73 74 65 72 65 64 12345432.istered


0177:00465E56 E8ED00FAFF CALL 00405F48
0177:00465E5B 8B45F4 MOV EAX,[EBP-0C] -->> D EAX, menunjuk pada serial kita juga !!!

017F:00C035D8 31 32 33 34 35 34 33 32-00 00 00 00 17 00 00 00 12345432........

0177:00465E5E 8D55F8 LEA EDX,[EBP-08]
0177:00465E61 E8C66FFDFF CALL 0043CE2C
0177:00465E66 8B45F8 MOV EAX,[EBP-08] -->> Ketikkan D EAX :

017F:00C03604 31 33 35 35 30 43 35 42-33 45 35 41 32 32 46 45 13550C5B3E5A22FE
017F:00C03614 31 33 45 46 32 46 42 42-30 44 43 43 31 37 30 45 13EF2FBB0DCC170E


0177:00465E69 8B15BCAA4600 MOV EDX,[0046AABC] -->> Ketikkan D EDX :

017F:00BF1564 31 45 36 31 32 41 34 44-31 34 38 44 33 38 31 30 1E612A4D148D3810
017F:00BF1574 31 38 37 37 34 46 37 34-35 37 32 30 37 34 37 32 18774F7457207472

Lihat, disini ada angka aneh, dari sini dapat diketahu serial kita akan diencrypt ke EAX. Kenapa bukan ke EDX ? Karena EDX berisi nilai yang tetap : 0046AABC !!! Dalam banyak kasus yang terpakai untuk menampung adalah variable, EBP-08


0177:00465E6F E850D8F9FF CALL 004036C4 -->> Bandingkan EAX & EDX :
0177:00465E74 7502 JNZ 00465E78 -->> Sama ? Kalau engga, cabut !!!
0177:00465E76 B301 MOV BL,01
0177:00465E78 33C0 XOR EAX,EAX
0177:00465E7A 5A POP EDX
0177:00465E7B 59 POP ECX
0177:00465E7C 59 POP ECX
0177:00465E7D 648910 MOV FS:[EAX],EDX
0177:00465E80 689A5E4600 PUSH 00465E9A
0177:00465E85 8D45F4 LEA EAX,[EBP-0C]
0177:00465E88 BA03000000 MOV EDX,00000003
0177:00465E8D E8CED5F9FF CALL 00403460
0177:00465E92 C3 RET

OK, kita butuh tahu gimana serial kita yang cantik, bisa diencrypt jadi sedemikian aneh, dan CALL yang bertanggung jawab adalah CALL pada 00465E61, karena sebelumnya serial kita masuk "normal - normal" saja ...

Masuk ke CALL tersebut (F8) :

0177:0043CE2C 55 PUSH EBP
0177:0043CE2D 8BEC MOV EBP,ESP
0177:0043CE2F 83C4E4 ADD ESP,-1C
0177:0043CE32 53 PUSH EBX
0177:0043CE33 56 PUSH ESI
0177:0043CE34 57 PUSH EDI
0177:0043CE35 33C9 XOR ECX,ECX
0177:0043CE37 894DE4 MOV [EBP-1C],ECX
0177:0043CE3A 8955F8 MOV [EBP-08],EDX
0177:0043CE3D 8945FC MOV [EBP-04],EAX
0177:0043CE40 8B45FC MOV EAX,[EBP-04]
0177:0043CE43 E82069FCFF CALL 00403768
0177:0043CE48 33C0 XOR EAX,EAX
0177:0043CE4A 55 PUSH EBP
0177:0043CE4B 68EFCE4300 PUSH 0043CEEF
0177:0043CE50 64FF30 PUSH DWORD PTR FS:[EAX]
0177:0043CE53 648920 MOV FS:[EAX],ESP
0177:0043CE56 8D45FC LEA EAX,[EBP-04]
0177:0043CE59 BA08CF4300 MOV EDX,0043CF08
0177:0043CE5E E85967FCFF CALL 004035BC
0177:0043CE63 BB01000000 MOV EBX,00000001 ' Protection Dimulai !!! ' EBX adalah counter, dimulai dari 1.
0177:0043CE68 B8089A4600 MOV EAX,00469A08 -->> Ketikkan D EAX :

017F:00469A08 65 00 9F 00 FB 00 8D 00-ED 00 29 01 AD 00 89 00 e.........).....
017F:00469A18 98 99 46 00 7C 40 40 00-20 3D 44 00 11 00 00 00 ..F.|@@. =D.....
017F:00469A28 12 00 00 00 14 00 00 00-19 00 00 00 1A 00 00 00 ................
017F:00469A38 1B 00 00 00 04 00 00 00-20 00 00 00 40 00 00 00 ........ ...@...
017F:00469A48 02 00 00 00 01 00 00 00-00 00 00 00 18 9A 46 00 ..............F.
017F:00469A58 7C 40 40 00 78 4B 44 00-96 00 00 00 97 00 00 00 |@@.xKD.........

EAX adalah table index, yang akan dipergunakan nanti ...
0177:0043CE6D 8D55E8 LEA EDX,[EBP-18]
0177:0043CE70 8B4DFC MOV ECX,[EBP-04] -->> D ECX :

017F:00BFD680 31 32 33 34 35 34 33 32-30 31 32 33 34 35 36 37 1234543201234567

Disini, serial kita akan ditambah dengan 01234567


0177:0043CE73 0FB64C19FF MOVZX ECX,BYTE PTR [EBX+ECX-01] -->> Untuk pertama kali maka CX akan bernilai 31h / ASCII "1" dari serial kita.
0177:0043CE78 660FAF08 IMUL CX,[EAX] -->> CX = CX*EAX, untuk pertama kali EAX akan bernilai 65h (lihat diatas !!! Untuk pertama kali CX hasil perkalian ini akan bernilai : 1355h
0177:0043CE7C 66890A MOV [EDX],CX -->> isikan nilai CX ke EDX.
0177:0043CE7F 43 INC EBX -->> Counter + 1
0177:0043CE80 83C202 ADD EDX,02 -->> Pointer EDX + 2, karena EDX untuk pertama kali sudah terisi oleh 5513 (penempatan terbalik inget !!!)
0177:0043CE83 83C002 ADD EAX,02 -->> Pointer EAX + 2, sekarang EAX akan menunjuk 9Fh
0177:0043CE86 83FB09 CMP EBX,09 -->> Sudah sama EBX dengan 9 ?
0177:0043CE89 75E5 JNZ 0043CF70 -->> Belum? Ulangi !!!
0177:0043CE8B BB07000000 MOV EBX,00000007 -->> Counter untuk looping kedua !
0177:0043CE90 8D45E8 LEA EAX,[EBP-18]

Masih Inget pada offset 43ce7c ? nilai EAX akan menunjuk pada angka angka hasil dari perkalian pada CX !!! Ketikkan D EAX :

017F:006CF29C 55 13 0E 1F 01 32 A4 1C-11 31 54 3C 77 22 C2 1A U....2...1T<w"..
017F:006CF2AC D8 F2 6C 00 B4 1B C0 00-E0 F2 6C 00 66 5E 46 00 ..l.......l.f^F.


0177:0043CE93 668B10 MOV DX,[EAX] -->> Untuk pertama kali DX = 1355h
0177:0043CE96 66315002 XOR [EAX+02],DX -->> XOR EAX+2 = 1F0E dengan 1355, simpan di EAX + 2
0177:0043CE9A 83C002 ADD EAX,02
0177:0043CE9D 4B DEC EBX
0177:0043CE9E 75F3 JNZ 0043CF93 -->> Ulang sampai EBX = 0 !
0177:0043CEA0 8B45F8 MOV EAX,[EBP-08]
0177:0043CEA3 E89865FCFF CALL 00403440
0177:0043CEA8 BB08000000 MOV EBX,00000008
0177:0043CEAD 8D75E8 LEA ESI,[EBP-18] -->> ESI = Hasil dari looping kedua. Ketikkan D ESI :

017F:006CF29C 55 13 5B 0C 5A 3E FE 22-EF 13 BB 2F CC 0D 0E 17 U.[.Z>.".../....
017F:006CF2AC D8 F2 6C 00 80 D6 BF 00-E0 F2 6C 00 66 5E 46 00 ..l.......l.f^F.
017F:006CF2BC E8 F2 6C 00 93 5E 46 00-E0 F2 6C 00 FC F7 BF 00 ..l..^F...l.....

Nilai tersebut kalau dijabarkan :

13550C5B3E5A22FE 13EF2FBB0DCC170E

Sekarang jelas khan darimana asal serial terencrpyt yang ada di offset 00465E66 ?


0177:0043CEB0 8D4DE4 LEA ECX,[EBP-1C]
0177:0043CEB3 0FB706 MOVZX EAX,WORD PTR [ESI]
0177:0043CEB6 BA04000000 MOV EDX,00000004
0177:0043CEBB E8D092FCFF CALL 00406190
0177:0043CEC0 8B55E4 MOV EDX,[EBP-1C]
0177:0043CEC3 8B45F8 MOV EAX,[EBP-08]
0177:0043CEC6 E8F166FCFF CALL 004035BC
0177:0043CECB 83C602 ADD ESI,02
0177:0043CECE 4B DEC EBX
0177:0043CECF 75DF JNZ 0043CFB0
0177:0043CED1 33C0 XOR EAX,EAX
0177:0043CED3 5A POP EDX
0177:0043CED4 59 POP ECX
0177:0043CED5 59 POP ECX
0177:0043CED6 648910 MOV FS:[EAX],EDX
0177:0043CED9 68F6CE4300 PUSH 0043CEF6
0177:0043CEDE 8D45E4 LEA EAX,[EBP-1C]
0177:0043CEE1 E85A65FCFF CALL 00403440
0177:0043CEE6 8D45FC LEA EAX,[EBP-04]
0177:0043CEE9 E85265FCFF CALL 00403440
0177:0043CEEE C3 RET
Baris diatas hanya mengconvert serial hasil encrypt tersebut ke bentuk string.

Jadi bagaimana untuk mendapat serialnya ? Kita tahu bahwa serial hasil encrypt harus sama dengan

1E612A4D148D3810 18774F7457207472
Okeh, kita akan meneliti 1 persatu ..., 1E61

017F:00469A08 65 00 9F 00 FB 00 8D 00-ED 00 29 01 AD 00 89 00 e.........).....
017F:00469A18 98 99 46 00 7C 40 40 00-20 3D 44 00 11 00 00 00 ..F.|@@. =D.....
017F:00469A28 12 00 00 00 14 00 00 00-19 00 00 00 1A 00 00 00 ................
017F:00469A38 1B 00 00 00 04 00 00 00-20 00 00 00 40 00 00 00 ........ ...@...
017F:00469A48 02 00 00 00 01 00 00 00-00 00 00 00 18 9A 46 00 ..............F.
017F:00469A58 7C 40 40 00 78 4B 44 00-96 00 00 00 97 00 00 00 |@@.xKD.........

umpama karakter pertama serial yang asli = X , maka X * 65h = 1E61 (tanpa pengaruh XOR karena pengaruh XOR (dari Looping kedua) hanya mulai berlaku dari 2A4D) maka X = 1E61/65h , ketikkan di SoftIce punya command line " ? 1e61/65"

see ? SoftIce bukan cuman debugger yang baik, tapi juga calculator yang baik ... :) akan didapat 4Dh = ASCII "M" berarti ini adalah karakter pertama dari serial kita.

Karakter kedua :

Umpama X , maka (X*9Fh) XOR 1E61 = 2A4D , maka X*9Fh = 2A4D XOR 1E61, dan X = 342Ch/9F = 54h = Ascii "T"

(tanda xor di SoftIce adalah ^ , jadi 2A4D XOR 1E61 di SI = "? 2A4D ^ 1E61"

Ini berarti serial kedua = T

Berarti Format serial kita adalah MTXXXXXX , dimana X bisa anda hitung sendiri.
 

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