HACKER - Reverse Engineering - Self Modifying
  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 - Self Modifying

 

Merhaba arkadaşlar bu yazımda self-modifying’den bahsedeceğim. Self-modifying’e programın verilerini şifreleme tekniği diyebiliriz.Örneğin yazdığımız programı kısıtlı ve register edince sınırlamalar kalkıyor diyelim.Seri numara doğru girilince “Teşekkür ederiz.Programınız kaydedildi” gibi bir mesaj penceresi çıkarttığımızı varsayalım.Eğer programı korumadıysak 1 dakika içerisinde stringleri taratıp çıkan tabloda bunun yerini bulabilir ve hangi adresteyse oraya gidebiliriz.Yada güvenlik önlemi alınmamış programın assembly kodlarının ortada olması programın kısa sürede analizi ve kırılmasıyla sonuçlanır.

Selfy-modifying tekniğinde program kendisi üzerinde değişiklik yapar.Her birleştiği dosyada farklı görünüm alan virüslerde buna örnektir.Self-modifying mantığını açıklarsak;

Öncelikle elimizde programımızı şifreleyecek harici bir program olduğunu düşünelim.İlk olarak harici program programımızın verileri çeşitli matematiksel işlemlerden geçirerek farklı bir görünüme sokar.Daha dosyaya programın verilerini eski haline getirecek kod eklenir.Son olarakta Entry point(başlangıç noktası) kodların eklendiği yerin ilk kodundaki adrese ayarlanır.

Burada unutmamamız gereken önemli bir nokta var.Assembly’den bildiğiniz üzere her programın code ve data section’ı var.İşletim sistemi ve platformlara göre bunun dışında birçok section daha var.Fakat bunlar temel olanları.Code section çalıştırılabilir ve okunabilir.Data section ise okunabilir ve yazılabilir.Yani gördüğünüz üzere code section’a yazma izni verilmiyor.Eğer code section’a veri yazılmak istenirse program orada kırılır.Bunun için PE Header’da değişiklik yaparak.Code section’ın characteristics değerine yazılabiliri ekleyeceğiz.Bu şekilde code section’a veri yazabileceğiz.

Çalışma mantığına gelirsek.Hatırlarsanız verileri eski haline getirecek kod eklemiş ve entry point’i buraya ayarlamıştık ve code section’ı yazılabilir hale getirmiştik.Programı akışı entry pointten başlayacak ve programa eklenen döngülerle ve işlemi terse çeviren matematiksel işlemlerle programımızın orjinal verileri eski haline getirilecek.Herşey tamamlandığında programımızın OEP (Original entry point) zıplanacak ve program akışına devam edilecek.

Programımızı korumasının yanında kötü niyetli program yazan kişilerde bu yöntemi kullanarak antivirüslerden programlarını gizleyebilmekteler.Fakat günümüzde antivirüsler genel olarak bu tür şeylere karşı duyarlı hale geldiler.Fakat hala işe yaramakta.Örneğin programımızın kodlarını eski haline getirip bir yerden sonra yeniden şifreleyebiliriz.Şöyle düşünürsek;

Örnek amacıyla bu şekilde gösterilmiş.Yoksa program akışında böyle çizgisel bir ilerleyiş yoktur.Aralarda dallanmaya sebep olacak fonksiyonlar,zıplamalar vs olabilir.Yani 45500de program 60000’e gidip sonra geri dönüşle 50000den devam edebilir.

45000 Alttaki verileri çöz
...
46000 Üstte kalan verileri tekrar şifrele,alttakileri çöz
...
48000 Üstte kalan verileri tekrar şifrele,alttakileri çöz
...

Bu şekilde devam ettiğini düşünelim program akışının.Önceden geçtiğimiz yerleri tekrar şifreliyor.Sonradan geçeceğimiz yerlerin bir kısmınıda çözüyoruz.

Bunları anlattıktan sonra gerçek bir program üzerinde bunu kısaca uygulayalım.

Gerekenler

Ollydbg

LordPE (Entry point ve code section’ın karakteristiğini Olldbg’da PE Headerda değişiklik yaparak değiştirebiliriz.Fakat bu programla kısa sürede kolay bir şekilde bu değişiklikleri yapabiliriz)

Örnek program olarakta sadece form’dan oluşan Kod Enjeksiyonu dökümanımda kullandığım programımı kullanıyorum.Tahribat dosya arşivinden buradan indirebilirsiniz.

Ayrıca kodların eklendiği örnek programı da buradan indirebilirsiniz.

Öncelikle kendimize boş alan arıyoruz ve yeterli alanı bulduğumuzda seçerek çift tıklıyoruz.

Reverse Engineering - Self Modifying

 

Karşımıza gelen pencereden itibaren ve takiben programı şifrelememize yarayan kod bloğunu yazıyoruz.Programın sadece küçük bir kısmında yapacağız bu işlemi.Yani sadece üstteki resimde gözüken kod bloğunu.

MOV ECX,44CA98              //Programı OEP’den itibaren şifrelemeye başlıyoruz.ECX’e OEP değerini veriyoruz.
XOR DWORD PTR DS:[ECX],12345 // 12345 ile xorluyoruz
INC ECX  // ECX’i arttırıyoruz
CMP ECX,44CADE  // Kod bloğunda resimde görüldüğü üzere son adres 44CADD Son olarak DDli biten adresinde üstünden geçiyor ve 1 artıyor.Bizde 1 üstü olan DE ile karşılaştırıyoruz.
JNZ SHORT 0044CAED // ECX 0044CAED olana kadar xorlamaya devam ediyoruz.Olduysa program akışına devam ediyoruz.

Aynı işlemi tersine çevirecek kod bloğu. Xorlardığımız birşeyi tekrar aynı değerle xorlarsak karşımıza aynı sonuç çıkar.

MOV ECX,44CA98
XOR DWORD PTR DS:[ECX],12345
INC ECX
JNZ SHORT 0044CB01
JMP SHORT 0044CA98  // İşlem tamamlandıysa OEP’e zıplıyoruz.

Reverse Engineering - Self Modifying

 

Şimdi olayı açıklayalım.Programımıza önce şifreleyecek daha sonrada çözecek kod bloğu yerleştirdik.Resimde gözüken kod bloğunun ilk adresinden son adresine kadar hepsini xorlayacağımız için bir döngüye ihtiyacımız var.ECX’e ilk adresin değerini veriyoruz ve o registerdaki değeri,yani içerisindeki adresi pointerla işaret ediyoruz. İşaret ettiğimiz adresteki verileri bizim belirlediğimiz herhangi bir değerde olabilir bu 12345 ile xorluyoruz.ECX’i 1 arttırıyoruz.Son adrese geldikmi diye kontrol ediyoruz.Gelmediysek xorladığımız yere geri dönüyoruz.

İşlem tamamlandığında anlamsız veriler göreceğiz.Yani şifrelendi.F8 ile adım adım izlerseniz anlık olarak olayı takip edebilirsiniz.

Daha sonra şifreyi çözeceğimiz yere geçiyoruz yine aynı mantıkla karşılaşıyoruz.Aynı değerle tekrar xorluyoruz ve değerler eski haline dönüyor.Son adrese ulaşmamızı kontrol ediyoruz.Geldiysek zaten program deşifre olmuş oluyor ve OEP’e zıplıyoruz.

Şimdi xor’dan bahsedelim. Xor kullanmamızın sebebi bir veriyi xorladıktan sonra çıkan veriyi tekrar xorlarsak eski veriyi elde edebiliyoruz.Örneğin abc 123 ile xorlanınca BF9 değeri ortaya çıkıyor. BF9 ile 123’ü xorlarsak tekrar abc değerini elde ederiz.Bunun yerine and kullandığımızı düşünelim ve sonuçlara bakalım.Aynı zamanda xor’u açıklayalım.

XOR                               Çıkan değeri tekrar XORluyoruz

1 0 1 0                          1 0 0 1
0 0 1 1                          0 0 1 1
-------                             --------
1 0 0 1                          1 0 1 0


AND                             Çıkan değeri tekrar ANDliyoruz

1 0 1 0                         0 0 1 0
0 0 1 1                         0 0 1 1
-------                            --------
0 0 1 0                         0 0 1 0

Gördüğünüz üzere AND ile ilk değeri geriye getiremedik.Olayın işleme mantığı bitlere göre olduğu için.Bitleri göstererek anlattım.Matematiksel mantıksal kapılar..

Verilerimizi şifrelerken başka geri getirme garantisi olan başka matematiksel işlemlerden de faydalanabilirdik.Fakat işlem çok uzamasın diye genel olarak kullanılan xordan bahsettim.

Şimdi LordPE ile programın entry pointini(şifreleme için yazdığımız ilk kod - 0004CAE8) değiştirelim ve code section’ı yazılabilir hale getirelim.

Reverse Engineering - Self Modifying

 

Ve yaptığımız değişikleri kaydediyoruz.Herşeyi doğru yaptıysak programımız sorunsuzca çalışıyor.

Şimdi programın işleyişiyle ilgili birkaç ekran görüntüsüne gözatalım.

Reverse Engineering - Self Modifying

 

Reverse Engineering - Self Modifying

 

Ollydbg self-modifying olan programlarda olay karıştığı için yanlış gösterebiliyor.O yüzden kod ekranında sağ tıklayıp analysis->remove analysis seçerseniz daha düzgün bir şekilde takip edebilirsiniz.Eğer remove analysis çıkmıyorsa analiz edilmemiştir.O şekilde devam ediniz.En son OEP’e zıpladığınızda eski kodları aynen göreceksiniz.

Bu konu hakkında anlatacaklarım bu kadar.Yazı,örnek program ve ekran görüntüleri tamamen FireX’e aittir.Kopyalayanlar emeğe saygı duyarlarsa sevinirim.Saygılarımla..

 

Bugün 47 ziyaretçi (51 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