cobf
PE imports obfuscator
cobf.hpp
Go to the documentation of this file.
1 
9 #ifndef COBF_HPP
10 #define COBF_HPP
11 
12 // Includes.
13 #include <shellcode.hpp>
14 #include <utils.hpp>
15 #include <algorithm>
16 #include <string>
17 #include <vector>
18 #include <map>
19 using namespace std;
20 
25 class cobf
26 {
27 private:
28 
29  // Each symbol.
30  class csym {
31  private:
32 
33  string sym_name;
34  DWORD dll_rva;
35  WORD sym_ord;
36  DWORD fth_rva;
37  DWORD oth_off;
38  DWORD name_off;
39  BOOL by_name;
40  BOOL obfuscated;
41  string obf_name;
42  WORD obf_ord;
43  BOOL to_name;
45  public:
46 
53  static BOOL match_wildcard(PCCH wild_card, PCCH string);
54 
63  csym(string sym_name, DWORD dll_rva, DWORD fth_rva, DWORD oth_off, DWORD name_off);
64 
72  csym(WORD sym_ord, DWORD dll_rva, DWORD fth_rva, DWORD oth_off);
73 
79  BOOL check_sym(string n_sym);
80 
86  BOOL check_sym(WORD n_ord);
87 
92  VOID obfuscate(string o_sym);
93 
98  VOID obfuscate(WORD o_ord);
99 
103  VOID unobfuscate();
104 
112  VOID apply_obfuscation(PBYTE pe_rawf, DWORD strings_off, vector<BYTE>& strings,
113  vector<shellcode::obfuscated_sym>& symbols);
114  };
115 
116  // Each module.
117  struct cmod {
118  string dll_name;
119  vector<csym> mod_syms;
120  };
121 
122  string pe_path;
123  vector<BYTE> pe_rawf;
124  vector<cmod> pe_mods;
130  BOOL disable_the_relocation();
131 
136  BOOL remove_debug_symbols();
137 
142  BOOL make_the_iat_writable();
143 
151  template <typename t_sym_info>
152  VOID find_symbols(string dll_name, t_sym_info sym_info, vector<csym*>& p_syms);
153 
160  BOOL add_shellcode_entry(PIMAGE_SECTION_HEADER& sh_sec, DWORD entry);
161 
168  BOOL section_of_rva(DWORD rva, PIMAGE_SECTION_HEADER& sec);
169 
176  BOOL rva_to_offset(DWORD rva, DWORD& offset);
177 
184  BOOL rva_to_ptr(DWORD ptr_rva, PVOID* p_ptr);
185 
192  BOOL create_shellcode_section(PIMAGE_SECTION_HEADER& sh_sec, DWORD& funs_rva);
193 
201  BOOL get_data_table(size_t data_entry, PVOID* p_table_ptr, size_t& table_size);
202 
208  BOOL get_dos_header(PIMAGE_DOS_HEADER& dos_hdr);
209 
216  BOOL get_nt_headers(PIMAGE_DOS_HEADER dos_hdr, PIMAGE_NT_HEADERS& nt_hdrs);
217 
223  BOOL verify_machine(PIMAGE_NT_HEADERS nt_hdrs);
224 
231  BOOL verify_sections(PIMAGE_DOS_HEADER dos_hdr, PIMAGE_NT_HEADERS nt_hdrs);
232 
242  BOOL insert_import(cmod& dll_mod, DWORD dll_off, size_t th_sym, DWORD fth_rva, DWORD oth_off);
243 
250  BOOL parse_imports(PIMAGE_IMPORT_DESCRIPTOR p_imports, size_t imports_size);
251 
257  VOID apply_obfuscations(PIMAGE_SECTION_HEADER& sh_sec, DWORD& syms_rva);
258 
266  VOID add_shellcode_stub(PIMAGE_SECTION_HEADER& sh_sec, DWORD funs_offset, DWORD syms_rva, DWORD& entry);
267 
272  VOID finalize_pe(PIMAGE_SECTION_HEADER& sh_sec);
273 
283  template <typename t_sym_info, typename t_obf_info>
284  cobf_error obf_sym_internal(string dll_name, t_sym_info sym_info, t_obf_info obf_info);
285 
294  template <typename t_sym_info>
295  cobf_error unobf_sym_internal(string dll_name, t_sym_info sym_info);
296 
297 public:
303  cobf(string pe_path);
304 
321  cobf_error load_pe();
322 
329  cobf_error unload_pe();
330 
340  cobf_error obf_sym(string dll_name, string sym_name, string obf_name);
341 
351  cobf_error obf_sym(string dll_name, string sym_name, WORD obf_ord);
352 
362  cobf_error obf_sym(string dll_name, WORD sym_ord, WORD obf_ord);
363 
373  cobf_error obf_sym(string dll_name, WORD sym_ord, string obf_name);
374 
383  cobf_error unobf_sym(string dll_name, string sym_name);
384 
393  cobf_error unobf_sym(string dll_name, WORD sym_ord);
394 
409  cobf_error generate(string out_file);
410 };
411 
412 #endif // !COBF_HPP.
cobf
Definition: cobf.hpp:26
utils.hpp
shellcode.hpp
cobf_error
cobf_error
Definition: utils.hpp:15