Saturday, February 12, 2011

TEKNIK PERMAINAN MEMORY

Nama softwarenya adalah ClipCache 2.0 , sebelum versi 2.0 programmernya ngasih ini software gratis, dan sekarang versi 2.0 udah berubah jadi shareware. ClipCache, seperti yang udah elu duga, adalah software yang digunakan untuk mengadvancekan copy dan paste pada Windolls 9x, yang emang gua akuin terbatas banget alias JELEK :) ClipCache sangking hebatnya, bahkan bisa menyimpan clipboard, selama berhari hari. Software ini bekerja di belakang, dan akan memonitor clipboard. Interfacenya juga sangat bagus dan sederhana. Praktis beginner sekalipun seharusnya bisa menggunakan software ini asal. RTFM (Read the FUCKING Manual !)


Kita butuh sedikit matematik dan kejelian mata disini. Protectionnya software ini lumayan juga walau tidak sangat special, tapi jelas ini belum pernah gua tulis di tutorial sebelumnya, jadi gua harap elu juga bisa sedikit belajar dari tutorial ini. Protection software ini berupa unlocking code, jangan salah unlocking code beda dengan tipe registration + user name. Disini tidak ada username, elu harus masukin murni semacam kode pengaktif, dan memang IMHO tipe ini lebih sulit dibanding dengan tipe UN/SN

Tipe Unlocking Code agak lebih sulit karena hal hal berikut :

Secara logika, program tidak mungkin mempunyai sesuatu untuk diutak utik menjadi *magic* serial number, seperti tipe UN/SN. Ada 2 cara umum untuk program mengenerate unlocking code, yakni : program sudah memiliki sendiri serial yang dihardcode siap untuk dibandingkan, seperti pada tutorial "SvetChrista" yang sudah gua tulis beberapa waktu lalu. Software ini sudah amat sangat teramat jarang ada, berhubung programmer juga makin berkembang. Lagipula dengan system begitu, serial number hanya ada 1/ beberapa saja. Cara kedua, dengan menggenerate sebagian dari unlocking code, dan dari sini jadilan UC yang utuh, sebagai contoh : gua membuat program yang meminta user memasukkan UC yang terdiri dari 13 angka, dimana karakter ke 7 adalah "-". Dan gua membuat ketentuan begini, 6 angka pertama*2 = 6 angka terakhir, jika sama maka itulah serial yang benar ! Please elu jangan dengan begonya make rutin diatas untuk software berharga bikinan elu, hehehehe :) Dengan cara kedua, gua mempunyai kombinasi UC yang luar biasa banyaknya

teknik pertama yang akan gua pakai, adalah teknik deadlisting, teknik yang diajarkan oleh Chupacabra, salah seorang cracker di kelompok kami, baca tutorialnya beberapa waktu lalu jika elu belum tahu apa itu deadlist !

Buat deadlist, dan seperti biasa pilih menu Help dan register. Masukkan sembarang UC, kita toh cuman akan melihat pesan errornya, Invalid xxxx, sorry ngak inget apa itu xxxx, gua cuman inget ada invalidnya.

Cari pesan ini di dalam deadlisting, gunakan fungsi find text, yang berlogo seperti senter di Wdasm. kamu akan menemukan beberapa buah "Invalid xxxx" tsb. Jangan bingung menentukan yang mana, dan elu ngak perlu nyoba nyoba segala :)

Jalankan kembali ClipCache, register, dan sebelum Ok, pasang breakpoint di API messageboxa , sekarang teken OK, kamu akan kembali ke SoftIce tercinta, kita masih ada di kernel, teken F12, kamu kembali ke ClipCache, dengan pesen error "invalid xxx" yang sudah siap menanti kamu, teken OK, Boom, balik lagi deh ke SI :)

Ok, kita akan berada di badan program ClipCache, lihat di deadlist daerah tersebut, lihat hmm, ada Call reference diatasnya, maka kembali di SI, teken F12, kalo ngak salah 2 kali, sampai kamu ada di kode berikut :

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00413B2B(C)
|

* Possible Reference to Menu: MenuID_0090
|

* Possible Reference to String Resource ID=00144: "Invalid code."

|
:00413B54 6890000000 push 00000090
:00413B59 8D4C2408 lea ecx, dword ptr [esp+08]
:00413B5D E8D5EC0100 call 00432837

