4. Tersine Mühendislik Nedir?
• Tersine mühendislik basitçe derlenmiş bir binary veya bir exe uzantılı,
yani çalıştırılabilir bir dosyanın nasıl çalıştığını anlamaya yönelik
uygulanan sürece denir. Yapmaya çalıştığımız şey programın nasıl
çalıştığını anlamak, çalışma yapısını çözmeye çalışmaktır.
• Genellikle C, C++, Visual Basic, Delphi gibi diller ile yazılan
programların analizi insan için kolay olur fakat bu diller bilgisayar için
anlaşılır değildir bu nedenle bir takım işlemler sonucunda bu dillerde
yazılan kodlar makinenin anlayabileceği makine diline çevirilir.
Çevrildikten sonraki kodlar insanlar tarafindan zor anlaşılır ve analiz
edilebilmesi için hem zaman hem de bolca beyin gücü gerektirir.
5. Tersine Mühendislik ile Neler Yapabiliriz?
Neden İhtiyacımız Var?
• Açık kaynak kodlu olmayan yazılımın kaynak kodlarını ortaya çıkarma
• Virüs ve zararlı yazılımları inceleme olanağı
• Programların lisans korumasını atlatma (Cracking) - en yaygın olan :)
• Yazılımların sağlamlığını kontrol etme
• Yazılımlara ek özellikler getirme (Patching vs.)
6. ReactOS Projesi
• “Açık kaynak kodlu olmayan yazılımın kaynak kodlarını ortaya
çıkarma” maddesine örnek olarak verilebilecek bir proje
• Bu proje bir grup tersine mühendis tarafından, Windows işletim
sisteminin kaynak kodlarının incelenip Windows’a benzer ücretsiz bir
işletim sistemi geliştirme amaçlı uygulanan bir projedir.
9. Ters Mühendis Hangi Özelliklere Sahip Olmalı?
• Sınırsız merak ve araştırma isteği
• Hayal gücü, yorulmayan gözler :)
• Assembly, C ve Python gibi en az bir scripting dili bilmek
• İşletim sistemleri yapısı, CPU mimarisi, Bilgisayar çalışma mantığı
• Kriptografi
• Anti-Debugging, Anti-Reversing teknikleri
• ….
16. Fonksiyon Çağrıları
call function ; store return addr on the stack
; and jump to function!
func:
push esi ; save esi
…
pop esi ; restore esi
ret ; read return addr from the stack
; and jump to it.
17. Registerlar - 1
• Registerlar ne yapar?
• Lokasyon/konum depolar
• Hafıza konumuna göre daha hızlı erişim olanağı sağlar
• EAX => Değişken değerleri depolar
• EBX => Base index (diziler ile kullanılır)
• ECX => Sayaç register
• EDX => Data
• ESI => String işlemleri için kaynak indexi
18. Registerlar - 2
• EDI => String işlemleri için hedef indexi
• ESP => Stack Pointer (Stack’in en üst adresi)
• EBP => Base Pointer (Stack’in en alt adresi)
• EIP => Instruction Pointer (Programın o an bulunduğu yer.Bir sonraki
instruction’ın adresini depolar.)
19. Registerlar - 3
• Segment Registerları
Hafızanın belli segmentlerini adreslemek için kullanılır
(code/data/stack segmentleri)
• CS => Code Segment
• SS => Stack Segment
• ES => Extra Segment
• DS => Data Segment
• FS,GS Segments
22. Tersine Mühendisin Alet Çantası
• Tersine mühendislik yaparken kullandığımız bir takım araçlar var.
Bunlar:
• Disassemblerlar
• Debuggerlar
• PE Editörleri
• Hex-Resource Editörler
• Sistem İzleme Araçları
23. Disassembler
• Bu yazılımlar, programı disassembly işleminden geçirerek programın
assembly kodu şeklindeki halini gösterir.
• Bu olay bize programda çağırılan fonksiyonları, string değerleri vs.
görüp incelememize olanak sağlar.
• En yaygın olarak kullanılarak disassembler => IDA
26. Debugger
• Debuggerlar ile programın çalışmasını satır satır izleyebiliriz.
• Disassembler gibi çalışırlar fakat ek olarak işlemleri izleme imkanımız olur.
• Çoğu zaman cracking, malware analizi, exploit geliştirme aşamalarında kullanılırlar.
• Bir debugger ile programın çalışması esnasında değişiklik yapılabilir.
• En yaygın olarak kullanılan debuggerlar:
• ImmunityDebugger
• OllyDbg
• WinDbg
32. Örnek WinDbg Komutları
•r: registerların o anki durumunu/içeriğini gösterir
•t: trace-step (until call)
•pt: single-step (until-ret)
•g: process run (go!)
•.hh: yardım komutu (örnek => .hh pt)
•lm: list modules
33. PE Editörleri
• PE => Portable Executable
• Nedir? => Windows çalıştırılabilir dosya formatı
• Bu programlar PE dosyalarının PE bilgilerini okumak için kullanılır
• Tersine Mühendisliğin en önemli konularından birisidir
==> “PE candır gerisi heyecandır”
• PE dosyaları program ile ilgili kritik bilgileri barındırdığından tersine
mühendislik veya malware analizi yaparken PE ile baya içli dışlı
olacağız :)
34. PE Editörleri - 2
• Yaygın olarak kullanılan PE Editörleri
• CFF Explorer
• LordPE
• DIE => Detect It Easy
• PeiD
55. Tersine Mühendislik-102 Ajanda
• Basic Windows Internals
• PE Dosya Yapısı
• Stack’in içinde neler oluyor?
• Debugging’e giriş. CrackMe çözümü
• Anti-Debugging Örneği
• Windbg’a giriş