Bir programýn kýrýlmasý o programýn yazýlýþ amacý dýþýnda davranmasýna sebep olmak olarak yorumlanabilir.Programlar belli bir programlama dilinde yazýldýktan sonra derleyici denilen baþka programlar ile çalýþtýrýlabilir kod haline çevrilir. Bu çalýþýtýrýlabilir kod içerisinde CPU nun anlayacaðý dilde ve iþletim sisteminin özelliklerine baðlý olarak makine dili olarak Hexedecimal (onaltýlýk) bir düzende bulunur.Makine koduna çevrilmiþ programlar içerisinde programcýnýn yazmýþ olduðu kodu barýndýrmazlar. Öyle ise programýn içeriðini derlenmiþ bir koddan açýk ve net bir biçimde anlamak çok zordur. Makine dili denilen dil aslýnda rakamsal bir dildir .Bu onaltýlýk sayý düzeninde bulunan kodlar ikilik sayý sistemine (binary) dönüþtürülerek CPU ‘ya gider 0 ve 1 ler bilgisayarýn iþleyiþindeki temel olan elektrik sinyalý var (1) elektrik sinyali yok (0) olarak CPU tarafýndan yorumlanarak programlar iþler.

Makine dilininin bu zor ve anlaþýlmaz oluþundan dolayý ASSEMBLY dili geliþtirilmiþtir. Bu dil bilgisayar dilleri içerisinde en alt düzey programlama dilidir. Bu dil ile yazýlan programlar CPU ya direkt olarak hitap eder . Fakat bu dil ile uzun programlar yazmak ta oldukça zor ve gereksizdir. Bunun yerine diðer diller ile yazýlan programlarda o programlama dilinin yetersiz kaldýðý ya da yavaþ kaldýðý noktalarda daha hýzlý ve direkt eriþim olanaðýna sahip bir dil olan ASSEMBLY ile prosedür veya fonksiyonlar yazýlýr. Günümüzde bu sadece bazý aygýt sürücülerini yazarken yada virus lerde kullanýlmaktadýr.

Gelelim Windows programlarýna ; Windows için yazýlan programlar da çeþitli programlama dilleri yada program geliþtirme araçlarý ile yazýlarak derlenir ve çalýþtýrýlabilir kod haline dönüþtürülür. Bu çalýþtýrýlabilir kodun DOS programlarýnda en belirgin farký içerisinde kullandýðý iþletim sistemini özel fonksiyonlarýdýr. DOS iþletim sisteminin INTERRUPT denilen bazý fonksiyonlarý vardýr. Bu fonksiyonlar windows için yazdýgýnýz programlarýn içerisinde direkt olarak yer almazlar bunun yerine Windows iþletim sisteminin hali hazýrda yazýlmýþ fonksiyonlarý kullanýlýr.(Bu konu üzerinde istenirse daha ileriki yazýlarýmda durabilirim , ama þimdilik bu kadar yeterli diyorum)

Hepimizin mutlaka dikkatini çekmiþtir Windows / System dizini altýnda bir çok DLL uzantýlý dosya mevcuttur. Ýþte bu dosyalar içerisinde programlarýn çalýþýrken kullandýðý birçok fonksiyon yada taným bulundururlar. Ýþte bu fonksiyonlar programlarý kýrmamýza yardýmcý olacak noktalardýr. Daha önce de belirttiðim gibi programlar makine dilinde bulunuyordu dosyalarda , öyleyse bunlarý anlayabileceðimiz bir þekile sokmak için bu programlarý ASSEMBLY diline çevirmemiz gerekecek. Bu iþ için kullanacaðýmýz programlara Disassembler denilir . Programlarýn ham içeriðini yani onaltýlýk sayý düzenindeki içeriðini görüntüleyebilmek içinse HEX editör denilen programlara ihtiyacýmýz olacak . Bunun haricinde ise bazen programlarýn CPU daki iþeniþ sýrasýndaki içeriðini görüntüleyebilen ve aslýnda programlardaki hatalarý ayýklamak için kullanýlan Debugger denilen programlar ise ileride çok iþimize yarayacak.

Öyle ise program kýrmak için gerekli olan þeyleri þöyle sýralayabiliriz. 1-ASSEMBLY dilini bilmek 2- Windows iþletim sistemini iyi tanýmak ve fonksiyonlarýný bilme (C++ kullananlar bu konuda pek zorluk çekmiyecektir ) 3-Ýyi bir Disassembler programý 4-Hexeditör programý 5-Debugger programý 6- Sabýr (en gerekli þey) . Bu saydýklarýmýn hepsine sahip olduðunuzda program kýrmak için herþeyiniz vardýr anlamýna geliyor.

Ýsterseniz küçük bir örnek ile baþlayabiliriz. Bu iþ için oldukça kolay bir korumasý olan ve bizimde kullanacaðýmýz bir program olan HEXWORKSHOP ile iþe baþlayabiliriz. Bu program daha önce birçok kiþi tarafýndan ve farklý yöntemler izlenerek kýrýlmýþtýr . Benim izleyeceðim yötem ise bazýlarýnýza saçma gelebilir ama unutmayýki buradaki amacým kendimi ispat etmek deðil sadece öðretmektir.

Hedef Program :HexWorkshop 2.52

Nereden Bulurum : www.bpsoft.com

Kýrarken Kullanýlan Programlar :Wdasm89 & HexWorkshop 2.52