" Tampilkan messageboxa yang berisi pesan sponsor, Invalid Code"

" Kamu akan mendarat di kode di bawah "
:00413B62 8B542404 mov edx, dword ptr [esp+04]

Sekarang elu udah tahu khan Invalid kode yang mana yang dipake ? Kembali ke deadlist, sekarang lihat di atas Invalid Code, akan ada Conditional Jump Reference. Hmmm, ini titik kelemahan yang bagus ! Lihat pada offset 00413B2B disitu akan ada conditional jump.

* Possible Reference to String Resource ID=00001: "New File..."
|
:00413B05 6A01 push 00000001
:00413B07 8BCE mov ecx, esi
:00413B09 C644243001 mov [esp+30], 01
:00413B0E E8B3D40100 call 00430FC6
:00413B13 8B465C mov eax, dword ptr [esi+5C]
:00413B16 8D4C2408 lea ecx, dword ptr [esp+08]
:00413B1A 50 push eax
:00413B1B E8AD9B0100 call 0042D6CD
:00413B20 8D4C2408 lea ecx, dword ptr [esp+08]
:00413B24 E8C7FCFFFF call 004137F0
:00413B29 85C0 test eax, eax
:00413B2B 7427 je 00413B54

" lihat di atas ! Program akan melihat jika hasil dari call di 00413B24 membawa kembali eax=0, maka Invalid Code, selainnya Thanx 4 registering. "

* Possible Reference to String Resource ID=00145: "Thank you for registering."
|
:00413B2D 6891000000 push 00000091
:00413B32 8D4C2408 lea ecx, dword ptr [esp+08]
:00413B36 E8FCEC0100 call 00432837
:00413B3B 8B4C2404 mov ecx, dword ptr [esp+04]

* Possible Reference to String Resource ID=00064: "Text"
|
:00413B3F 6A40 push 00000040
:00413B41 6A00 push 00000000
:00413B43 51 push ecx
:00413B44 8BCE mov ecx, esi
:00413B46 E8DE540200 call 00439029
:00413B4B 8BCE mov ecx, esi
:00413B4D E845A90100 call 0042E497
:00413B52 EB1E jmp 00413B72

Sekarang apa taktik kita ? Gampang ajah, kita musti meneliti ke dalam call tersebut. Masuk ke dalam call, teken tanda panah kanan.

* Referenced by a CALL at Addresses:
|:004138B3 , :00413B24
|

" Perhatikan, bahwa rutin ini dipanggil 2 kali, di 004138B3 dan di 00413B24, ini berarti jika kamu seorang newbie, dan tidak ingin susah susah, kamu hanya perlu merubah conditional jump di 00413B2B, katakanlah dengan meng-nop conditional jump itu, dan jangan lupa merubah pula conditional jump di bawah offset 004138B3 ! Ini karena program memeriksa 2 kali UCnya, pada waktu dimasukkan dan kemungkinan besar pada waktu program dijalankan."


:004137F0 83EC0C sub esp, 0000000C
:004137F3 53 push ebx
:004137F4 55 push ebp
:004137F5 56 push esi
:004137F6 57 push edi
:004137F7 8BF9 mov edi, ecx
:004137F9 C644241000 mov [esp+10], 00
:004137FE C644241100 mov [esp+11], 00
:00413803 C644241200 mov [esp+12], 00
:00413808 8B07 mov eax, dword ptr [edi]
:0041380A C644241300 mov [esp+13], 00
:0041380F 33F6 xor esi, esi
:00413811 33ED xor ebp, ebp
:00413813 8B48F8 mov ecx, dword ptr [eax-08]

" Perhatikan bahwa ecx, akan membawa kembali PANJANG dari unlocking code"

* Possible Reference to String Resource ID=00001: "New File..."
|
:00413816 BB01000000 mov ebx, 00000001
:0041381B 83F911 cmp ecx, 00000011

" Bandingkan apakah panjang UC = 11h/17d ? "
:0041381E 7402 je 00413822

" lompat jika sama !, jika tidak lanjutkan !"
:00413820 33DB xor ebx, ebx

"ini rutin nakal !, bagaimana gua tahu perintah di atas adalah rutin yang seharusnya di hindari ? gampang, seharusnya elu pake logika aja juga bisa, tapi kalau mau pengetahuan pastinya, lihat ada xor ebx, ebx -->> ini berarti mengnolkan ebx. Trace rutin selanjutnya"

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041381E(C)
|
:00413822 85DB test ebx, ebx

