Edit : İlgili tutoriali grdüm..

Benim kadar cracking sitelerini gezenler bilirki bunlar birer hazine gerçekten. Aklınızla ve bilginizle çok yaşayınız ustam.

saolasın firex ellerine sağlık.

//Bu yazımda Reverse Engineering'e programın kilit noktalarını bulmamızla ilgili bazı ipuçları verdim. Dkümanda anlamadığınız terimler olabilir. En eskiden en yeniye doğru gitmenizi neririm. Dkümanlarımın birer bütün olduğu ve asıl konuya ynelmem gerektiğinden her seferinde en baştan bütün terimleri açıklayamıyorum. Bu, diğer dkümanlarım yada reverse engineeringle ilgili sorucaklarınız varsa sorunuz. Okuyan arkadaşlar yorumlarını eksik etmezlerse sevinirim. Bu konuda destekleyen tüm arkadaşlara ve tahribat bilgi bankasına ekleyen reneye teşekkür ederim.//Merhaba arkadaşlar bu yazımda Reverse Engineeringde hedef blgeye ulaşma yntemlerinden bahsedeceğim. Hedef blge olarak kasdettiğimiz yerler; Programın register olup olmayacağına karar verildiği noktalar, program açıldığında daha nce register edilmişmi diye kontrol eden ve ona gre kısıtlamaları kaldıran noktalar vb. Bu yntemlerle birçok programda ulaşmamız gereken yerlere en az ıskalamayla konumlanabiliriz. Biraz bilgi ve kafamızı çalıştırmak programın korunuş şekline gre belirli sürede istediğimiz yere ulaşmamızı sağlayacak. Debugger ile programı açtığımız zaman binlerce satır assembly kodu grürüz. Bizim işimize yarayacak kısım bu binlerce satırın arasındaki tek satır kod olabilir. Sadece tek zıplama noktası program durumunu belirleyebilir. Peki ona nasıl ulaşacağız?Programına gre ihtimaller, karmaşalar artabilir. Packlenmenin dışında programcının kendine zel programa dahil ettiği koruma yntemleri olabilir. Bunlarda işin uzamasına sebep olur ve crackerın caymasına sebep olabilir. rneğin programda self-modifying yntemi kullanılıyorsa programı dikkatli bir şekilde takip etmemiz gerekir. Bu tür programlarda kilit noktaları bulmak zaman alabilir. rneğin programa bir dngü dahil edilir ve bu dngü daha nceden şifrelenmiş verileri çeşitli işlemlerden geçirerek eski normal haline sokar. Orası ile işimiz tamamlandığında tekrar şifrelenir ve program akışı devam eder. Self-modifying'den daha sonraki yazımda ayrıntılı olarak bahsedeceğim için şimdilik geçiyorum. Program yazarken bazı sınırlar, kurallar, lçütler vardır. Bunların dışına çıkamayız. Bu sebeple de genel olarak programlar derleyicisine bağlı olarak birbirine benzemektedirler. Bu tür işlere biraz aşina olduktan sonra bir programı debugger ile açtığımızda hangi derleyici ile derlendiğini assembly kodlarına bakarak anlayabiliriz. Eğer programı yazan adamda bunları biliyorsa işimiz dahada zorlaşacaktır. Fakat azimle ve sabırla mutlaka üstesinden gelinebilir. Korunmasına bağlı olarak saatler, günler alabilir. rneğin starforce koruma sisteminin aşılması epey zaman almıştı. Şimdi işe koyulalım. Ben daha nceden keygenleri anlatırken Visual C++ ile kısa bir program yazmıştım. Aynı programı burada da kullanmayı uygun grdüm. Programı buradan indirebilirsiniz. Anlatacağım yntemler her zamanki gibi Ollydbg temel alınarak anlatılacaktır. Son zamanların en gelişmiş ve kullanışlı debuggerı. Kullanmasını bilirseniz gerçekten çok işe yaradığını greceksiniz. Diğer ilkel Reverse Engineering araçlarıyla sürünmenin anlamı yok. ncelikle programı Ollydbg ile açıyoruz ve kısaca gzatıyoruz ve yntemlerimizi sıralamaya başlıyoruz. Unutmayınki bunlar genel olarak kullanılan yntemler. Programın çalışma mantığına yada sizin edindiğiniz tecrübelerle kendinize ait yntemlerde bulabilirsiniz. İlk olarak string arama yntemiyle başlıyoruz. Kodların olduğu pencerede sağ tıklıyoruz ve Search for->All referenced strings'e basıyor ve karşımıza çıkan string tablosunda arama yaptırıyoruz. rneğin rnek programda seri numara doğru olmayınca "invalid serial number" yazıyor. Bunu karşımıza çıkan string tablosunda aratırsak programı packlemediğim için kolayca bulabilecek ve üstüne çift tıklayarak o blgeye konumlanmış olacaksınız. Ondan sonra tek yapacağınız zıplama noktasında değişiklik yapmak olacak. Birde dipnot olarak bir uyarıda bulanayım. String tablosu karşımıza çıktığında en aşağılarda bir yerde olacağız. Bu yüzden string tablosunda en üste çıkıp en üstlerden birisini seçip, büyük küçük harf duyarlılığını kaldırıp aratın. Yoksa sonuca doğru yapsanızda ulaşamazsınız. String tablosuna bunun dışında "register","registered","thanks","unregistered" gibi programlarda sıkça kullanılan anahtar kelimeleri aratarakta yerleri hakkında bilgi sahibi olabiliriz. Bir programda ncelikle string tablosuna gzatmamız çok nemlidir. Çünkü burada işimize yarayacak birşey bulduysak süreyi muazzam oranda kısaltır. İkinci olarak program hata mesajı verdiğinde "invalid key" vs veya bir form açıldığında pencereyi kapatmadan programı duraklatarak call stack'a gzatmaktır. Call stack'a yukarıda üstünde "K" olan butona tıklayarak ulaşabilirsiniz. Şimdi bunu uygularsakncelikle debugger ile programı çalıştırıyoruz. Daha sonra seri numara kısmına kafamızdan birşey sallayarak hata mesajı verdiriyoruz. Karşımıza "invalid serial number" hata mesajı gelecek. Pencereyi kapatmadan Ollydbg'da pause butonuna basıyoruz ve call stack'a giriyoruz Karşımıza gelen call stack penceresinde mesaj penceresinin verdiği hatayı ve hangi dll'den hangi apinin çağrıldığını greceğiz. rneğin USER32. dll'den MessageBoxA apisi çağrılmış. Bu USER32. MessageBoxA olarak bize ekranda sunulur. Buradan mesaj penceresinin çağrıldığı yeri bulup üzerine tıklayıp o blgeye ulaşıyoruz. Çağrıldığı yerden bahsedersek. Call stack penceresinde üstte "called from" greceksiniz. Eğer biz called from sütununda başında user32 veya herhangi bir dllnin ismi ile başlayana tıklarsak o dllye gideriz. Bunun için programımızın adı ile başlayana tıklıyoruz. Yani programımızın adı "register. exe" ise Ollydbg register. xxxxxx olarak otomatik olarak heryere yerleştirir ve işimiz kolaylaşır. Called from sütununun yanındada procedure/arguments sütunu yeralmakta oradada nereden ne çağrılmış ve hangi argümanlar hangi değerleri almış izleyebilmekteyiz. Bizim için mesaj penceresinin çıktığı yer gerekli olduğu için procedure sütununda USER32. MessageBoxA, Called from sütununda da register. xxxxxxx yazan satırı seçip tıklıyoruz. Yani register programı xxxxxxx adresinde USER32. dll'den MessageBoxA apisini çağırmış. Tıkladıktan sonrada o blgeye gzatıyor ve gerekli değişiklikleri yaparak programı kırmış oluyoruz. Şimdi üçüncü yntemimize geçelim. Bu sefer programın formundaki label'da yazan "Name:" yazısını "isim:" olarak değiştirelim. String tablosunda bulamadığımızı farzedelim. Bu yntemde memory'de arama yapacağız. Eğer aradığımız string'İ string tablosunda bulamadıysak oraya gzatıyoruz. Yapacağımız şey üstte "M" harfi yazan butona tıklayıp çıkan pencerede sağ tıkladıktan sonra labeldaki yazıyı unicode kısmına yazıp aratmak. Şimdi arama yaptık ve başarılı olduysak karşımza dump penceresi gelecek. Orada "Name:" yazısını grmüş olacağız. Oranın solunda yazan adresi alıyoruz ve ana penceredeki hex dumpta sağ tıklayıp Goto->Expression diyoruz ve bu adresi yazarak oraya konumlanıyoruz. Daha sonra "isim:" yazısını seçip sağ tıklayıp Binary->Edit diyoruz ve gerekli değişikliği yaptıktan sonra okleyip. Değişiklik yaptığımız blgeyi seçip sağ tıklatıp copy to executable file dedikten sonra karşımıza çıkan pencerede sağ tıklayıp save file diyoruz ve kaydediyoruz. Gelelim 4. yntemimize. Bu sefer system stack'ı izlemeyi ğrenelim. Ekranın sağ alt kşesinde olan pencere. Girdiğimiz bir fonksiyondan nasıl bir üst konuma çıkabileceğimizi gstereceğim. Programı çalıştırıyoruz hata mesajı verdiriyoruz yine ve pause butonuna basıyoruz. Daha sonra sağ alt kşedeki system stack'ı inceleyince bazı string ifadelerin geçtiğini ve en son yapılan işlemin en üstte olduğunu greceksiniz. Buradaki return to xxxxxx yazann ifadeler bizim geri dnmemizi sağlayacak. Bunların çok işinize yaradığını ileride greceksiniz. Geri dnüş için return to xxxxxx ifadesine sağ tıklayıp Follow in Disassembler diyoruz ve bir üstten çağrıldığı yere geri dnmüş oluyoruz. Bunuda ek not olarak syleyeyim. rneğin programımız kısıtlı her yapacağı işlemde programın register olup olmadığını kontrol ediyor ve onu kontrol eden hep aynı fonksiyonu çağırıyor. Bizde işlemleri takip ettik ve fonksiyonun çağrıldığı yeri yakaladık diyelim. O fonksiyonun içine girince en üstteki satırda sağ tıklayarak Find references to->Selected command diyoruz ve hangi adreslerden çağrıldığına dair karşımıza bir liste çıkıyor. Eğer sağ tıkladığımız yerde adres varsa Adress Constant çıkacak ve o adrese nerelerden ulaşıldığına dair liste karşımıza çıkmış olacak. Bu da işimize çok yarıyor.5. Yntemimiz api aratma. rneğin program registrye bakarak register olup olmadığını anlıyor ve okuduğu değerleri karşılaştırıp programın register olup olmadığını belirliyor. Bizde RegOpenKeyA apisinin programda kullanıldığı yeri bulursak orada değişiklik yaparak programı nceden register olmuş gibi aldatabiliriz. Bunun için Ctrl+N kısayolula apilerin olduğu pencereyi açıyor ve aradığımız apiyi yani RegOpenKeyA yazıyoruz ve sağ tıklayıp set breakpoint on every reference'a basıp bütün RegOpenKeyA kullanılan yerlere breakpoint koyuyoruz. Eğer girişte program registry'i kontrol ediyorsa programı restart edip çalıştırdığımızda program akışı breakpoint koyduğumuz için duraklayacak ve RegOpenKeyA apisinin çağrıldığı yerde duracak bizde gerekli araştırmaları ve değişiklikleri yapıp programı kırmış olacağız. Son olarakta genel olarak yapabileceğimiz birkaç şeyden bahsedeyim. Ollydbg'da search for, find references to'nun diğer fonksiyonlarını kullanarak string, komut bloğu, komut, sabit, komuta referans, adrese referans olmak üzere birçok şey aratabiliriz. Hex dump'ın üstündeki pencereyi ve registerları izleyerek gideceğimiz adresi grebiliriz. Self-modifying vs gibi durumlarda breakpointler koyarak şifreli blgeleri şifrelerinin çzüldüğü anda izleyebiliriz. Yani orası tekrar şifrelenmeden programı duraklatıyoruz ve o blgeye gzatıyoruz. Bunun dışında programına gre daha birçok yntem uygulayabiliriz. Gsterdiklerim genel olarak kullanılan yntemlerdir. Programların korunmasına bağlı olarak yapmamız gereken bazı şeyler değişkenlik gsterebilir. Fakat sonuç hep aynı kapıya çıkacaktır. Bir programı kırmanın birden fazla yolu vardır. Bu konu hakkında anlatacaklarım bu kadar. Bu yazı, rnek program ve ekran grüntüleri tamamen FireX'e aittir. Copy paste yapanlar emeğe saygı gsterirlerse sevinirim. Saygılarımla..-anonimleştirildi-

arşivlk bi dkman daha. herkes saygı gstersn lan emeğe. adam sizin için yazıyo : )

ee şey nası desem yukarı yukarı ve ileri ola ki grmemiş olanlar vardır :)) Bu niymiş la?

parmakların zeval grmesin hacı ANDY // Entelkoylu. Com Burası mezopotamya, küresel oyunun bumerang cehennemi. Tanrı bile dünya düzeni için peygamberlerini hep buraya gndermiş. Çünkü burası aslında yeryüzü cennetiymiş. Daha Fazla Bilgi İçin Profilimi İnceleyiniz...

sağlam dküman olmus Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı ktektir!

eline koluna bacanaa saaglık hocam=)) " ' "

: paralı programın olıyım crackle beni firex =) zuahuahaahua :Dbu arada firex harbi güzel yazıyosun tebrikler, ama ben okumuyorum :) yalan yok bizde, ilgi alanım deil ondan :)

abi anlamadıgım konu cracklenmicek program yok o zaman :S ee neden parlaı yapıyolar o zamanS: Her türlü piping işleriniz itina ile yapılır.

Şimdiye kadar kendim le açıklayıcı bir dküman grmemiştim çok güzel olmuş:Ellerine sağlık Hatta holy ün dediği gibi çook sağlam dküman!

