PE-sieve
Scans all running processes. Recognizes and dumps a variety of potentially malicious implants (replaced/implanted PEs, shellcodes, hooks, in-memory patches).
Toggle main menu visibility
Loading...
Searching...
No Matches
postprocessors
pe_reconstructor.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <windows.h>
4
#include <psapi.h>
5
#include <map>
6
#include <peconv.h>
7
8
#include "
pe_buffer.h
"
9
#include "
../scanners/artefact_scanner.h
"
10
11
namespace
pesieve
{
12
13
template
<
typename
IMAGE_OPTIONAL_HEADER_T>
14
bool
overwrite_opt_hdr
(BYTE* vBuf,
size_t
vBufSize, IMAGE_OPTIONAL_HEADER_T* opt_hdr_ptr,
PeArtefacts
&artefacts)
15
{
16
#ifdef _DEBUG
17
std::cout <<
"Trying to overwrite the optional header\n"
;
18
#endif
19
if
(!vBuf || !opt_hdr_ptr)
return
false
;
20
if
(!peconv::validate_ptr(vBuf, vBufSize, opt_hdr_ptr,
sizeof
(IMAGE_OPTIONAL_HEADER_T))) {
21
return
false
;
22
}
23
if
(artefacts.
is64bit
) {
24
opt_hdr_ptr->Magic = IMAGE_NT_OPTIONAL_HDR64_MAGIC;
25
}
26
else
{
27
opt_hdr_ptr->Magic = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
28
}
29
//set typical values for the fields that has been erased:
30
if
(opt_hdr_ptr->SectionAlignment == 0) {
31
opt_hdr_ptr->SectionAlignment =
PAGE_SIZE
;
32
}
33
if
(opt_hdr_ptr->FileAlignment == 0) {
34
opt_hdr_ptr->FileAlignment = 0x200;
// typical file alignment
35
}
36
if
(opt_hdr_ptr->SizeOfHeaders == 0) {
37
opt_hdr_ptr->SizeOfHeaders = 0x400;
//typical header size
38
}
39
if
(opt_hdr_ptr->SizeOfImage < artefacts.
calculatedImgSize
) {
40
opt_hdr_ptr->SizeOfImage =
MASK_TO_DWORD
(artefacts.
calculatedImgSize
);
41
}
42
return
true
;
43
}
44
45
class
PeReconstructor
{
46
public
:
47
PeReconstructor
(
PeArtefacts
_artefacts,
PeBuffer
&_peBuffer)
48
:
origArtefacts
(_artefacts),
peBuffer
(_peBuffer)
49
{
50
}
51
52
bool
reconstruct
();
53
54
protected
:
55
bool
reconstructFileHdr
();
56
bool
reconstructPeHdr
();
57
bool
fixSectionsVirtualSize
(HANDLE processHandle);
58
bool
fixSectionsCharacteristics
(HANDLE processHandle);
59
60
size_t
shiftPeHeader
();
61
62
const
PeArtefacts
origArtefacts
;
63
PeArtefacts
artefacts
;
64
PeBuffer
&
peBuffer
;
65
};
66
67
};
//mamespace pesieve
68
artefact_scanner.h
pesieve::PeArtefacts
A report about the PE artefact detected in the workingset.
Definition
artefact_scanner.h:22
pesieve::PeArtefacts::calculatedImgSize
size_t calculatedImgSize
Definition
artefact_scanner.h:110
pesieve::PeArtefacts::is64bit
bool is64bit
Definition
artefact_scanner.h:113
pesieve::PeBuffer
Definition
pe_buffer.h:8
pesieve::PeReconstructor::PeReconstructor
PeReconstructor(PeArtefacts _artefacts, PeBuffer &_peBuffer)
Definition
pe_reconstructor.h:47
pesieve::PeReconstructor::shiftPeHeader
size_t shiftPeHeader()
Definition
pe_reconstructor.cpp:18
pesieve::PeReconstructor::fixSectionsVirtualSize
bool fixSectionsVirtualSize(HANDLE processHandle)
Definition
pe_reconstructor.cpp:109
pesieve::PeReconstructor::peBuffer
PeBuffer & peBuffer
Definition
pe_reconstructor.h:64
pesieve::PeReconstructor::reconstructPeHdr
bool reconstructPeHdr()
Definition
pe_reconstructor.cpp:272
pesieve::PeReconstructor::fixSectionsCharacteristics
bool fixSectionsCharacteristics(HANDLE processHandle)
Definition
pe_reconstructor.cpp:191
pesieve::PeReconstructor::reconstructFileHdr
bool reconstructFileHdr()
Definition
pe_reconstructor.cpp:228
pesieve::PeReconstructor::origArtefacts
const PeArtefacts origArtefacts
Definition
pe_reconstructor.h:62
pesieve::PeReconstructor::reconstruct
bool reconstruct()
Definition
pe_reconstructor.cpp:75
pesieve::PeReconstructor::artefacts
PeArtefacts artefacts
Definition
pe_reconstructor.h:63
MASK_TO_DWORD
#define MASK_TO_DWORD(val)
Definition
iat_finder.h:9
pesieve
Definition
pesieve.py:1
pesieve::overwrite_opt_hdr
bool overwrite_opt_hdr(BYTE *vBuf, size_t vBufSize, IMAGE_OPTIONAL_HEADER_T *opt_hdr_ptr, PeArtefacts &artefacts)
Definition
pe_reconstructor.h:14
pe_buffer.h
PAGE_SIZE
#define PAGE_SIZE
Definition
workingset_enum.h:11
Generated by
1.17.0