"Perhatikan test ebx,ebx"
:00413824 747C je 004138A2
"lompat ke 004138A2, jika ebx = 0 ! Sekarang kita lihat sebentar apa yang ada di offsett tersebut"

------------------------

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00413824(C), :00413829(C)
|
:004138A2 5F pop edi
:004138A3 5E pop esi
:004138A4 8BC3 mov eax, ebx

" Nah, ini dia, berhubung tadi ebx kalau panjang <> dengan 11h, maka ebx akan dinolkan dan lihat ! disini ebx akan dicopy ke eax, eax akan bernilai 0, tentu kamu tahu kalau eax=0 maka program akan menampilkan Invalid Code"


:004138A6 5D pop ebp
:004138A7 5B pop ebx
:004138A8 83C40C add esp, 0000000C
:004138AB C3 ret

---------------------


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004138A0(C)
|
:00413826 83FE11 cmp esi, 00000011
:00413829 7D77 jge 004138A2
:0041382B 83FE08 cmp esi, 00000008
:0041382E 7511 jne 00413841
:00413830 8B0F mov ecx, dword ptr [edi]

* Possible Reference to String Resource ID=00009: "The current size of the data file is %1 bytes.
Compaction wi"
|
:00413832 BE09000000 mov esi, 00000009
:00413837 8079082D cmp byte ptr [ecx+08], 2D
:0041383B 7461 je 0041389E
:0041383D 33DB xor ebx, ebx
:0041383F EB5D jmp 0041389E

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041382E(C)
|
:00413841 8B07 mov eax, dword ptr [edi]
:00413843 8BCE mov ecx, esi
:00413845 46 inc esi
:00413846 8A1401 mov dl, byte ptr [ecx+eax]
:00413849 8BCE mov ecx, esi
:0041384B 88542410 mov byte ptr [esp+10], dl
:0041384F 8D542410 lea edx, dword ptr [esp+10]
:00413853 8A0401 mov al, byte ptr [ecx+eax]
:00413856 8D4C2418 lea ecx, dword ptr [esp+18]
:0041385A 51 push ecx

* Possible StringData Ref from Data Obj ->"%x"
|
:0041385B 682C974600 push 0046972C
:00413860 52 push edx
:00413861 46 inc esi
:00413862 8844241E mov byte ptr [esp+1E], al
:00413866 E8152F0000 call 00416780
:0041386B 83C40C add esp, 0000000C
:0041386E 8D442414 lea eax, dword ptr [esp+14]
:00413872 8D4C2412 lea ecx, dword ptr [esp+12]
:00413876 50 push eax

* Possible StringData Ref from Data Obj ->"%x"
|
:00413877 682C974600 push 0046972C
:0041387C 51 push ecx
:0041387D E8FE2E0000 call 00416780
:00413882 8B442420 mov eax, dword ptr [esp+20]
:00413886 8B4C2424 mov ecx, dword ptr [esp+24]
:0041388A 8BD0 mov edx, eax
:0041388C 83C40C add esp, 0000000C
:0041388F 2BD5 sub edx, ebp
:00413891 83E20F and edx, 0000000F
:00413894 3854390C cmp byte ptr [ecx+edi+0C], dl --->>> Protectionnya disini, kamu harus menyamakan apa yang ada di ecx+edi+0c, dimana ecx adalah bagian tertentu dari serial kamu !!!
:00413898 7402 je 0041389C --- >>> Lompat kalau sama !!! , kalau engga Bad cracker !!!
:0041389A 33DB xor ebx, ebx --->>> kalau kamu memilih metode patch patch disini adalah metode terbaik, ganti dengan nop nop.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00413898(C)
|
:0041389C 8BE8 mov ebp, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041383B(C), :0041383F(U)
|
:0041389E 85DB test ebx, ebx --->>> test ebx, jika 0 unregistered, jika 1 registered user !!!
:004138A0 7584 jne 00413826

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00413824(C), :00413829(C)
|
:004138A2 5F pop edi
:004138A3 5E pop esi
:004138A4 8BC3 mov eax, ebx
:004138A6 5D pop ebp
:004138A7 5B pop ebx
:004138A8 83C40C add esp, 0000000C
:004138AB C3 ret

Source: flag eRRatum

0 comments:

Post a Comment

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews