Code Cracking e giris

    Piyasadaki Programlari kirmak için http://astalavista.box.sk/ den yada benzeri sitelerden crack ler indirerek programlari çalisir hale getirmeyi yada Nag Screenlerden kurtulmayi biliyorsunuzdur.
(Bilmiyosaniz zaten bu sayfada size göre bisi yok)

    Peki bu programlarin nasil yapildigini merak etmedinizmi hiç?
Aslinda düsünüldügü kadar zor bir is diyildir... Biraz deneyiminiz varsa 5 dakkanizi harcayip istediginiz programi internetten crack indirmeden kendiniz kirabilirsiniz.

    Öncelikle biraz programlama ve ASM Bilgisine ihtiyaciniz var, Eger assemble size birsey ifade etmiyorsa caninizi sikmayin Holy babaniz size anlatir bisiler... Eger iyi düzeyde Programlama bilginiz varsa, Programcilarin Kolayca kirilmayan programlar yazmalari için dikkat etmeleri gereken noktalari da burda açiklicam... simdilik assemblein Maiknenizin anladigi dil oldugunu söyliyelim.

    Öncelikle sunu söylemeliyim ki Her programi kiran kesin bi yönetm yoktur, Biraz kafayi yormaniz gerekio... elinizdeki Programlari cracklemek için assagidaki programlara ihtiyaciniz olacak..

Programin adi Açiklama
Hex Workshop Çok kullanisli bir Hex editor.
W32Dasm 32 Bit Disassembler, Exenin kodlarini birazcik daha anlasilir bi hale sokup bize faydali oluyor.
RegMon Registry Monitor,Programi kullanmakta oldugunuz zaman içinde Windows Registrysine eklenen yada degistirilen herseyi size rapor eder.
FileMon File Monitor, Hangi dosyanin neresinde ne degisiklik yapildigini bildirir
Numega Softice Debugging Programi ama Dos tabanli oldugu için Windows Milennium ve sonrasinda çalismiyor, onun için açiklamasina girmicem

    Isterseniz öncelikle bu is için en çok isinize yariycak program olan Hex Workshopu kendisini kullanarak cracklemekle basliyalim :)

Registration Key isteyen Programlari kirma:
(Hex Workshopu kullanarak Hex Workshopu crackliyoruz :) ehue

    Mesela Kimi program düzgün çalismasi için size Registration key sorar...
Alin iste Hex Workshop V2.50 böyle bi program :)

    Basliyoruz.. Öncelikle programi açin... help de registration u gördünüz mü? sizden bi registration key istio... sallayin bisiler... Tutmadi dimi? Eger çok balli biri diyilseniz hayatiniz boyunca denesenizde tutturamazsiniz. Makine Salladiginiz kod üstünde islem yapar, programin güvenligi açisindan verdiginiz user name e göre sifrenizde degisik olmak zorundadir çünkü...

ana mantik en basite indirgenmis olarak sudur...

eger girilen usename ve sifre algoritmaya uyuyorsa... Bu adam bu programi istedigi gibi kullanabilir.
eger girilen usename ve sifre algoritmaya uymuyorsa... Siktirip gitsin, bedawa dagitmiyoruz...

    Algoritmayi çözmek gerçekten zordur, onun yerine biz ana mantigi tersine çevirmeye çalisicaz..
yani program koduyla oynayarak adamin yanlis sifre girmesi halinde programa dogru sifre girilmis muamelesi yaptirmaya çalisicaz... bu durumda makine, mantik olarak dogru username ve sifre girilirsede yanlis sifre muamaelesi uyguliycak :) ama söyledigim gibi salliyarak dogru sifre girmek imkansiz gibi bisi zaten.

 Herneyse Sifreyi kafadan attiniz... size bi hata mesaji geldi.. error mesaj penceresinin basligina bakin ne yaziyo...

"Registration unsuccessful" bunu bi yere not edin lazim olucak.

Hex workshopu kapatin ve bi yere programin exe dosyasinin(HWORKS32.EXE) bi yedegini alin.

simdi W32Dasm prgoramini açiyoruz... menuden disassembler > open file to disassemble i seçiyoruz. burdan HWORKS32.EXE yi açiyoruz, ve program bizi biraz beklettinten sonra önümüze makine dilinde birsürü kod çikariyo...

