| Level : Beginner
Halo, bro ... Jumpa
lagi di tutorial gua yang ke 6, mudah mudahan elu
ngak bosen dengan tutorial gua ini ;), nah sekarang gua mau ngajarin elu, gimana
programmer bisa begitu payah dalam memproteksi programnya.
Target :
Win Rescue 98, download di Tucows.
Tools :
SoftIce 3.x (kita ngak perlu benernya).
WDasm 8.9
Text Editor yang bagus (boleh gua saranin Dana ?)
---------------------------------------------------------------------------
Ok, bro. Win Rescue 98, adalah kelanjutan dari Win Rescue 95, yang mana membackup critical
files dalam Windows, tentu WR 98, hanya dapat dipakai dengan Windows 98. Utility ini
adalah "harus" dimiliki oleh mereka yang memakai Micro$hit WinDolls 98, heh heh
... Utility in mendapat 5 "cows" di tucows. Ok, sekarang kita kenalan dulu sama
softwarenya. Jalankan WR 98, oh ada nagscreen dengan countdown 10 sampai 0, baru kita bisa
menajalankan softwarenya. Heii, ada registration box juga, dan ada checkbox yang didisable
untuk unregister user untuk menghilangkan nag ini.
Ok, gua pikir gua lagi banyak waktu. Jadi daripada cepet cepet bikin patch, mending gua
"menikmati" software ini dulu. Gua mo nyari key-nya. Nah, pertama gua lihat di
Quickview.exe , ahaa ... lihat di imported function, ada GetWindowTexta. Hmmm, bagus
bagus. Jalankan WR 98, masukkan keynya "lanny", jangan pencet continu dulu.
Masuk ke SoftIce, pasang breakpoint di GetWindowtexta dengan mengetik "BPX
GetWindowTexTa" (tanpa kutip, case insensitif). Keluar dari SoftIce, sekarang boleh
tekan continu. Boom ! kembali ke softIce. Sekarang kita baru ada di kernel, tekan F12
untuk masuk ke code WR98. Trace (F10), beberapa saat ... Oh, god Callnya banyak nian.
Hmmm, agak sulit kalau begini. Disable dulu breakpointnya, dengan mengetik "BD
0", keluar dari SI, Hmm pesan error. Ingat ingat pesan ini. Jalankan WDasm, load
WR98. Save dalam bentuk text, akan menghasilkan file text sebesar 17 MB-an kalau ngak
salah. Buka dengan text editor favorit kamu, JANGAN pake WordPad maupun Notepad, mereka
akan hang dengan sukses. Cari di text file kalimat error-nya(WARNING - Incorrect Key
Entered).
---------------------------------------------------------------------------
Newbie Note :
Lho, flag ? Katanya mo nyari serial number, kok pake acara deadlisting segala ? Hehehe,
iya gua keliatannya memang mau match padahal engga, yang gua cari di dalam dead listnya
(file textnya), adalah call terakhir sebelum ke pesan "WARNING ...", ngerti ?
Gua mo lihat kapan kondisinya jika salah, misalnya salah jika EAX=0, atau ZERoFlag = 1,
dengan kata lain gua trace dari bawah keatas. Cara ini efektif untuk software yang
proteksinya menggunakan banyak call, walau bisa juga tanpa deadlist, tapi lebih cepat
dengan deadlist.
---------------------------------------------------------------------------
Lu, akan ketemu pesan error di sini :
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0046BDCB(C)
|
* Possible StringData Ref from Code Obj ->"WARNING - Incorrect Key Entered"
|
:0046BE3F B86CBF4600 mov eax, 0046BF6C
:0046BE44 E8AB0AFDFF call 0043C8F4
:0046BE49 A118FC4700 mov eax, dword ptr [0047FC18]
:0046BE4E 8B00 mov eax, dword ptr [eax]
:0046BE50 E84748FCFF call 0043069C
Perhatikan baik baik sebelum pesan kesalahan muncul, ada lompat bersyarat pada 0046BDCB.
GoTo offset itu.
* Possible StringData Ref from Code Obj ->"SvetCHRISTA"
|
:0046BDBF B8ECBE4600 mov eax, 0046BEEC
:0046BDC4 E80782F9FF call 00403FD0
:0046BDC9 85C0 test eax, eax
:0046BDCB 7472 je 0046BE3F
:0046BDCD 33D2 xor edx, edx
:0046BDCF 8B83F4010000 mov eax, dword ptr [ebx+000001F4]
:0046BDD5 E88E49FBFF call 00420768
:0046BDDA A1C8FC4700 mov eax, dword ptr [0047FCC8]
:0046BDDF 8B00 mov eax, dword ptr [eax]
:0046BDE1 8B9094020000 mov edx, dword ptr [eax+00000294]
:0046BDE7 8D8530FEFFFF lea eax, dword ptr [ebp+FFFFFE30]
* Possible StringData Ref from Code Obj ->"win.chr"
|
:0046BDED B900BF4600 mov ecx, 0046BF00
:0046BDF2 E83D7FF9FF call 00403D34
:0046BDF7 8B9530FEFFFF mov edx, dword ptr [ebp+FFFFFE30]
:0046BDFD 8D8534FEFFFF lea eax, dword ptr [ebp+FFFFFE34]
:0046BE03 E8DA93F9FF call 004051E2
:0046BE08 8D8534FEFFFF lea eax, dword ptr [ebp+FFFFFE34]
:0046BE0E E82B97F9FF call 0040553E
* Possible StringData Ref from Code Obj ->"He must increase."
|
:0046BE13 BA10BF4600 mov edx, 0046BF10
:0046BE18 8D8534FEFFFF lea eax, dword ptr [ebp+FFFFFE34]
:0046BE1E E85982F9FF call 0040407C
:0046BE23 E82799F9FF call 0040574F
:0046BE28 8D8534FEFFFF lea eax, dword ptr [ebp+FFFFFE34]
:0046BE2E E81995F9FF call 0040534C
* Possible StringData Ref from Code Obj ->"Registration Key Accepted"
|
:0046BE33 B82CBF4600 mov eax, 0046BF2C
:0046BE38 E8B70AFDFF call 0043C8F4
:0046BE3D EB16 jmp 0046BE55
Lihat di Offset tsb, oh ada JE, alias Jump if Zeropoint = 1, berarti Call sebelum test
EAX,EAX pastilah menghasilkan nilai eax = 0 jika key salah/invalid, dan eax=1 untuk key
bener/true.
Ok, gua siap siap balik ke SoftIce, ketika mata gua melihat "sesuatu".
* Possible StringData Ref from Code Obj ->"SvetCHRISTA"
|
:0046BDBF B8ECBE4600 mov eax, 0046BEEC
:0046BDC4 E80782F9FF call 00403FD0
:0046BDC9 85C0 test eax, eax
:0046BDCB 7472 je 0046BE3F
:0046BDCD 33D2 xor edx, edx
:0046BDCF 8B83F4010000 mov eax, dword ptr [ebx+000001F4]
:0046BDD5 E88E49FBFF call 00420768
:0046BDDA A1C8FC4700 mov eax, dword ptr [0047FCC8]
:0046BDDF 8B00 mov eax, dword ptr [eax]
:0046BDE1 8B9094020000 mov edx, dword ptr [eax+00000294]
:0046BDE7 8D8530FEFFFF lea eax, dword ptr [ebp+FFFFFE30]
WHATTT ??? WTF is that ???? Kurang Ajarrr, cape cape gua (dengan niat tulus) mau nyari
key, ternyata ini jenis proteksi hardcode, alias program cuman memiliki 1 COde yang valid,
ya SATU untuk SEMUA ..., lihat SvetCHRISTA , SHITT ... itulah keynya yang valid, alias
bener.
---------------------------------------------------------------------------
Newbie Note :
Well, flag ... darimana anda yakin Sve... itulah keynya ? Hmmm, dari pengalaman man ...,
gua udah pernah trace software sejenis, yang menggunakan key yang dihardcode. Jadi gua
yakin kalau ini jenis proteksi yang sama. Pelajaran bagi lu, kalau kamu lihat tipe
proteksi kaya gini , maka string "aneh" di atas CALL adalah keynya yang valid.
Ok ?
---------------------------------------------------------------------------
Ok, keluar dari text, hapus textnya. Jalankan WR98. Isikan key tsb ... dan blaaa ...
registration key accepted ... (kita memang "pembeli" yang baik, kan ?)
Hehehe, lihat ! Cracking kadang bisa sangat "lucu" khan ? Ok, sekian dulu
tutorial dari gua, C-ya in next tutorial !!
Hope, you enjoy my HardWork, bye ! |