| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 |
|
|---|
| 21 |
#ifndef __PEHUNTER_H__ |
|---|
| 22 |
#define __PEHUNTER_H__ |
|---|
| 23 |
|
|---|
| 24 |
#include "sf_snort_packet.h" |
|---|
| 25 |
#include "sf_dynamic_preprocessor.h" |
|---|
| 26 |
|
|---|
| 27 |
#include "spp_pehunter.h" |
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 |
#define IMAGE_DOS_SIGNATURE 0x5A4D // MZ |
|---|
| 33 |
#define IMAGE_NT_SIGNATURE 0x00004550 // PE00 |
|---|
| 34 |
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 |
|---|
| 35 |
#define IMAGE_SIZEOF_SHORT_NAME 8 |
|---|
| 36 |
#define IMAGE_SIZEOF_SECTION_HEADER 40 |
|---|
| 37 |
|
|---|
| 38 |
typedef struct _IMAGE_SECTION_HEADER { |
|---|
| 39 |
char Name[IMAGE_SIZEOF_SHORT_NAME]; |
|---|
| 40 |
union { |
|---|
| 41 |
u_int32_t PhysicalAddress; |
|---|
| 42 |
u_int32_t VirtualSize; |
|---|
| 43 |
} Misc; |
|---|
| 44 |
u_int32_t VirtualAddress; |
|---|
| 45 |
u_int32_t SizeOfRawData; |
|---|
| 46 |
u_int32_t PointerToRawData; |
|---|
| 47 |
u_int32_t PointerToRelocations; |
|---|
| 48 |
u_int32_t PointerToLinenumbers; |
|---|
| 49 |
u_int16_t NumberOfRelocations; |
|---|
| 50 |
u_int16_t NumberOfLinenumbers; |
|---|
| 51 |
u_int32_t Characteristics; |
|---|
| 52 |
} IMAGE_SECTION_HEADER; |
|---|
| 53 |
|
|---|
| 54 |
typedef struct _IMAGE_DATA_DIRECTORY { |
|---|
| 55 |
u_int32_t VirtualAddress; |
|---|
| 56 |
u_int32_t Size; |
|---|
| 57 |
} IMAGE_DATA_DIRECTORY; |
|---|
| 58 |
|
|---|
| 59 |
typedef struct _IMAGE_FILE_HEADER { |
|---|
| 60 |
u_int16_t Machine; |
|---|
| 61 |
u_int16_t NumberOfSections; |
|---|
| 62 |
u_int32_t TimeDateStamp; |
|---|
| 63 |
u_int32_t PointerToSymbolTable; |
|---|
| 64 |
u_int32_t NumberOfSymbols; |
|---|
| 65 |
u_int16_t SizeOfOptionalHeader; |
|---|
| 66 |
u_int16_t Characteristics; |
|---|
| 67 |
} IMAGE_FILE_HEADER; |
|---|
| 68 |
|
|---|
| 69 |
typedef struct _IMAGE_OPTIONAL_HEADER { |
|---|
| 70 |
|
|---|
| 71 |
|
|---|
| 72 |
u_int16_t Magic; |
|---|
| 73 |
u_int8_t MajorLinkerVersion; |
|---|
| 74 |
u_int8_t MinorLinkerVersion; |
|---|
| 75 |
u_int32_t SizeOfCode; |
|---|
| 76 |
u_int32_t SizeOfInitializedData; |
|---|
| 77 |
u_int32_t SizeOfUninitializedData; |
|---|
| 78 |
u_int32_t AddressOfEntryPoint; |
|---|
| 79 |
u_int32_t BaseOfCode; |
|---|
| 80 |
u_int32_t BaseOfData; |
|---|
| 81 |
|
|---|
| 82 |
|
|---|
| 83 |
u_int32_t ImageBase; |
|---|
| 84 |
u_int32_t SectionAlignment; |
|---|
| 85 |
u_int32_t FileAlignment; |
|---|
| 86 |
u_int16_t MajorOperatingSystemVersion; |
|---|
| 87 |
u_int16_t MinorOperatingSystemVersion; |
|---|
| 88 |
u_int16_t MajorImageVersion; |
|---|
| 89 |
u_int16_t MinorImageVersion; |
|---|
| 90 |
u_int16_t MajorSubsystemVersion; |
|---|
| 91 |
u_int16_t MinorSubsystemVersion; |
|---|
| 92 |
u_int32_t Win32VersionValue; |
|---|
| 93 |
u_int32_t SizeOfImage; |
|---|
| 94 |
u_int32_t SizeOfHeaders; |
|---|
| 95 |
u_int32_t CheckSum; |
|---|
| 96 |
u_int16_t Subsystem; |
|---|
| 97 |
u_int16_t DllCharacteristics; |
|---|
| 98 |
u_int32_t SizeOfStackReserve; |
|---|
| 99 |
u_int32_t SizeOfStackCommit; |
|---|
| 100 |
u_int32_t SizeOfHeapReserve; |
|---|
| 101 |
u_int32_t SizeOfHeapCommit; |
|---|
| 102 |
u_int32_t LoaderFlags; |
|---|
| 103 |
u_int32_t NumberOfRvaAndSizes; |
|---|
| 104 |
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; |
|---|
| 105 |
} IMAGE_OPTIONAL_HEADER32; |
|---|
| 106 |
|
|---|
| 107 |
typedef struct _IMAGE_DOS_HEADER { |
|---|
| 108 |
u_int16_t e_magic; |
|---|
| 109 |
u_int16_t e_cblp; |
|---|
| 110 |
u_int16_t e_cp; |
|---|
| 111 |
u_int16_t e_crlc; |
|---|
| 112 |
u_int16_t e_cparhdr; |
|---|
| 113 |
u_int16_t e_minalloc; |
|---|
| 114 |
u_int16_t e_maxalloc; |
|---|
| 115 |
u_int16_t e_ss; |
|---|
| 116 |
u_int16_t e_sp; |
|---|
| 117 |
u_int16_t e_csum; |
|---|
| 118 |
u_int16_t e_ip; |
|---|
| 119 |
u_int16_t e_cs; |
|---|
| 120 |
u_int16_t e_lfarlc; |
|---|
| 121 |
u_int16_t e_ovno; |
|---|
| 122 |
u_int16_t e_res[4]; |
|---|
| 123 |
u_int16_t e_oemid; |
|---|
| 124 |
u_int16_t e_oeminfo; |
|---|
| 125 |
u_int16_t e_res2[10]; |
|---|
| 126 |
u_int32_t e_lfanew; |
|---|
| 127 |
} IMAGE_DOS_HEADER; |
|---|
| 128 |
|
|---|
| 129 |
typedef struct _IMAGE_NT_HEADERS { |
|---|
| 130 |
u_int32_t Signature; |
|---|
| 131 |
IMAGE_FILE_HEADER FileHeader; |
|---|
| 132 |
IMAGE_OPTIONAL_HEADER32 OptionalHeader; |
|---|
| 133 |
} IMAGE_NT_HEADERS32; |
|---|
| 134 |
|
|---|
| 135 |
|
|---|
| 136 |
|
|---|
| 137 |
|
|---|
| 138 |
typedef struct _SessionData { |
|---|
| 139 |
u_int8_t match; |
|---|
| 140 |
u_int8_t dumped; |
|---|
| 141 |
u_int32_t len; |
|---|
| 142 |
u_int32_t matchpos; |
|---|
| 143 |
u_int32_t filelen; |
|---|
| 144 |
u_char *data; |
|---|
| 145 |
IMAGE_DOS_HEADER *dosHeader; |
|---|
| 146 |
IMAGE_NT_HEADERS32 *peHeader; |
|---|
| 147 |
IMAGE_SECTION_HEADER *sectHeader; |
|---|
| 148 |
} SessionData; |
|---|
| 149 |
|
|---|
| 150 |
int Hunt(SFSnortPacket *p); |
|---|
| 151 |
|
|---|
| 152 |
#endif |
|---|