BearParser
Portable Executable parsing library (from PE-bear)
Toggle main menu visibility
Loading...
Searching...
No Matches
parser
pe
SecurityDirWrapper.cpp
Go to the documentation of this file.
1
#include "
pe/SecurityDirWrapper.h
"
2
#include "
pe/PEFile.h
"
3
4
pe::WIN_CERTIFICATE* SecurityDirWrapper::getCert()
5
{
6
offset_t
rva =
getDirEntryAddress
();
7
8
BYTE *ptr =
m_Exe
->getContentAt(rva,
Executable::RAW
,
sizeof
(pe::WIN_CERTIFICATE));
9
if
(ptr == NULL)
return
NULL;
10
11
return
(pe::WIN_CERTIFICATE*) ptr;
12
}
13
14
bool
SecurityDirWrapper::wrap
()
15
{
16
this->sizeOk =
false
;
17
18
pe::WIN_CERTIFICATE* cert = getCert();
19
if
(cert == NULL)
return
false
;
20
21
offset_t
offset = this->
getFieldOffset
(
SecurityDirWrapper::CERT_CONTENT
);
22
if
(offset ==
INVALID_ADDR
)
return
false
;
23
BYTE *ptr = NULL;
24
25
size_t
fieldsSize =
sizeof
(cert->dwLength) +
sizeof
(cert->wRevision) +
sizeof
(cert->dwLength);
26
size_t
certSize = cert->dwLength - fieldsSize;
27
ptr =
m_Exe
->getContentAt(offset,
Executable::RAW
,
static_cast<
bufsize_t
>
(certSize));
28
29
if
(ptr == NULL)
return
false
;
30
31
this->sizeOk =
true
;
32
return
true
;
33
}
34
35
void
*
SecurityDirWrapper::getPtr
()
36
{
37
return
getCert();
38
}
39
40
bufsize_t
SecurityDirWrapper::getSize
()
41
{
42
pe::WIN_CERTIFICATE* cert = getCert();
43
if
(cert == NULL)
return
0;
44
45
bufsize_t
fullSize =
static_cast<
bufsize_t
>
(
sizeof
(pe::WIN_CERTIFICATE));
// TODO: check it
46
if
(this->sizeOk) {
47
fullSize =
static_cast<
bufsize_t
>
(cert->dwLength);
48
}
49
return
fullSize;
50
}
51
52
53
void
*
SecurityDirWrapper::getFieldPtr
(
size_t
fId,
size_t
subField)
54
{
55
pe::WIN_CERTIFICATE* cert = getCert();
56
if
(cert == NULL)
return
0;
57
58
switch
(fId) {
59
case
CERT_LEN
:
return
&cert->dwLength;
60
case
REVISION
:
return
&cert->wRevision;
61
case
TYPE
:
return
&cert->wCertificateType;
62
case
CERT_CONTENT
:
return
&cert->bCertificate;
63
}
64
return
this->
getPtr
();
65
}
66
67
QString
SecurityDirWrapper::getFieldName
(
size_t
fieldId)
68
{
69
switch
(fieldId) {
70
case
CERT_LEN
:
return
"Length"
;
71
case
REVISION
:
return
"Revision"
;
72
case
TYPE
:
return
"Type"
;
73
case
CERT_CONTENT
:
return
"Cert. Content"
;
74
}
75
return
getName
();
76
}
77
78
WrappedValue::data_type
SecurityDirWrapper::containsDataType
(
size_t
fieldId,
size_t
subField)
79
{
80
if
(fieldId ==
CERT_CONTENT
){
81
return
WrappedValue::COMPLEX
;
82
}
83
return
WrappedValue::INT
;
84
}
85
86
QString
SecurityDirWrapper::translateType
(
int
type)
87
{
88
switch
(type) {
89
case
pe::WIN_CERT_TYPE_X509 :
return
"X.509 certificate"
;
90
case
pe::WIN_CERT_TYPE_PKCS_SIGNED_DATA :
return
"PKCS Signed Data"
;
91
case
pe::WIN_CERT_TYPE_RESERVED_1 :
return
"Reserved"
;
92
case
pe::WIN_CERT_TYPE_PKCS1_SIGN :
return
"PKCS1 Module Sign Fields"
;
93
}
94
return
""
;
95
}
96
97
QString
SecurityDirWrapper::translateFieldContent
(
size_t
fieldId)
98
{
99
if
(fieldId !=
TYPE
)
return
""
;
100
101
pe::WIN_CERTIFICATE* cert = getCert();
102
if
(cert == NULL)
return
""
;
103
104
return
translateType
(cert->wCertificateType);
105
}
INVALID_ADDR
const offset_t INVALID_ADDR
Definition
AbstractByteBuffer.h:21
offset_t
uint64_t offset_t
Definition
AbstractByteBuffer.h:20
bufsize_t
size_t bufsize_t
Definition
AbstractByteBuffer.h:17
PEFile.h
SecurityDirWrapper.h
DataDirEntryWrapper::getDirEntryAddress
offset_t getDirEntryAddress()
Definition
DataDirEntryWrapper.cpp:19
ExeElementWrapper::getFieldOffset
virtual offset_t getFieldOffset(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ExeElementWrapper.cpp:51
ExeElementWrapper::m_Exe
Executable * m_Exe
Definition
ExeElementWrapper.h:65
Executable::RAW
@ RAW
Definition
Executable.h:44
SecurityDirWrapper::translateFieldContent
virtual QString translateFieldContent(size_t fieldId)
Definition
SecurityDirWrapper.cpp:97
SecurityDirWrapper::TYPE
@ TYPE
Definition
SecurityDirWrapper.h:22
SecurityDirWrapper::CERT_LEN
@ CERT_LEN
Definition
SecurityDirWrapper.h:20
SecurityDirWrapper::REVISION
@ REVISION
Definition
SecurityDirWrapper.h:21
SecurityDirWrapper::CERT_CONTENT
@ CERT_CONTENT
Definition
SecurityDirWrapper.h:23
SecurityDirWrapper::getFieldName
virtual QString getFieldName(size_t fieldId)
Definition
SecurityDirWrapper.cpp:67
SecurityDirWrapper::getPtr
virtual void * getPtr()
Definition
SecurityDirWrapper.cpp:35
SecurityDirWrapper::getSize
virtual bufsize_t getSize()
Definition
SecurityDirWrapper.cpp:40
SecurityDirWrapper::containsDataType
virtual WrappedValue::data_type containsDataType(size_t fieldId, size_t subField=FIELD_NONE)
Definition
SecurityDirWrapper.cpp:78
SecurityDirWrapper::getName
virtual QString getName()
Definition
SecurityDirWrapper.h:40
SecurityDirWrapper::translateType
QString translateType(int type)
Definition
SecurityDirWrapper.cpp:86
SecurityDirWrapper::wrap
bool wrap()
Definition
SecurityDirWrapper.cpp:14
SecurityDirWrapper::getFieldPtr
virtual void * getFieldPtr(size_t fieldId, size_t subField)
Definition
SecurityDirWrapper.cpp:53
WrappedValue::data_type
data_type
Definition
WrappedValue.h:15
WrappedValue::INT
@ INT
Definition
WrappedValue.h:17
WrappedValue::COMPLEX
@ COMPLEX
Definition
WrappedValue.h:20
Generated by
1.17.0