Yeni bir ay ve yeni konular ile yine birlikteyiz .Bu ay işleyeceğimiz iki ana konu var ; birincisi program kırarken kullanılan yöntemler , ikincisi ise kırarken kullandığımız araçlar ve kullanımları .
Çok merak edilen bir konu var bana gelen mailler arasında bir programı kırmak ne kadar zamanımızı alıyor ? Bu soruya genel bir cevap vermek mümkün değil , ama şöyle bir düşünürsem iki yıldan fazla bir zamandır kırdığım programların ortalamasının 10 dakika ile 30 dakika arası olduğunu söyleyebilirim , tabii ki bu süre benim iki yıl içerisindeki edindiğim tecrübe ile kazandığım hız sayesinde bu kadar az . İlk programları kırmam 4 –5 saat sürebiliyordu. Hatta o zamanlar karmaşık assembly kod ormanında kaybolup aynı yerleri saatlerce boş yere dolaştığım olmuştur , ama zamanla insan bu ilk bakışta karışık gelen assembly kodlarına göz aşinalığı kazanıp farklı derleyicilerin derlediği çalıştırılabilir dosyaların aralarındaki farkı bile görebilecek duruma geliyor. İlk crack deneyimlerimde en basit yol olan patch (yama) uygulama yöntemi ile kırdığım programları daha sonraki zamanlarda daha fazla inceleyerek seri numara üretme algoritmalarını çözerek yeniden kırdım . Evet , ilk program kırma denemenizde başarılı olmasanızda , asla yılmayın. İlk yazımı okuyanlar bilirler bu işin en önemli sırrı sabırdır. Kesinlikle aceleci olmayın.
Bir programı kırmaya yada tersine çevirmeye (reverse) karar verdiğinizde eğer maksadınız , programa bedavadan sahip olmaksa bu işten şimdiden vazgeçin inanın ki bu kadar uğraşmaya değmez çünkü o programı mutlaka birileri zaten kırmıştır ve siz onun crack’ini internette kolaylıkla bulabilirsiniz hatta full versiyonunu da bulmanız mümkün olabilir. Eğer , ben kullandığım programların benden habersiz ne yaptıklarını bilmek istiyorum diyorsanız ve herşeyin kontrolüm altında olmasını istiyorum diyorsanız devam edin. Demo programların kırılmasını örnek olarak vermemiz ise sadece bir araçtır ama kesinlikle bir amaç değildir , demo programlardaki nag screen ( programın demo olduğuna dair uyarı ekranı) , seri numaralar , tarihsel ve rakamsal kısıtlamalar iyi birer örnek teşkil ettiğinden yazılarımda kullanılmaktadır. Crackerlar ve programcılar arasında karşılıklı bir yarış vardır , programcılar yeni bir koruma geliştirir crackerlar onu kırar , programcılar daha yeni bir koruma geliştirir ve asla kırılamayacağını idda eder , crackerlar yeniden kırar ve bu sefer programcıları tiye alırlar , programcılar buna çok kızarlar ve artık programlarının içine sadece kırmaya çalışan crackerların farkedeceği türden mesajlar bırakırlar ( PleasefollowmeMRCracker adında bir fonksiyon buna bir örnek) bu iş böylece sürüp gider ;ama asla kırılamayacağı iddia edilen neredeyse tüm programlar her zaman kırılmıştır. Yani galip gelen taraf hep cracker’lardır. Neyse şimdilik bu konuya burada ara veriyorum.
Bir programı kırmak için onun dissasemble edilmiş koduna ihtiyacınız vardır , birincisi ya bir dissasembler programı kullanarak o programın dead list denilen ( çalışır vaziyette olmayan bir exenin içeriği) olan assembly kodunu elde edersiniz yada ikinci yol olan debugger kullanarak live(canlı ; yani o anda çalışan ve cpu’da işlenen assembly kodu)olarak bu programın içeriğini görüntüleyebilirsiniz. Birinci yöntem daha uzun süre gerektirir , çünkü tüm exe analiz edilip içinde geçen tüm jump ve call komutları için referans açıklamaları oluşturmak gerekir, diğer yöntem ise daha basittir , sadece o anda işlenen kodun birkaç satır öncesi ve sonrası da dahil olmak üzere görüntülenir . Yeni başlayanlar için birinci yol daha kolay ve cazip gelebilir , çünkü bu yöntemle assembly kodlarının yanında daha fazla açıklama vardır ve bir altyordamın nerelerden çağrıldığını ve hangi adresleri yada değişkenleri kullandığını daha açık bir şekilde görebilirsiniz , ama ben bir an önce kırayım şu programı diyorsanız debugger kullanmak daha işinize gelicektir , bunun birinci sebebi disassembler programların exe’yi disassemble etmek için harcadığı zamandan kurtulmuş olacaksınız ikinci sebebi ise breakpoint (Durak noktası) koymadaki kolaylıktır. Debugger kullanarak daha dinamik breakpoint’lar koyma şansına sahipsiniz . Örnek vermek gerekirse: Disassembler olarak Wdasm programını ve Debugger olarak da Softice programını ele alalım. Önümüzde bir program var ve registiration olanağı var , bizden bir kayıt numarası (programın parası ödendikten sonra size yollanan şifre) istiyor , birinci yol ile yani disassembler ile kırmamız için bu programın exe’sini disassemble etmemiz gerekiyor , bu en azından 10 dakikamızı alıcaktır. Daha sonra programın kullandığı windows API’lerinin listesinden getwindowtexta fonksiyonunu arayıp tümüne breakpoint koyma şansımız var ama bunun için fonksiyonun geçtiği herbir satıra listeden çift tıklayarak gelip breakpoint olarak işaretlememiz gerekiyor bu da en azından 5 dakikamızı alıyor , ve programı çalıştırıyoruz (aslında burada wdasm programının debugger özelliğini kullanmış oluyoruz aksi halde işimiz çok daha uzun sürer) .Program çalışmaya başladıktan sonra getwindowtexta fonksiyonunu çağıran her breakpoint’te duraklayacağız , çünkü biz breakpointları koyarken hangisinin neredekine ait olduğunu bulmamız zor olacağından biz tümüne koyduk ve bu yüzden de bayağı vakit kaybedip istediğimiz registiration ekranındaki geçen getwindowtexta fonksiyonuna ulaşabildik. Buraya kadar en azından 30 – 40 dakika vaktimizi aldı , bundan sonra ise disassembler ekranındaki satırları rahatça inceleyip gerekli kodu , algortimayı yada patch uygulayacağımız noktayı bulduk. Şimdi aynı programı softice ile kıracağımızı düşünelim , yapacağımız çok basit programı çalıştırıp registiration ekranına geliyoruz uydurma bir şifre yazıp OK tuşuna yada bunun benzeri tuşa basmadan evvel Softice programına atlıyoruz ctrl+D ile ; şimdi sıra breakpoint’u koymaya geldi bpx getwindowtexta yazıp enter’a basıyoruz , ve tekrar programımıza dönüyoruz şimdi OK tuşuna yada herneyse o tuşa basıyoruz , işte! Softice’ın içindeyiz bundan sonrası ise beş dakikamızı alır ve registiration kodunu yada patch uygulayacağımız noktayı tespit ediyoruz . İşte bu kadar bu yöntem ise en fazla 10 dakikamızı aldı.
Tabii ki disassembler programların da çok işe yaradığı zamanlar yok değil mesela bazı programları disassemble ettikten sonra programın içinde geçen textlere ait referans satırlarına daha kolay ulaşıp bazen debuggerda çok vaktimizi alabilecek crackleri çok daha kısa bir zamanda gerçekleştirmemiz de mümkün olabiliyor . Bilhassa debugger ile uğraşıp ta bir türlü istediğiniz API ye denk gelen bir breakpoint bulamadığınızda .
Şimdilik bu konuda yazıcaklarım bu kadar ilerki aylarda bu konunda ayrıntılarına gireceğiz mesela debugger ile breakpoint’u bulduktan sonra crack uygulamamız gereken noktayı nasıl tespit edeceğimizi ve bunun hakkında ipuçları .
Gelelim ikinci konumuza yani kırarken kullandığımız araçlar ; tahmin ettiğiniz gibi softice debugger olarak , wdasm disassembler olarak ( ben bunu genelde TR-Scene deki yazılarım için kullanıyorum) , hexworkshop hexeditör olarak ve patch uygulamak için , pcom yada herhangi bir c++ yada pascal derleyici de crack yada keymaker hazırlamak için .
Yine bana gelen mailler içinde sıkça sorulan bir soru breakpoint ların uygulanamaması hakkında , yani birçok okuyucu bpx getwindowtexta yazdığında hata mesajı aldığını yazıyor . Bunun sebebi softice ‘ın bu API den habersiz olması , peki nasıl haberi olacak ? Softice programını ilk kurduğunuzda yapmanız gereken birkaç şey var yani benim size tavsiye edebileceğim , 1- Symbol loader’a girip edit menüsünden Softice initialization settings yazan yere tıklayıp , initialization string yazan yere x; den sonra şunları eklemeniz lines 40; wd; wr; wc 20; code on; yani string şöyle görünmeli’ X;lines 40;wd;wr;wc 20 ;code on; ‘ buradaki 40 ve 20 rakamlarını kullandığınız ekran çözünürlüğüne göre ayarlayabilirsiniz , code on komutu assembly komutların yanında hexedecimal olarak makine kodlarının da yer almasını sağlıyacak bu da bize patch hazırlamakta lazım olacak . 2-winice.dat dosyasını notdefteri ile açıp başında EXP ibaresi olan tüm satırların önündeki ; ( noktalı virgül ) işaretlerini kaldırmanız gerekiyor işte böylece softice windows API lerinden haberdar olacak , ayrıca softice da iken başını hatırladığınız bir API yi bulma için exp kmoutunu kullanabilrisiniz mesela ‘exp getwindow’ komutu bize getwindow ile başlayan tüm API leri listeleycektir.
Peki softice ile patch uygulayacağımız nktayı bulduktan sonra ne yapacağız diyorsanız işte burda hexeditörün kullanımı devreye giriyor , diyelimki jz xxxx:xxxx olan bir komutu jnz yada jmp xxxx:xxxx yaptığımızda programın çalışacağını tespit ettik , o zaman hemen elimize bir kağıt kalem alıp bu satırdan bir yada iki satır evvelinden başlayarak bir yada iki satır sonrasına kadar olan komutların hexedecimal formattaki makine kodlarını yazmaya başlayalım (yukarıda bahsettiğim code on komutu bunları görmemizi sağlıyacak ) , not alma işlemimiz bittikten sonra Hexworkshop programı ile yada herhangi bir hexeditör ile bu exe yada dll dosyasını açıyoruz ve az evvel not aldığımız hex kodları bu dosya içinde tümünü olmak üzere aratalım , büyük bir ihtimalle bir yerde bulacaktır bu kodları işte burası bizim crack’i uygulayacağımız nokta , ister bu noktanın ofset adresini hexworkshop tan okuyup bir yere yazarak c++ yada pcom gibi basit bir derleyici ile gerekli değişikliği yapacak bir crack yazabiliriz yada daha hexworkshop’ta iken istediğimiz kodu değiştirebiliriz. Böylece crack’imizi sabit bir hale getirmiş olduk .
Aynı şekilde crack uygulayacağımız noktayı wdasm programından da elde etmemiz mümkün , dikkat ederseniz wdasm programın en altında bulunan status bar ‘da o anda olduğumuz satırın ofset adresi yer alır.
İşte adım adım bir programın crack edilme işlemi bu şekilde gerçekleşiyor . Bu arada bilmeniz gereken birkaç husus daha var mesela op kod denilen makine dili komutların karşılığı yani softice da iken assembly kodların sol tarafında görülen hexedecimal rakamların anlamları , biraz çalışma ile bize lazım olacak bu op kodları ezberlemek fazla zamanınızı almayacaktır.Yada internetten intel op codes olarak arattıp bu kodların tümünü içeren dokümalara ulaşmanız da o kadar zor değil .
Bu aylık ta bu kadar umarım bu ayki dersimizden de birşeyler öğrenmişsinizdir. Bu arada söylemek istediğm bazı şayler var . Birincisi bu ay ve geçtiğimiz ay içinde aldığım maillerin çoğunda benden bazı programları crack etmem isteniyordu , maalesef son iki ay içerisinde buna hiç vaktim olmadı çünkü yoğun bir şekilde program yazıyorum ve inanki bu yazıyı yazmak için bile zor zaman buldum , ama bana mail atmaktan vazgeçmeyin :) . Şimdilik hepinize cevap yazamasam da fırsatını bulur bulmaz kesinlikle mailleriniz cevaplanacaktır, en azından yardımcı olmaya çalışırım elimden geldiğince . Bir de yine çok soru alan bir konu da motiva wincari programının keymaker’ı hakkında , o ayki yazımda da belirttiğim gibi o keymaker’ı çalıştırmak için biraz da olsa assembly kodlarını incelemeniz gerekiyor ( yani motiva wincari programının size vereceği şifrenin son on karekterini keymaker’a girmeniz gerektiğini kendiniz bulmanız gerekiyor :) ) Ayrıca motvia nın programları ile ilgilenen arkadaşlara da iyi bir haberim var önümüzdeki ay tüm motiva programlarının keymaker’ı hazır ve derlenmiş olarak belki bu sayfada belki başka bir sayfada yer alıcak duyrulur...
Hepinize kolay gelsin , ve crack denemelerinizde iyi şanslar...
Hazırlayan:
c0dewarrior ; zet_98@yahoo.com