: Sayın Hocam ncelikle Selamlar! Üçüncü yntemininizi başarı ile uyguladım dediğiniz gibi label deki Name: ismini değiştirdim. Ancak kafama takılan şey şu? Bunu değiştirmek captionda yada aboutta istemediğimiz bir yazıyı revize etmek için mi kullanılır yoksa hedef blgeye erişmek için başka bir unsurmu vardıda ben algılayamadım. Teşekkürler... Evet amaç memoryde arama yapıp hedef blgeye ulaşmak. İstenmeyen bir yazıyı değiştirmek burada asıl amaç olsada zellikle delphi programlarında bazı bileşenlerin zelliklerini değiştirmek istediğimizde de bunun aracılığıyla buluyoruz. Reverse Engineering esnektir ve programına gre şartlar değişebilir. Bu da bilinmesi gereken bir yntemdir. Kullandığım rnek program bunu gstermeye tam olarak elverişli olmadığı için label değiştirme gibi birşey denedim.

: abi anlamadıgım konu cracklenmicek program yok o zaman :S ee neden parlaı yapıyolar o zamanS: Abi şimdi olay şu. Küçük firmaların programlarının büyük firmalara oranla daha çok korunduğunu grürsün. Çünkü küçük firmanın pazar payı çok küçük 3-5 kişiye satsamda para kazansam diye bakıyor adam. Ama büyük firmalar zaten pazarın büyük kesimine hitap ettikleri için adamların zaten geliri var. Birde reklamını yapayım diye uğraşıyorlar bunlara gz yumuyorlar bir miktar. İş yerleri falan satın almak zorunda programlarını. Birde hitap ettikleri kesim büyük olunca. Cracker teamlerin hedefide ilk olarak bunlar oluyor. Onunda büyük katkısı var tabi.

Teşekkürler hoja... Acıma Yetime Dner Koyar G...

paralı programın olıyım crackle beni firex =) zgürlüğü anladıkça ona daha az sahip olursun.

Sayın Hocam ncelikle Selamlar! Üçüncü yntemininizi başarı ile uyguladım dediğiniz gibi label deki Name: ismini değiştirdim. Ancak kafama takılan şey şu? Bunu değiştirmek captionda yada aboutta istemediğimiz bir yazıyı revize etmek için mi kullanılır yoksa hedef blgeye erişmek için başka bir unsurmu vardıda ben algılayamadım. Teşekkürler...

Yine güzel bi dküman hoca (:

süper olmus sagol hocam :)