#pragma once #include "utils.hpp" #include "linker/linker.hpp" #include "obfuscation/obfuscation.hpp" #include #include #include #include #include #include #include #include #pragma comment(lib, "Dbghelp.lib") namespace theo { using malloc_t = std::function; using memcpy_t = std::function; using kmemset_t = std::function; using resolve_symbol_t = std::function; using image_entry_t = std::uintptr_t; using mapper_routines_t = std::tuple; class hmm_ctx { public: explicit hmm_ctx(const mapper_routines_t& routines); auto map_objs(std::vector& objs) -> image_entry_t; malloc_t kalloc; memcpy_t kmemcpy; resolve_symbol_t resolve_symbol; private: bool map_symbols(std::vector& objs); bool map_obfuscated_symbols(std::vector& objs); bool resolve_relocs(std::vector& objs); bool alloc_obfuscated_symbol_space(std::vector& objs); bool alloc_symbol_space(std::vector& objs); std::map mapped_symbols; std::map> obfuscated_gadgets; }; }