Reverse Engineering - Loader&Trainer

Merhaba arkadaşlar sizlere daha önce patching hakkında ipuçları vermiştim.Bu yazımda loaderlardan bahsedeceğim.

Gerekenler

Ollydbg
Masm 9 (Loader kaynak kodunu assemble etmek için)

Loader kaynak kodu+Loader assemble edimiş+Deneme amaçlı programı Tahribat.Com Dosya Arşivinden veya buraya tıklayarak indirebilirsiniz.

Günümüzde programların kırılmasına önlem olarak programların çoğunda packer,protectorlar kullanılmakta.Bunlar dosyadaki verileri şifrelemekte ve pe header,IAT(Import adress table)’da değişiklikler yapmak,api redirection,atidebugging,crc check... gibi yöntemler kullanmaktalar.Bu sebeple eğer cracker programı unpack etmeyi başaramamış.Fakat program memory’e açıldığında değişiklik yapacağı kilit noktaları biliyorsa adreslerini not alıp program çalışırken ekstra program vasıtasıyla o adrese erişip değiştirebilir.Packer programı memoryde unpack ettikten sonra o adreste değişiklik yapılır.Eğer unpack etmeden önce değişiklik yapılırsa o sırada veriler şifreli olduğundan program hata verecektir.

Mesela packer o bölgeyi “abc” olarak şifreledi unpack ettiğinde “xyz” olarak gözüküyor.Eğer henüz o bölge şifreli yani “abc” iken değeri yazarsak.Packer onu memoryde decrypt ederken veriyide o şekilde okur ve karşımıza farklı bir değer çıkar.Bu nedenle loader ile o bölgeyi sürekli “xyz” oldumu kontrol ederiz.O değer alındığı an bizim değeri oraya yapıştırırız ve program kırılmış olur.Loaderlar duruma göre 1 seferlik yada her seferinde çalıştırılmak zorunda kalınabilir.

Örneğin program serial numberı kontrol ediyor ve duruma göre karar verip registrye kayıt giriyor.Eğer loader ile açar programı seri numarayı doğru girmiş gibi kandırırsak program registrye değerleri girmiş olur ve bir daha açmak zorunda kalmayız.Fakat program kısıtlıysa register olayı yoksa her seferinde loader ile açmak zorundayız.Çünkü loader ile yapılan değişiklikler geçicidir.Programı kapatıp açtığınızda yaptığınız değişiklikler gider ve program orjinal haliyle tekrar memorye yüklendiğinden yine eski haline döner.Örneğin Half-life2 oyununun loader ile açılması buna bir örnektir.Oyun konusuna gelmişken loader ve trainerlar kısmen aynı işi görürler.Trainer açar açmaz oraya veriyi yazar ve oyunda ne gibi değişiklikler yapılacaksa yapılır.Fakat loaderda memory kontrol edilir ve değer görülünce oraya yapıştırılır.Ayrıca loaderlara karşı crc check yöntemi kullanılmaktadır.Packerlarla ilgili ayrı bir konu olduğu için bu konu hakkında detaya inmeyeceğim.Fakat ona karşıda birçok teknik geliştirilmiştir.

Kendi yazdığım loader programının kaynak kodlarını dahil ettim. 0’dan yazmaya uğraşmadan dilerseniz düzenleyip kullanabilirsiniz.Ayrıca deneme amaçlı yazdığım programıda yanına dahil ettim.Şimdi anlatmaya devam edersek öncelikle programın kilit noktasını buluyoruz ve oranın adresini alıyoruz.Bu sefer memorye kayıt yaptığımız için ollydbgdaki adresi aynen kaynak koda yazıyoruz.Adresimiz bu sefer RVA olacak.Yani resimdeki adres (4537F5) Daha sonra kaynak kodumuzdaki finddataya karşılaştırma yapması için verilerin doğruluğu açısından (75 0C) opcode’u yazıyoruz. Memdata bölümümüzede zıplama noktasını geçmek istediğimiz için nop(hiçbirşey yapmadan geç) koyuyoruz.Zıplama noktası 2 byte yer kapladığı için ve nop 1 byte yer kapladığı için 2 tane nop yani 90h değerini yerleştiriyoruz.Loaderı çalıştığımız zaman programı otomatik olarak açacak 1 sn açılış süresi vs gibi detayları bekledikten sonra işleme devam edecek.Önce programı çalıştıracak.1 sn bekleyecek(Açılış için geçen süre vs).Daha sonra memorydeki veriyle bizim yazdığımız veriyi kontrol edip orda olup olmadığına bakacak.Daha sonra programın kırılması amacıyla yazdığımız 90h,90h(nop,nop) verilerini oraya yapıştıracak.Eğer işlemi doğru yaptıysanız “registered” yanlış ise “error” mesaj pencereleri çıkacak.Bunu sadece programlarda değil.Oyunlara trainer maksatlı da kullanabilirsiniz.Dosyaya yaptığımız patching işlemini bu sefer memoryde yaptık.Fakat her bu işlemin geçici olduğundan ve detaylarından üstte bahsetmiştim.Bu konu hakkında anlatacaklarım bu kadar.

Bu yazı,loader programı ve deneme amaçlı program olmak üzere tüm materyaller FireX tarafından yazılmıştır.Lütfen kopyalayanlar emeğe saygı duysunlar.Saygılarımla..

FireX

Tarih:
Hit: 2758
Yazar: FireX

Taglar: reverse engineering - loader&trainer


Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.