Zadania 1-4 wykorzystują ten sam format pliku wejściowego

Transkrypt

Zadania 1-4 wykorzystują ten sam format pliku wejściowego
Zadania 1-4 wykorzystują ten sam format pliku wejściowego zawierający instrukcje assemblera
wygenerowane dla testowanego programu wykonywalnego w formacie PE przez program dumpbin
dostępny w środowisku VisualStudio. W celu wygenerowania instrukcji asseblerowych dla danego
programu należy uruchomić "Visual Studio Command Prompt" (Z menu start należy wybrać:
Wszystkie Programy -> Microsoft Visual Studio 2008/2010 -> Visual Studio Tools) i wydać polecenie
dumpbin /DISASM <nazwa pliku PE/.exe>.
Programy powinny działać dla programów w wersji 32 i 64 bitowej (różnica w długościach adresów
oraz nazwach niektórych rejestrów). Przykładowy fragment pliku wejściowego dla wersji 32 bitowej, z
dodatkowymi komentarzami.
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file ..\malware-bin-2012\00c713ad2f0b189db600dfdc730b5034
File Type: EXECUTABLE IMAGE
00401000: FF 05 84 B7 40 00 inc
dword ptr ds:[0040B784h]
00401006: 33 C9
xor
ecx,ecx
. . . początek funkcji pod adresem 00401040 ... koniec pod adresem
00401080 (-> instrukcja ret). Skok do tej funkcji z adresu 00401220
00401040: 53
push
ebx
00401041: 8A 18
mov
bl,byte ptr [eax]
00401043: 56
push
esi
00401044: 8B F1
mov
esi,ecx
00401046: 8B 0D 88 B7 40 00 mov
ecx,dword ptr ds:[0040B788h]
0040104C: 6B C9 3A
imul
ecx,ecx,3Ah
...
0040107B: 5E
pop
esi
0040107C: 83 C8 FF
or
eax,0FFFFFFFFh
0040107F: 5B
pop
ebx
00401080: C3
ret
...
0040121E: 03 C6
add
eax,esi
00401220: E8 1B FE FF FF
call
00401040
// skok w "dobre" miejsce, na początek innej instrukcji
00401225: 85 C0
test
eax,eax
00401227: 75 2A
jne
00401253
. . . Proszę zwrócić uwagę na "długie instrukcje", postać binarna w
kilku liniach (teoretycznie instrukcja x86 może mieć 15 bajtów !!!)
00401408: 75 F9
jne
00401103
0040140A: 81 2D 94 B7 40 00 sub
dword ptr ds:[0040B794h],134h
34 01 00 00
00401414: 33 D2
xor
edx,edx
00401416: 33 C9
xor
ecx,ecx
00401418: C7 05 88 B7 40 00 mov
dword ptr ds:[0040B788h],11Eh
1E 01 00 00
00401422: 85 C0
test
eax,eax
Zadanie 1
Celem zadania jest sparsowanie pliku wejściowego z kodem w języku assembler, wykrycie wszystkich
wywołań funkcji adresowanych bezpośrednio (i wybranych pośrednich) oraz wykrycie/oszacowanie
początku i końca funkcji. Wyniki powinny być zapisane w plikach, zawierającym informacje o pozycji
instrukcji skoku i jej celu (wersja bezpośrednio adresowana i dotycząca wywołań systemowych) oraz
pliku zawierającym oszacowany początek i koniec funkcji.
Zadanie 2
Celem zadania jest sparsowanie pliku wejściowego z kodem w języku assembler oraz wykrycie
podejrzanych instrukcji wywołań funkcji. Podejrzane wywołanie funkcji jest rozumiane jako skok "w
środek innej instrukcji". Dla wykrytych podejrzanych skoków należy do plików wyjściowych zapisać w
postaci binarnej podaną przez użytkownika liczbę bajtów od miejsca docelowego skoku.
Zadanie 3
Celem zadania jest sparsowanie pliku wejściowego z kodem w języku assembler i dla wybranych
zakresów adresów wyliczenie statystyk dotyczących: długości instrukcji, opcodu instrukcji, użytych
rejestrów oraz długości wykorzystywanych w instrukcji wartości stałych (czy mają długość 1,2, ...
bajtów).
Zadanie 4
Celem zadania jest sparsowanie pliku wejściowego z kodem w języku assembler oraz wyszukanie
podanych przez użytkownika ciągów bajtów. Dodatkowo dla wykrytych ciągów należy zapisać w
postaci N plików binarnych plików wyszukane ciągi bajtów poprzedzone jednym bajtem, dwoma
bajtami ... N bajtami.
Zadanie 5
Celem zadania jest sparsowanie plików znajdujących się w podanym katalogu (pliki tekstowe i
binarne) i wykrycie tych, które zawierają poprawne żądania protokołu HTTP. Dla wykrytych sesji HTTP
należy odnaleźć plik z odpowiedzią (nazwy plików zawierają adresy i porty źródłowe i docelowy,
odpowiedź ma je w odwrotnej kolejności) i zapisać przesłane dane (bez nagłówków odpowiedzi
HTTP) w oddzielnym pliku. Dodatkowo program powinien tworzyć plik statystyki i dla każdej wykrytej
sesji zapisywać w jednej linii istotne informacje: nazwę pliku z żądaniem HTTP, metodę, URL, wielkość
pliku i nazwę pliku z przesyłaną treścią.