Öncelikle programýn Demo yada deneme sürümü olmasýnýn bize saðladýðý dezavantajlarý inceliyoruz. Programý ilk açtýðýmýzda karþýmýza bu programýn 20 gün süreli bir demo versiyon olduðunu hatýrlatan bir pencere ile karþýlaþýyoruz.Eðer Bu versiyonu bu yakýn tarihte kurduysanýz ayrýca size upgrade etmenizi öneren bir baþka pencere daha çýkýyor karþýmýza . Bunun haricinde programýn Demonstration Version diye bir menüsü olduðunu görüyoruz , buraya týkladýðýmýzda ise bir Serial Number soran pencere ile karþýlaþýyoruz. Öyleyse bize burada bir doðru serial numara yada programa doðru olduðunu zannetirecek bir yöntem gerekli. Programý disassemble ederek iþe baþlýyabiliriz. Programýn disassemble iþlemi bittikten sonra kullandýðý windows fonksiyonlarýný inceleyelim functions menusunden imports ‘a baktýðýmýzda user32.getwindowtexta fonksiyonu iþe yarayabilir diyoruz ve ilk denememizi bu fonksiyon ile yapýyoruz . Programý load edip user32.GetWindowTextA fonksiyonlarýnýn kullanýldýðý yerlere durak noktasý koyuyoruz. Aþþaðý yukarý 7- 8 arasý durak noktasý koyduktan sonra programý çalþýtýrýp Demonstration Version menüsünü týklayýp Serial Number olarak herhangi bir no giriyoruz.Ben 99999999 girdim ve register tuþuna bastýðýnýzda HOP Wdasm içinde buluyoruz kendimizi yani iþe yaradý !! . Daha sonra F8 tuþu ile hatalý Serial Number girdiðimize dair ekran çýkana kadar devam ediyoruz ilerlemeye. Bu noktaya gelene kadar iþlenen kodlarý iyi takip edin çünkü en son iþlenen Dallanma komutunun yeri çok önemli yani (je , Jne , Jz , jnz , Ja , Jb gibi ) . En nihayetinde hata ekraný çýktýðýnda OK ye basýp iþlemi tekrar yapalým ve her iþlenen koþullu dallanma komutuna bir durak noktasý daha koyalým.

:0043178B E8E8DC0100 call 0044F478 à Serial Number ýn ekrandan okunmasý
:00431790 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FFFFFEFC]
:00431796 83C164 add ecx, 00000064
:00431799 E8F21BFDFF call 00403390
:0043179E 50 push eax
:0043179F 8D45DC lea eax, dword ptr [ebp-24]
:004317A2 50 push eax
:004317A3 E8E8B90000 call 0043D190
:004317A8 83C408 add esp, 00000008
:004317AB 680C534800 push 0048530C
:004317B0 8D45DC lea eax, dword ptr [ebp-24]
:004317B3 50 push eax
:004317B4 E867CE0000 call 0043E620
:004317B9 83C408 add esp, 00000008
:004317BC 85C0 test eax, eax
:004317BE 0F8414000000 je 004317D8
:004317C4 8D45DC lea eax, dword ptr [ebp-24]
:004317C7 50 push eax
:004317C8 E893970000 call 0043AF60
:004317CD 83C404 add esp, 00000004
:004317D0 8945EC mov dword ptr [ebp-14], eax
:004317D3 E907000000 jmp 004317DF
:004317DF 837DEC00 cmp dword ptr [ebp-14], 00000000
:004317E3 0F8479000000 je 00431862 à Girilen Serial Nuber Yanlýþ ise dallanma olur
:004317E9 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FFFFFEFC]
:004317EF 83C164 add ecx, 00000064
:004317F2 E8991BFDFF call 00403390
:004317F7 50 push eax

Yukarýda görülen kod üzerinde daha fazla da çalýþabilirir ama ben buna þu an gerek duymuyorum ,çünkü bu program girilen numarayý dogru kabul ettikten sonra çalýþtýðý dizinde bir dosya oluþturuyor. REG uzantýsý olan bu dosya var olunca yada içerisinde belli bir imza olunca girilen serial numaranýn doðru olup olmadýðýný bir daha hiç kontrol etmiyor ve böylece sonsuza dek Full version olarrak çalýþýyor .Anlaþýldýðý gibi bu JE 00431862 komutunu JNE 00431862 yada tamamýný NOP komutuna çevirirsek bu program gireceðimiz herhangi bir kodu kabul edicek ve Crackimiz tamamlanmýþ olucaktýr.Wdasm programýndan aradýðýmýz byte larýn 30BE3h adresinde yer aldýðýný görüyoruz . Hexworkshop programýnýn kendisini kullanýp Hworks32.exe dosyasýný açýp 30BE3h adrsine gidiyoruz 0F8479000000 byte larýný 909090909090 byte larý ile deðiþtirip baþka bir isimle kaydediyoruz. Çünkü ayný isimle o an hafýza da olan bir dosyayý kayýt edemeyiz . Daha sonra HexWorkshop programýndan çýkýp orijinal dosyanýn adýný baþka bir isimle kaydedip kýrýlmýþ dosyayý orijinal adýyla kaydedersek program hazýr olur. Geriye çalýþtýrýp herhangi bir Serial Number kodu yazýp Register etmek kalýyor. Bu aylýk bu kadar , önümüzdeki ay yeni konular ve daha ileri tekniklerle birlikte olmak üzere Hoþçakalýn.

Herhangi bir konudaki düþünce ve önerilerinizi mail adresime gönderebilirsiniz.