ݺߣ

ݺߣShare a Scribd company logo
Reverse Engineering 101
Tersine Mühendislik 101
Tech Talks #02
Mavidurak-IO
Fatih Erdoğan
root@mavidurak-io:~$ whoami
• Intern Security Researcher at SignalSEC
• Reverse Engineering, Exploit Development, low-level stuff
• Penetration Testing
• Sakarya University - Computer Engineering (2014 - …)
• http://ferdogan.net
• twitter.com/FeCassie
• fatiherdogan94@gmail.com
• Member at Mavidurak-IO
Reverse Engineering??
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.
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.)
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.
http://www.reactos.org
Requirements
Analysis
Design
Implementation
Forward Engineering Reverse Engineering
Software Engineering
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
• ….
Analiz/Reversing Çeşitleri
• Statik Analiz/Reversing
• Dinamik Analiz/Reversing
Statik Analiz/Reversing
• Statik program analizi execute etmeden yani programı çalıştırmadan
yapılan yazılım analiz şeklidir.
Dinamik Analiz/Reversing
• Dinamik program analizi ise o an sanal veya gerçek bir process
üzerinde execute olan programa yapılan analizdir.
x86 Mimarisi & Assembly
Temel Aritmetik
mov eax, 5 ; eax=5
mov ebx, 3 ; ebx=3
add eax, ebx ; eax = eax + ebx
sub ebx, 2 ; ebx = ebx -2
Hafıza Erişimi
cmp eax, 2 ; compare eax with 2
je label ; if(eax == 2)
ja label ; if(eax > 2)
jb label ; if(eax < 2)
jbe label ; if(eax <= 2)
jne label ; if(eax != 2)
jmp label ; jump label
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.
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
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.)
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
32-Bit Registerlar (x86)
Ne tür araçlar ܱԲğı?
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ı
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
IDA Disassembler
IDA - 2
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
ImmunityDebugger
OllyDbg
OllyDbg - 2
WinDbg
WinDbg - 2
Ö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
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 :)
PE Editörleri - 2
• Yaygın olarak kullanılan PE Editörleri
• CFF Explorer
• LordPE
• DIE => Detect It Easy
• PeiD
CFF Explorer
LordPE
DIE (Detect It Easy)
PeiD
Hex - Resource Editörler
• Diğerlerine göre çok yaygın değiller
• Basit string düzenlemeleri
• Bayt değiştirmeleri
• Hızlı kod analizi
• …
Hex - Resource Editörler
• Birçok hex-resource editör mevcut
• HxD
• Hex Workshop
• ResEdit
HxD
Hex Workshop
ResEdit
Sistem İzleme Araçları
• Microsoft SysInternal Tools
• Process Explorer
• Process Monitor
• AutoRuns
• TCPView
Process Explorer
Process Monitor
AutoRuns
TCPView
Anti-Debugging??
Anti-Debugging
Anti-Debugging
Nasıl Bypass Ederiz??
Basic Anti-Debugging Bypass
Tersine Mühendislik denilen olay
bu kadar mı??
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ş
Fatih Erdoğan
twitter.com/FeCassie
Mavidurak-IO
http://mavidurak.github.io

More Related Content

Tersine Mühendislik 101

  • 1. Reverse Engineering 101 Tersine Mühendislik 101 Tech Talks #02 Mavidurak-IO Fatih Erdoğan
  • 2. root@mavidurak-io:~$ whoami • Intern Security Researcher at SignalSEC • Reverse Engineering, Exploit Development, low-level stuff • Penetration Testing • Sakarya University - Computer Engineering (2014 - …) • http://ferdogan.net • twitter.com/FeCassie • fatiherdogan94@gmail.com • Member at Mavidurak-IO
  • 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 • ….
  • 10. Analiz/Reversing Çeşitleri • Statik Analiz/Reversing • Dinamik Analiz/Reversing
  • 11. Statik Analiz/Reversing • Statik program analizi execute etmeden yani programı çalıştırmadan yapılan yazılım analiz şeklidir.
  • 12. Dinamik Analiz/Reversing • Dinamik program analizi ise o an sanal veya gerçek bir process üzerinde execute olan programa yapılan analizdir.
  • 13. x86 Mimarisi & Assembly
  • 14. Temel Aritmetik mov eax, 5 ; eax=5 mov ebx, 3 ; ebx=3 add eax, ebx ; eax = eax + ebx sub ebx, 2 ; ebx = ebx -2
  • 15. Hafıza Erişimi cmp eax, 2 ; compare eax with 2 je label ; if(eax == 2) ja label ; if(eax > 2) jb label ; if(eax < 2) jbe label ; if(eax <= 2) jne label ; if(eax != 2) jmp label ; jump label
  • 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
  • 21. Ne tür araçlar ܱԲğı?
  • 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
  • 37. DIE (Detect It Easy)
  • 38. PeiD
  • 39. Hex - Resource Editörler • Diğerlerine göre çok yaygın değiller • Basit string düzenlemeleri • Bayt değiştirmeleri • Hızlı kod analizi • …
  • 40. Hex - Resource Editörler • Birçok hex-resource editör mevcut • HxD • Hex Workshop • ResEdit
  • 41. HxD
  • 44. Sistem İzleme Araçları • Microsoft SysInternal Tools • Process Explorer • Process Monitor • AutoRuns • TCPView
  • 54. Tersine Mühendislik denilen olay bu kadar mı??
  • 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ş