/* * File: ShellCodeUserInput.h * Authors: Max Hirschberger & Ogulcan Ugur */ #ifndef SHELLCODE_WRITER_H #define SHELLCODE_WRITER_H #include #include #include class ShellCodeWriter { public: ShellCodeWriter(); std::vector GetShellCodeBytes(); void CallMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); void CallLoadLibraryA(LPCSTR p); void CallTerminateProcess(HANDLE ProcessHandle, NTSTATUS ExitStatus); void CallSuspendThread(HANDLE ThreadHandle, PULONG PreviousSuspendCount); void LoadAndCallShellCode(const std::vector& shellcode); void AppendShellCode(const char* shellcode, size_t size); private: uint32_t m_total_consumed_stack_bytes; std::vector m_sc_bytes; void SetRAXXOR(uint64_t xor_a_value, uint64_t xor_b_value); void SetRAX(uint64_t value); void PushValue(uint64_t value); void PushBuffer(const void* buf, size_t size); void SetArgRegister(int arg_index, uint64_t value); void SetArgRegisterStackRelative(int arg_index, int stack_relative_offset); void Call(uint64_t pfn); void FreeStack(); }; #endif // SHELLCODE_WRITER_H