Kamis, 17 Februari 2011

Teknik Dasar Cracking.......

 Tool Yang digunakan :
SoftIce v4.05, W32dasm v8.9, Ultra Edit 10.10a, Hexworkshop 4.10
dan satu lagi download dl software Start Cleannya.

1. Metode Dead-listing.
Pertama, jalankan dulu file Startclean.exe tersebut. Pada layar pertama akan muncul layar yang mengingatkan anda untuk meregister program tersebut. Laya ini disebut "nag screen", kita bakal banyak berurusan dengan nag screen ini. Akan ada 2 tombol, yakni "OK" dan "register". Untuk sekarang tekan Ok. Anda akan masuk ke dalam program, ditandai dengan tulisan "shareware". Tutup program dan jalankan lagi. Sekarang tekan Register. Program akan menanyakan nama Anda, dan kode registrasi anda. Sekarang tekan Ok. Muncul message box, dengan tulisan Incorrect Code !. Ingat atau catat tulisan ini.

Sekarang jalankan WDasm 8.9 anda. Buka file (Open file to dissambly) startclean.exe . Setelah selesai didisassembly, Search (ikon ketiga dari kiri, yang bentuknya seperti senter) kata Incorrect Code --->>> masih inget donk ? :)

Anda akan di"antar" ke sini :

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004027A3(C)
|
:004027C1 6A00 push 00000000
:004027C3 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Incorrect code!" -->> disini kamu
|
:004027C5 68AC634000 push 004063AC
:004027CA 56 push esi

* Reference To: USER32.MessageBoxA, Ord:0188h -->> tampilkan messagebox
|
:004027CB FF1534934000 Call dword ptr [00409334]
:004027D1 B801000000 mov eax, 00000001
:004027D6 5E pop esi
:004027D7 C21000 ret 0010

Coba lihat di atas kata "Incorrect Code" ada referenced by bla bla bla ...
Berarti yang membawa anda ke kata Incorrect Code adalah pada alamat 004027A3.
Berupa Jump dengan syarat, buka buku Asm anda tentang Jump ini.

Karena itu kita akan melihat ada apa di alamat 004027A3. Pada Goto, pilih Goto Code Location, masukkan alamat kita itu.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402787(C)
|
:00402794 8B742408 mov esi, dword ptr [esp+08]
:00402798 56 push esi
:00402799 E8B2E9FFFF call 00401150 --->>> function pengecek                          password
:0040279E 83C404 add esp, 00000004 --->>> koreksi stack
:004027A1 85C0 test eax, eax --->>> test eax
:004027A3 741C je 004027C1 --->>> disini kamu !
:004027A5 C7054C72400001000000 mov dword ptr [0040724C], 00000001
:004027AF 6A01 push 00000001
:004027B1 56 push esi

* Reference To: USER32.EndDialog, Ord:00ADh
|
:004027B2 FF153C934000 Call dword ptr [0040933C]
:004027B8 B801000000 mov eax, 00000001
:004027BD 5E pop esi
:004027BE C21000 ret 0010

je adalah singkatan dari Jump short if Equal, atau dengan kata lain Jump short if Zero Flag = 1 --->>> Zero Flag bisa bernilai 1, adalah akibat dari TEST EAX,EAX.

JE ini, Jump nakal, kamu musti mengskip jump ini, agar program tidak meloncat ke pernyataan "Incorrect password !".Ada beberapa cara, kamu bisa mengganti pernyataan je dengan jne, artinya kalau passwordnya salah, dianggap betul, jika password betul dianggap salah. Bisa juga dengan mengnop pernyatan je tersebut. Jangan lupa kalau je itu 2 byte, sedangkan nop hanya 1 byte. Jadi butuh 2 nops.

/////////////////////////////////////////////////////////////////////////////
NOP adalah singkatan dari No Opcodes. Ini dalam kode hexa bernilai 90. Nop berarti tidak melakukan operasi apa apa.
/////////////////////////////////////////////////////////////////////////////

Cara membuat patch-nya. Pada Hex Editor favorit kamu, search nilai dalam hexa, nilai : 741CC7054C72400001000000 --->>> jika ingin mengubah je menjadi jne --->>> rubah dengan 751CCC7054C72400001000000. Jika ingin mengskip Je, ganti dengan nop --->>> 9090C7054C72400001000000. Save file tersebut, jangan lupa untuk membuat backupnya.

------------------------------------------------------------------------------
Beberapa kode Hexa yang sering dipakai :

JE <offset> 74** = JZ (Jump Short if Zero Flag = 1)
JNE <offset> 75** = JNZ (Jump Short if Zero Flag = 0)
NOP     90
JMP <offset> EB**
------------------------------------------------------------------------------

Sampai disini, kamu sudah berhasil ngecrack software ini. Tapi ini cara kotornya, ada beberapa cara yang lebih bersih dari ini.

? Kenapa dibilang kotor.
Begini, dalam beberapa software, biasanya function password dipanggil sedikitnya 2 kali, yakni pada saat anda memasukkan password, dan pada saat program tersebut diloading (Startup). Berarti anda juga mengubah nilai pada saat startup, misalnya dengan mengskip bagian JE. Dengan begitu program akan cukup banyak dirubah.

Ok, ini cara yang lebih bersih.

Kamu lihat call ke suatu alamat, yang saya komentarin function password ?
Nah, sekarang coba di WDASM kita goto ke alamat yang dicall itu.

* Referenced by a CALL at Address:
|:00402799
|
:00401150 81EC0C020000 sub esp, 0000020C
:00401156 A064624000 mov al, byte ptr [00406264]
:0040115B B93F000000 mov ecx, 0000003F
:00401160 56 push esi
:00401161 8844240C mov byte ptr [esp+0C], al
:00401165 57 push edi

