Reverse Engineering - Patching

Merhaba arkadaşlar forumda patching’i merak edenler arkadaşlar vardı.Bu sefer patching hakkında bahsetmek istedim.

Öncelikle gereken programların isimlerini verelim.

Ollydbg
Winhex
Masm32 9 (Patch programını assemble etmek için gerekli)

Patch programının kaynak kodları+Deneme amaçlı program+Assemble edilmiş patch programı ise buradaki linkten indirebilirsiniz.

Patching dosyadaki bazı byteları değiştirerek programı kırmamız oluyor.Örneğin bir program kırdık ve exe dosyası 10 mb düzeyinde.Bunu dağıtması,indirmesi sorun.Fakat kendi yazdığımız program ile(assembly ile yazılmışsa 2-3 kb’a kadar düşüyor) belirli adreslerdeki byteları değiştirerek programı cracklenmiş haline sokuyoruz.Mesela sonuca göre hareket eden bir zıplama noktası var.Atlarsa hata mesajına gidiyor.Devam ederse program register oluyor.Programın packlenmemiş olması şart.Çünkü dosyanın bir kısmı şifreleniyor.Bütün packerlar şifreledikleri verileri memorye decrypt edip açmak zorundalar.Eğer memory’e açılan değerleri şifrelenmiş dosyaya yazarsak programı bozarız.Yada packerın mantığı çözülmeli mesela “a”yı şifreleyip “b” yapıyorsa dosyadaki kayıtlı değer b.Program çalışırken unpack edilme sürecinden sonra ise “a” olarak geçer memoryde.Bizde packer “a”yı nasıl “b” haline sokuyor bilirsek.Yazacağımız veriyide o şekilde şifreleyip dosyaya kaydederiz ve yine başarılı oluruz.Fakat bunlara gerek kalmadan loader olarak isimlendirilen programlarla memoryde geçici değişiklikler yapabiliyoruz.Nasıl olsa packer programı unpack etmek zorunda bu yüzdende belirli adresi sürekli tarayarak istediğimiz değişiklik yapıldımı diye bakarız.O değeri gördüğümz anda programın kırılmasına yol açan veriyi oraya yapıştırırız.Oyunların trainer mantığıda bu şekildedir zaten.Hafızaya yüklenen program üstünde değişiklik yapar.Harddiskteki dosyaya dokunmaz.Patching ise harddiskteki dosyanın orjinalinde değişiklikler yapılmasıdır.Neyse patch olayını anlatmaya devam edelim.

Opcode’u 75 0C olarak gözüküyor.Fakat biz bunu nop(Yani hiçbirşey yapmadan geç) yapmak istiyoruz.Nop’un opcode’u 90 Zıplama noktası 2 byte olduğu için ve nop 1 byte olduğu için 90 90 olarak değişiklik yapıyoruz ve program orayı geçiyor ve register oluyor.

Ollydbg’da nopla değiştirmek istediğimiz zıplama noktasına sağ tıklayarak “Follow in dump->selection” diyoruz.Altta opcod’u göreceksiniz.Sonra o satırı seçerek kopyalıyoruz(Resimde gözüküyor)


Tarih:
Hit: 3362
Yazar: FireX

Taglar: reverse engineering - patching


Yorumlar


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