PN 2 id 363587 Nieznany

background image

ZSK WC WAT

Wprowadzenie do laboratoriów z

inspekcji kodu

Adam E. Patkowski

background image

2

DOS, Real Address Mode, V86

Szesnastobitowość

Przestrzeń adresowa: 1M + 64K -16

Adresacja SEG:OFFSET

Moduł wykonywalny: w 64K-bajtowych segmentach
(jednocześnie max. 6, wg CS, DS, ES, SS, FS, GS)

Ograniczenia na używanie rejestrów

Ograniczona lista rozkazów (+prefiksowane 32b)

Moduły ładowalne w formacie .COM lub .EXE

Komunikacja za pomocą przerwań

Windows 16-bitowe

Moduły ładowalne w formacie NE (New Executable)

Komunikacja za pomocą wywołań
międzysegmentowych (CALL FAR) procedur usług

Trzy

Trzy

ś

ś

rodowiska

rodowiska

background image

3

Windows 32-bitowe

Pamięć wirtualna 4GB dla każdego programu

Rozszerzona (32-bitowa) lista rozkazów
(+prefiksowane 64-bitowe w IA-32e)

Komunikacja z systemem za pomocą wywołań
procedur usługowych rozkazami CALL

Można abstrahować od zawartości rejestrów
segmentowych

Znikają liczne ograniczenia

Moduły ładowalne w formacie PE (Portable Executable)

Windows 64-bitowe

Cztery

Cztery

ś

ś

rodowiska

rodowiska

background image

4

4

Modu

Modu

ł

ł

ł

ł

adowalny .EXE (DOS)

adowalny .EXE (DOS)

EXE header

00 word "MZ" - Link file .EXE signature (Mark Zbikowski?)

02 word length of image mod 512

04 word size of file in 512 byte pages

06 word number of relocation items following header

08 word size of header in 16 byte paragraphs, used to locate the

beginning of the load module

0A word min # of paragraphs needed to run program

0C word max # of paragraphs the program would like

0E word offset in load module of stack segment (in paras)

10 word initial SP value to be loaded

12 word negative checksum of pgm used while by EXEC loads

pgm

14 word program entry point, (initial IP value)

16 word offset in load module of the code segment (in paras)

18 word offset in .EXE file of first relocation item

1A word overlay number (0 for root program)

RELOCATION TABLE

IMAGE

background image

5

5

Modu

Modu

ł

ł

ł

ł

adowalny .EXE

adowalny .EXE

relocation table and the program load module follow the header

relocation entries are 32 bit values representing the offset into the

load module needing patched

once the relocatable item is found, the CS register is added to the

value found at the calculated offset

Registers at load time of the EXE file are as follows:

AX:

contains number of characters in command tail, or 0

BX:CX32 bit value indicating the load module memory size

DX

zero

SS:SPset to stack segment if defined else, SS=CS and SP=0 or

top of memory.

DS

set to segment address of EXE header

ES

set to segment address of EXE header

CS:IP far address of program entry point, (label on "END„ statement

of program)

background image

6

6

PE

PE

-

-

Portable

Portable

Executable

Executable

----------------------------------------------------------

IMAGE_DOS_HEADER

----------------------------------------------------------

IMAGE_FILE_HEADER

----------------------------------------------------------

IMAGE_OPTIONAL_HEADER

----------------------------------------------------------

IMAGE_DIRECTORY_ENTRIES

----------------------------------------------------------

IMAGE_SECTION_HEADER

----------------------------------------------------------

SEKCJA 1

----------------------------------------------------------

SEKCJA 2

----------------------------------------------------------

...

----------------------------------------------------------

SEKCJA n

----------------------------------------------------------

IMAGE_DOS_HEADER – to stub, a. z ważniejszych pól zawiera wskaźnik do

IMAGE_FILE_HEADER - znajduje się tu m.in. sygnatura (PE i 2 zera), ilość sekcji, rodzaj procesora, na

którym program może być wykonywany, i inne

IMAGE_OPTIONAL_HEADER - takie informacje jak np. adres punktu startu, rozmiar pliku, wyrównanie itd..

IMAGE_DIRECTORY_ENTRIES - jest to tablica struktur, zawierająca adresy i rozmiary sekcji związanych

z działaniem pliku, czyli np. sekcja z importami. struktur takich jest 16, przy czym niektóre mogą być