bi bok anlamadiniz dimi çikanlardan :)

    Herneyse Yine menuden Refs > Dialog references i seçelim. ve burda biraz önce gördügümüz "Registration unsuccessful" yazisini bulalim. hmm sanirim orda yok, unutalim o zaman simdilik... assagidakileri uygulayalim... eger aradigimiz pencerenin adini burda bulsak asagidakilere gerek kalmazdi ama bulamadik napalim...

Menulerden Search>Find text e tiklayarak Registration Unsuccessful yazalim.

söle bisi çikicak karsimiza...

Name: DialogID_0075, # of Controls=003, Caption:"Registration Unsuccessful", ClassName:""
001 - ControlID:FFFF, Control Class:"STATIC" Control Text:"You have entered an invalid registration number." 
002 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Please confirm you entered a valid.....
003 - ControlID:0001, Control Class:"BUTTON" Control Text:"&OK" 

Yani kisaca kafadan attigimiz serial i yazinca karsimiza çikan diyalogun makina dilindeki hali....

    Üstteki satirdaki DialogID_0075 e dikkat edelim simdide...
Tamam, simdi Dialog references e dönelim programin Refs menusundeki.
Dialog: DialogID_0075 satirini bulup çift tiklayalim. azicik yukari scroll edelim... su satiri gördükmü?

* Possible Reference to Dialog: DialogID_0075 

    Burda Asm ile yazilmis satirlar var, yukaridaki satirin anlami su... Program bu noktada Registration Unsuccessful     baslikli diyaloga basvuruyor. Bu pencere yanlis sifre girildiginde çiktigina göre aradigimiz kod buralarda biryerlerde fakat devam etmek için biraz Assemble ögrenmemiz gerekicek :)

    Push, Lea, call, jne, jmp, jne, .... bunlarin hepsi asm komutlari fakat biz konu program kirmaysa bizi ilgilendirenler sadece mantiksal seçim yaptiran komutlar... su suna esitse söle yap, bu bundan büyükse böle yap falan gibi seyler yani... Açiklamalari yapicam birazdan siz sadece okuyun anlamasanizda simdilik... Bu tip komutlara örnek olarak Jne, Jmp, Je, jae, jb, je falan gibi komutlar var asm dilinde... Farkettiyseniz hepsi J harfiyle basliyo...

    Program Registration unsuccessful diyaloguna ihtiyaç duyduguna göre bu noktadan biraz önce sifrenin dogru yada yanlis oldugunu kontrol eden kod yazili olmali, bu yüzden * Possible Reference to Dialog: DialogID_0075  satirindan yukari dogru her satira bakip J ile baslayan komut ariyoruz... biraz yukari çiktiktan sonra asagidaki gibi satirlar görüceksiniz. highlighted satiri asagidaki gibi Je ile baslayan komutun üstüne gelin. o satir yesil olucak...

simdiii..... Je li satiri sectikten sora status bara bakiyoruz @Offset yazisini gördünüzmü? onu bi köseye not ediyoruz... sonundaki h harfini ve bastaki 0lari not etmenize gerek yok.. hatta not etmeyin. yani 256B3 'ü not edin.

    Burdaki offset, aradigimiz kodun exe içindeki yeri... tamamdir istedigimizi aldik artik W32Dasm yi kapatabiliriz. Hex Workshopu açin, hatirliyorsaniz bi yedegini almistik, siz program files in icinde duran orjinalini açin...

    Simdi menuden File > open a tiklayarak daha önceden yarattigimiz Hworks.exe nin yedegini açalim. karsiniza yine bi sürü sey çikti... Edit Menusunden Gotoyu seçin, Beggining of File'i tiklayip Offset'e 256B3 yazin. aynen assadaki gibi yani.. 

