folder Tahribat.com Forumları
linefolder Assembly - Reverse Engineering
linefolder Reverse Engineering - Visual Basic P-Code



Reverse Engineering - Visual Basic P-Code

  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

    //Son zamanlarda site içinden ve dışında yazılarıma ilginin arttıdığını görünce yazılarıma devam ediyorum.Ollydbg ile ilgili bazı arkadaşlara döküman sözüm var.Bundan sonra bir aksilik olmazsa ilk işim onu hazırlamak olacak.Ertelememin sebebi Ollydbg hakkında verilebilecek çok fazla bilginin olması ve belkide yazacağım en geniş döküman olacağını tahmin etmemdir.Bu yazımla ilgili yada Reverse Engineeringle ilgili başka sorularınız varsa yazınız.Saygılarımla.. //

    Merhaba arkadaşlar.Bu yazımda P-Code ile derlenmiş Visual Basic uygulamaları üstünde çalışmaktan bahsedeceğim.Visual Basic’de bilindiği üzere iki çeşit derleme tipi var.Native ve P-Code.Native bildik düz derleme biçimi.Native olarak derlenmiş programları
    debuggerımız(Ollydbg vs) disassembler eder ve üzerinde sorunsuzca çalışabiliriz.Fakat P-Code ile derlenmiş bir uygulamayı Ollydbg ile açtığımızda bir miktar asm
    kodu ve geniş veri alanları görürüz.P-Code programlama dilleriyle alakasız,kısaltma amacıyla konulan ve çalışma zamanında yorumlayıcı tarafından yorumlanan ara koddur.Avantajı programın boyutunun küçülmesini sağlaması.Fakat native’e göre performans düşüyor.Sebebi ara dilden çevrilirken vakit kaybedilmesi.

    Asıl konumuza gelirsek.P-Code derlenmiş bir uygulamada Ollydbg işimizi görmüyor.Bu sebeple VB P-Code uygulamalarına özel bir debugger olan Wktvbdebugger kullanmamız gerek.

    Gerekenler
    Wktvbdebugger
    VB Decompiler Lite/Pro (Lite yeterli)
    Flexhex veya herhangi bir hex editör

    Örnek programıda buradan indirebilirsiniz.

    Öncelikle örnek programımıza önbakış atarsak; Şifreye göre diğer forma geçmemizi sağlayan basit bir uygulama.Şifreyi yanlış girincede “Yanlış şifre!” mesaj
    penceresi çıkıyor.



    Not: Programın olduğu klasörde debugger için MSVBVM60.DLL bulunması gerekiyor.

    Programımızı debugger ile açmadan önce VB decompiler lite ile bir gözatalım ve bize gereken yerin/yerlerin adreslerini alalım.

    Butona tıklanınca gerçekleşen olayı seçtiğimizde resimde gördüğünüz üzere bir sürü garip kod bizi karşılayacak.Bunlar kısaltma amacıyla konulmuş ve hepsinin
    birer karşılığı var.Örneğin BranchF ile koşula göre belirli adrese zıplanıyor.Şifre yanlışsa zıplanarak program akışına devam ediliyor.



    Şimdi command1_click’in en başındaki P-Code’un adresini not edelim.Bu adrese debuggerda breakpoint koyacağız ve orayı analiz edeceğiz.Adresi not ettiysek
    VB Decompiler’ı kapatalım ve debuggerı açalım.Programı seçelim ve üstteki menüden run’a basarak çalıştıralım.



    Debuggerda kodların gözükeceği siyah ekranda sağ tıklayıp show bpx list’i seçin ve çıkan pencerede not aldığınız adresi yazıp add butonuna basarak ekleyin.Artık
    butona tıkladığımızda program akışı orada duraklayacak ve orayı adım adım ilerleyerek analiz etmiş olacağız.KısayoluOllydbg’dakiyle aynı (F8) Breakpoint’i
    koyduysak kafamızdan şifre sallayıp butona basalım ve olaya girelim.



    Butona tıkladıktan sonra program akışı breakpoint koyduğumuz noktada duraklayacak ve karşımıza gördüğünüz küçük ekranda kodlar gelmiş olacak.Dilerseniz memory dump butonuna basıp bulunduğunuz adresi girip oradaki kodların assembly karşılıklarınıda görebilirsiniz.Hatta dump edebilir yada text olarakta kaydedebilirsiniz.





    Şimdi F8 ile ilerleyip programı analiz edelim.İlerlerken stack ekranındaki değişiklikler göze çarpacak,burası bizim için önemli.String işlemleri gördüğünüz üzere göz önünde ve şifreyide burada görmüş oluyoruz.Fakat bu her zaman bu kadar kolay olmayabilir.Orada gördüğünüz p-codelar hakkında daha fazla bilgi sahibi olmanız gerekebilir veya assembly’e çevrilmiş şekillerinide memory viewer’dan inceleyebilirsiniz.Şifreyi girin ve diğer forma geçin.



    Şimdi diğer olaya geçelim.Diyelimki şifreyi bulmak yerine programı patchleme yoluna gittik.Yapacağımız şifrenin doğru olup olmadığına göre zıplayan zıplama komutunda değişiklik yapmak.Öncelikle debuggerda zıplama noktasının adresini alıyoruz.Debuggerda 41028F olarak geçecek.Bu RVA cinsinden değeridir.400000 imagebase değeri ekleniyor.Hex editörümüzde ise 0’dan başlıyor.41028F’den 400000 çıkartarak 1028F olan adresimizi bulup oraya konumlanacağız yada dilerseniz.O bölgenin hexadecimal değerlerini not edip hex editörünüzde aratıp orayada ulaşabilirsiniz.

    Hex editörümüzde adresimize konumlanıyoruz ve 1C E7 00’ın olduğu bölüme geliyoruz.E7 BranchF'in opcodu, 1C ise ne kadar ilerleyeceğini belirleyen hexadecimal değer.Hatırlarsanız şifre yanlışsa zıplıyordu.Bizim yapacağımız 1Cyi 04 ile değiştirip bir sonraki komuta zıplaması(!?) ve program akışına devam etmesi.04 yapmamızın sebebi kendisinin 3 byte yer kaplaması ve 4.de zaten diğer komutun başlangıcı oluyor.Bu şekilde kaydedersek şifre ne olursa olsun butona basınca diğer forma geçecek.



    Bu konu hakkında anlatacaklarım bu kadar.Bu yazı,ekran görüntüleri,örnek program tamamen 
    -anonimleştirildi- tarafından hazırlanmıştır.Umarım kopyalayanlar emeğe saygı duyarlar(Her ne kadar bu satırı kopyalamadan yazılarımı dağıtanlar olduğunu bilsemde).Saygılarımla..

    -anonimleştirildi-


    λ
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    AntiOksidan
    AntiOksidan's avatar
    Kayıt Tarihi: 03/Ekim/2005
    Erkek
    vay amk bu saatte :| helal olsun 1o numara ;) ben de yaziyim bişiler :D
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    WALLACEs
    WALLACEs's avatar
    Kayıt Tarihi: 17/Eylül/2005
    Erkek
    eline sağlık hoca çok faydalı bi döküman olmuş

    TBT'ye Mescit istiyoruz.
  4. 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
    Gece 4'de açtık başlığı belki görmeyenler vardır diye zıplatayım.

    λ
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gastarbeiter
    ExcaliburTBT
    ExcaliburTBT's avatar
    Kayıt Tarihi: 06/Aralık/2005
    Erkek

    Döküman canavarı bu adam ya :|

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Stifler
    Stifler's avatar
    Kayıt Tarihi: 22/Eylül/2003
    Erkek

    adam hayatını döküman yazmaya adadı :) tebrikler alp


    3 Hafta önce Sigara Öldürüyor diye okudum, sigarayı bıraktım. 2 hafta önce Alkol Öldürüyor diye okudum, Alkolü bıraktım. Geçenlerde Aşırı Seks öldürüyor diye okudum, okumayı bıraktım..
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nurk
    nurk's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 15/Eylül/2006
    Erkek
    helal olsun hoca valla bravo....

    [22817//kaanabak]
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih_Jones
    Fatih_Jones's avatar
    Kayıt Tarihi: 10/Mart/2007
    Erkek
    Eline sağlık aga güzel olmuş

    Sch
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kurdo
    kurdo's avatar
    Kayıt Tarihi: 18/Temmuz/2005
    Erkek
    arşivimde reverse engineering diye ayrı kategori açtım sayende :|

    kendinize ayığ olunuz
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    amele_2
    amele_2's avatar
    Kayıt Tarihi: 01/Eylül/2005
    Erkek

    döktürmüşün yine kardeşim.

    eline emeğine sağlık.

    yeni dökümanlarını bekliyorum 


    Ardından yüz köpek havlamayan kurt, kurt sayılmaz..
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rEfLeX
    rEfLeX's avatar
    Kayıt Tarihi: 04/Ağustos/2005
    Erkek
    adam uyumak nedir bilmiyo şuna bak a.q gece nin 4 de döküman yazı yo sen kafayı yemişsin :D tebrik ediyorum ayakda alkışlıyom asdfasfasfasf:))))

    Forum,Hikaye gibi bölümlerde opsiyonel olarak her yazdığınızın sonuna eklenen yazı... :| 20 senelik hayatımda 15 aylık reklam arasıı...izmirr / gaziemir..
Toplam Hit: 10136 Toplam Mesaj: 28