wstęp do reverse engineeringu - osec · reverse engineering to też odtwarzanie źródeł...

42
Wstęp do Reverse engineeringu

Upload: others

Post on 02-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Wstęp do Reverse engineeringu

Page 2: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

O mnie

● Agnieszka Bielec ● Eternal● pracuję w CERT Polska jako Malware Analyst● CTFy z p4● prowadze bloga eternal.red● lubie ścianki wpinaczkowe i rower● twitter

Page 3: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Reverse Engineering - co to takiego?

proces badania programu w celu ustalenia jak on dokładnie działa lub jak działają jego konkretne mechanizmy

W języku polskim: analiza wsteczna

Page 4: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

A do czego może się przydać?

● Odtworzenie źrodeł programu● modyfikowanie programu do którego nie mamy źródeł● tworzenie “hackow”/modów do gier● sprawdzenie dlaczego program nam się wywala

Page 5: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Zmodyfikujmy gre Icy Tower 1.3.1

Page 6: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Co to za plik?

Page 7: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

UPX - co to takiego ?

● Jest jednym z packerów

Page 8: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Co to packer?

Packery służą do kompresji plików wykonywalnych

Page 9: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Co to packer?

Page 10: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Co to packer?

Uruchomienie programu

Page 11: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Co to packer?

Uruchomienie programu

Page 12: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

rozpakowanie UPX’a

Page 13: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

W jakim języku został napisany Icy Tower?

Page 14: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

W jakim języku został napisany plik?

● metoda 1: strings

Page 15: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

W jakim języku został napisany plik?

● metoda 1: strings

Page 16: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

W jakim języku został napisany plik?

● metoda 1: strings

Page 17: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

W jakim języku został napisany plik?

● metoda 1: strings

Page 18: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

W jakim języku został napisany plik?

● metoda 1: strings● ● metoda 2: Detect It Easy (DIE)

Page 19: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Prosta modyfikacja programu - hexedytorem

Start Game -> Rozpocznij Gre

hexedytor HxD

Page 20: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Nazwy funkcji

Page 21: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Nazwy funkcji w innej wersji Icy Towera 1.5

Page 22: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

strip

- program służący do usuwania symboli z plików wykonywalnych

Page 23: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

To jak znajdziemy funkcję odpowiedzialną za skok?

użyjemy do tego debuggera x64dbg

1. PPM on code -> Analysis -> Analyse Module2. Menu -> View -> Functions3. PPM -> Set breakpoint on all commands 4. Rób wszystko, wyłącz breakpointy, a później skocz

Page 24: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Początek funkcji odpowiedzialnej za skok

Page 25: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Asembler x86-32 - Jak działają skoki warunkowe?

● Asembler posiada zbiór instrukcji które wykonują operacje na liczbach i ustawiają flagi w rejestrze EFLAGS. Przykładowe instrukcje to:

○ test○ cmp ○ sub○ add

● Przykładowe flagi rejestru EFLAGS to: ○ ZF (zero flag) - wynik operacji wyniósł zero○ SF (sign flag) - wynik operacji jest liczbą ujemną - najstarszy bit jest ustawiony na 1○ CF (carry flag) - wystąpił integer overflow (unsigned) - gdy wynik operacji nie zmieści się w

pamięci docelowej○ OF (overflow flag) - wystąpił integer overflow (signed)

Page 26: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Rejestr EFLAGS

Jest to 32-bitowy rejestr w którym poszczególne bity symbolizują flagi

obrazek ściągnięty z: link

1 - flaga ustawiona, 0 - flaga wygaszona

Page 27: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Instrukcja test

● test a, b - wykonuje operacje and na 2 liczbach i ustawia flagę ZF jeśli wynikiem było 0, wynik operacji and nie jest nigdzie zapisany

● test a, a - ustawia ZF jeśli a==0

Page 28: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Instrukcja test

● test a, b - wykonuje operacje and na 2 liczbach i ustawia flagę ZF jeśli wynikiem było 0, wynik operacji and nie jest nigdzie zapisany

● test a, a - ustawia ZF jeśli a==0

Przykład:

● test 2, 2 ?● test 0, 0 ?● test 3, 4 ?● test 1, 3 ?

Page 29: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Instrukcja test

● test a, b - wykonuje operacje and na 2 liczbach i ustawia flagę ZF jeśli wynikiem było 0, wynik operacji and nie jest nigdzie zapisany

● test a, a - ustawia ZF jeśli a==0

Przykład:

● test 2, 2 ZF<-0● test 0, 0 ?● test 3, 4 ?● test 1, 3 ?

Page 30: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Instrukcja test

● test a, b - wykonuje operacje and na 2 liczbach i ustawia flagę ZF jeśli wynikiem było 0, wynik operacji and nie jest nigdzie zapisany

● test a, a - ustawia ZF jeśli a==0

Przykład:

● test 2, 2 ZF<-0● test 0, 0 ZF<-1● test 3, 4 ?● test 1, 3 ?

Page 31: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Instrukcja test

● test a, b - wykonuje operacje and na 2 liczbach i ustawia flagę ZF jeśli wynikiem było 0, wynik operacji and nie jest nigdzie zapisany

● test a, a - ustawia ZF jeśli a==0

Przykład:

● test 2, 2 ZF<-0● test 0, 0 ZF<-1● test 3, 4 ZF<-1● test 1, 3 ?

Page 32: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Instrukcja test

● test a, b - wykonuje operacje and na 2 liczbach i ustawia flagę ZF jeśli wynikiem było 0, wynik operacji and nie jest nigdzie zapisany

● test a, a - ustawia ZF jeśli a==0

Przykład:

● test 2, 2 ZF<-0● test 0, 0 ZF<-1● test 3, 4 ZF<-1● test 1, 3 ZF<-0

Page 33: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Skoki warunkowe w asemblerze

● je/jz [adres] - jump if zero flag is set● jne [adres]- jump if not zero flag is set● inne

Page 34: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Inne instrukcje asemblera x86● mov a, b - a<-b ● [...] w mov oznacza dereferencje● ret - wychodzimy z funkcji● xor a, b - a<- a xor b● fld, fldz, fadd, fcomp itp - to funkcje operujące na koprocesorze (ułamkach) -

nie zamierzamy się w to bawić na konferencji

Page 35: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Początek funkcji odpowiedzialnej za skok (demo)

Page 36: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Reverse engineering to też odtwarzanie źródeł programu

Page 37: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Użyjmy dekompilatora!

x64dbg (snowman) - open source

Page 38: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Użyjmy dekompilatora!

IDA Pro (Hex-Rays) - nie open source

potrafi dekompilować x86, x86-64, ARM, MIPS

Page 39: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Inne dekompilatory

● RetDec - open source - x86, ARM, MIPS, PowerPC, PIC32 (tylko 32 bitowe architektury)

Page 40: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Gry multiplayer

Page 41: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Dziękuję za uwagę

Page 42: Wstęp do Reverse engineeringu - OSEC · Reverse engineering to też odtwarzanie źródeł programu. Użyjmy dekompilatora! x64dbg (snowman) - open source. Użyjmy dekompilatora!

Referencje