* Reference To: USER32.GetDlgItemTextA, Ord:00EDh -->> Ambil password yang kita ketikkan
|
:004011AD 8B35D8924000 mov esi, dword ptr [004092D8]
:004011B3 FFD6 call esi
:004011B5 8D442410 lea eax, dword ptr [esp+10]

* Reference To: KERNEL32.lstrcmpA, Ord:0269h -->> Bandingkan password kita dengan password sebenarnya
|
:004011E3 FF1520924000 Call dword ptr [00409220]
:004011E9 85C0 test eax, eax -->> Test password
:004011EB 0F8580000000 jne 00401271 -->> Kalau tidak sama, pergi !, sama lanjutkan.

* Reference To: ADVAPI32.RegCloseKey, Ord:00C2h
|
:0040125D FF15F0914000 Call dword ptr [004091F0]
:00401263 B801000000 mov eax, 00000001 -->> password OK, beri 1 pada EAX
:00401268 5F pop edi
:00401269 5E pop esi
:0040126A 81C40C020000 add esp, 0000020C
:00401270 C3 ret    -->> kembali pada kode semula

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011EB(C) -->> Lompat dari 004011EB
|
:00401271 33C0 xor eax, eax -->> password salah ! beri 0 pada eax
:00401273 5F pop edi
:00401274 5E pop esi
:00401275 81C40C020000 add esp, 0000020C
:0040127B C3 ret

Kamu lihat bahwa program akan memberi nilai 1 pada eax (Arithmatic Register) jika password betul, dan 0 pada eax, jika salah. Disini kita bisa mempatch call ini, pada offset 004011EB, dengan NOP NOP (2 kali).

2. Metode Live Cracking.

Ok, sekarang, gua mo' ngajarin, gimana cara ngecrak softwarenya Firas el Hasan, ini secara live, menggunakan SoftIce ...,

Sekarang jalankan, StartClean. Dan pilih option untuk memasukkan serial number <Register>, kamu ketikkan dulu pada registration box, nama kamu, dan password fake.

name : flag eRRatum
code : virly

Jangan tekan enter dulu. sekarang kembali ke Softice, teken CTRL-D, ketik di command prompt line : BPX Getdlgitemtexta <Enter>

Ok, kembali ke StartClean, teken Ctrl-D. Buumm ! Kamu kembali ke layar Softice. Ini berarti SoftIce menangkap adanya funtion yang dibreakpoint, dipakai oleh program. Kamu akan mendarat di kernelnya WinBlows 95, software favorit kita semua =), cara tahunya, lihat di atas command prompt line, ada tulisan User32---, nah itu berarti kamu berada di kernel Win95. Kamu butuhnya di badan program, bukan di kernel Win95. jadi kita mesti keluar dari kernel. Caranya teken F12. Nah, sekarang kamu udah ada di badan program. Teken ? Eax, untuk melihat nilai Eax. Hmmm, ada 12. Apa itu ya ? Itu panjang nama yang kamu masukin !!! berarti kita udah ada di jalur yang tepat. Pada saat ini program baru membaca nama kita, teken F5, lalu F12 lagi. Sekarang program membaca code kita. Ketik ? Eax , bernilai 5. Ini panjang code kita.


:004011C4 57 push edi
:004011C5 FFD6 call esi
:004011C7 6830604000 push 00406030 --->> kamu disini -->> disini kode registrasi yang akan didorong ke stack.
:004011CC 6830614000 push 00406130 -->> save nama kamu.
:004011D1 E8AA000000 call 00401280
:004011D6 8D442418 lea eax, dword ptr [esp+18]
:004011DA 83C408 add esp, 00000008
:004011DD 50 push eax -->> save kode kamu
:004011DE 6830604000 push 00406030 -->> save kode yang bener

KERNEL32.lstrcmpA, Ord:0269h -->> fungsi untuk membandingkan 2 buah string, sensitif
|
:004011E3 FF1520924000 Call dword ptr [00409220]
:004011E9 85C0 test eax, eax -->> test password
:004011EB 0F8580000000 jne 00401271 -->> kalau ngak sama, pergi !
:004011F1 8D44240C lea eax, dword ptr [esp+0C]
:004011F5 8D4C2408 lea ecx, dword ptr [esp+08]
:004011F9 50 push eax
:004011FA 51 push ecx
:004011FB 8D942418010000 lea edx, dword ptr [esp+00000118]
:00401202 6A00 push 00000000
:00401204 683F000F00 push 000F003F
:00401209 6A00 push 00000000

perhatikan di offset 004011C7, trace baris itu dengan mengetikkan F10. Setelah itu, tekan D 00406030 , untuk melihat isi 00406030 di memory. Kamu akan melihat kode registrasi yang benar. Kamu sudah boleh keluar, dari SI, sebelumnya jangan lupa untuk mengclear Breakpoint yang kamu pasang, dengan mengetikkan BC * <enter>

Masukkan kode registrasi itu, dan kamu udah ke register !!!

Sebelumnya, coba lihat di offset 004011eb, disini kamu juga bisa merubah jne dengan je, ketik pada SI :
A 004011EB <enter>
lalu ketikkan JE 00401271 <enter> <enter>.
Keluar dari SI, kamu sekarang udah keregister !
Kalau kamu mau supaya, program ini berubah secara permanen, sehingga temen kamu, juga bisa pakai. Search di Hex Editor, 0F8580000000 , ganti dengan 0F8480000000. Kamu juga bisa mengnop peryataan JNE tadi. Ganti dengan 90909090909090. Selesai, save program, jalankan.

Tidak ada komentar: