HACKER - Reverse Engineering - Hedef Bölge
  Ana Sayfa
  Ziyaretçi defteri
  HACKER OLAMAK İSTİYENLER
  Başkaların Bilgisayarını Haclemek istiyenler
  Hackerlerin Kullandığı Programlar
  HABERLER
  Hack-Güvenlik
  => Kişisel Güvenlik ve Korunma Yöntemleri
  => Wireless Şifresi Kırma
  => Domain Adınızı Güncellemeyi Unutursanız...
  => Bir Rootkit Hikayesi...
  => RootKit Nedir ve Sistemden Nasıl Temizlenir?
  => Bruteforce Yöntemi İle Şifre Kırma Hesaplaması
  => Sosyal Mühendislik ve Senaryolar
  => Detaylarıyla Denial Of Service
  => N-Keylogger v1.3 ve Kullanımı
  => Access, Mssql ve Mysql ile Sql Injection
  => Soru-Cevap ile Hack Nedir, Nasıl Yapılır?
  => CSRF nedir, Nasıl yapılır?
  => Sql Server Şifreleri Nasıl Saklar?
  => PGP ye Pratik Giriş, PGP Kullanımı ve E-mail Güvenliği
  => Sanal Mağazacılık Ve Sanal Alışveriş
  => Veritabanı Saldırıları
  => Reverse Engineering - Visual Basic P-Code
  => Efkan Forum 2 - Database Yolu ile Hackleme Yöntemi 2
  => Efkan Forum - Database Yolu ile Hackleme Yöntemi
  => Kredi Kartları Güvenliği ve Carding Hakkında
  => Sosyal Mühendislik Hakkında
  => İnternet Bankacılığı ve Güvenliği
  => Reverse Engineering - Self Modifying
  => Reverse Engineering - Hedef Bölge
  => Reverse Engineering - Keygenler
  => Reverse Engineering - .Net Programları
  => Reverse Engineering - DeDe & VBDecompiler
  => Telnet ile Mailbox Temizlemek
  => Port Listesi
  => Virüs Çeşitleri
  => Proxy, Firewall ve kurulumu
  => Kredi Kartlarının Onaylanması ve Check Digit Algoritması
  => Exploit Nedir, Sistemlere Sızma Yolları
  => Exploitler Nedir, Nereden Bulunur ve Nasıl Kullanılır?
  => Advanced Coding / Buffer Overflow Exploit -3
  => Advanced Coding / Buffer Overflow Exploit -2
  => Advanced Coding / Buffer Overflow Exploit -1
  Windows Püfleri
  Arşiv
  İletişim

Reverse Engineering - Hedef Bölge

 

erhaba arkadaşlar bu yazımda Reverse Engineeringde hedef bölgeye ulaşma yöntemlerinden bahsedeceğim.Hedef bölge 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 göre kısıtlamaları kaldıran noktalar  vb.Bu yöntemlerle birçok programda ulaşmamız gereken yerlere en az ıskalamayla konumlanabiliriz.Biraz bilgi ve kafamızı çalıştırmak programın korunuş şekline göre belirli sürede istediğimiz yere ulaşmamızı sağlayacak.Debugger ile programı açtığımız zaman binlerce satır assembly kodu görü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 göre ihtimaller,karmaşalar artabilir.Packlenmenin dışında(Packli dosyanın üstünde unpack etmeden çalışmak iyi bir fikir değildir) programcının kendine özel programa dahil ettiği koruma yöntemleri olabilir.Bunlarda işin uzamasına sebep olur ve crackerın caymasına sebep olabilir.Örneğin programda self-modifying (kendi üzerinde değişlik yapan programlar) yöntemi kullanılıyorsa programı dikkatli bir şekilde takip etmemiz gerekir.Bu tür programlarda kilit noktaları bulmak zaman alabilir.Örneğin programa bir döngü dahil edilir ve bu döngü 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 gördüm.Programı buradan indirebilirsiniz.

Anlatacağım yöntemler 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ı göreceksiniz.Diğer ilkel Reverse Engineering araçlarıyla sürünmenin anlamı yok.

Öncelikle programı Ollydbg ile açıyoruz ve kısaca gözatıyoruz ve yöntemlerimizi sıralamaya başlıyoruz.Unutmayınki bunlar genel olarak kullanılan yöntemler.Programın çalışma mantığına yada sizin edindiğiniz tecrübelerle kendinize ait yöntemlerde bulabilirsiniz.

İlk olarak string arama yöntemiyle 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 bölgeye 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. 

Reverse Engineering - Hedef Bölge

 

 

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 gözatmamı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 gözatmaktır.Call stack’a yukarıda üstünde “K” olan butona tıklayarak ulaşabilirsiniz.Şimdi bunu uygularsak

Öncelikle 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 (“K” yazan buton)  Karşımıza gelen call stack penceresinde mesaj penceresinin verdiği hatayı ve hangi dll’den hangi apinin çağrıldığını göreceğiz.Örneğin USER32.dll’den MessageBoxA apisi çağrılmış.Bu USER32.MessageBoxA  olarak bize ekranda sunulur.

Reverse Engineering - Hedef Bölge

 

Buradan mesaj penceresinin çağrıldığı yeri bulup üzerine tıklayıp o bölgeye ulaşıyoruz.Çağrıldığı yerden bahsedersek.Call stack penceresinde üstte “called from” göreceksiniz.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 bölgeye gözatıyor ve gerekli değişiklikleri yaparak programı kırmış oluyoruz.

Şimdi üçüncü yöntemimize 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 yöntemde memory’de arama yapacağız.Eğer aradığımız string’İ string tablosunda bulamadıysak oraya gözatı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 (ascii kısmıda bazı durumlarda gerekebilir) yazıp aratmak.Şimdi arama yaptık ve başarılı olduysak karşımza dump penceresi gelecek.Orada “Name:” yazısını görmüş 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.

Reverse Engineering - Hedef Bölge

 

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 bölgeyi 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. yöntemimize.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 göstereceğ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 göreceksiniz.Buradaki return to xxxxxx yazann ifadeler bizim geri dönmemizi sağlayacak.Bunların çok işinize yaradığını ileride göreceksiniz.Geri dönüş için return to xxxxxx ifadesine sağ tıklayıp Follow in Disassembler diyoruz ve bir üstten çağrıldığı yere geri dönmüş oluyoruz.

Bunuda ek not olarak söyleyeyim.Ö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.Yöntemimiz 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.

 

Reverse Engineering - Hedef Bölge


 

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 görebiliriz.Self-modifying vs gibi durumlarda breakpointler koyarak şifreli bölgeleri şifrelerinin çözüldüğü anda izleyebiliriz.Yani orası tekrar şifrelenmeden programı duraklatıyoruz ve o bölgeye gözatıyoruz.

Bunun dışında programına göre daha  birçok yöntem uygulayabiliriz.Gösterdiklerim genel olarak kullanılan yöntemlerdir.Programların korunmasına bağlı olarak yapmamız gereken bazı şeyler değişkenlik gösterebilir.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 görüntüleri tamamen FireX’e aittir.Copy paste yapanlar emeğe saygı gösterirlerse sevinirim.Saygılarımla..

 

Bugün 36 ziyaretçi (38 klik) kişi burdaydı!
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol