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