Reverse Engineering - Patching

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

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

    Gerekenler

    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ı
    http://rapidshare.com/files/24015191/patching.rar.html

    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)



    Daha sonra winhex programını açıyoruz(Gerçek adresini almak için kolaylık açısından VA ‘yi bulmak için matematiksel işlemler gerekiyor.Olly RVA olarak gösteriyor)  Kopyaladığımız değerleri Winhex’de menüdeki  “search->find hex values” kısmına yapıştırıyoruz.Hex değerlerinin arasındaki boşlukları silerek aratmayı unutmuyoruz!

    Adrese konumlandığımızda offset değerini not alıyoruz ve başka bir yerde daha işimiz varsa işlemleri tekrarlıyoruz.

    Ben kolaylık olsun diye assemblyde kısa bir patch programı yazdım ve kodlarınıda sizlerle paylaşmak istedim.Kaynak dosyada iki tane patchlenen yer göreceksiniz.İlki register olayı,ikinciside “abc” olan şifreyi “asd” olarak değiştiriyor.İkincisi gereksiz birşey.Fakat çoklu kullanım açısından size yardımcı olsun diye koymayı uygun gördüm.Ayrıca delphide yazdığım deneme amaçlı programı indirip deneyebilirsiniz.

    Şimdi patch programımızın kaynak kodlarında adresi girdikten sonra yazacağımız verileri patchdata olarak tanımladığımız yerede yazacağımız verileri binary olarak koymayı unutmuyoruz.Örneğin nop’un opcode’u 90 ise buraya 90 değil binary karşılığını yazacağız.Gözükmeyen bir karakter.Mesela 90 90 değeriyle değiştirecektir.Winhexte 90 90 hex değerini aratıp sağ taraftan binary değerini kopyalayıp programın kaynak kodundaki patchdata bölümüne kopyalarsak sorunsuzca çevirmeye gerek kalmadan çalışacaktır.Programın kaynak kodunu biraz irdelerseniz anlayacağınızdan eminim.Bende açıklamalar yerleştirdim kaynak koda.Ayrıca hata yapma olasılığına karşı dosyanın yedeğinide alıyor.



    Patching hakkında anlatacaklarım bu kadar.Bu yazı,patch programının kaynak kodları,deneme amaçlı yazılan program ve ekstra materyaller tamamen bana aittir.Copy paste yapanlar emeğe saygı duyarsa sevinirim.Saygılarımla..

    -anonimleştirildi-

    Not:Reverse engineering hakkında yazdığım tüm dökümanlar,materyaller tamamen bana aittir.Başka yerde bulamazsınız.Kaynak göster,nerden kopyaladın gibi yazılar görürsem küfür edilmiş gibi algılarım.


    λ
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MaxDreameR
    MaxDreameR's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    evet bu konuyla baya uğraştın walla saolasın =)  tabe ben bunlara karşı korunmak için ugrasıom bu arada aklıma gelmişken compü hocamı goren oldumu???:S

    " ' "
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Draeex
    Draeex's avatar
    Kayıt Tarihi: 04/Nisan/2006
    Erkek
    ben diyom bu kafayı bozmus a.q sıyırmısın sen olum yeter beynin patlıcak =)
    hoja sagols

    Tariqat Of Tahribat The Murid Draeex Tariqat Dj"i 2007©
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tuncaxxz
    tuncaxxz's avatar
    Kayıt Tarihi: 23/Ağustos/2005
    Erkek

    firex acaip kafa ziktin sen buna (:

    çok sıkı paylaşım . tahri dokümentasiooon a ver bunları millet oraya baksın heç olmassa 


    punto cero
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    a4tech
    a4tech's avatar
    Kayıt Tarihi: 21/Temmuz/2005
    Erkek
    Binary dosyayı patchlemek için bu kadar ASM kasacağına gel open source ile tanış. Kodu indir, istediğin gibi düzenle, derle, kullan. Hatta patchlediğin kodu geliştiricisine gönder senin de adın geçsin, katkıda bulunmuş olun :P Tabi bu benim şahsi düşüncemdir, katılırsınız katılmazsınız o ayrı :)
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek
    Open-source konusuna pek sıcak bakmıyorum :) Fakat böyle küçük başkaları açısındanda eğitim amacıyla yararlı olacak programlarımın kaynak kodlarını dağıtıyorum.Assembly biraz uğraştırıyor.Fakat sonucu görünce programcının aldığı keyif apayrı.Patch programı sadece 2,5 kb yer kaplıyor,ayrıca çokta hızlı.Delphide,Visual C++'da yazsam kat kat üstünde yer kaplayacağından eminim.Fakat Assembly biraz fantezi işi kaçıyor tabi :P

    λ
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    efsun
    efsun's avatar
    Kayıt Tarihi: 28/Ağustos/2005
    Erkek

    abi bide şu şey war hex editorle değitşirme muhabbeti ama hexte sadece mesela şöle bi dosyawar hexle türkçeleştirme giib bişi yapılıyo bizim client deidğimiz bir oyunun  örnek olarak şöle diyim:

    Account Yazıyo

    Password yazıyo

    Bunları sadece bu kaç karakter ise o kadar olması gerekio bunuda aşmanın bir yolu varmıdır hex'ten başka eğer fazla yada eksik kaçarsak kendisi bişiler eklio sorun çıkarıyo :S


    Her türlü piping işleriniz itina ile yapılır.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek
    Onu aşmanın yolu var tabiki.Mesela 40343 adresinden itibaren account yazıyor diyelim.Fakat orda hiç boşluk yok.Daha az şey yazabilirsin.Fakat daha çok şey yazarsan diğer şeylerinde üstüne yazacağın için dosyaya zarar verebilirsin.Bunu aşmak için exe'nin içinde data ekleyebileceğimiz boşluklar aramak ve oraya istediğimiz uzunlukta ifadeyi yazmak "kullanıcı hesabı" mesela.Onu boş alana yazdıktan sonra artık nereye yazdıysan 74545 mesela diyelim onun adreside not alıyorsun.Stringin çağrıldığı yerde 40343 olarak yazacak onu 74545 olarak değiştirirsen artık ordan datayı okur ve sıkıntı ortadan kalkar.

    λ
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ir2
    ir2's avatar
    Bilgi/Destek Madalyası Developer Madalyası
    Kayıt Tarihi: 10/Mayıs/2003
    Erkek

    hoca son zamanlarda hayvan gibi güzel dökümanlar yazıyosun güzel olmuşda asm koduna baktım yazılcak ilk veriye nie ascii şeklinde yazdın hoca (0x99)(0x99) şeklinde giriliodu o şekil yapsaymışın daha güzel olurmuş neyse tekrardan eline sağlık

    daha bekliyoruz hoca dökümanlarını

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    renegadealien
    renegadealien's avatar
    Üstün Hizmet Madalyası Savaş Madalyası Başarı Madalyası Üstün Hizmet Madalyası Developer Madalyası
    Kayıt Tarihi: 23/Mart/2003
    Erkek
    Yarına döküman yapiim bunu...

    10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Kendi özlü sözümdür, kaynak belirterek kullanınız.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    inside
    anonim6918524
    anonim6918524's avatar
    Banlanmış Üye
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek
    ir2 bunu yazdı:
    -----------------------------

    hoca son zamanlarda hayvan gibi güzel dökümanlar yazıyosun güzel olmuşda asm koduna baktım yazılcak ilk veriye nie ascii şeklinde yazdın hoca (0x99)(0x99) şeklinde giriliodu o şekil yapsaymışın daha güzel olurmuş neyse tekrardan eline sağlık

    daha bekliyoruz hoca dökümanlarını

    -----------------------------

    Hoca orda byte patch yaptığımız için yani dosya binary halde.90'ın binary karşılığını kopyaladım.

    λ
Toplam Hit: 5647 Toplam Mesaj: 17