Gotoya tiklayin... karsiniza söle bisi gelicek...

 

    Imlecin bulundugu konumun yaninda 0F 84 bulunuyor... Bu biraz önce W32Dasm programinda gördügümüz Je komutunun Hex kodundaki anlami bu... Hatirlarsaniz W32 asm programinda Registration unsuccessful diyalogundan önceki J ile baslayan ilk komutu aramistik. bu komut Je yerine baska birseyde olabilirdi o zaman burda 0F 84 yerine baska bir kod da olabilirdi... Yani bu offsette 0F 84 bulmamizin sebebi serialin dogrulugunun Je komutuyla kontrol edilmesidir. farkli komutlarin Hex kodlarini da assagida verdim... ASM komutlari genellikle kisaltmalardan olustugu için yanlarina ingilizce anlamlarini yazdim.

Hex Kodu: ASM Kodu: Anlami:
75 yada 0F85 jne jump if not equal
74 yada 0F84 je jump if equal
EB jmp jump directly to
90 nop no operation
77 yada 0F87 ja jump if above
0F86 jna jump if not above
0F83 jae jump if above or equal
0F82 jnae jump if not above or equal
0F82 yada 72 jb jump if below
0F83 yada 73 jnb jump if not below
0F86 yada 76 jbe jump if below or equal
0F87 jnbe jump if not below or equal
0F8F yada 7F jg jump if greater
0F8E jng jump if not greater
0F8D jge jump if greater or equal
0F8C jnge jump if not greater or equal
0F8C jl jump if less
0F8D jnl jump if not less
0F8E jle jump if less or equal
0F8F jnle jump if not less or equal

    Eveet kodun yerini bulduk, kodu da bulduk sira geldi kodu ters çevirmeyee... Çok basit... Je nin anlami Jump if equal, O zaman bunun yerine Jump if not Equal (Jne) komutunu koyarsak kod tam tersine çalisicak. Jne nin hex karsiligi 0F 85... o zaman buldugumuz degerin yerine bunu girelim... amman dosyaya insert yapmiyalim, dosya boyutu degisirse büyük ihtimalle çalismaz çünkü. 0F 85 in üstüne yazalim yani, 84 ü 85 yapalim. üstüne yaziyorsaniz Hex Workshop sizi uyaricak zaten.

    Eveet bunuda yaptiysaniz artik save edin, Hex workshoptan çikin. Hex workshopun exe dosyasini silip yerine degistirdigimiz exe dosyasini koyun... önceden yaptigimiz gibi helpden registrationa basin... Ve kodu yine sallayin :) kodun dogrulandigini göreceksiniz :)  Size username ve organization soracak ve register olmus olacak...

    Biraz uzun ve zahmetli ama basit sayilir. Bunu degisik programlarda da deneyebilirsiniz. yada programlama bilginiz varsa burda ögrendiginiz offsetteki kodu degistiren bir program yazabilirsiniz.

 

    Bu kadari programi kirmaniza yeter ama eger baskalarinin kullanmasi için programi kiran bir exe dosyasi yaratmak istiyorsaniz o konudada yardimci oliim... Asagidaki örnek hex workshop için yazdigim Crackin source code u, belki faydali olur.


Uses Crt;

Const A: Array[1..2] of Record {<-------- 2 byte cracklenecek}
A : Longint;
B : Byte;
End =
((A:$256B3;B:$0F),(A:$256B3;B:$84));
{<--offset "256B3" ve "0F 84" deisecek}

Var Ch:Char;
I:Byte;
F:File;
FN:file of byte;
Size:longint;


Begin
Writeln('My Hex Workshop Crack :) ');writeln('Hex Workshop V2.54 Crack');
Assign(F,'HWORKS.EXE'); {<-------------- Cracklenecek dosyanin adi}
{$I-} Reset(F,1); {$I+}
If IOResult <> 0 then
begin
writeln('Dosya bulunamadi');
halt(1);
end;
For I:=1 to 2 do {<---------------------- 2 byte Cracklenecek}
Begin
Seek(F,A[I].A);
Ch:=Char(A[I].B);
Blockwrite(F,Ch,1);
End;
Writeln('Dosya Cracklendi!');
End.

    Bu olayda biraz zahmetli ama programlara 100lerce dolar saymaktan iyidir :)
Bosuna mi yaziom acaba ya :) bu kadarini yapicak adam çikarmi merak ediorum walla... bunu becerdiyseniz bana mail atin ya merak ettim :))