Theodosius
v3.0
Jit linker, symbol mapper, and obfuscator
include
theo.hpp
Go to the documentation of this file.
1
// Copyright (c) 2022, _xeroxz
2
// All rights reserved.
3
//
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are met:
6
//
7
// 1. Redistributions of source code must retain the above copyright notice,
8
// this list of conditions and the following disclaimer.
9
//
10
// 2. Redistributions in binary form must reproduce the above copyright notice,
11
// this list of conditions and the following disclaimer in the documentation
12
// and/or other materials provided with the distribution.
13
//
14
// 3. Neither the name of the copyright holder nor the names of its
15
// contributors may be used to endorse or promote products derived from
16
// this software without specific prior written permission.
17
//
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
// POSSIBILITY OF SUCH DAMAGE.
29
//
30
31
#pragma once
32
#include <spdlog/spdlog.h>
33
#include <
decomp/decomp.hpp
>
34
#include <
obf/engine.hpp
>
35
#include <
recomp/recomp.hpp
>
36
#include <
recomp/symbol_table.hpp
>
37
38
#include <
obf/passes/jcc_rewrite_pass.hpp
>
39
#include <
obf/passes/next_inst_pass.hpp
>
40
#include <
obf/passes/reloc_transform_pass.hpp
>
41
42
#include <optional>
43
#include <tuple>
44
#include <vector>
45
46
#define XED_ENCODER
47
extern
"C"
{
48
#include <xed-decode.h>
49
#include <xed-interface.h>
50
}
51
52
/// <summary>
53
/// The outer most encompassing namespace of this project.
54
/// </summary>
55
namespace
theo
{
56
57
/// <summary>
58
/// tuple of functions used by theo to allocate, copy, and resolve symbols.
59
/// </summary>
60
using
lnk_fns_t
=
61
std::tuple<recomp::allocator_t, recomp::copier_t, recomp::resolver_t>;
62
63
/// <summary>
64
/// the main class which encapsulates a symbol table, decomp, and recomp
65
/// objects. This class is a bridge that connects all three: decomp, obf,
66
/// recomp.
67
///
68
/// You will create an object of this type when using theo.
69
/// </summary>
70
class
theo_t
{
71
public
:
72
/// <summary>
73
/// explicit constructor for theo class.
74
/// </summary>
75
/// <param name="lib">a vector of bytes consisting of a lib</param>
76
/// <param name="lnkr_fns"></param>
77
/// <param name="entry_sym">the name of the function which will be used as the
78
/// entry point</param>
79
explicit
theo_t
(std::vector<std::uint8_t>& lib,
80
lnk_fns_t
lnkr_fns,
81
const
std::string&& entry_sym);
82
83
/// <summary>
84
/// decomposes the lib file and return the number of symbols that are used.
85
/// </summary>
86
/// <returns>optional amount of symbols that are used. no value if
87
/// decomposition fails.</returns>
88
std::optional<std::uint32_t>
decompose
();
89
90
/// <summary>
91
/// compose the decomposed module. This will run obfuscation passes, the map
92
/// and resolve symbols to each other.
93
/// </summary>
94
/// <returns>returns the address of the entry point symbol</returns>
95
std::uintptr_t
compose
();
96
97
/// <summary>
98
/// given the name of a symbol, it returns the address of where its mapped.
99
/// </summary>
100
/// <param name="sym">the name of the symbol</param>
101
/// <returns>the address of the symbol</returns>
102
std::uintptr_t
resolve
(
const
std::string&& sym);
103
104
private
:
105
std::string m_entry_sym;
106
decomp::decomp_t
m_dcmp;
107
recomp::recomp_t
m_recmp;
108
recomp::symbol_table_t
m_sym_tbl;
109
};
110
}
// namespace theo
Generated by
1.9.3