Tersine Mühendislik 101

56
Reverse Engineering 101 Tersine Mühendislik 101 Tech Talks #02 Mavidurak-IO Fatih Erdoğan

Transcript of Tersine Mühendislik 101

Page 1: Tersine Mühendislik 101

Reverse Engineering 101

Tersine Mühendislik 101

Tech Talks #02

Mavidurak-IO

Fatih Erdoğan

Page 2: Tersine Mühendislik 101

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

[email protected]

• Member at Mavidurak-IO

Page 3: Tersine Mühendislik 101

Reverse Engineering??

Page 4: Tersine Mühendislik 101

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.

Page 5: Tersine Mühendislik 101

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.)

Page 6: Tersine Mühendislik 101

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.

Page 7: Tersine Mühendislik 101

http://www.reactos.org

Page 8: Tersine Mühendislik 101

Requirements

Analysis

Design

Implementation

Forward Engineering Reverse Engineering

Software Engineering

Page 9: Tersine Mühendislik 101

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

• ….

Page 10: Tersine Mühendislik 101

Analiz/Reversing Çeşitleri

• Statik Analiz/Reversing

• Dinamik Analiz/Reversing

Page 11: Tersine Mühendislik 101

Statik Analiz/Reversing

• Statik program analizi execute etmeden yani programı çalıştırmadan

yapılan yazılım analiz şeklidir.

Page 12: Tersine Mühendislik 101

Dinamik Analiz/Reversing

• Dinamik program analizi ise o an sanal veya gerçek bir process

üzerinde execute olan programa yapılan analizdir.

Page 13: Tersine Mühendislik 101

x86 Mimarisi & Assembly

Page 14: Tersine Mühendislik 101

Temel Aritmetik

mov eax, 5 ; eax=5

mov ebx, 3 ; ebx=3

add eax, ebx ; eax = eax + ebx

sub ebx, 2 ; ebx = ebx -2

Page 15: Tersine Mühendislik 101

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

Page 16: Tersine Mühendislik 101

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.

Page 17: Tersine Mühendislik 101

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

Page 18: Tersine Mühendislik 101

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.)

Page 19: Tersine Mühendislik 101

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

Page 20: Tersine Mühendislik 101

32-Bit Registerlar (x86)

Page 21: Tersine Mühendislik 101

Ne tür araçlar kullanacağız?

Page 22: Tersine Mühendislik 101

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ı

Page 23: Tersine Mühendislik 101

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

Page 24: Tersine Mühendislik 101

IDA Disassembler

Page 25: Tersine Mühendislik 101

IDA - 2

Page 26: Tersine Mühendislik 101

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

Page 27: Tersine Mühendislik 101

ImmunityDebugger

Page 28: Tersine Mühendislik 101

OllyDbg

Page 29: Tersine Mühendislik 101

OllyDbg - 2

Page 30: Tersine Mühendislik 101

WinDbg

Page 31: Tersine Mühendislik 101

WinDbg - 2

Page 32: Tersine Mühendislik 101

Ö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

Page 33: Tersine Mühendislik 101

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 :)

Page 34: Tersine Mühendislik 101

PE Editörleri - 2

• Yaygın olarak kullanılan PE Editörleri

• CFF Explorer

• LordPE

• DIE => Detect It Easy

• PeiD

Page 35: Tersine Mühendislik 101

CFF Explorer

Page 36: Tersine Mühendislik 101

LordPE

Page 37: Tersine Mühendislik 101

DIE (Detect It Easy)

Page 38: Tersine Mühendislik 101

PeiD

Page 39: Tersine Mühendislik 101

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

• …

Page 40: Tersine Mühendislik 101

Hex - Resource Editörler

• Birçok hex-resource editör mevcut

• HxD

• Hex Workshop

• ResEdit

Page 41: Tersine Mühendislik 101

HxD

Page 42: Tersine Mühendislik 101

Hex Workshop

Page 43: Tersine Mühendislik 101

ResEdit

Page 44: Tersine Mühendislik 101

Sistem İzleme Araçları

• Microsoft SysInternal Tools

• Process Explorer

• Process Monitor

• AutoRuns

• TCPView

Page 45: Tersine Mühendislik 101

Process Explorer

Page 46: Tersine Mühendislik 101

Process Monitor

Page 47: Tersine Mühendislik 101

AutoRuns

Page 48: Tersine Mühendislik 101

TCPView

Page 49: Tersine Mühendislik 101

Anti-Debugging??

Page 50: Tersine Mühendislik 101

Anti-Debugging

Page 51: Tersine Mühendislik 101

Anti-Debugging

Page 52: Tersine Mühendislik 101

Nasıl Bypass Ederiz??

Page 53: Tersine Mühendislik 101

Basic Anti-Debugging Bypass

Page 54: Tersine Mühendislik 101

Tersine Mühendislik denilen olay

bu kadar mı??

Page 55: Tersine Mühendislik 101

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ş

Page 56: Tersine Mühendislik 101

Fatih Erdoğantwitter.com/FeCassie

Mavidurak-IO

http://mavidurak.github.io