Pages

Subscribe:

Blogroll

Labels

Senin, 19 September 2011

Teknik ngecrack software

Software pertama yang akan jadi "sasaran" kita adalah StartClean 1.2 --->> Ok, Ok ! Mungkin elu bakal protes, ini sih udah ada dibuat oleh cracker lain dalam bahasa Inggris. Tapi memang untuk pemula ini contoh yang bagus sekali. Mungkin di kemudian hari saya juga akan banyak membahas software yang mungkin juga sudah pernah dibahas oleh cracker lain. Tapi saya jamin anda tidak akan rugi membacanya, karena saya akan menyajikan teknik yang lain, yang mungkin tidak anda temui pada tutorial tersebut.


StartClean 1.2 adalah software untuk membersihkan Startmenu anda, yang mungkin banyak berisi icon icon kosong, yang ditinggalkan karena "kecanggihan" WinBlows :) Software ini saya pilih karena ukurannya sangat kecil, hanya 19 kb. Dan sangat baik untuk pemula dalam mempelajarinya.

Tools yang dibutuhkan :
1. StartClean 1.2 --->>> Download di www.download.com, bagian utilities*system utilities.
2. SoftIce, versi 3.xx dari Numega. Hubungi saya jika anda sudah mencari tapi tidak menemukannya !
3. Wdasm 8.9 --->>> Search di astalavista.box.sk
4. Hexeditor yang bagus. (Ultra Edit 5.0a, Hexworkshop 2.41, dll)
5. Sedikit pengetahuan dalam bahasa Assembly.
6. Sedikit Otak :)

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.

Coba ketik untuk nama : flag eRRatum
kode : virly

Sudah ? 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 751CC7054C72400001000000. Jika ingin mengskip Je, ganti dengan nop --->>> 9090C7054C72400001000000. Save file tersebut, jangan lupa untuk membuat backupnya.

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

JE 74** = JZ (Jump Short if Zero Flag = 1)
JNE 75** = JNZ (Jump Short if Zero Flag = 0)
NOP 90
JMP 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 akan 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 !
Kalau sama lanjutkan.

.
.
.
* Reference To: ADVAPI32.RegCloseKey, Ord:00C2h
|
:0040125D FF15F0914000 Call dword ptr [004091F0]
:00401263 B801000000 mov eax, 00000001 -->> password OK, beri nilai 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 nilai 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).



Teknik kedua : Live Cracking.

Ok, sekarang, gua mo' ngajarin, gimana cara ngecrak softwarenya Firas el Hasan, ini secara live, menggunakan SoftIce ..., bagi yang pengen dapetin full version shareware, bisa didownload di www.sosdevelopers.com , gedenya sekitar 7 MB, tapi saran gua d/l aja yang udah diripped, ftpsearch aja.

Nah, kamu udah install Softice, dan jalan dengan sukses ? Cara tahunya kalo kamu udah sukses, pencet CTRL-D , kamu akan di popup, ke layar item, mode command prompt. Bisa ? Kalo iya, kamu sukses, sekarang balik ke WinBlows kamu, teken F5 atau CTRL-D lagi.

Sekarang jalankan, StartClean. Dan pilih option untuk memasukkan serial number .

/////////////////////////////////////////////////////////////////////////////
Briefing dulu, sebelum kamu ancurin software ini =). Kamu masih inget di tutorial pertama saya, tentang Breakpoint ? Masalah terbesar, bagi cracker, adalah Breakpoint pada Api yang mana ? Ada ratusan API. Begini, tipe protection yang paling umum adalah tipe serial number ini. Ada beberapa API yang biasa dipanggil, untuk menghandle protection seperti ini. Yakni :

Getdlgitemtext(a)
Getwindowtexta(a)
Getdlgitemint

dan kalau semua itu ngak berhasil, bisa kamu coba

hmemcpy

Semua, ini secara umum, digunakan program, untuk mengambil text, dari sebuah Windows, atau edit box.

Akhiran (a) dipakai, jika program yang mau kamu crack, tipenya 32bit. Bagaimana cara tahunya ? Mudah, kamu jalankan saja QuickView, pada program tersebut, nani di awal, akan ada 16 bit atau 32 bit
==================================================================================

Gua, persingkat aja, disini fungsi yang dipakai adalah Getdlgitemtexta. (Yang umum memang Getdlgitemtexta atau Getwindowtexta).

Sebelum memasang breakpoint, kamu ketikkan dulu pada registration box, nama kamu, dan password fake. Kalau saya :

name : flag eRRatum
code : virly

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

BPX ini, adalah perintah untuk memasang Breakpoint, pada function tertentu.

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 benar 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, case 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 *

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 , lalu ketikkan JE 00401271 .
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.

0 komentar:

Poskan Komentar

lancarklik.com

Lancarklik
About The Author
Nama saya Yudi Aditya, Saya Bukan Seorang Blogger, Desainer atau Apapun Tapi Saya Hanya Seseorang Yang Ingin Selalu Belajar dan Ingin Tahu Sesuatu Yang Baru...