Introductie

Op de site van opensecuritytraining.info is een cursus "The Life of Binaries" te vinden.

In deze cursus wordt tot in zeer groot detail uitgelegd hoe allerlei soorten executables, zoals .EXE- en .DLL-bestanden in elkaar zitten.

Na elk deel van de uitleg volgt er een nieuwe ronde van de game Binhunt. M.b.v. een aantal tools moet je een aantal vragen beantwoorden, om te laten zien dat je begrepen hebt wat er zojuist is uitgelegd.

Ik liep zelf tegen wat problemen aan bij het spelen van dit spel en de tools, en leg daarom op deze pagina wat dingen uit.


Binhunt game

Python

Om het spel te kunnen spelen heb je om te beginnen een Python interpreter nodig. Ik ken alleen die van ActiveState, en de versie die ik heb gedownload (2.7.8.10) werkt prima samen met het BinHunt-programma dat augustus 2014 op de site stond.

Python kan je hier downloaden.

Installatie gaat default naar de map C:\Python27

Download

Download eerst het bestand met de code van de site van de cursus. Het bestand heet 2012_LoB_Code.zip

Pak dit bestand uit naar een map naar keuze.

In de map Code zit een nieuwe .ZIP-file: BinaryScavengerHunt_03_17_2013.zip

Pak die uit naar waar je maar wilt. Je krijgt dan een map pythondemo, met daarin een map xeno-mod-pefile-1.2.10-121

Navigeer op de command line naar die map, en tik in:
c:\python27\python.exe setup.py install

Het spelen van de rondes

Ga op de command line weer naar de hierboven aangemaakte map pythondemo

Als je ronde 3 wilt spelen, tik je nu in:
c:\python27\python.exe binhunt.py 3

Kies de 0 van single player mode, of de 2 van class mode als je met een specifieke seed wilt beginnen.

De seed is een random getal (of in het laatste geval dus niet, omdat je wilt dat de hele klas dezelfde vragen krijgt) die de volgorde van de vragen bepaalt. In de video's wordt regelmatig de seed genoemd waarmee de klas speelt, en je kan je dan vergelijken met de resultaten van die klas.

Ronde 1

Does this binary have 9 sections? (Y or N)

In PEview kan je links gewoon de secties tellen.

What IMAGE_FILE_HEADER.Machine value indicates a 64 bit binary?

Dit is gewoon een weetje. Het is 0x8664.

What is the IMAGE_FILE_HEADER's TimeDateStamp?

In PEview kan je links klikken op IMAGE_FILE_HEADER, en dan moet je het hexadecimale getal onder Data voor Time Date Stamp hebben.

How far into the binary is the IMAGE_NT_HEADERS structure?

In PEview kan je links klikken op IMAGE_NT_HEADERS, en dan zie je onder de kolom RVA het beginadres.

Hou in de gaten dat je in dit programma via View - Address bepaalt wat er in de 1e kolom wordt weergegeven.

Is this a 32 bit or 64 bit binary? (enter 32 or 64)

In PEview kan je links klikken op IMAGE_FILE_HEADER, en dan moet je naar het hexadecimale getal onder Data kijken.

Als het getal 8664 is, is het een 64 bit binary.

Ronde 2

Does this binary support non-executable data? (Y or N)

In PEview kan je links klikken op IMAGE_FILE_HEADER, en dan moet je naar de Characteristics kijken.

Daar staan een aantal vlaggen, die duidelijk aangeven wat de eigenschappen van deze binary zijn.

Ronde 3

Is the Optional Header SizeOfImage value correct? (Y or N)

???

What is the file offset for this section's data?

In PEview kan je links klikken op de IMAGE_SECTION_HEADER van de betreffende sectie.

Dan moet je rechts kijken naar het getal voor Pointer to Raw Data

\

Does the IMAGE_OPTIONAL_HEADER.SizeOfImage match the expected value based on the number and size of sections? (Y or N)

???

Can a section's SizeOfRawData be larger than its VirtualSize? (Y or N)

Dit is een weetje. Het is antwoord is ja, volgens mij omdat op disk de hoeveelheid gebruikte ruimte afgerond wordt, en in memory niet (of in kleinere brokken).

Can a section's VirtualSize be larger than its SizeOfRawData? (Y or N)

Dit is een weetje. Het is antwoord is ja, maar het is wat lastiger te verklaren dan de vorige vraag.

What is the file offset for the first byte of data after this section?

In PEview kan je links klikken op de IMAGE_SECTION_HEADER van de betreffende sectie.

Dan moet je rechts kijken naar het getal voor Pointer to Raw Data, en het getal voor Size of Raw Data

Tel die 2 bij elkaar op.

Does this section have the IMAGE_SCN_CTN_CODE characteristic set? (Y or N)

In PEview kan je links klikken op de IMAGE_SECTION_HEADER van de betreffende sectie.

Kijk dan rechts bij de Characteristics

Although it is commonly merged into other sections, what is a possible name for the section containing import data?

Dit is een weetje. Het antwoord is .idata

What is the section name that typically contains the program's writable global data?

Dit is een weetje. Het antwoord is .data

What is the section name that typically contains the program's relocation data?

Dit is een weetje. Het antwoord is .reloc

What is the section name that typically contains the program's resources?

Dit is een weetje. Het antwoord is .rsrc

Does this section contain initialized data? (Y or N)

Zie deze vraag.

Can this section be shared between processes? (Y or N)

