7#include <pe-parse/parse.h>
26 "Binaries with dynamic base support can be "
27 "dynamically rebased, enabling ASLR.";
30 "Binaries with ASLR support have randomized virtual memory layouts. "
31 "ASLR is enabled by dynamic base support (without stripped relocation "
32 "entries) or by using a managed runtime like .NET.";
35 "Binaries with high entropy virtual address support can leverage more of "
36 "the virtual memory space to strengthen ASLR.";
39 "Binaries with force integrity checking enabled perform additional "
40 "Authenticode signing checks, including page hash checks.";
43 "Binaries with NX support can be run with hardware-enforced memory "
44 "permissions (i.e., hardware DEP).";
47 "Binaries with isolation support cause the Windows loader to perform "
48 "a manifest lookup on program load.";
51 "Binaries with SEH support can use structured exception handlers.";
54 "Binaries with CFG enabled have additional protections on indirect calls.";
57 "Binaries with Authenticode signatures are verified at load time.";
60 "Binaries with RFG enabled have additional return-oriented-programming "
64 "Binaries with SafeSEH enabled have additional protections for stack-based "
65 "structured exception handlers.";
68 "Binaries with GS enabled have additional protections against stack-based "
72 ".NET binaries run in a managed environment with many default mitigations.";
75 "Binaries with cet compat support will use "
76 "the shadow stack (if available) to mitigate ROP.";
84 if (!(pe_ = peparse::ParsePEFromFile(path.c_str()))) {
85 throw ChecksecError(
"Couldn't load file; corrupt or not a PE?");
94 peparse::parsed_pe*
get()
const {
return pe_; }
97 peparse::parsed_pe* pe_;
148 const std::string
filepath()
const {
return filepath_; }
238 std::string filepath_;
239 std::uint16_t targetMachine_ = 0;
240 std::uint16_t imageCharacteristics_ = 0;
241 std::uint16_t dllCharacteristics_ = 0;
242 std::uint32_t loadConfigSize_ = 0;
243 std::uint32_t loadConfigGuardFlags_ = 0;
244 std::uint64_t loadConfigSEHandlerTable_ = 0;
245 std::uint64_t loadConfigSEHandlerCount_ = 0;
246 std::uint64_t loadConfigSecurityCookie_ = 0;
247 peparse::data_directory clrConfig_ = {0};
248 std::uint16_t extendedDllCharacteristics_ = 0;
ChecksecError(const char *what)
Definition checksec.h:16
Definition checksec.h:141
const std::string filepath() const
Definition checksec.h:148
const MitigationReport isCetCompat() const
Definition checksec.cpp:334
const MitigationReport isASLR() const
Definition checksec.cpp:179
const MitigationReport isGS() const
Definition checksec.cpp:310
const MitigationReport isIsolation() const
Definition checksec.cpp:229
const MitigationReport isCFG() const
Definition checksec.cpp:245
const MitigationReport isSEH() const
Definition checksec.cpp:237
const MitigationReport isHighEntropyVA() const
Definition checksec.cpp:198
const MitigationReport isRFG() const
Definition checksec.cpp:269
const MitigationReport isSafeSEH() const
Definition checksec.cpp:289
const MitigationReport isAuthenticode() const
Definition checksec.cpp:261
const MitigationReport isForceIntegrity() const
Definition checksec.cpp:210
const MitigationReport isNX() const
Definition checksec.cpp:218
const MitigationReport isDynamicBase() const
Definition checksec.cpp:171
const MitigationReport isDotNET() const
Definition checksec.cpp:326
LoadedImage(const std::string path)
Definition checksec.h:83
~LoadedImage()
Definition checksec.h:88
LoadedImage(const LoadedImage &)=delete
peparse::parsed_pe * get() const
Definition checksec.h:94
LoadedImage & operator=(const LoadedImage &)=delete
constexpr const char kNXDescription[]
Definition checksec.h:42
constexpr const char kDotNETDescription[]
Definition checksec.h:71
constexpr const char kGSDescription[]
Definition checksec.h:67
constexpr const char kSafeSEHDescription[]
Definition checksec.h:63
constexpr const char kHighEntropyVADescription[]
Definition checksec.h:34
constexpr const char kASLRDescription[]
Definition checksec.h:29
constexpr const char kDynamicBaseDescription[]
Definition checksec.h:25
constexpr const char kCFGDescription[]
Definition checksec.h:53
constexpr const char kSEHDescription[]
Definition checksec.h:50
constexpr const char kAuthenticodeDescription[]
Definition checksec.h:56
constexpr const char kForceIntegrityDescription[]
Definition checksec.h:38
constexpr const char kIsolationDescription[]
Definition checksec.h:46
constexpr const char kRFGDescription[]
Definition checksec.h:59
constexpr const char kCetDescription[]
Definition checksec.h:74
Definition checksec.cpp:15
MitigationPresence
Definition checksec.h:106
Definition checksec.h:116
std::optional< std::string > explanation
Definition checksec.h:130
MitigationPresence presence
Definition checksec.h:120
std::string description
Definition checksec.h:125