wypełnione zerami, czyli po prostu nie są używane w danym pliku

IMAGE_SECTION_HEADER - jest to tablica z informacjami o poszczególnych sekcjach. ich rozmiar,

nazwa, adres fizyczny i wirtualny, blablabla

SEKCJA 1-n - a tu juz same sekcje, zawierające kod, dane, resource'y...

background image

7

Programy liniowe, a sterowane zdarzeniami

DOS – liniowe

Windows – sterowane zdarzeniami lub liniowe

W programach liniowych można prześledzić wykonywanie
programów od początku do końca: program działa od
chwili uruchomienia do końca, wywołując od czasu do
czasu usługi systemowe…

W programach sterowanych zdarzeniami śledzić można
działanie programów obsługi zdarzeń: program po
zarejestrowaniu podprogramów obsługi zdarzeń „kończy”
działanie i oczekuje na wywołania przez system; od tej
chwili reaguje na zdarzenia (zamiana ról z SO: „nie wołaj
mnie, to ja zawołam ciebie”)

Programy sterowane zdarzeniami

Programy sterowane zdarzeniami

background image

8

8

Program sterowany zdarzeniami

Program sterowany zdarzeniami

Fragment inicjujący: Rejestracja klas okien, dla każdej

klasy adres procedury obsługi okna, po czym pętla

oczekiwania na komunikaty

RegisterClass

CreateWindow

Pętla (tylko komunikat WM_QUIT kończy)

GetMessage (zwykle +TranslateMessage) czeka na komunikat

DispatchMessage (spowoduje wywołanie przez system obsługi okna)

Procedury obsługi okien – tu jest właściwy program!

Na WM_DESTROY woła PostQuitMessage (wysłanie

WM_QUIT)

Zwykle woła DefWindowProc – standardową obslugę okna

Windows – gdy zrobi już własne działania

(italikami zapisano wyzej nazwy funkcji systemowych)

background image

9

9

Komunikaty

Komunikaty

-

-

przyk

przyk

ł

ł

ady

ady

WM_KILLFOCUS otrzymuje okno, które straciło

fokus na rzecz innego

WM_SETFOCUS dostaje z kolei to okno, które fokus

otrzymało

WM_przyciskBUTTONakcja – myszka

Przycisk L lewy

Przycisk M środkowy

Przycisk R prawy

Akcja DOWN wciśnięcie przycisku

Akcja UP zwolnienie przycisku

Akcja DBLCLK dwukrotne kliknięcie

background image

10

Edytory binarne

HIEW

Debuggery

Szesnastobitowe pod DOS

TD

Szesnastobitowe pod Windows

TDW

Trzydziestodwubitowe

TDW32

OllyDbg

SoftIce (produkt NuMega, chyba najlepszy, gdyby nie IDA)

Programy do generowania patchy –

PatchFX

Disassemblery –

W32dsm89

Disassemblery z wykonywaniem kodu –

IDA Pro

Identyfikatory –

PEiD

Programy rozpakowujące –

PROCDUMP

Dekompilatory – Dede, Dis#, VBdecompiler, Mocha…

Edytory resursów –

ResHacker

Narzedzia

Narzedzia

reverse

reverse

engineering

engineering

background image

11

Tylko tryb zastępowania (nie ma wstawiania)

Wyświetlanie w postaci

Tekstowej

Szesnastkowej

Zdisasemblowanej

F3 – edycja

F2 tryb asemblacji

F9 wprowadzenie do pliku

F7 – szukanie

Adresy

Od początku pliku 00010123: (tak zawsze w trakcie edycji!)

Adres w przestrzeni wirtualnej .00400000: (kropka przed)

HIEW

HIEW

background image

12

TD

,

TDW

.

TDW32

Kursor operatora i okna

CtrlF2 – reset

F7 – wykonać jeden rozkaz

F8 – jeden rozkaz lub podprogram

altF7 – jeden rozkaz lub sekwencję przerwania
wewnętrznego

F9 – wykonywać do końca lub punktu
przerwania

F4 – wykonywać do kursora operatora

F2 – ustawić/skasować punkt przerwania

W V86 klawisz F5 pokazuje ekran operatora…

Debuggery

Debuggery

Borland

Borland

background image

13

13

Debugger

Debugger

to narz

to narz

ę

ę

dzie uruchomieniowe!

