Program Kırma

 

Window' s altında Program Kırma ;

            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.