Windows Ters Mühendislik Peyzajı Anlayın
Windows ters mühendislik, yazılım açıklarını ortaya çıkarmak için kritik bir disiplindir, yazılımları analiz etmek, özel protokolleri analiz etmek ve geleneksel veya geri alınan programları anlamak için kritik bir disiplindir. Windows ekosisteminde en yaygın kullanılan iki tanesi debuggers in the Windows ekosistem areTORT:0)OllyDbg (32-bit uygulamalar için) ve ESRAG[D:2).x64g) (bu iki 32-bit ve 64-bit binerleri ele alır.
Bir InDepth Look at OllyDbg
Origins ve Felsefe
OllyDbg, Oleh Yuschuk tarafından yaratılan, 64-bit inşa edilen yazılımlarda popülerlik kazandı.Sessiz hafıza, kayıt ve tüm IDE entegrasyonunun başlanması olmadan doğrudan bağlantıya devam ediyor.
Kurulum ve İlk Kurulum
OllyDbg'i resmi web sitesinden indirin ([DDDbg:0) 32-bit Windows ortamında veya 64bit sistem WOW64'ü desteklediğini unutmayın; OllyDbg'in kendisi sadece 32-bit işlemlerinden yoksundur.
Açılıştan sonra Anahtar konfigürasyon adımları:
- Go toFLT:0)Options → Görünüm) ve ön fontlar ve renkler tercihinize - yüksek kontrast programları uzun seanslar sırasında göz sönüne yardımcı olur.
- CUMH:0)Olaylar → Debugging Seçenekleri[Dönemli:0) ve "Dönemli" ile çelişen "Ignore INT3", özel uç noktaları kullanmayı planlıyorsanız.
- Ortada bulunanlar, s.()))))))))))))))))))))
- Bir test kesintiye uğramak (örneğin, basit bir derleyici "HelloWorld.exe") dislokatörü doğrulamak ve panes doğru şekilde kayıt yaptırmak için.
Kullanıcı Interface Walkthrough
OllyDbg'in arayüzü, sürüklenme ve göz önünde tutulabilecek birkaç panden oluşur: varsayılan düzen şunları içerir:
- [FONT:0)Disssembly pencere (top ayrıldı):) adreslerle parçalanmış kodu gösterir, bytes, mnemonikler ve yorumlar.
- [FONT=0)Kapit pencere (sağda): [DÜDÜSTR:0)Kayıtlı pencere (düşüküm)[Uygun: 0,0)DÜye ait pencere (sağlık)[sağlık): [DÜye Olmayanlar İçin Tıklayınız.
- [FONT=0)Dump penceresi (düşün:[Döne: 1) Hexadecimal ve ASCII hafızanın seçilmiş bir adrese göre sırayı doğru tıklayarak değiştirebilirsiniz ve “Go to” seçebilirsiniz.
- [0]Stack penceresi (sağda sağ): Mevcut çöp çerçevelerini, geri dönüş adreslerini ve yerel değişkenlerini gösterir.
Bu panes birbirine bağımlıdır: Boş penceredeki bir adrese tıklayarak, bu hafıza bölgesinin kod içerdiği takdirde, birbirine benzeyeni anında günceller.
Temel Breakpoint Türleri
OllyDbg birden fazla uç noktası mekanizmalarını destekler:
- [FONT3][F2): 0xCC ile bir talimat yerine getiren Yazılım uç noktası. Basit, ancak anti-debugging kodu ile tespit edilebilir.
- [FONT:0)Memory breakpoint:[Dönetici:[Dönetici:0) Belirli bir veri tamponuna eriştiğinde yakalama veya hafıza haritasına uygun olarak giriş yapın.
- [FONT=0)Zizmet noktaları:[[FONT=0)[0]Sessizler (Döneticiler) .
- [FONT=0)Conditional breakpoint:[Dönemli bir nokta:[Dönemli bir nokta)[[[değiştir | kaynağı değiştir) :[[[değiştir | kaynağı değiştir)
OllyDbg ile Navigating Code
[FONT=0)F7[DÜDÜDÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN
“Arama” menüsü güçlü bir yardımcıdır:
- [FONT=0) → Komuta Arama: [Dönetici: [Dönetici:0) Locate belirli bir toplantı mnemonik (e.g., “CALL”) tüm modül boyunca.
- [FONT:0) → Ödevlerin Sonuçları:[Dönetici:0) Belirli bir dize veya imza gibi ikilide desenler bulun.
- [FONT:0) → Tüm referans dizeleri için ara: Hızlıca program tarafından kullanılan tüm okunabilir ASCII ve Unicode dizelerini hızla çıkarın.
Plugin Ekosystem
OllyDbg'in eklentileri ile ilgili aşırılık, güncelleme eksikliği için telafi eder. Notable eklentiler şunları içerir:
- [FONT:0)OllyDump:[Dönetici:[Dönetici:0))) Dump, statik analiz veya yama için diske giden bir süreçtir.
- [FONT:0) MerhabaDebugger:[DDDbg'in varlığı, anti-debugging kontrollerini kaçırmak için.
- [FONT:0)OllyScript:[[Dönetici:0) Automate, Python benzeri bir senaryo dili kullanarak tekrarlanan görevleri tekrarladı. Örneğin, birden çok çalışana desenler arayabilir ve uç noktaları ayarlayabilirsiniz.
- [FONT=0)PhantOm:[[Dönetici:[Dönetici:0) Gelişmiş Stealth eklentisi, yamalar birçok yaygın olan IsDebuggerPresent ve NtQuery InfoProcess algılamaları.
Bir eklenti yüklemek için, “Wonder’in dosyasını OllyDbg’in “Plugins’ klasörüne çıkarın ve debugger'i yeniden başlatın.
x64dbg: Modern Debugging 32-Bit ve 64-Bit Hedefler
Neden x64dbg Standart Oldu
OllyDbg bir gazaptır, x64dbg çağdaş ters mühendislik için go-to aracıdır.It supporturFLT:0) 32-bit ve 64-bit), uygulanabilir bir açık kaynak koduna sahip olan ve aktif olarak muhafaza edilen bir şekilde açık kaynaklı bir şekilde açık kaynaklı bir kod tabanıdır ().
Kurulum ve İlk Başlatma
x64dbg web sitesinden en son sürümü indirin ([Dön:0) x64g.com)) paketi iki uçlu başlatıcı içerir - "x32dbg.exe" for 32-bit debugging and "x64-bit hem aynı konfigürasyonu hem de eklenti klasörlerini paylaşıyor.
İlk başta, bu temel tercihleri belirledi:
- [FONT:0]Settings → Tercihler → Etkinlikler: [DFLT:1] Sistem yükleyicisi yerine giriş noktasında duraklamak için “Breakpoint at system breakpoint” kontrol edin.
- [FONT:0)Öyle:[[Dönetici:[Dönetici:[Dönetici:0))[[[Dönetici:[Dönetici:[Dönetici:0)))) Karanlık bir tema veya “Opticks” altında özel bir renk planı seçin - uzun kullanım için gözlerde daha kolay.
- [FONT:0]Dissassembly:[Dönetici:[Dönetici:0)Enable “Show byte representation” ve “Show opcodes” tüm zamanlarda görünür tam eğitim ayrıntıları istiyorsanız.
- [FONT:0)Undo fonksiyonu: x64g bellek ve kayıt için değişiklikler yapar - yanlışlıkla bir şey ters çevirseniz bir adım geri dönebilirsiniz.
Interface and Workflow
x64dbg penceresi, ayarlanabilir panellere bölünmüştür:
- [FONT:0)CPU Disassembly:[Dönetici:[Dönetici: 0) Ana kod görüşü, adresle, bytes, disassembly ve yorum için bir sütun. Doğru tıklama analiz komutları ile zengin bir bağlam menü ortaya çıkarır: “Kaynaklar bul”, “Yeni NOP’yi bulun, vs.
- [FONT:0]Yönisterler: [Dönderler: [Dönderler: [Dönderler: [Dönderler: [Dönderler: [Dönderler: [Dönderler: [Dönderler: [Dönderler:Dönergeler:Dönderler:Dönergeler:Dönderler:Dönergeler:Dönergeler:Dönergeler:Dönergeler:[Döncüler:) Son olaydan beri değişiklikler gösterir - yeni ayarlanmış bayraklar için yeşil.
- [FONT:0)Dump:[Dönetici:[Dönetici: 0 3) Bir adrese tıkla ve yapı modları arasında geçiş yapabilecek olan Memory hex editörü. Doğru tıklış bir adrese tıkla ve 4-bayt değeri izlemek için “Sırıklama” seçin.
- [FONT:0]Stack:[Dbg'e benzer, ancak güzel formatlama ve geri dönüş adreslerini ve yerel çerçeveleri vurgulayabilme yeteneği.
- [FONT=0) Grafik görünümü (Tab): [Dönetici: 1) Basın [[Dönetici:2)G[Döneticileri kontrol akışı grafiğini açmak için bir işleve sahip olmak. Bu, temel kavramlara, döngülere ve koşullu atlara bir bakışta atlamaktır.
- [FONT:0]Symbols & Modüller: Tüm yüklenen DLLs ve ihracat masaları yüklenerek ihraç edilen herhangi bir işlevin üzerine kırılabilir.
Gelişmiş Breakpoints ve Tracing
x64dbg OllyDbg'in ötesindeki kırılma fonksiyonunu genişletir:
- [FONT:0]Breakpoint with conditions and hit count count:[Dönetici:0) Doğru tıklı bir çizgiye tıklandığında “Breakpoint” → “Edit”, “Üye Olmayanlar” gibi bir koşul ekleyebilirsiniz.
- [FONT:0]Memory breakpoint on range:[Dönesel: 0 # 1] Click “Memory Map” sekmesi, bir bölge seçin ve “Set memory breakpoint on access” veya “on yazması” için önemlidir.Bu, bir tamponun yazıldığı zaman takip etmek önemlidir.
- [FONT:0)Sekizle ayarlanan nokta:[Dönetici:0))Debug → Donanım Breakpoints[DDDDöntgenler[Döncükler için dört DRx molası ayarlandığından oluşmaktadır.
- [FONT:0]Trace kaydı:[Dönetici:0)EnableMAZFLT:2)Debug → Trace Record) Her bir öğretimi yürütmüş olması için daha sonra kaydedilen izlerini bulmak için “ Aramak” desenleri bulabilirsiniz - belirli bir hafıza yerinin nasıl değiştirildiği bulmak için son derece kullanışlı.
x64dbg'de Senaryo ve Otomasyon
x64dbg'in standout özelliklerinden biri onun derin senaryo desteğidir:
- [FONT=0]Python senaryosu:[Dönetici:[Dönetici:0)Python senaryosu:[Dönetici:0)Yapılmış Python eklentisi karmaşık otomasyon yazabilmenize olanak sağlar. Örneğin, tüm “CreateFileW’ çağrılarını argümanlarıyla indirebilirsiniz:)
- [FONT=0}x64dbgpy:[Dönetici: [Dönetici: tam kontrol veren daha kapsamlı bir Python bağlayıcısı: okuma / yazma hafıza, dağınıklık, kırılma noktaları yönetmek, ve daha fazlası.
- [FONT=0]Built-in komut bar: Pencerenin alt kısmında, “bp çekirdeği32.Virtual Protection”, “dump @rsp” veya “set cond eax==5” gibi komutları yazabilirsiniz.
Sembol ve KaynakLevel Entegrasyonu
Microsoft'un sembolü sunucu veya kendi projenizden yüklenebilir; x64dbg, orijinal kaynaktan gelen boşlukları gösterebilir - ayrıca, üçüncü sembollerin üçüncü sembollerinden (örneğin, XPD) kaynak hatları gösterir.
OllyDbg ve x64dbg ile karşılaştırmak: Her şeyi ne zaman kullanın
Her iki araç da güçlü, ancak en iyi kullanım vakaları farklıdır:
- [FONT=0]Legacy 32-bit yazılım:[Dönetici:[Dönetici: 1 ) Eski uygulamalar üzerinde çalışıyorsanız, kötü bilgilendirilmiş PE dosyaları veya x64-bit binerleri yüzük 0, OllyDbg olgun eklenti ekosistemi (özellikle HideDebugger ve OllyDump) hala daha güvenilir olabilir.
- [FONT=0)64-bit hedefleri:[Dönemli:0] x64-bit yerli debugging için tek seçenek. OllyDbg 64-bit executable.For modern Windows malware, x64g kullanın.
- [FONT:0]Senaryoluşun ihtiyaç duyduğundan daha çok daha fazla çok uzaktır:[0]Üye ait olan ihtiyaçlar:[Döneticiler için: x64dbg kazanır.
- [FONT:0)Memory patching:[Dönetici:[Dönetici: 0) Her ikisine de bir yatırma izin verir, ancak x64dbg tüm değişiklikleri kaydeder ve bir yama dosyası oluşturabilir.
- [FONT:0]Learning eğrisi:[Dbg, daha basit arayüz ve daha az düğmeleri nedeniyle yeni başlayanlar için sığ bir öğrenme eğrisi var. Ancak, x64g'in belgeleri ve topluluğu daha aktif, bu yüzden ilk yatırım hızla öder.
Birçok deneyimli tersleyici, [FONTT:0) her ikisine de sahiptir: 32-bit örnek ve x64dbg için hızlı bir şekilde triage için.
Pratik Ters Mühendislik Projesi: Basit Bir Crackme
Kavramları sağlamlaştırmak için, tipik bir “kahkadar” analiz ederek yürüyebiliriz – bir şifre talep eden küçük bir program.Bu proje için x64dbg kullanacağız, ancak aynı adımlar OllyDbg'a uygulanır (küçük UI farklılıkları ile).
Adım 1: Statik Reconnaissance
Debugger'i başlatmadan önce, davranışı kontrol edebilir ve not edin. Tipik olarak, bir düzenleme kutusu ve “Check” düğmesine bir uyarı gösterir. hata mesajını görmek için “test” gibi bir mumya parola girin.
Şimdi x64dbg'de özetlenebilir. Giriş noktasını not edin - genellikle "GetModuleHandleA" veya "WinMain". Sayfayı bulmak için disassembly üzerinden açın "Wrong şifresi!". Press.QF) ve bu dizeyi arayın (veya → Şu anki Modül → String referansları).
.text:00401234 push offset aWrongPassword ; "Wrong password!" .text:00401239 call ds:MessageBoxA
Sağ yukarıdakiler, muhtemelen bir koşullu atlayış (örneğin, “jne’ veya “je’) bu atlama talimatına hangi mesajı göstereceğine karar verir.
Adım 2: Dinamik Analiz
PressFLT:0)F9[Döneticileri) Uygulamayı çalıştırmak için.(Çep)" · "Kategori" veya "TEST" talimatlarına bakın. Sık sık "LODSB" veya "Tek adım" ile bir döngü ile karşılaştırıldığında, ZF=0, o zaman başarısızlıklara bakar.[TEST"Örnek:)
Karşılaştırma basit bir “strcmp” çağrısıysa, hafızadaki şifreyi görüntülemek için “strcmp” çağrısına bakabilirsiniz ve EAX'ı çağrıdan sonra gözlemleyebilirsiniz: EAX'ı doğru şifreye tıklayın.
Adım 3: İkiliyi İncele
Ortak bir çatlaklar hedefi, şifre kontrolü tamamen atlamaktır. Durumlu atlayışta yanlış mesaja yol açan, o zaman "uygunlama hattını değiştirebilir ve "Assemble" seçilir - şimdi "jne 0x00401234" veya sadece "uygun" ile başarı mesajı gösterir.
Adım 4: Çözüm Senaryosu
Yüzlerce benzer biner analiz ederseniz, yamaı otomatikleştirebilirsiniz. x64dbg'deki bir Python senaryosu: tüm referansları hata dizesine bulabilir, en yakın koşullu atlayın ve bunu bir NOPsled ile değiştirebilirsiniz.
AntiDebugging Teknikleri Kullanın
Birçok ticari veya yazılım programları, anti-debugging to deter analizi için çalışır. İşte yaygın hileler ve onları OllyDbg ve x64g ile nasıl atlatabilirsiniz.
- [FONT:0]DebuggerPresent (kernel32!IsDebuggerÖyle):) En basit çek - API'yi arayın ve E!= 0, cagger API'de bir mola noktası ayarlar ve çarpdığında, EAX'ı 0'a değiştirir.
- [FONT:0]NtQuery InformationProcess (ntdll!NtQuery InfoProInfo):[Dönetici:0) Geri dönüş değeri (The ProcessDebugFlags veya ProcessDebugPort) bir nokta ayarlayarak ve yapıyı değiştirmek için.
- [FONT=0)Timing checks:[Dönetici:[Dönetici:0)[Döneticileri kontrol eder:[Döneticileri kullanarak) veya "Run'u seçim yapmak için" özelliği kullanarak zaman aralığına geçiş yapın.
- [FONT3 algılama:[Dönetici:0) Bazı programlar 0xCC için kendi kodlarını tarar ve donanım uçlarını yalnızca dört şekilde kullanır (ama sadece dört tane mümkündür).
İş Akışınızı İyileştirin
Ters mühendislik titiz bir süreçtir - verimlilik kazanımları önemli.Bu ipuçlarını düşünün:
- [[FONT:0) Özel bir VM kullanın:[Dönetici:[Dönetici:0) Windows sanal makine içinde silme aletlerinizi çalıştırın. Snapshots, bir sistem kütüphanesi ile enfekte ettikten sonra temiz bir duruma geri dönmenize izin verir.
- [FONT:0] Statik analiz araçları ile iç içe: IDA Pro, Ghidra veya İkili Ninja. İthalat sembolleri, statik bir disassembly ve onları daha kolay navigasyon için x64dbg'ye ithal edin.
- [FONT=0)Yüksek derecede: [Dönetici:[Dönder] Her iki debuggers desteği, rutinlerin, argümanların ve geri dönüş değerlerinin anlaşılmasını belgelemelerini sağlar.
- [FONT:0) Her şeyi doğrulayın:[Dönetici: 0 3) x64dbg'deki günlük pencereleri kaydetmek, kayıt değerleri ve hafıza değişiklikleri kaydetmek için kullanın. Daha sonra desenleri bulmak için oturum açabilirsiniz - örneğin, tüm arama değerleri ile “Yazdır” çağrıları.
- [FONT:0]Leverage dış kaynaklar:[Döntgen:0)[Dbg eklentileri ve öğreticileri için [FONTD:2) Web siteleri www.FLT:0)[FONTD:0}[FONTD FONT=0}[FONT=0}[FONT=0}|Dbg eklentileri ve öğreticiler için x64dbg için resmi GitHub wiki ve ReversingLabs blogu mükemmel referanslar.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
OllyDbg ve x64dbg, Windows ters mühendislik için vazgeçilmez kalır. OllyDbg'in basitliği ve olgun eklentileri, 32 bit projeleri için iyi hizmet eder, x64-bit desteği ve güçlü senaryolama yetenekleri, kendi diskiniz için seçim aracı yapar ve yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yazılımlar ve otomasyon için programlanırken, en uygun şekilde çözülebilirsiniz.