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ą.