dzie uruchomieniowe!

Debugger pozwala badać zachowanie się

programów w pamięci (modułów

wykonywalnych)

Po zrozumieniu działania programu i

rozpoznaniu pożądanych zmian (dla

osiągnięcia jakiegoś celu) utrwalić można te

zmiany tylko zmieniając program na dysku

(moduł ładowalny)

Zmiana musi być taka, aby moduł

wykonywalny po załadowaniu do pamięci był

zgodny z oczekiwaniami…

Dlatego znajomość budowy EXE (w wersji

MZ, NE, PE), DLL itd. jest użyteczna.

background image

14

14

Zagnie

Zagnie

ż

ż

d

d

ż

ż

ane podprogramy

ane podprogramy

Przykład programu pod DOS

Denttop (16b) pod Windows

Typhon.exe

– program z problemem…

To nietypowy – liniowy program Windows

Program zwykle składa się z
zagnieżdżanych podprogramów – to może
znacznie przyspieszyć poszukiwania…

Typhon (32b) pod Windows

– szukanie

background image

15

15

Jak to si

Jak to si

ę

ę

robi

robi

idea

idea

Można oczywiście poznać i zrozumieć cały

program lepiej od autora…

tak trzeba postąpić przy inspekcji kodów

binarnych…

ale lepiej zanalizować tylko niezbędne

fragmenty:

…wybrać niepożądany „objaw”

Zlokalizować fragment kodu, generujący

objaw

Zobaczyć, gdzie wcześniej występuje

rozwidlenie toru algorytmu (skok warunkowy)

z gałęzią omijającą objaw

Zanalizować od czego zależy ten skok i

wymyślić najskuteczniejszą modyfikację

background image

16

16

Typowe konstrukcje

Typowe konstrukcje

Zagnieżdżane podprogramy – poznaliśmy

Podprogram, procedura a funkcja

Wywołania funkcji:

PUSH parametr_n

PUSH parametr_2

PUSH parametr_1

CALL FUNKCJA

ADD ESP, n*4 ; zdjęcie ze stosu parametrów

Wynik w EAX (lub AX i DX – w AX mniej

znacz.)

background image

17

17

Budowa podprogramu

Budowa podprogramu

W programach 16-bitowych:

PUSH BP

MOV BP, SP

SUB SP, wielkosc_danych_lok

; miejsce na dane

MOV SP, BP

POP BP

RET

W programach 32-bitowych:

PUSH EBP

MOV EBP,ESP

ADD ESP,0FFFF????H

; to odejmowanie!

MOV ESP,EBP

RETF

MOV EAX,[EBP+8] to odwołanie do parametru funkcji

MOV EAX,[EBP-4] a to do zmiennych lokalnych

(dynamicznych)

background image

18

18

Por

Por

ó

ó

wnania

wnania

Tekstów z wzorcem

PUSH adres_pierwszego_łąńcucha

PUSH adres_drugiego_łańcucha

CALL lcmpstrA

Wynik: AEX równe 0 oznacza identyczne

Funkcji skrótu (np. numer seryjny lub wynik funkcji

hash)

Przekształcenie tekstu wejściowego do wartości

CMP rejestr, [wartość]

background image

19

19

Gdy nie wystarcz

Gdy nie wystarcz

ą

ą

debuggery

debuggery

W programach sterowanych zdarzeniami

(poznamy bliżej za chwilę) nie ma

bezpośredniej drogi od początku do

„objawu”. Wówczas trzeba czegoś więcej niż

prosty debugger. Użyteczne: szczęście lub…

Disassemblery

WdASM

IDA

i inne

narzędzia

PEid

ProcDump

Patch generators

background image

20


Document Outline


Wyszukiwarka

Podobne podstrony:
normy do cw I PN B 19301 id 787 Nieznany
PN 88 B 06250 id 363612 Nieznany
PN 68 B01411 id 363607 Nieznany
Afryka Pn i Bliski Wschod id 52 Nieznany
PN N 01255 id 363626 Nieznany
Normy PN Maszyny id 321020 Nieznany
PN 83 B03430 id 363611 Nieznany
PN N 01256 5 id 363628 Nieznany
PN ISO3443 1 id 363625 Nieznany
PN N 01256 02 id 363627 Nieznany
PN B01411 id 363613 Nieznany
PN M 86961 id 437810 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany

więcej podobnych podstron