19 #define no_inline __declspec(noinline)
21 #define no_inline __attribute__((noinline))
25 #define sh_resolve(base, funs, fun) (decltype(fun)*)((PBYTE)base + \
26 funs[shellcode_fun_##fun])
47 } obfuscated_sym, * p_obfuscated_sym;
50 typedef struct _ApiSetHeader63 {
54 DWORD NumberOfApisets;
58 } ApiSetHeader63, * PApiSetHeader63;
61 typedef struct _ApisetNameEntry {
68 } ApisetNameEntry, * PApisetNameEntry;
71 typedef struct _ApisetValueEntry {
77 } ApisetValueEntry, * PApisetValueEntry;
80 typedef struct _ApiSetHeader6 {
83 } ApiSetHeader6, * PApiSetHeader6;
86 typedef struct _ApisetNameEntry2 {
90 } ApisetNameEntry2, * PApisetNameEntry2;
93 typedef struct _ValuesArray2 {
97 } ValuesArray2, * PValuesArray2;
100 typedef struct _ValuesEntry2 {
105 } ValuesEntry2, * PValuesEntry2;
108 typedef NTSTATUS (WINAPI* pLdrLoadDll)(
111 PUNICODE_STRING ModuleFileName,
112 PVOID* ModuleHandle);
124 static no_inline size_t wstr_len(PWSTR str);
131 static no_inline DWORD hash_string(PCHAR str);
138 static no_inline VOID str_cpy(PCHAR out, PSTR in);
145 static no_inline DWORD str_toi(PSTR str);
153 static no_inline PCHAR str_chr(PSTR str, CHAR chr);
161 static no_inline VOID ansi_to_wide(PCHAR str, PWCHAR out,
size_t size);
169 static no_inline VOID wstr_cpy(PWSTR str1, PCWSTR str2,
size_t length);
178 static no_inline INT wstr_i_cmp(PWSTR str1, PCWSTR str2,
size_t length);
185 static no_inline HANDLE get_dll_handle(HANDLE pe_base, PDWORD sh_funs, PWSTR dll_name);
192 static no_inline HANDLE load_dll(HANDLE pe_base, PDWORD sh_funs, PCHAR dll_name);
201 static no_inline BOOL resolve_api_set(HANDLE pe_base, PDWORD sh_funs, PVOID schema_map,
202 PCWSTR virtual_dll, PWCHAR real_dll);
211 static no_inline PVOID get_symbol_ptr(HANDLE pe_base, PDWORD sh_funs, HANDLE dll_handle,
212 u_sym_info sym_info, BOOL by_name);
220 static no_inline VOID WINAPI load_syms(HANDLE pe_base, DWORD sh_funs_rva, DWORD syms_rva);
229 shellcode_fun_exit = 0,
230 shellcode_fun_wstr_len,
231 shellcode_fun_hash_string,
232 shellcode_fun_str_cpy,
233 shellcode_fun_str_toi,
234 shellcode_fun_str_chr,
235 shellcode_fun_ansi_to_wide,
236 shellcode_fun_wstr_cpy,
237 shellcode_fun_wstr_i_cmp,
238 shellcode_fun_get_dll_handle,
239 shellcode_fun_load_dll,
240 shellcode_fun_resolve_api_set,
241 shellcode_fun_get_symbol_ptr,
242 shellcode_fun_load_syms,
243 shellcode_number_of_functions
256 #endif // !SHELLCODE_HPP.