Zie deze vraag.

What is the commonly used prefix for sections that can be paged to disk?

Dit is een weetje. Het antwoord is PAGE

Should this section not be paged out to disk? (Y or N)

Zie deze vraag.

How far into the file on disk is the data for this section?

In PEview kan je links klikken op de IMAGE_SECTION_HEADER van de betreffende sectie.

Dan moet je rechts kijken naar het getal voor Pointer to Raw Data

What is the RVA this section will be loaded at?

In PEview kan je links klikken op de IMAGE_SECTION_HEADER van de betreffende sectie.

Dan moet je rechts kijken naar het getal voor RVA

Although it is commonly merged into other sections, what is a possible name for the section containing global data which is uninitialized, and therefore does not need to be stored on disk?

Dit is een weetje. Het antwoord is .bss

Is this section executable? (Y or N)

Zie deze vraag.

Ronde 4

De seed is 7431.

At what RVA do the INT entries from MSVCR100.dll start?

RVA is het Relative Virtual Address.

In CFF Explorer kan je het antwoord vinden door links te klikken op Import Directory, en in de tabel rechts dan te kijken onder OFTs

At what VA do the INT entries from KERNEL32.dll start?

VA is het Virtual address.

In CFF Explorer kan je het antwoord vinden door links te klikken op Import Directory, en in de tabel rechts dan te kijken onder OFTs

Tel bij die waarde nog het getal achter ImageBase op. Dat kan je vinden door links te klikken op Optional Header

At what RVA do the IAT entries from KERNEL32.dll start?

In CFF Explorer kan je het antwoord vinden door links te klikken op Import Directory, en in de tabel rechts dan te kijken onder FTs (IAT)

In what section can the IAT be found?

Klap in PEview links de verschillende secties uit, dan zie je vanzelf waar hij staat.

Maar dat is niet echt een intelligente methode, en als het een 64-bit executable is dan werkt het niet.

De betere methode is links te klikken op IMAGE_OPTIONAL_HEADER, en te kijken op welk RVA de IAT begint.

Daarna kan je de verschillende IMAGE_SECTION_HEADER's bij langs gaan, en kijken op welk RVA de sections beginnen.

Door die gegevens te combineren vind je het antwoord.

Does this binary directly import functions from KERNEL32.dll? (Y or N)

Klap in PEview links de verschillende secties uit, en zoek de Import Directory Table

Dan zie je rechts de verschillende modules waaruit iets geïmporteerd wordt.

How many functions does this import from MSVCR100.dll?

In PEview moet je zelf tellen, in CFF Explorer kan je het antwoord vinden door links te klikken op Import Directory, en in de tabel rechts dan te kijken onder de kolom Imports

How many entries are there in the import directory table?

In CFF Explorer kan je het antwoord vinden door links te klikken op Import Directory, en in de tabel rechts dan te kijken hoeveel modules er staan.

Does this import function USER32.dll!MessageBoxA? (Y or N)

In CFF Explorer kan je het antwoord vinden door links te klikken op Import Directory, en in de tabel rechts dan te klikken op de module naam (in dit geval USER32.DLL) onder de kolom Imports

What is the value of IMAGE_OPTIONAL_HEADER.DataDirectory[IMAGE_DIRECTORY_ENTRY_I AT].RVA?

Je moet hier blijkbaar de IAT (Import Address Table) hebben (achter de laatste underscore in de index kan steeds een andere tabelnaam staan).

In CFF Explorer kan je het antwoord vinden door links te klikken op Data Directories, en in de tabel rechts dan te kijken naar de waarde onder de kolom Value achter Import Address Table Directory RVA

What is the total size of the Import Address Table (IAT)?

In CFF Explorer kan je het antwoord vinden door links te klikken op Data Directories, en in de tabel rechts dan te kijken naar de waarde onder de kolom Value achter Import Address Table Directory Size


Tools om informatie over executables te krijgen

In de cursus wordt gebruik gemaakt van de tools PEview en CFF Explorer (de laatste biedt meer info).

Daarnaast heb ik ook nog NikPEViewer en PEBrowse gevonden.

PEview 0.9.9.0

Is hier gratis te downloaden.

Het programma hoeft niet geïnstalleerd te worden.

Dit programma kan niet overweg met 64-bit images. Verder laat het elke keer als je File - Open doet alleen het laatste type executable (bv. .DLL) zien. Beetje irritant.

NikPEViewer 0.0.0.4

Is hier gratis te downloaden.

Het programma hoeft niet geïnstalleerd te worden.

Ik vind dit programma wel plezierig, afgezien van dat er steeds een venster in beeld staat dat ik niet nodig heb (Module binary view).

CFF Explorer VIII

Is hier gratis te downloaden.

Het programma hoeft niet geïnstalleerd te worden.

Ik vind dit programma in veel opzichten de beste. Het enige verraderlijke is, dat als je een nieuw bestand opent, er een nieuw tabblad aangemaakt wordt, maar je op het oude tabblad blijft staan.

PEBrowse Professional 10.1.5.0

Is hier gratis te downloaden.

Dit programma moet wel geïnstalleerd worden.

Dit programma kan ongetwijfeld waanzinnig veel, maar het is mij voorlopig te ingewikkeld.



    Tweeten

© Henk Dalmolen
Reageer via E-mail (dalmolen@xs4all.nl)

Deze pagina is voor het laatst gewijzigd op: 8-12-2014 23:44:54