From 3c013c13466c8c4a34d1b808417bd5c95583bd6b Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Thu, 29 Jan 2026 11:16:15 +0100 Subject: [PATCH] Fix: Windows INI file reading API has 32KB limitation --- common/IniParser.h | 164 ++ server/2015Remote/2015RemoteDlg.cpp | 27 +- server/2015Remote/BuildDlg.cpp | 2 +- server/2015Remote/FileManagerDlg.cpp | 4 +- server/2015Remote/HideScreenSpyDlg.cpp | 2 +- server/2015Remote/LangManager.h | 23 +- server/2015Remote/file/CFileManagerDlg.cpp | 4 +- server/2015Remote/lang/en_US.ini | 1613 ++++++++++---------- server/2015Remote/lang/zh_TW.ini | 1591 +++++++++---------- test/IniParser_test.cpp | 559 +++++++ 10 files changed, 2380 insertions(+), 1609 deletions(-) create mode 100644 common/IniParser.h create mode 100644 test/IniParser_test.cpp diff --git a/common/IniParser.h b/common/IniParser.h new file mode 100644 index 0000000..febb096 --- /dev/null +++ b/common/IniParser.h @@ -0,0 +1,164 @@ +#pragma once + +// IniParser.h - 轻量级 INI 文件解析器(header-only) +// 特点: +// - 不 trim key/value,保留原始空格(适用于多语言 key 精确匹配) +// - 无文件大小限制(不依赖 GetPrivateProfileSection) +// - 支持 ; 和 # 注释 +// - 支持多 section +// - 支持转义序列:\n \r \t \\ \" (key 和 value 均支持) +// - 纯 C++ 标准库,不依赖 MFC / Windows API + +#include +#include +#include +#include + +class CIniParser +{ +public: + typedef std::map TKeyVal; + typedef std::map TSections; + + CIniParser() {} + + void Clear() + { + m_sections.clear(); + } + + // 加载 INI 文件,返回是否成功 + // 文件不存在返回 false,空文件返回 true + bool LoadFile(const char* filePath) + { + Clear(); + + if (!filePath || !filePath[0]) + return false; + + FILE* f = nullptr; +#ifdef _MSC_VER + if (fopen_s(&f, filePath, "r") != 0 || !f) + return false; +#else + f = fopen(filePath, "r"); + if (!f) + return false; +#endif + + std::string currentSection; + char line[4096]; + + while (fgets(line, sizeof(line), f)) { + // 去除行尾换行符 + size_t len = strlen(line); + while (len > 0 && (line[len - 1] == '\n' || line[len - 1] == '\r')) + line[--len] = '\0'; + + if (len == 0) + continue; + + // 跳过注释 + if (line[0] == ';' || line[0] == '#') + continue; + + // 检测 section 头: [SectionName] + // 真正的 section 头:']' 后面没有 '='(否则是 key=value) + if (line[0] == '[') { + char* end = strchr(line, ']'); + if (end) { + char* eqAfter = strchr(end + 1, '='); + if (!eqAfter) { + // 纯 section 头,如 [Strings] + *end = '\0'; + currentSection = line + 1; + continue; + } + // ']' 后有 '=',如 [使用FRP]=[Using FRP],当作 key=value 处理 + } + } + + // 不在任何 section 内则跳过 + if (currentSection.empty()) + continue; + + // 解析 key=value(只按第一个 '=' 分割,不 trim) + // key 和 value 均做反转义(\n \r \t \\ \") + char* eq = strchr(line, '='); + if (eq && eq != line) { + *eq = '\0'; + std::string key = Unescape(std::string(line)); + std::string value = Unescape(std::string(eq + 1)); + m_sections[currentSection][key] = value; + } + } + + fclose(f); + return true; + } + + // 获取指定 section 下的 key 对应的 value + // 未找到时返回 defaultVal + const char* GetValue(const char* section, const char* key, + const char* defaultVal = "") const + { + auto itSec = m_sections.find(section ? section : ""); + if (itSec == m_sections.end()) + return defaultVal; + + auto itKey = itSec->second.find(key ? key : ""); + if (itKey == itSec->second.end()) + return defaultVal; + + return itKey->second.c_str(); + } + + // 获取整个 section 的所有键值对,不存在返回 nullptr + const TKeyVal* GetSection(const char* section) const + { + auto it = m_sections.find(section ? section : ""); + if (it == m_sections.end()) + return nullptr; + return &it->second; + } + + // 获取 section 中的键值对数量 + size_t GetSectionSize(const char* section) const + { + const TKeyVal* p = GetSection(section); + return p ? p->size() : 0; + } + + // 获取所有 section + const TSections& GetAllSections() const + { + return m_sections; + } + +private: + TSections m_sections; + + // 反转义:将字面量 \n \r \t \\ \" 转为对应的控制字符 + static std::string Unescape(const std::string& s) + { + std::string result; + result.reserve(s.size()); + + for (size_t i = 0; i < s.size(); i++) { + if (s[i] == '\\' && i + 1 < s.size()) { + switch (s[i + 1]) { + case 'n': result += '\n'; i++; break; + case 'r': result += '\r'; i++; break; + case 't': result += '\t'; i++; break; + case '\\': result += '\\'; i++; break; + case '"': result += '"'; i++; break; + default: result += s[i]; break; // 未知转义保留原样 + } + } else { + result += s[i]; + } + } + + return result; + } +}; diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 816c658..8518211 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -827,7 +827,7 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName m_CList_Online.SetItemData(i, (DWORD_PTR)ContextObject); } std::string tip = flag ? " (" + v[RES_CLIENT_PUBIP] + ") " : ""; - ShowMessage(_TR("操作成功"), strIP + tip.c_str() + _L(_T("主机上线")) + "[" + loc + "]"); + ShowMessage(_TR("操作成功"), strIP + tip.c_str() + " " + _L(_T("主机上线")) + "[" + loc + "]"); CharMsg *title = new CharMsg(_TR("主机上线")); CharMsg *text = new CharMsg(strIP + CString(tip.c_str()) + _T(" ") + _L(_T("主机上线")) + _T(" [") + loc + _T("]")); @@ -1320,15 +1320,20 @@ DWORD WINAPI CMy2015RemoteDlg::StartFrpClient(LPVOID param) { CMy2015RemoteDlg* This = (CMy2015RemoteDlg*)param; IPConverter cvt; +#ifdef _WIN64 + int usingFRP = THIS_CFG.GetInt("frp", "UseFrp"); +#else + int usingFRP = 0; +#endif std::string ip = THIS_CFG.GetStr("settings", "master", ""); CString tip = !ip.empty() && ip != cvt.getPublicIP() ? - CString(ip.c_str()) + " 必须是\"公网IP\"或反向代理服务器IP" : - "请设置\"公网IP\",或使用反向代理服务器的IP"; + CString(ip.c_str()) + _L(" 必须是\"公网IP\"或反向代理服务器IP") : + _L("请设置\"公网IP\",或使用反向代理服务器的IP"); + tip += usingFRP ? _TR("[使用FRP]") : _TR("[未使用FRP]"); CharMsg* msg = new CharMsg(tip); This->PostMessageA(WM_SHOWMESSAGE, (WPARAM)msg, NULL); - int usingFRP = 0; #ifdef _WIN64 - usingFRP = ip.empty() ? 0 : THIS_CFG.GetInt("frp", "UseFrp"); + usingFRP = ip.empty() ? 0 : usingFRP; #else SAFE_CLOSE_HANDLE(This->m_hFRPThread); This->m_hFRPThread = NULL; @@ -2892,7 +2897,7 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam) std::string aliveInfo = tm >= 86400 ? floatToString(tm / 86400.f) + " d" : tm >= 3600 ? floatToString(tm / 3600.f) + " h" : tm >= 60 ? floatToString(tm / 60.f) + " m" : floatToString(tm) + " s"; - ShowMessage(_TR("操作成功"), ip + _TR("主机下线") + "[" + aliveInfo.c_str() + "]"); + ShowMessage(_TR("操作成功"), ip + " " + _TR("主机下线") + "[" + aliveInfo.c_str() + "]"); Mprintf("%s 主机下线 [%s]\n", ip, aliveInfo.c_str()); } LeaveCriticalSection(&m_cs); @@ -3187,7 +3192,7 @@ LRESULT CMy2015RemoteDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) void CMy2015RemoteDlg::OnOnlineShare() { CInputDialog dlg(this); - dlg.Init("分享主机", "输入地址:"); + dlg.Init(_TR("分享主机"), _TR("输入地址:")); if (dlg.DoModal() != IDOK || dlg.m_str.IsEmpty()) return; if (dlg.m_str.GetLength() >= 250) { @@ -3250,7 +3255,7 @@ void CMy2015RemoteDlg::OnMainProxy() void CMy2015RemoteDlg::OnOnlineHostnote() { CInputDialog dlg(this); - dlg.Init("修改备注", "请输入主机备注: "); + dlg.Init(_TR("修改备注"), _TR("请输入主机备注: ")); if (dlg.DoModal() != IDOK || dlg.m_str.IsEmpty()) { return; } @@ -3574,7 +3579,7 @@ void CMy2015RemoteDlg::OnHelpImportant() "本软件以“现状”提供,不附带任何保证。使用本软件的风险由用户自行承担。" "我们不对任何因使用本软件而引发的非法或恶意用途负责。用户应遵守相关法律" "法规,并负责任地使用本软件。开发者对任何因使用本软件产生的损害不承担责任。"; - MessageBoxL(msg, "免责声明", MB_ICONINFORMATION); + MessageBoxL(_L(msg), "免责声明", MB_ICONINFORMATION); } @@ -4011,8 +4016,8 @@ void CMy2015RemoteDlg::OnShellcodeTestAesBin() void CMy2015RemoteDlg::OnOnlineAssignTo() { CInputDialog dlg(this); - dlg.Init("转移主机(到期自动复原)", "输入地址:"); - dlg.Init2("天数(支持浮点数):", "30"); + dlg.Init(_TR("转移主机(到期自动复原)"), _TR("输入地址:")); + dlg.Init2(_TR("天数(支持浮点数):"), "30"); if (dlg.DoModal() != IDOK || dlg.m_str.IsEmpty() || atof(dlg.m_sSecondInput.GetString())<=0) return; if (dlg.m_str.GetLength() >= 250) { diff --git a/server/2015Remote/BuildDlg.cpp b/server/2015Remote/BuildDlg.cpp index 4771a14..dd44a1d 100644 --- a/server/2015Remote/BuildDlg.cpp +++ b/server/2015Remote/BuildDlg.cpp @@ -726,7 +726,7 @@ void CBuildDlg::OnHelpFindden() { CInputDialog dlg(this); dlg.m_str = m_strFindden; - dlg.Init("生成标识", "请设置标识信息:"); + dlg.Init(_TR("生成标识"), _TR("请设置标识信息:")); if (dlg.DoModal() == IDOK) { m_strFindden = dlg.m_str; } diff --git a/server/2015Remote/FileManagerDlg.cpp b/server/2015Remote/FileManagerDlg.cpp index e1b5647..aea6e8f 100644 --- a/server/2015Remote/FileManagerDlg.cpp +++ b/server/2015Remote/FileManagerDlg.cpp @@ -2154,7 +2154,7 @@ void CFileManagerDlg::OnLocalNewfolder() // TODO: Add your command handler code here CInputDialog dlg(this); - dlg.Init(_T("新建目录"), _T("请输入目录名称:")); + dlg.Init(_TR("新建目录"), _TR("请输入目录名称:")); if (dlg.DoModal() == IDOK && dlg.m_str.GetLength()) { // 创建多层目录 @@ -2170,7 +2170,7 @@ void CFileManagerDlg::OnRemoteNewfolder() // TODO: Add your command handler code here // TODO: Add your command handler code here CInputDialog dlg(this); - dlg.Init(_T("新建目录"), _T("请输入目录名称:")); + dlg.Init(_TR("新建目录"), _TR("请输入目录名称:")); if (dlg.DoModal() == IDOK && dlg.m_str.GetLength()) { CString file = m_Remote_Path + dlg.m_str + "\\"; diff --git a/server/2015Remote/HideScreenSpyDlg.cpp b/server/2015Remote/HideScreenSpyDlg.cpp index 17c58b8..3c0a8f8 100644 --- a/server/2015Remote/HideScreenSpyDlg.cpp +++ b/server/2015Remote/HideScreenSpyDlg.cpp @@ -608,7 +608,7 @@ void CHideScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam) EnableWindow(FALSE); CInputDialog dlg(this); - dlg.Init(_T("自定义"), _T("请输入CMD命令:")); + dlg.Init(_TR("自定义"), _TR("请输入CMD命令:")); if (dlg.DoModal() == IDOK && dlg.m_str.GetLength()) { int nPacketLength = dlg.m_str.GetLength()*sizeof(TCHAR) + 3; diff --git a/server/2015Remote/LangManager.h b/server/2015Remote/LangManager.h index d216d5a..028a86a 100644 --- a/server/2015Remote/LangManager.h +++ b/server/2015Remote/LangManager.h @@ -4,6 +4,7 @@ #include #include #include +#include "common/IniParser.h" // 语言管理类 - 支持多语言切换 class CLangManager @@ -165,21 +166,17 @@ public: return false; } - // 读取 [Strings] 节的所有键值对 - TCHAR buffer[32768] = { 0 }; // 用于获取所有键名 - GetPrivateProfileSection(_T("Strings"), buffer, sizeof(buffer)/sizeof(TCHAR), langFile); + // 使用 CIniParser 解析,无文件大小限制,且不 trim key + CIniParser ini; + if (!ini.LoadFile((LPCSTR)langFile)) { + return false; + } - // 解析键值对 (格式: key=value\0key=value\0\0) - TCHAR* p = buffer; - while (*p) { - CString line(p); - int eqPos = line.Find(_T('=')); - if (eqPos > 0) { - CString key = line.Left(eqPos); - CString value = line.Mid(eqPos + 1); - m_strings[key] = value; + const CIniParser::TKeyVal* pSection = ini.GetSection("Strings"); + if (pSection) { + for (const auto& kv : *pSection) { + m_strings[CString(kv.first.c_str())] = CString(kv.second.c_str()); } - p += _tcslen(p) + 1; } return true; diff --git a/server/2015Remote/file/CFileManagerDlg.cpp b/server/2015Remote/file/CFileManagerDlg.cpp index 12ccd1d..b144218 100644 --- a/server/2015Remote/file/CFileManagerDlg.cpp +++ b/server/2015Remote/file/CFileManagerDlg.cpp @@ -1756,7 +1756,7 @@ void CFileManagerDlg::OnRemoteNewFolder() return; CInputDialog dlg(this); - dlg.Init(_T("新建目录"), _T("请输入目录名称:")); + dlg.Init(_TR("新建目录"), _TR("请输入目录名称:")); if (dlg.DoModal() == IDOK && dlg.m_str.GetLength()) { CString file = m_Remote_Path + dlg.m_str + _T("\\"); UINT nPacketSize = (file.GetLength() + 1) * sizeof(TCHAR) + 1; @@ -2014,7 +2014,7 @@ void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult) if (str_disk.Find(_T(":")) == -1) return;; } CInputDialog dlg(this); - dlg.Init(_T("确认后 必须等待出现结果"), _T("请输入要搜索的关键词")); + dlg.Init(_TR("确认后 必须等待出现结果"), _TR("请输入要搜索的关键词")); if (dlg.DoModal() != IDOK)return; // 得到返回数据前禁窗口 diff --git a/server/2015Remote/lang/en_US.ini b/server/2015Remote/lang/en_US.ini index a9b4f69..30df843 100644 --- a/server/2015Remote/lang/en_US.ini +++ b/server/2015Remote/lang/en_US.ini @@ -1,1120 +1,1143 @@ -; English Language File +; English Language File ; Format: Chinese=English [Strings] ; ============================================ -; Main Window & Menus (保持完整,菜单不缩减) +; Main Window & Menus (˵) ; ============================================ -远程控制=Remote Control -菜单(&F)=&Menu -文件(&F)=&File -设置(&S)=&Settings -工具(&T)=&Tools -帮助(&H)=&Help -参数(&P)=&Params -扩展(&X)=E&xtensions -其他(&H)=&Other -退出=Exit -退出(&Q)=E&xit -关于=About -关于YAMA=About YAMA +Զ̿=Remote Control +˵(&F)=&Menu +ļ(&F)=&File +(&S)=&Settings +(&T)=&Tools +(&H)=&Help +(&P)=&Params +չ(&X)=E&xtensions +(&H)=&Other +˳=Exit +˳(&Q)=E&xit +=About +YAMA=About YAMA ; ============================================ ; Toolbar ; ============================================ -生成客户端=Build Client -刷新=Refresh -设置=Settings -终端管理=Terminal -进程管理=Process -窗口管理=Windows -桌面管理=Desktop -文件管理=Files -语音管理=Audio -视频管理=Video -服务管理=Services -注册表管理=Registry -键盘记录=Keylog -参数设置=Settings -生成服务端=Build Svc -帮助=Help +ɿͻ=Build Client +ˢ=Refresh +=Settings +ն˹=Terminal +̹=Process +ڹ=Windows +=Desktop +ļ=Files +=Audio +Ƶ=Video +=Services +ע=Registry +̼¼=Keylog +=Settings +ɷ=Build Svc +=Help ; ============================================ ; Client List Headers ; ============================================ -序号=No. -IP地址=IP Addr -地区=Region -计算机名=PC Name -操作系统=OS +=No. +IPַ=IP Addr +=Region +=PC Name +ϵͳ=OS CPU=CPU -摄像头=Camera -延迟=Ping -版本=Ver -启动时间=Uptime -备注=Note -分组=Group +ͷ=Camera +ӳ=Ping +汾=Ver +ʱ=Uptime +ע=Note +=Group ; ============================================ ; Online List Headers (g_Column_Data_Online) ; ============================================ IP=IP -端口=Port -地理位置=Location -计算机名/备注=PC/Note -安装时间=Install Time -活动窗口=Active Window +˿=Port +λ=Location +/ע=PC/Note +װʱ=Install Time +=Active Window RTT=RTT ; ============================================ ; Message List Headers (g_Column_Data_Message) ; ============================================ -信息类型=Msg Type -时间=Time -信息内容=Content +Ϣ=Msg Type +ʱ=Time +Ϣ=Content ; ============================================ -; Dialog Captions (对话框标题保持清晰) +; Dialog Captions (ԻⱣ) ; ============================================ -远程桌面=Remote Desktop -文件管理=File Manager -进程管理=Process Mgr -窗口管理=Window Mgr -命令行=Shell -注册表=Registry -注册表管理=Registry Mgr -服务管理=Service Mgr -服务管理器=Service Mgr -键盘记录=Keylogger -语音监听=Audio Spy -视频监控=Video Spy -视频查看=Video View -远程终端=Terminal -远程文件=Remote File -远程音频=Remote Audio -远程视频=Remote Video -系统管理=System Mgr -生成服务端=Build Server -即时消息=Message -虚拟屏幕=Virtual Screen -隐私屏幕=Privacy Screen -代理服务=Proxy Service -注入设置=Inject Config -创建计划任务=Scheduled Task -解密数据=Decrypt Data -画板=Drawing -屏幕墙=Screen Wall -替换图标=Replace Icon -发送文件=Send File -历史主机=Host History -升级程序=Update -确认文件替换=Confirm Replace -文件已经存在=File Exists -压缩文件框=Compress -新建=New -口令=Password -生成口令=Gen Password -拷贝目录-运行命令=Copy & Run -对话=Dialog +Զ=Remote Desktop +ļ=File Manager +̹=Process Mgr +ڹ=Window Mgr +=Shell +ע=Registry +ע=Registry Mgr +=Service Mgr +=Service Mgr +̼¼=Keylogger +=Audio Spy +Ƶ=Video Spy +Ƶ鿴=Video View +Զն=Terminal +Զļ=Remote File +ԶƵ=Remote Audio +ԶƵ=Remote Video +ϵͳ=System Mgr +ɷ=Build Server +ʱϢ=Message +Ļ=Virtual Screen +˽Ļ=Privacy Screen +=Proxy Service +ע=Inject Config +ƻ=Scheduled Task +=Decrypt Data +=Drawing +Ļǽ=Screen Wall +滻ͼ=Replace Icon +ļ=Send File +ʷ=Host History +=Update +ȷļ滻=Confirm Replace +ļѾ=File Exists +ѹļ=Compress +½=New +=Password +ɿ=Gen Password +Ŀ¼-=Copy & Run +Ի=Dialog ; ============================================ ; Language Selection Dialog ; ============================================ -选择语言 / Select Language=Select Language -语言:=Language: +ѡ / Select Language=Select Language +:=Language: ; ============================================ ; Common Buttons ; ============================================ -确定=OK -取消=Cancel -应用=Apply -关闭=Close -是=Yes -否=No -浏览=Browse -保存=Save -打开=Open -发送=Send -生成=Generate -创建=Create -启动=Start -停止=Stop -暂停=Pause -继续=Resume -注入=Inject -锁定=Lock -覆盖=Overwrite -继传=Resume -跳过=Skip -全部覆盖=Overwrite All -全部继传=Resume All -全部跳过=Skip All +ȷ=OK +ȡ=Cancel +Ӧ=Apply +ر=Close +=Yes +=No +=Browse +=Save +=Open +=Send +=Generate +=Create +=Start +ֹͣ=Stop +ͣ=Pause +=Resume +ע=Inject +=Lock +=Overwrite +̴=Resume +=Skip +ȫ=Overwrite All +ȫ̴=Resume All +ȫ=Skip All ; ============================================ ; File Manager ; ============================================ -本地文件=Local Files -远程文件=Remote Files -本地=Local -远程=Remote -本地路径:=Local Path: -远程路径:=Remote Path: -上传=Upload -下载=Download -删除=Delete -新建文件夹=New Folder -文件名=Name -大小=Size -修改时间=Modified -搜索文件名:=Search: -包含子文件夹=Include Subdirs -开始搜索=Search -停止搜索=Stop -搜索栏=Results -上一层=Up -切换显示=Toggle View -路径:=Path: -传输(&T)=&Transfer -自定义压缩(&C)=Custom &Compress -自定义解压(&U)=Custom &Extract -重命名(&R)=&Rename -删除(&D)=&Delete -新建文件夹(&N)=&New Folder -本地打开(&O)=&Open Local -远程打开(&O)=&Open Remote -显示运行(&S)=Run &Visible -隐藏运行(&H)=Run &Hidden -刷新(&R)=&Refresh -大图标=Large Icons -小图标=Small Icons -列表=List -详细信息=Details +ļ=Local Files +Զļ=Remote Files +=Local +Զ=Remote +·:=Local Path: +Զ·:=Remote Path: +ϴ=Upload +=Download +ɾ=Delete +½ļ=New Folder +ļ=Name +С=Size +޸ʱ=Modified +ļ:=Search: +ļ=Include Subdirs +ʼ=Search +ֹͣ=Stop +=Results +һ=Up +лʾ=Toggle View +·=Path: +(&T)=&Transfer +Զѹ(&C)=Custom &Compress +Զѹ(&U)=Custom &Extract +(&R)=&Rename +ɾ(&D)=&Delete +½ļ(&N)=&New Folder +ش(&O)=&Open Local +Զ̴(&O)=&Open Remote +ʾ(&S)=Run &Visible +(&H)=Run &Hidden +ˢ(&R)=&Refresh +ͼ=Large Icons +Сͼ=Small Icons +б=List +ϸϢ=Details ; ============================================ ; Process Manager ; ============================================ -进程名=Name -进程ID=PID -结束进程=End Process -结束(&T)=&Terminate -刷新(&R)=&Refresh -结束=End -反黑屏=Anti-Black +=Name +ID=PID +=End Process +(&T)=&Terminate +ˢ(&R)=&Refresh +=End +=Anti-Black ; ============================================ ; Window Manager ; ============================================ -隐藏=Hide -显示=Show -最大化=Maximize -最小化=Minimize +=Hide +ʾ=Show +=Maximize +С=Minimize ; ============================================ ; Screen Spy / Remote Desktop ; ============================================ -全屏=Fullscreen -控制=Control -仅查看=View Only -画质=Quality -帧率=FPS -黑白屏幕=Grayscale -高速屏幕=High Speed -极速屏幕=Ultra Speed -屏幕截图方法:=Capture: -图像压缩方法:=Compress: -多显示器支持:=Multi-Mon: -退出全屏=Exit Full -控制屏幕=Control -放下面=Send Back -透明度=Opacity -截图=Capture +ȫ=Fullscreen +=Control +鿴=View Only +=Quality +֡=FPS +ڰĻ=Grayscale +Ļ=High Speed +Ļ=Ultra Speed +Ļͼ:=Capture: +ͼѹ:=Compress: +ʾ֧:=Multi-Mon: +˳ȫ=Exit Full +Ļ=Control +=Send Back +͸=Opacity +ͼ=Capture ; ============================================ ; Settings Dialog ; ============================================ -常规设置=General -网络设置=Network -参数设置=Parameters -桌面管理=Desktop -监听端口=Listen Port -监听端口:=Port: -最大连接数=Max Conns -最大连接数:=Max Conns: -语言=Language -保存设置=Save -公网地址:=Public IP: -上报间隔:=Interval: -软件检测:=Detection: -多屏上墙:=Multi-Wall: -UDP协议参数:=UDP Params: -FRP 代理:=FRP Proxy: -服务端口:=Server Port: -下载端口:=DL Port: -操作提示: 1.监听端口支持填写多个,用英文分号分隔;程序同时监听TCP和UDP,且支持基于UDP的KCP;=Tip: Multiple ports separated by semicolons; supports TCP, UDP and KCP. -操作提示: 2.如果被控端跨网、地区或国家,务必设置公网IP;勾选FRP反向代理并设置服务端口和 token。=Tip: Set public IP for cross-network; enable FRP and set port/token. +=General +=Network +=Parameters +=Desktop +˿=Listen Port +˿:=Port: +=Max Conns +:=Max Conns: +=Language +=Save +ַ:=Public IP: +ϱ:=Interval: +:=Detection: +ǽ:=Multi-Wall: +UDPЭ:=UDP Params: +FRP :=FRP Proxy: +˿:=Server Port: +ض˿:=DL Port: +ʾ: 1.˿֧дӢķֺŷָͬʱTCPUDPֻ֧UDPKCP=Tip: Multiple ports separated by semicolons; supports TCP, UDP and KCP. +ʾ: 2.ض˿ңùIPѡFRP÷˿ں token=Tip: Set public IP for cross-network; enable FRP and set port/token. ; ============================================ ; Build Client Dialog ; ============================================ -服务程序:=Program: -架构:=Arch: -模式:=Mode: -未选择文件=Not selected -主控IP地址:=Master IP: -协议:=Protocol: -加密:=Encrypt: -分组名称:=Group: -加壳:=Packer: -载荷类型:=Payload: -程序增肥:=Padding: -安装目录:=Install Dir: -程序名称:=Name: -下载服务=Download Svc -下载地址(默认本机):=Download URL: -通用=General -高级 (非必填项)=Advanced (Optional) -提示: 多个上线地址用分号分隔,99个字符以内。仅供学习和自用,严禁用于非法目的使用。=Tip: Multiple addresses separated by semicolons, max 99 chars. +:=Program: +ܹ:=Arch: +ģʽ:=Mode: +δѡļ=Not selected +IPַ:=Master IP: +Э:=Protocol: +:=Encrypt: +:=Group: +ӿ:=Packer: +غ:=Payload: +:=Padding: +װĿ¼:=Install Dir: +:=Name: +ط=Download Svc +صַ(Ĭϱ):=Download URL: +ͨ=General +߼ (DZ)=Advanced (Optional) +ʾ: ߵַ÷ֺŷָ99ַڡѧϰãϽڷǷĿʹá=Tip: Multiple addresses separated by semicolons, max 99 chars. ; ============================================ ; Service Manager ; ============================================ -服务名称:=Service: -显示名称:=Display: -描述:=Desc: -可执行文件路径=Exe Path -启动类型:=Startup: -服务状态:=Status: -启动方式=Startup Type -自动启动=Auto -手动启动=Manual -停止服务=Stop Svc -启动服务=Start Svc +:=Service: +ʾ:=Display: +:=Desc: +ִļ·=Exe Path +:=Startup: +״̬:=Status: +ʽ=Startup Type +Զ=Auto +ֶ=Manual +ֹͣ=Stop Svc +=Start Svc ; ============================================ ; Audio Dialog ; ============================================ -正在监听远程声音...=Listening remote audio... -发送本地语音到远程=Send local audio +ڼԶ...=Listening remote audio... +ͱԶ=Send local audio ; ============================================ ; Chat Dialog ; ============================================ -发送消息=Send Msg -结束交谈=End Chat -锁定屏幕\n屏蔽功能键=Lock Screen\nBlock Keys -解除锁定=Unlock +Ϣ=Send Msg +̸=End Chat +Ļ\nιܼ=Lock Screen\nBlock Keys +=Unlock ; ============================================ ; Authorization Dialog ; ============================================ -序 列 号:=Serial No: -授权口令:=Auth Code: -授权方式:=Auth Type: -验 证 码:=Verify: -序列号:=Serial: -密 码:=Password: -口 令:=Token: -有效期:=Expiry: -连接数:=Max Conns: + :=Serial No: +Ȩ:=Auth Code: +Ȩʽ:=Auth Type: + ֤ :=Verify: +к:=Serial: + :=Password: + :=Token: +Ч:=Expiry: +:=Max Conns: ; ============================================ ; Injection Dialog ; ============================================ -文件路径: =File Path: -注入方式:=Inject Type: -落地目录:=Drop Dir: +ļ·: =File Path: +ע뷽ʽ=Inject Type: +Ŀ¼=Drop Dir: ; ============================================ ; Scheduled Task Dialog ; ============================================ -任务名:=Task Name: -文件路径:=File Path: -作者:=Author: -描述:=Desc: +=Task Name: +ļ·=File Path: +ߣ=Author: +=Desc: ; ============================================ ; New Folder Dialog ; ============================================ -请输入目录:=Dir Name: -另一个输入框:=Input: -提示信息=Info -输入数据:=Input Data: +Ŀ¼:=Dir Name: +һ:=Input: +ʾϢ=Info +:=Input Data: ; ============================================ ; Copy Directory Dialog ; ============================================ -原目录=Source Dir -现目录=Target Dir -命令=Command +ԭĿ¼=Source Dir +Ŀ¼=Target Dir +=Command ; ============================================ ; Replace Icon Dialog ; ============================================ -目标程序=Target Exe -图标文件=Icon File -提示: 替换完成后,请刷新程序进行查看;如若未成功,请更换图标重试。=Tip: Refresh after replace; try another icon if failed. +Ŀ=Target Exe +ͼļ=Icon File +ʾ: 滻ɺˢ³в鿴δɹͼԡ=Tip: Refresh after replace; try another icon if failed. ; ============================================ ; Send File Dialog ; ============================================ -发送文件(999/999):=Sending (999/999): +ļ(999/999):=Sending (999/999): ; ============================================ ; Update Dialog ; ============================================ -目标程序类型:=Target Type: +Ŀ:=Target Type: ; ============================================ ; Wallet Dialog ; ============================================ -比特币 (BTC):=Bitcoin (BTC): -提示信息: 劫持并替换被控端钱包地址;总字符数最多是470,只填写所需的地址,不需要全部填满。=Tip: Replace wallet address; max 470 chars total. -警告信息: 此功能仅用于开源项目之研究,用户自行承担后果,不得用于非法目的。=Warning: For research only; user assumes all responsibility. +ر (BTC):=Bitcoin (BTC): +ʾϢ: ٳֲ滻ضǮַַ470ֻдĵַҪȫ=Tip: Replace wallet address; max 470 chars total. +Ϣ: ˹ܽڿԴĿ֮оûгеڷǷĿġ=Warning: For research only; user assumes all responsibility. ; ============================================ ; Rar/Compress Dialog ; ============================================ -Rar文件名称:=Rar Filename: +Rarļƣ=Rar Filename: ; ============================================ -; Context Menu - Client Management (菜单保持完整) +; Context Menu - Client Management (˵) ; ============================================ -修改备注=Edit Note -修改分组=Edit Group -添加关注=Add Watch -客户管理=Client Mgmt -转移主机=Transfer Host -分享主机=Share Host -删除主机=Delete Host -卸载主机=Uninstall Host -客户代理=Client Proxy -代理映射=Proxy Mapping -代理端口=Proxy Port -提权运行=Run as Admin -执行程序=Execute -下载执行=Download & Run -上传执行=Upload & Run -升级程序=Update -延长授权=Extend Auth -撤销授权=Revoke Auth -注入记事本=Inject Notepad -机器管理=Machine Mgmt -注销=Log Off -关机=Shutdown -重启=Restart +޸ıע=Edit Note +޸ķ=Edit Group +ӹע=Add Watch +ͻ=Client Mgmt +ת=Transfer Host +=Share Host +ɾ=Delete Host +ж=Uninstall Host +ͻ=Client Proxy +ӳ=Proxy Mapping +˿=Proxy Port +Ȩ=Run as Admin +ִг=Execute +ִ=Download & Run +ϴִ=Upload & Run +=Update +ӳȨ=Extend Auth +Ȩ=Revoke Auth +ע±=Inject Notepad +=Machine Mgmt +ע=Log Off +ػ=Shutdown +=Restart ; ============================================ -; Main Menu Items (菜单保持完整) +; Main Menu Items (˵) ; ============================================ -设置(&S)=&Settings -钱包(&W)=&Wallet -输入口令(&I)=&Input Password -仅生成 -> C语言数组=Generate -> C Array -仅生成 -> bin 文件=Generate -> bin File -测试 bin 文件(&T)=&Test bin File -生成+混淆 -> C语言数组=Generate+Obfuscate -> C Array -生成+混淆 -> bin 文件=Generate+Obfuscate -> bin File -解混淆+测试 bin 文件(&D)=&Deobfuscate+Test bin -生成+AES -> C语言数组=Generate+AES -> C Array -生成+AES -> bin 文件=Generate+AES -> bin File -测试 AES bin文件=Test AES bin File -替换图标(&R)=&Replace Icon -刷新插件(&P)=Refresh &Plugins -口令生成(&A)=&Auth Generate -主控生成(&M)=&Master Generate -上线提醒=Online Notify -启用日志=Enable Log -转发系统热键=Forward Hotkeys -守护主控程序=Guard Master -历史主机(&C)=&Client History -迁移数据(&D)=Backup &Data -导入数据(&I)=&Import Data -获取插件(&P)=Get &Plugins -切换语言(&L)=Switch &Language -免责声明=Disclaimer -发送反馈=Send Feedback -软件介绍=About Software -请求授权=Request Auth +(&S)=&Settings +Ǯ(&W)=&Wallet +(&I)=&Input Password + -> C=Generate -> C Array + -> bin ļ=Generate -> bin File + bin ļ(&T)=&Test bin File ++ -> C=Generate+Obfuscate -> C Array ++ -> bin ļ=Generate+Obfuscate -> bin File ++ bin ļ(&D)=&Deobfuscate+Test bin ++AES -> C=Generate+AES -> C Array ++AES -> bin ļ=Generate+AES -> bin File + AES binļ=Test AES bin File +滻ͼ(&R)=&Replace Icon +ˢ²(&P)=Refresh &Plugins +(&A)=&Auth Generate +(&M)=&Master Generate +=Online Notify +־=Enable Log +תϵͳȼ=Forward Hotkeys +ػس=Guard Master +ʷ(&C)=&Client History +Ǩ(&D)=Backup &Data +(&I)=&Import Data +ȡ(&P)=Get &Plugins +л(&L)=Switch &Language +=Disclaimer +ͷ=Send Feedback +=About Software +Ȩ=Request Auth ; ============================================ -; Build Settings Menu (菜单保持完整) +; Build Settings Menu (˵) ; ============================================ -参数详解(&A)=Parameter &Details -加密 IP (&E)=&Encrypt IP -随机名称(&R)=&Random Name -提权安装(&P)=Install as &Admin -标识信息(&F)=&Fingerprint Info +(&A)=Parameter &Details + IP (&E)=&Encrypt IP +(&R)=&Random Name +Ȩװ(&P)=Install as &Admin +ʶϢ(&F)=&Fingerprint Info ; ============================================ -; Decrypt Menu (菜单保持完整) +; Decrypt Menu (˵) ; ============================================ -解密(&D)=&Decrypt -Chrome 浏览器=Chrome Browser -Edge 浏览器=Edge Browser -360 极速浏览器=360 Speed Browser -360 浏览器=360 Browser -QQ 浏览器=QQ Browser +(&D)=&Decrypt +Chrome =Chrome Browser +Edge =Edge Browser +360 =360 Speed Browser +360 =360 Browser +QQ =QQ Browser ; ============================================ -; Drawing Menu (菜单保持完整) +; Drawing Menu (˵) ; ============================================ -置顶窗口=Always on Top -半透明=Transparent -位置跟随=Follow Position -大小跟随=Follow Size -编辑=Edit -文字=Text -清空=Clear +ö=Always on Top +͸=Transparent +λø=Follow Position +С=Follow Size +༭=Edit +=Text +=Clear ; ============================================ ; Tray Menu ; ============================================ -显示=Show -退出=Exit +ʾ=Show +˳=Exit ; ============================================ ; Status Bar ; ============================================ -进度=Progress +=Progress ; ============================================ ; String Table ; ============================================ -远程终端=Terminal -进程管理=Process Mgr -窗口管理=Window Mgr -远程桌面=Remote Desktop -文件管理=File Manager -语音监听=Audio Monitor -视频查看=Video Viewer -服务管理=Service Mgr -注册表查看=Registry View -服务生成=Build Service -帮助=Help -参数配置=Configuration -键盘记录=Keylogger +Զն=Terminal +̹=Process Mgr +ڹ=Window Mgr +Զ=Remote Desktop +ļ=File Manager +=Audio Monitor +Ƶ鿴=Video Viewer +=Service Mgr +ע鿴=Registry View +=Build Service +=Help +=Configuration +̼¼=Keylogger ; ============================================ ; Status Messages ; ============================================ -在线=Online -离线=Offline -连接中=Connecting -已连接=Connected -未连接=Disconnected +=Online +=Offline +=Connecting +=Connected +δ=Disconnected ; ============================================ ; Confirmation Messages ; ============================================ -确定要退出吗?=Are you sure to exit? -确定要删除选中的客户端吗?=Delete selected clients? -连接成功=Connected -连接失败=Connect Failed -操作成功=Success -操作失败=Failed +ȷҪ˳=Are you sure to exit? +ȷҪɾѡеĿͻ=Delete selected clients? +ӳɹ=Connected +ʧ=Connect Failed +ɹ=Success +ʧ=Failed ; ============================================ ; MessageBox Titles ; ============================================ -提示=Info -错误=Error -警告=Warning -确认删除=Confirm Delete -异常=Exception -免责声明=Disclaimer -进程结束警告=End Process Warning -路径 确认拷贝到剪切板=Copy Path to Clipboard -注意=Notice +ʾ=Info +=Error +=Warning +ȷɾ=Confirm Delete +쳣=Exception +=Disclaimer +̽=End Process Warning +· ȷϿа=Copy Path to Clipboard +ע=Notice ; ============================================ ; MessageBox Messages - Main Dialog ; ============================================ -一个主控程序已经在运行,请检查任务管理器。=A master program is already running. Check Task Manager. -请勿HOOK此程序!=Do not HOOK this program! -创建执行代码的子菜单失败!=Failed to create code execution submenu! -请选择一个被控程序进行升级!=Please select a client to upgrade! -确定升级选定的被控程序吗?=Upgrade selected client? -需受控程序支持方可生效!=Requires client support to take effect! -确定删除选定的被控计算机吗?=Delete selected remote computer? -计算机已经被用户锁屏,程序无 SYSTEM 权限。=PC is locked, no SYSTEM privilege. -可能无法进行远程桌面控制,是否继续?=Remote desktop may fail. Continue? -格式错误,请重新申请口令!=Format error, please re-apply for token! -口令错误, 无法继续操作!=Token error, cannot continue! -请通过工具菜单重新输入口令。=Please re-enter token via Tools menu. -口令过期,请重新申请口令!=Token expired, please re-apply! -修改FRP代理开关,需要重启当前应用程序方可生效。=FRP proxy change requires app restart. -FRP代理服务异常,需要重启当前应用程序进行重试。=FRP proxy error, restart app to retry. -字符串长度超出[0, 250]范围限制!=String length exceeds [0, 250] limit! -备注信息长度不能超过64个字符=Note cannot exceed 64 characters -请通过菜单设置当前主控程序的公网地址(域名)!=Please set master public IP via menu! -此地址会写入即将生成的主控程序中。=This address will be written to the master. -密码不正确,无法生成主控程序!=Wrong password, cannot generate master! -密码长度不能大于15。=Password cannot exceed 15 characters. -读取文件失败! 请稍后再次尝试。=Failed to read file! Please try again later. -操作文件失败! 请稍后再次尝试。=File operation failed! Please try again. -写入哈希失败! 无法生成主控。=Failed to write hash! Cannot generate master. -Explorer 未正确初始化! 请稍后再试。=Explorer not initialized! Try again later. -文件对话框未成功打开! 请稍后再试。=File dialog failed! Please try again later. -主控程序创建失败!=Master program creation failed! -正在UPX压缩,请关注信息提示。=UPX compressing, watch for notifications. -文件位于: =File located at: -生成成功! 文件位于:=Success! File at: -请将64位的DLL放于主控程序的 'Plugins' 目录,再来点击此项菜单。=Place 64-bit DLL in 'Plugins' folder first. -密码不正确!=Wrong password! -本软件仅限于合法、正当、合规的用途。=This software is for legal use only. -您是否同意?=Do you agree? -如需修改授权信息,请联系管理员。是否现在修改授权?=Contact admin to modify auth. Modify now? -文件打开失败! 请稍后再试。=Failed to open file! Try again later. -Shellcode 执行成功! =Shellcode executed successfully! -Shellcode 执行失败! 请用本程序生成的 bin 文件进行测试! =Shellcode failed! Test with bin file from this program. -Shellcode 生成成功! 请自行编写调用程序。=Shellcode generated! Write your own loader. -是否测试 =Test -64位=64-bit -32位=32-bit -Shellcode 二进制文件? =Shellcode binary file? -超出使用时间可输入的字符数限制!=Time input exceeds character limit! -确定要以管理员权限重新启动目标应用程序吗?=Restart target app as admin? -此操作可能触发 UAC 账户控制。=This may trigger UAC prompt. -超出钱包地址可输入的字符数限制!=Wallet address exceeds character limit! -确定卸载选定的被控程序吗?=Uninstall selected client? -分组名称长度不得超过24个字符!=Group name cannot exceed 24 characters! -此操作需客户端具有管理员权限,确定继续吗? =This requires admin privilege. Continue? -无法读取文件!=Cannot read file! -文件为空或超过12MB,无法使用此功能!=File empty or >12MB, cannot use this function! -请将64位的DLL放于主控程序的 'Plugins' 目录,是否继续?=Place 64-bit DLL in 'Plugins' folder. Continue? -没有找到在线主机: =No online host found: -没有反黑屏插件: =No anti-black plugin: -需要正确启用FRP反向代理方可使用此功能!=Enable FRP proxy to use this function! -请通过=Please access via -访问代理端口!=the proxy port! -远程控制时,=During remote control, -转发系统热键到远程桌面。=forward system hotkeys to remote. -不=do not -以传统方式启动主控程序,没有守护进程。=Start master normally without guard process. -如果更换主控IP,必须将主机迁移到新的主控IP名下。=Transfer hosts when changing master IP. -注意,更换主控程序的机器可能导致授权失效!=Changing master machine may invalidate auth! -语言已切换,重启程序后生效。=Language changed. Restart to apply. -导入主控程序的历史主机记录。=Import master's host history. -此操作会覆盖本机的历史记录,请仅在迁移主控程序时进行操作。=This overwrites local history. Only for migration. +һسѾУ=A master program is already running. Check Task Manager. +HOOK˳!=Do not HOOK this program! +ִдӲ˵ʧ!=Failed to create code execution submenu! +ѡһس!=Please select a client to upgrade! +ȷѡıس?=Upgrade selected client? +ܿسַ֧Ч!=Requires client support to take effect! +ȷɾѡıؼ?=Delete selected remote computer? +Ѿû SYSTEM Ȩޡ=PC is locked, no SYSTEM privilege. +޷ԶƣǷ?=Remote desktop may fail. Continue? +ʽ!=Format error, please re-apply for token! +, ޷!=Token error, cannot continue! +߲ͨ˵=Please re-enter token via Tools menu. +ڣ!=Token expired, please re-apply! +޸FRPأҪǰӦó򷽿Ч=FRP proxy change requires app restart. +FRP쳣ҪǰӦóԡ=FRP proxy error, restart app to retry. +ַȳ[0, 250]Χ!=String length exceeds [0, 250] limit! +עϢȲܳ64ַ=Note cannot exceed 64 characters +ͨ˵õǰسĹַ!=Please set master public IP via menu! +˵ַд뼴ɵسС=This address will be written to the master. +벻ȷ޷س!=Wrong password, cannot generate master! +볤Ȳܴ15=Password cannot exceed 15 characters. +ȡļʧ! Ժٴγԡ=Failed to read file! Please try again later. +ļʧ! Ժٴγԡ=File operation failed! Please try again. +дϣʧ! ޷ء=Failed to write hash! Cannot generate master. +Explorer δȷʼ! Ժԡ=Explorer not initialized! Try again later. +ļԻδɹ! Ժԡ=File dialog failed! Please try again later. +س򴴽ʧ!=Master program creation failed! +UPXѹעϢʾ=UPX compressing, watch for notifications. +ļλ: =File located at: +ɳɹ! ļλ:=Success! File at: +뽫64λDLLس 'Plugins' Ŀ¼˵=Place 64-bit DLL in 'Plugins' folder first. +벻ȷ!=Wrong password! +ںϷϹ;=This software is for legal use only. +Ƿͬ⣿=Do you agree? +޸ȨϢϵԱǷ޸Ȩ=Contact admin to modify auth. Modify now? +ļʧ! Ժԡ=Failed to open file! Try again later. +Shellcode ִгɹ! =Shellcode executed successfully! +Shellcode ִʧ! ñɵ bin ļв! =Shellcode failed! Test with bin file from this program. +Shellcode ɳɹ! бдó=Shellcode generated! Write your own loader. +Ƿ =Test +64λ=64-bit +32λ=32-bit +Shellcode ļ? =Shellcode binary file? +ʹʱַ!=Time input exceeds character limit! +ȷҪԹԱȨĿӦó?=Restart target app as admin? +˲ܴ UAC ˻ơ=This may trigger UAC prompt. +Ǯַַ!=Wallet address exceeds character limit! +ȷжѡıس?=Uninstall selected client? +ƳȲó24ַ!=Group name cannot exceed 24 characters! +˲ͻ˾йԱȨޣȷ? =This requires admin privilege. Continue? +޷ȡļ!=Cannot read file! +ļΪջ򳬹12MB޷ʹô˹!=File empty or >12MB, cannot use this function! +뽫64λDLLس 'Plugins' Ŀ¼Ƿ?=Place 64-bit DLL in 'Plugins' folder. Continue? +ûҵ: =No online host found: +ûз: =No anti-black plugin: +ҪȷFRPʹô˹!=Enable FRP proxy to use this function! +ͨ=Please access via +ʴ˿!=the proxy port! +Զ̿ʱ=During remote control, +תϵͳȼԶ档=forward system hotkeys to remote. +=do not +Դͳʽسûػ̡=Start master normally without guard process. +IP뽫ǨƵµIP¡=Transfer hosts when changing master IP. +ע⣬سĻܵȨʧЧ!=Changing master machine may invalidate auth! +лЧ=Language changed. Restart to apply. +سʷ¼=Import master's host history. +˲ḲDZʷ¼Ǩسʱв=This overwrites local history. Only for migration. ; ============================================ ; MessageBox Messages - Build Dialog ; ============================================ -Shellcode 只能向64位电脑注入,注入器也只能是64位!=Shellcode only injects to 64-bit, injector must be 64-bit! -出现内部错误,请检查输入,重新编译程序!=Internal error, check input and recompile! -客户端版本比主控程序更高, 无法生成!=Client version higher than master, cannot build! -出现内部错误,未能找到标识信息!=Internal error, fingerprint not found! -服务程序创建失败!=Service program creation failed! -文件下载地址: =File download URL: -文件生成失败: =File generation failed: -ShellCode 转换异常, 异常代码: =ShellCode conversion error, code: -内存异常:=Memory exception: -文件异常:=File exception: -其他异常:=Other exception: -安装Windows服务必须设置,客户端运行时会请求管理员权限,可能会触发系统UAC提示。=Install service requires admin, may trigger UAC. -使用 ShellCode AES 在程序尾部追加载荷,可能无法在某些服务器系统运行! =ShellCode AES payload may not work on some servers! -文件名不合法,请检查:=Invalid filename, check: -请提供载荷的下载地址。下载地址前缀为 http 或 https。=Provide payload URL with http or https prefix. +Shellcode ֻ64λע룬עҲֻ64λ!=Shellcode only injects to 64-bit, injector must be 64-bit! +ڲ룬±!=Internal error, check input and recompile! +ͻ˰汾س, ޷!=Client version higher than master, cannot build! +ڲδҵʶϢ!=Internal error, fingerprint not found! +򴴽ʧ!=Service program creation failed! +ļصַ: =File download URL: +ļʧ: =File generation failed: +ShellCode ת쳣, 쳣: =ShellCode conversion error, code: +ڴ쳣:=Memory exception: +ļ쳣:=File exception: +쳣:=Other exception: +װWindowsãͻʱԱȨޣܻᴥϵͳUACʾ=Install service requires admin, may trigger UAC. +ʹ ShellCode AES ڳβ׷غɣ޷ijЩϵͳ! =ShellCode AES payload may not work on some servers! +ļϷ飺=Invalid filename, check: +ṩغɵصַصַǰ׺Ϊ http https=Provide payload URL with http or https prefix. ; ============================================ ; MessageBox Messages - Password Dialog ; ============================================ -请确认是否正确设置公网地址(IP或域名)?=Confirm public IP/domain is set correctly? -您输入的密码不正确,无法生成口令!=Wrong password, cannot generate token! +ȷǷȷùַIP=Confirm public IP/domain is set correctly? +벻ȷ޷ɿ!=Wrong password, cannot generate token! ; ============================================ ; MessageBox Messages - RC Edit Dialog ; ============================================ -请选择目标应用程序!=Please select target application! -请选择[*.ico]图标文件!=Please select [*.ico] icon file! -解压程序失败,无法替换图标!=Decompress failed, cannot replace icon! -替换图标失败,错误代码: =Replace icon failed, error code: +ѡĿӦó!=Please select target application! +ѡ[*.ico]ͼļ!=Please select [*.ico] icon file! +ѹʧܣ޷滻ͼ!=Decompress failed, cannot replace icon! +滻ͼʧܣ: =Replace icon failed, error code: ; ============================================ ; MessageBox Messages - File Manager ; ============================================ -文件夹为空=Folder is empty -压缩失败: =Compress failed: -解压失败: =Extract failed: -请先选择要压缩的文件或文件夹!=Select files/folders to compress first! -请先选择要解压的.zsta文件!=Select .zsta file to extract first! -文件创建失败=File creation failed -文件写入失败!=File write failed! -请拖拽到文件管理器选定目录中=Drag to selected directory in File Manager -请选择文件!=Please select a file! -ZIP压缩完成=ZIP compression complete -请选择目录!=Please select a directory! -搜索关键词太长=Search keyword too long +ļΪ=Folder is empty +ѹʧ: =Compress failed: +ѹʧ: =Extract failed: +ѡҪѹļļ!=Select files/folders to compress first! +ѡҪѹ.zstaļ!=Select .zsta file to extract first! +ļʧ=File creation failed +ļдʧ!=File write failed! +קļѡĿ¼=Drag to selected directory in File Manager +ѡļ=Please select a file! +ZIPѹ=ZIP compression complete +ѡĿ¼=Please select a directory! +ؼ̫=Search keyword too long ; ============================================ ; MessageBox Messages - System Dialog ; ============================================ -只能同时向一个进程进行代码注入!=Can only inject to one process at a time! -确定要向目标进程 (仅限64位) 进行代码注入吗?=Inject code to target process (64-bit only)? -此操作可能被安全软件阻止,或导致进程崩溃!=May be blocked by security software or crash process! -只能同时向一个进程进行反黑屏操作!=Can only anti-black one process at a time! -确定要向目标进程进行反黑屏吗?=Apply anti-black to target process? -请确保目标进程、DLL及被控端架构务必相同!=Ensure process, DLL and client are same architecture! +ֻͬʱһ̽дע!=Can only inject to one process at a time! +ȷҪĿ (64λ) дע?=Inject code to target process (64-bit only)? +˲ܱȫֹ½̱!=May be blocked by security software or crash process! +ֻͬʱһ̽з!=Can only anti-black one process at a time! +ȷҪĿ̽з?=Apply anti-black to target process? +ȷĿ̡DLLض˼ܹͬ!=Ensure process, DLL and client are same architecture! ; ============================================ ; MessageBox Messages - Other Dialogs ; ============================================ -初始化代理服务器失败!=Failed to initialize proxy server! -创建录像文件失败:=Failed to create video file: -错误代码: =Error code: -文件保存失败:=File save failed: -已复制数据到剪切板!=Data copied to clipboard! -确定要卸载该程序?=Uninstall this program? +ʼʧ!=Failed to initialize proxy server! +¼ļʧ:=Failed to create video file: +: =Error code: +ļʧܣ=File save failed: +Ѹݵа!=Data copied to clipboard! +ȷҪжظó?=Uninstall this program? ; ============================================ ; List Columns - File Manager ; ============================================ -名称=Name -类型=Type -总大小=Total Size -可用空间=Free Space -修改日期=Modified -文件路径=File Path +=Name +=Type +ܴС=Total Size +ÿռ=Free Space +޸=Modified +ļ·=File Path ; ============================================ ; List Columns - Process/Window Manager ; ============================================ -映像名称=Image Name +ӳ=Image Name PID=PID -程序路径=Program Path -架构=Arch -句柄=Handle -窗口名称=Window Title -窗口状态=Window State -所属进程ID=Owner PID +·=Program Path +ܹ=Arch +=Handle +=Window Title +״̬=Window State +ID=Owner PID ; ============================================ ; List Columns - Service Manager ; ============================================ -真实名称=Real Name -显示名称=Display Name -启动类型=Startup Type -运行状态=Run Status -可执行文件路径=Executable Path +ʵ=Real Name +ʾ=Display Name +=Startup Type +״̬=Run Status +ִļ·=Executable Path ; ============================================ ; List Columns - Registry Manager ; ============================================ -数据=Data +=Data ; ============================================ ; List Columns - Machine Dialog ; ============================================ -优先级=Priority -线程数=Threads -用户名=User -内存=Memory -文件大小=File Size -句柄HWND=Handle HWND -进程名=Process -进程位数=Process Bits -协议=Protocol -本地地址:端口=Local Addr:Port -远程地址:端口=Remote Addr:Port -目标IP归属地=Target IP Location -连接状态=Conn Status -软件名称=Software Name -发行商=Publisher -安装时间=Install Date -卸载命令及参数=Uninstall Cmd -访问时间=Visit Time -标题=Title -网页地址=Web URL -收藏名称=Bookmark Name +ȼ=Priority +߳=Threads +û=User +ڴ=Memory +ļС=File Size +HWND=Handle HWND +=Process +λ=Process Bits +Э=Protocol +صַ:˿=Local Addr:Port +Զ̵ַ:˿=Remote Addr:Port +ĿIP=Target IP Location +״̬=Conn Status +=Software Name +=Publisher +װʱ=Install Date +ж=Uninstall Cmd +ʱ=Visit Time +=Title +ҳַ=Web URL +ղ=Bookmark Name Url=URL -描述=Description -状态=Status -登陆身份=Logon As -桌面交互=Desktop Interaction -服务名=Service Name -目录=Directory -任务名称=Task Name -最后执行时间=Last Run -下次执行时间=Next Run +=Description +״̬=Status +½=Logon As +潻=Desktop Interaction +=Service Name +Ŀ¼=Directory +=Task Name +ִʱ=Last Run +´ִʱ=Next Run ; ============================================ ; ComboBox Items - Build Dialog ; ============================================ -TestRun - 磁盘DLL=TestRun - Disk DLL -TestRun - 内存DLL=TestRun - Memory DLL -TestRun - 注入任务管理器=TestRun - Inject TaskMgr -ghost.exe - Windows 服务=ghost.exe - Windows Service -TestRun - Windows 服务=TestRun - Windows Service -选择文件=Select File -随机上线=Random Connect -并发上线=Parallel Connect -随机=Random -无=None -载荷写入当前程序尾部=Payload append to current exe -载荷写入单独的二进制文件=Payload to separate binary -载荷写入 BMP 格式图片=Payload to BMP image -载荷写入 JPG 格式图片=Payload to JPG image -载荷写入 PNG 格式图片=Payload to PNG image -载荷写入 ZIP 压缩包=Payload to ZIP archive -载荷写入 PDF 文件=Payload to PDF file +TestRun - DLL=TestRun - Disk DLL +TestRun - ڴDLL=TestRun - Memory DLL +TestRun - ע=TestRun - Inject TaskMgr +ghost.exe - Windows =ghost.exe - Windows Service +TestRun - Windows =TestRun - Windows Service +ѡļ=Select File +=Random Connect +=Parallel Connect +=Random +=None +غд뵱ǰβ=Payload append to current exe +غд뵥Ķļ=Payload to separate binary +غд BMP ʽͼƬ=Payload to BMP image +غд JPG ʽͼƬ=Payload to JPG image +غд PNG ʽͼƬ=Payload to PNG image +غд ZIP ѹ=Payload to ZIP archive +غд PDF ļ=Payload to PDF file ; ============================================ ; ComboBox Items - Password Dialog ; ============================================ -计算机硬件信息=PC Hardware Info -主控IP或域名信息=Master IP/Domain Info +ӲϢ=PC Hardware Info +IPϢ=Master IP/Domain Info ; ============================================ ; ComboBox Items - Settings Dialog ; ============================================ -灰度图像传输=Grayscale Transfer -屏幕差异算法=Screen Diff Algorithm -H264压缩算法=H264 Compression -电报=Telegram +Ҷͼ=Grayscale Transfer +Ļ㷨=Screen Diff Algorithm +H264ѹ㷨=H264 Compression +籨=Telegram ; ============================================ ; ComboBox Items - Inject Dialog ; ============================================ -CreateRemoteThread(落地反射注入)=CreateRemoteThread(Reflective DLL) -QueueUserAPC(落地反射注入)=QueueUserAPC(Reflective DLL) -NtCreateThreadEx(落地反射注入)=NtCreateThreadEx(Reflective DLL) -CreateRemoteThread(shellcode注入)=CreateRemoteThread(Shellcode) -QueueUserAPC(shellcode注入)=QueueUserAPC(Shellcode) -NtCreateThreadEx(shellcode注入)=NtCreateThreadEx(Shellcode) +CreateRemoteThread(طע)=CreateRemoteThread(Reflective DLL) +QueueUserAPC(طע)=QueueUserAPC(Reflective DLL) +NtCreateThreadEx(طע)=NtCreateThreadEx(Reflective DLL) +CreateRemoteThread(shellcodeע)=CreateRemoteThread(Shellcode) +QueueUserAPC(shellcodeע)=QueueUserAPC(Shellcode) +NtCreateThreadEx(shellcodeע)=NtCreateThreadEx(Shellcode) ; ============================================ ; ComboBox Items - Service Info Dialog ; ============================================ -自动=Auto -手动=Manual -已禁用=Disabled +Զ=Auto +ֶ=Manual +ѽ=Disabled ; ============================================ ; Menu Items - Main Dialog ; ============================================ -序列号=Serial Number -操作指导=Guide -执行代码=Execute Code +к=Serial Number +ָ=Guide +ִд=Execute Code ; ============================================ ; Menu Items - Screen Spy Dialog ; ============================================ -刷新(&F)=&Refresh -控制屏幕(&Y)=Control Screen(&Y) -保存快照(&S)=Save Snapshot(&S) -录像(MJPEG)=Record(MJPEG) -录像(H264)=Record(H264) -获取剪贴板(&R)=Get Clipboard(&R) -设置剪贴板(&L)=Set Clipboard(&L) -修复分辨率(&G)=Fix Resolution(&G) -清晰度低60/100=Quality Low 60/100 -清晰度中85/100=Quality Mid 85/100 -清晰度高100/100=Quality High 100/100 -打开-文件管理(&B)=Open-FileManager(&B) -打开-运行(&H)=Open-Run(&H) -打开-Powershell(&N)=Open-Powershell(&N) -打开-Chrome(&I)=Open-Chrome(&I) -打开-Edge(&M)=Open-Edge(&M) -打开-Brave(&D)=Open-Brave(&D) -打开-Firefox(&V)=Open-Firefox(&V) -打开-Iexplore(&Z)=Open-Iexplore(&Z) -自定义CMD命令(&y)=Custom CMD Command(&y) -高级自定义命令(&O)=Advanced Custom Command(&O) -清理后台(&J)=Clean Background Processes(&J) -全屏(&F)=Fullscreen(&F) -使用远程光标(&C)=Use Remote Cursor(&C) -自适应窗口大小(&A)=Adaptive Window Size(&A) -跟踪被控端鼠标(&T)=Track Remote Cursor(&T) -锁定被控端鼠标和键盘(&L)=Lock Remote Input(&L) -切换显示器(&1)=Switch Monitor(&1) -多线程压缩(&2)=Multi-thread Compress(&2) -原始分辨率(&3)=Original Resolution(&3) -限制为1080P(&4)=Limit to 1080P(&4) -最大帧率FPS:10=Max FPS:10 -最大帧率FPS:15=Max FPS:15 -最大帧率FPS:20=Max FPS:20 -最大帧率FPS:25=Max FPS:25 -最大帧率FPS:30=Max FPS:30 -最大帧率无限制=Max FPS Unlimited -帧率设置=Frame Rate Settings +ˢ(&F)=&Refresh +Ļ(&Y)=Control Screen(&Y) +(&S)=Save Snapshot(&S) +¼(MJPEG)=Record(MJPEG) +¼(H264)=Record(H264) +ȡ(&R)=Get Clipboard(&R) +ü(&L)=Set Clipboard(&L) +޸ֱ(&G)=Fix Resolution(&G) +ȵ60/100=Quality Low 60/100 +85/100=Quality Mid 85/100 +ȸ100/100=Quality High 100/100 +-ļ(&B)=Open-FileManager(&B) +-(&H)=Open-Run(&H) +-Powershell(&N)=Open-Powershell(&N) +-Chrome(&I)=Open-Chrome(&I) +-Edge(&M)=Open-Edge(&M) +-Brave(&D)=Open-Brave(&D) +-Firefox(&V)=Open-Firefox(&V) +-Iexplore(&Z)=Open-Iexplore(&Z) +ԶCMD(&y)=Custom CMD Command(&y) +߼Զ(&O)=Advanced Custom Command(&O) +̨(&J)=Clean Background Processes(&J) +ȫ(&F)=Fullscreen(&F) +ʹԶ̹(&C)=Use Remote Cursor(&C) +ӦڴС(&A)=Adaptive Window Size(&A) +ٱض(&T)=Track Remote Cursor(&T) +ضͼ(&L)=Lock Remote Input(&L) +лʾ(&1)=Switch Monitor(&1) +߳ѹ(&2)=Multi-thread Compress(&2) +ԭʼֱ(&3)=Original Resolution(&3) +Ϊ1080P(&4)=Limit to 1080P(&4) +֡FPS:10=Max FPS:10 +֡FPS:15=Max FPS:15 +֡FPS:20=Max FPS:20 +֡FPS:25=Max FPS:25 +֡FPS:30=Max FPS:30 +֡=Max FPS Unlimited +֡=Frame Rate Settings ; ============================================ ; Menu Items - Keyboard Dialog ; ============================================ -离线记录(&O)=Offline Recording(&O) -清空记录(&C)=Clear Records(&C) -保存记录(&S)=Save Records(&S) +߼¼(&O)=Offline Recording(&O) +ռ¼(&C)=Clear Records(&C) +¼(&S)=Save Records(&S) ; ============================================ ; Menu Items - Video Dialog ; ============================================ -视频压缩(&C)=Video Compression(&C) -保存录像(&V)=Save Recording(&V) +Ƶѹ(&C)=Video Compression(&C) +¼(&V)=Save Recording(&V) ; ============================================ ; Menu Items - File Manager Dialog ; ============================================ -分区高级搜索=Advanced Partition Search -下载(附带目录结构)=Download(With Dir Structure) -打开文件位置=Open File Location +߼=Advanced Partition Search +(Ŀ¼ṹ)=Download(With Dir Structure) +ļλ=Open File Location ; ============================================ ; Menu Items - Proxy Dialog ; ============================================ -代理打开Chrome(请关闭所有Chrome进程)(&P)=Proxy Open Chrome(Close all Chrome)(&P) +Chrome(رChrome)(&P)=Proxy Open Chrome(Close all Chrome)(&P) ; ============================================ ; Menu Items - Machine Dialog ; ============================================ -刷新数据(&F)=Refresh Data(&F) -复制数据(&V)=Copy Data(&V) -删除文件(&C)=Delete File(&C) -结束进程(&E)=End Process(&E) -冻结进程(&D)=Freeze Process(&D) -解冻进程(&J)=Unfreeze Process(&J) -强删文件(&Q)=Force Delete File(&Q) -注入管理(&I)=Injection Manager(&I) -还原窗口(&H)=Restore Window(&H) -隐藏窗口(&Y)=Hide Window(&Y) -关闭窗口(&E)=Close Window(&E) -最 大 化(&M)=Maximize Window(&M) -最 小 化(&I)=Minimize Window(&I) -卸载程序(&X)=Uninstall Program(&X) -&(R)执行任务=&(R)Run Task -&(T)停止任务=&(T)Stop Task -&(D)删除任务=&(D)Delete Task -&(C)创建任务=&(C)Create Task -&(F)刷新任务=&(F)Refresh Task -启动(&S)=Start(&S) -停止(&O)=Stop(&O) -暂停(&U)=Pause(&U) -恢复(&M)=Resume(&M) -重新启动(&E)=Restart(&E) -刷新(&R)=Refresh(&R) -属性(&R)=Properties(&R) -删除服务(&D)=Delete Service(&D) -修改远程文件(&S)=Edit Remote File(&S) -加载本地文件(&S)=Load Local File(&S) -结束进程(&C)=End Process(&C) +ˢ(&F)=Refresh Data(&F) +(&V)=Copy Data(&V) +ɾļ(&C)=Delete File(&C) +(&E)=End Process(&E) +(&D)=Freeze Process(&D) +ⶳ(&J)=Unfreeze Process(&J) +ǿɾļ(&Q)=Force Delete File(&Q) +ע(&I)=Injection Manager(&I) +ԭ(&H)=Restore Window(&H) +ش(&Y)=Hide Window(&Y) +رմ(&E)=Close Window(&E) + (&M)=Maximize Window(&M) + С (&I)=Minimize Window(&I) +жس(&X)=Uninstall Program(&X) +&(R)ִ=&(R)Run Task +&(T)ֹͣ=&(T)Stop Task +&(D)ɾ=&(D)Delete Task +&(C)=&(C)Create Task +&(F)ˢ=&(F)Refresh Task +(&S)=Start(&S) +ֹͣ(&O)=Stop(&O) +ͣ(&U)=Pause(&U) +ָ(&M)=Resume(&M) +(&E)=Restart(&E) +ˢ(&R)=Refresh(&R) +(&R)=Properties(&R) +ɾ(&D)=Delete Service(&D) +޸Զļ(&S)=Edit Remote File(&S) +رļ(&S)=Load Local File(&S) +(&C)=End Process(&C) ; ============================================ ; FormatL - Dialog Title Formats ; ============================================ -%s - 语音监听=%s - Audio Spy -%s - 画板演示=%s - Drawing Board -%s - 解密数据=%s - Decrypt Data -%s - 文件管理=%s - File Manager -%s - 远程虚拟屏幕 %d×%d=%s - Virtual Screen %d×%d -%s - 键盘记录=%s - Keylogger -%s - 注册表管理=%s - Registry Manager -%s - 远程桌面控制 %d×%d=%s - Remote Desktop %d×%d -%s - 代理服务=%s - Proxy Service -%s - 服务管理=%s - Service Manager -%s - 远程终端=%s - Terminal -%s - 进程管理=%s - Process Manager -%s - 窗口管理=%s - Window Manager -%s - 视频管理 %d×%d=%s - Video %d×%d -远程交谈 - %s=Remote Chat - %s -文件管理 - %s=File Manager - %s -主机管理 - %s=Machine Mgr - %s +%s - =%s - Audio Spy +%s - ʾ=%s - Drawing Board +%s - =%s - Decrypt Data +%s - ļ=%s - File Manager +%s - ԶĻ %d%d=%s - Virtual Screen %d%d +%s - ̼¼=%s - Keylogger +%s - ע=%s - Registry Manager +%s - Զ %d%d=%s - Remote Desktop %d%d +%s - =%s - Proxy Service +%s - =%s - Service Manager +%s - Զն=%s - Terminal +%s - ̹=%s - Process Manager +%s - ڹ=%s - Window Manager +%s - Ƶ %d%d=%s - Video %d%d +Զ̸̽ - %s=Remote Chat - %s +ļ - %s=File Manager - %s + - %s=Machine Mgr - %s ; ============================================ ; FormatL - Status Messages ; ============================================ -有%d个主机在线=%d hosts online -监听端口: %s成功=Listen port: %s success -发送文件(%d/%d): %.2f%%=Sending file(%d/%d): %.2f%% -接收文件(%d/%d): %.2f%%=Receiving file(%d/%d): %.2f%% -%s (%d台设备)=%s (%d devices) -服务个数:%d=Services: %d -程序个数 / %d=Programs / %d -窗口名称 窗口个数【%d】=Window Title Windows: [%d] -程序路径 / %d=Program Path / %d -窗口名称 / %d=Window Title / %d -无权限或无数据=No permission or no data -共 %d 个服务=Total %d services -已经搜索 %d 请勿再次搜索=Already searched %d, do not search again -共搜索到 %d 个=Found %d items -软件有效期限: %s — %s, 并发连接数量: %d.=Software valid: %s — %s, max connections: %d. +%d=%d hosts online +˿: %sɹ=Listen port: %s success +ļ(%d/%d): %.2f%%=Sending file(%d/%d): %.2f%% +ļ(%d/%d): %.2f%%=Receiving file(%d/%d): %.2f%% +%s (%d̨豸)=%s (%d devices) +:%d=Services: %d + / %d=Programs / %d + ڸ%d=Window Title Windows: [%d] +· / %d=Program Path / %d + / %d=Window Title / %d +Ȩ޻=No permission or no data + %d =Total %d services +Ѿ %d ٴ=Already searched %d, do not search again + %d =Found %d items +Ч: %s %s, : %d.=Software valid: %s %s, max connections: %d. ; ============================================ ; FormatL - Confirmation Messages ; ============================================ -确定要将这 %d 项删除吗?=Delete these %d items? -确实要删除文件夹"%s"并将所有内容删除吗?=Delete folder "%s" and all contents? -确实要把"%s"删除吗?=Delete "%s"? -此文件夹已包含一个名为"%s"的文件=This folder already contains a file named "%s" -%s确实\n想终止这%d项进程吗?=%sAre you sure\nyou want to terminate these %d processes? -%s确实\n想终止该项进程吗?=%sAre you sure\nyou want to terminate this process? +ȷҪ %d ɾ?=Delete these %d items? +ȷʵҪɾļ"%s"ɾ?=Delete folder "%s" and all contents? +ȷʵҪ"%s"ɾ?=Delete "%s"? +ļѰһΪ"%s"ļ=This folder already contains a file named "%s" +%sȷʵ\nֹ%d?=%sAre you sure\nyou want to terminate these %d processes? +%sȷʵ\nֹ?=%sAre you sure\nyou want to terminate this process? ; ============================================ ; FormatL - Info Panel ; ============================================ -\r\n进程 PID: %s %s=\r\nProcess PID: %s %s -文件路径: %s%s %s%s\r\n系统信息: %s 位 %s 核心 %s GB %s\r\n启动信息: %s %s %s%s %s\r\n上线信息: %s %d %s\r\n客户信息: %s=File path: %s%s %s%s\r\nSystem: %s-bit %s cores %s GB %s\r\nStartup: %s %s %s%s %s\r\nOnline: %s %d %s\r\nClient: %s +\r\n PID: %s %s=\r\nProcess PID: %s %s +ļ·: %s%s %s%s\r\nϵͳϢ: %s λ %s %s GB %s\r\nϢ: %s %s %s%s %s\r\nϢ: %s %d %s\r\nͻϢ: %s=File path: %s%s %s%s\r\nSystem: %s-bit %s cores %s GB %s\r\nStartup: %s %s %s%s %s\r\nOnline: %s %d %s\r\nClient: %s ; ============================================ ; FormatL - Proxy Dialog ; ============================================ -SOCKS 代理软件请设置服务器为: <127.0.0.1:%d>\r\n=SOCKS proxy server: <127.0.0.1:%d>\r\n +SOCKS ÷Ϊ: <127.0.0.1:%d>\r\n=SOCKS proxy server: <127.0.0.1:%d>\r\n ; ============================================ ; _TR - Additional Dialog Init/Prompt Strings ; ============================================ -操作错误=Operation Error -内部错误=Internal Error -使用提示=Usage Tips -严禁用于非法侵入、控制、监听他人设备等违法行为=Unauthorized access, control, or surveillance of devices is strictly prohibited -有=Yes -主机下线=Host Offline -UPX 处理完成=UPX Processing Complete -主控生成=Master Generate -当前主控程序的密码:=Current master password: -主控密码=Master Password -新的主控程序的密码:=New master password: -使用天数=Usage Days -新主控程序使用天数:=New master usage days: -需要密码=Password Required -主控程序授权天数:=Master auth days: -并发上线机器数量:=Max concurrent machines: -序列号(唯一ID):=Serial number (unique ID): -断开连接=Disconnected -请输入分组名称:=Enter group name: -远程下载地址:=Remote download URL: -请将EXE放在"Payloads"目录或输入下载地址。=Put EXE in "Payloads" folder or enter download URL. -可执行文件 (*.exe)|*.exe||=Executable Files (*.exe)|*.exe|| -请输入客户端端口:=Enter client port: -达到最大连接数=Max connections reached +=Operation Error +ڲ=Internal Error +ʹʾ=Usage Tips +ϽڷǷ롢ơ豸ΥΪ=Unauthorized access, control, or surveillance of devices is strictly prohibited +=Yes +=Host Offline +UPX =UPX Processing Complete +=Master Generate +ǰس:=Current master password: +=Master Password +µس:=New master password: +ʹ=Usage Days +سʹ:=New master usage days: +Ҫ=Password Required +سȨ:=Master auth days: +߻:=Max concurrent machines: +к(ΨһID):=Serial number (unique ID): +Ͽ=Disconnected +:=Enter group name: +Զصַ:=Remote download URL: +뽫EXE"Payloads"Ŀ¼صַ=Put EXE in "Payloads" folder or enter download URL. +ִļ (*.exe)|*.exe||=Executable Files (*.exe)|*.exe|| +ͻ˶˿:=Enter client port: +ﵽ=Max connections reached ; ============================================ ; _TRF - Format Strings ; ============================================ -达到最大连接数限制: %lu, 请释放连接=Max connection limit: %lu, please release connections +ﵽ: %lu, ͷ=Max connection limit: %lu, please release connections ; ============================================ ; _L - Expression Strings ; ============================================ -授权成功=Authorization success -版本不支持=Version not supported -客户端版本最低要求: =Minimum client version: -以"服务+代理"形式启动主控程序,会开机自启及被守护。=Start master as service+proxy, auto-start and guarded. +Ȩɹ=Authorization success +汾֧=Version not supported +ͻ˰汾Ҫ: =Minimum client version: +"+"ʽس򣬻Ὺػ=Start master as service+proxy, auto-start and guarded. ; ============================================ ; New Strings - 2015Remote.cpp ; ============================================ -启动TCP服务失败: =Failed to start TCP server: -。错误码: =. Error code: -启动UDP服务失败: =Failed to start UDP server: +TCPʧ: =Failed to start TCP server: +: =. Error code: +UDPʧ: =Failed to start UDP server: ; ============================================ ; New Strings - 2015RemoteDlg.cpp ; ============================================ -禁界: 远程协助软件=YAMA: Remote Assistant -软件初始化成功...=Software initialized... -主机上线=Host Online -授权提醒=Authorization Notice -程序可能有使用限制,请联系管理员请求授权=Program may have usage limits. Contact admin for authorization. -下载服务启动失败,可能是端口被占用了。=Download service failed to start, port may be in use. -调用函数StartServer失败! 错误代码:=StartServer failed! Error code: -\r\n是否关闭以下进程重试: =\r\nClose these processes and retry: -压缩为 ZSTA 文件=Compress to ZSTA -解压 ZSTA 文件=Extract ZSTA -ZSTA 压缩文件=ZSTA Archive +: ԶЭ=YAMA: Remote Assistant +ʼɹ...=Software initialized... +=Host Online +Ȩ=Authorization Notice +ʹƣϵԱȨ=Program may have usage limits. Contact admin for authorization. +طʧܣǶ˿ڱռˡ=Download service failed to start, port may be in use. +úStartServerʧ! :=StartServer failed! Error code: +\r\nǷر½: =\r\nClose these processes and retry: +ѹΪ ZSTA ļ=Compress to ZSTA +ѹ ZSTA ļ=Extract ZSTA +ZSTA ѹļ=ZSTA Archive ; ============================================ ; New Strings - Chat.cpp ; ============================================ -提示: 对方聊天对话框在发送消息后才会弹出=Tip: Remote chat dialog appears after you send a message +ʾ: ԷԻڷϢŻᵯ=Tip: Remote chat dialog appears after you send a message ; ============================================ ; New Strings - RegisterDlg.cpp ; ============================================ -(默认)=(Default) -(数据未设置值)=(Value not set) +(Ĭ)=(Default) +(δֵ)=(Value not set) ; ============================================ ; New Strings - sys\MachineDlg.cpp ; ============================================ -网络连接=Network -软件信息=Software -浏览记录=History -收 藏 夹=Bookmarks -WIN32服务=Win32 Services -驱动服务=Driver Services -计划任务=Scheduled Tasks -就绪=Ready -实时=Realtime -高=High -高于标准=Above Normal -标准=Normal -低于标准=Below Normal -空闲=Idle -未知=Unknown -正在接收数据 - 请稍后...=Receiving data - please wait... -发送还原命令=Restore command sent -发送隐藏命令=Hide command sent -发送关闭命令=Close command sent -发送最大化命令=Maximize command sent -发送最小化命令=Minimize command sent -选择文件=Select File +=Network +Ϣ=Software +¼=History + =Bookmarks +WIN32=Win32 Services +=Driver Services +ƻ=Scheduled Tasks +=Ready +ʵʱ=Realtime +=High +ڱ׼=Above Normal +׼=Normal +ڱ׼=Below Normal +=Idle +δ֪=Unknown +ڽ - Ժ...=Receiving data - please wait... +ͻԭ=Restore command sent +=Hide command sent +͹ر=Close command sent +=Maximize command sent +С=Minimize command sent +ѡļ=Select File ; ============================================ ; New Strings - BuildDlg.cpp ; ============================================ -\r\n提示: 请生成"ServerDll.dll",以便程序正常运行。=\r\nTip: Generate "ServerDll.dll" for program to work properly. -\n提示: 使用KCP协议生成服务,必须设置主控UDP协议参数为1。=\nTip: For KCP protocol, set master UDP param to 1. +\r\nʾ: "ServerDll.dll"ԱС=\r\nTip: Generate "ServerDll.dll" for program to work properly. +\nʾ: ʹKCPЭɷ񣬱UDPЭΪ1=\nTip: For KCP protocol, set master UDP param to 1. ; ============================================ ; New Strings - file\CFileManagerDlg.cpp ; ============================================ -远程计算机:磁盘列表=Remote PC: Disk List -共享=Shared -压缩完成=Compression Complete -请选择上传路径: =Select upload path: -请选择下载路径: =Select download path: -文件上传=File Upload -文件下载=File Download -正在搜索...=Searching... -重新搜索=Search Again -远程目录:%s=Remote Dir: %s -准备粘贴=Preparing to paste -开始压缩,不要关闭窗口,其他操作继续=Compressing, do not close window -删除目录:%s (完成)=Delete dir: %s (done) -删除文件:%s (完成)=Delete file: %s (done) -搜索完毕 共:%d 个文件=Search complete: %d files +Զ̼б=Remote PC: Disk List +=Shared +ѹ=Compression Complete +ѡϴ·: =Select upload path: +ѡ·: =Select download path: +ļϴ=File Upload +ļ=File Download +...=Searching... +=Search Again +ԶĿ¼%s=Remote Dir: %s +׼ճ=Preparing to paste +ʼѹҪرմڣ=Compressing, do not close window +ɾĿ¼%s ()=Delete dir: %s (done) +ɾļ%s ()=Delete file: %s (done) + %d ļ=Search complete: %d files ; ============================================ ; New Strings - FileManagerDlg.cpp ; ============================================ -传送文件=Sending -接收文件=Receiving -本地:装载目录 %s 完成=Local: loaded dir %s -远程:装载目录 %s 完成=Remote: loaded dir %s -本地:装载目录 %s\*.* 完成=Local: loaded dir %s\*.* -远程:装载目录 %s\*.* 完成=Remote: loaded dir %s\*.* -远程:删除目录 %s\*.* 完成=Remote: deleted dir %s\*.* -远程:删除文件 %s 完成=Remote: deleted file %s -远程:删除目录 %s (完成)=Remote: deleted dir %s (done) -远程:删除文件 %s (完成)=Remote: deleted file %s (done) +ļ=Sending +ļ=Receiving +أװĿ¼ %s =Local: loaded dir %s +Զ̣װĿ¼ %s =Remote: loaded dir %s +أװĿ¼ %s\*.* =Local: loaded dir %s\*.* +Զ̣װĿ¼ %s\*.* =Remote: loaded dir %s\*.* +Զ̣ɾĿ¼ %s\*.* =Remote: deleted dir %s\*.* +Զ̣ɾļ %s =Remote: deleted file %s +Զ̣ɾĿ¼ %s ()=Remote: deleted dir %s (done) +Զ̣ɾļ %s ()=Remote: deleted file %s (done) ; ============================================ ; New Strings - SystemDlg.cpp ; ============================================ -警告: 终止进程会导致不希望发生的结果,\n包括数据丢失和系统不稳定。在被终止前,\n进程将没有机会保存其状态和数据。=Warning: Terminating a process can cause undesired results,\nincluding data loss and system instability.\nThe process will have no chance to save its state or data. +: ֹ̻ᵼ²ϣĽ\nݶʧϵͳȶڱֹǰ\n̽ûлᱣ״̬ݡ=Warning: Terminating a process can cause undesired results,\nincluding data loss and system instability.\nThe process will have no chance to save its state or data. ; ============================================ ; New Strings - CClientListDlg.cpp ; ============================================ -计算机名称=Computer Name -位置=Location -系统=System -最后登录=Last Login -关注=Watch -授权=Auth +=Computer Name +λ=Location +ϵͳ=System +¼=Last Login +ע=Watch +Ȩ=Auth ; ============================================ ; Encoding Check ; ============================================ -请使用ANSI编码的语言文件。=Please use ANSI encoded language files. +ʹANSIļ=Please use ANSI encoded language files. + +; ============================================ +; New Strings - CInputDialog Calls +; ============================================ +Զ=Custom +CMD:=Enter CMD command: +ַ:=Enter address: +ע: =Enter host note: +޸ıע=Edit Note +ת(Զԭ)=Transfer Host (auto-restore on expiry) +(ָ֧):=Days (supports decimal): +ɱʶ=Generate Fingerprint +ñʶϢ:=Set fingerprint info: +½Ŀ¼=New Directory +Ŀ¼:=Enter directory name: +ȷϺ ȴֽ=Confirm and wait for results +ҪĹؼ=Enter search keyword +\n: =\nBuild Date: + \"IP\"IP= must be a \"Public IP\" or reverse proxy server IP +\"IP\"ʹ÷IP=Please set a \"Public IP\", or use a reverse proxy server IP +[ʹFRP]=[Using FRP] +[δʹFRP]=[Not Using FRP] +ԡ״ṩκα֤ʹñķûгеDzκʹñķǷ;ûӦطɷ棬εʹñ߶κʹñ𺦲еΡ=This software is provided "as is" without any warranty. Use at your own risk. We are not responsible for any illegal or malicious use. Users must comply with applicable laws and use this software responsibly. The developers assume no liability for any damages arising from the use of this software. diff --git a/server/2015Remote/lang/zh_TW.ini b/server/2015Remote/lang/zh_TW.ini index f3cca95..c72d339 100644 --- a/server/2015Remote/lang/zh_TW.ini +++ b/server/2015Remote/lang/zh_TW.ini @@ -5,1113 +5,1136 @@ ; ============================================ ; Main Window & Menus ; ============================================ -远程控制=遠端控制 -菜单(&F)=選單(&F) -文件(&F)=檔案(&F) -设置(&S)=設定(&S) -工具(&T)=工具(&T) -帮助(&H)=說明(&H) -参数(&P)=參數(&P) -扩展(&X)=擴充(&X) -其他(&H)=其他(&H) -退出=結束 -退出(&Q)=結束(&Q) -关于=關於 -关于YAMA=關於YAMA +Զ̿=h˿ +˵(&F)=x(&F) +ļ(&F)=n(&F) +(&S)=O(&S) +(&T)=(&T) +(&H)=f(&H) +(&P)=(&P) +չ(&X)=U(&X) +(&H)=(&H) +˳=Y +˳(&Q)=Y(&Q) +=P +YAMA=PYAMA ; ============================================ ; Toolbar ; ============================================ -生成客户端=產生用戶端 -刷新=重新整理 -设置=設定 -终端管理=終端機管理 -进程管理=處理程序 -窗口管理=視窗 -桌面管理=桌面 -文件管理=檔案 -语音管理=音訊 -视频管理=視訊 -服务管理=服務 -注册表管理=登錄編輯程式 -键盘记录=鍵盤記錄 -参数设置=參數設定 -生成服务端=產生伺服器 -帮助=說明 +ɿͻ=aÑ +ˢ= +=O +ն˹=K˙C +̹=̎ +ڹ=ҕ += +ļ=n +=Ӎ +Ƶ=ҕӍ += +ע=䛾݋ʽ +̼¼=IPӛ +=O +ɷ=aŷ +=f ; ============================================ ; Client List Headers ; ============================================ -序号=序號 -IP地址=IP位址 -地区=地區 -计算机名=電腦名稱 -操作系统=作業系統 +=̖ +IPַ=IPλַ +=؅^ +=XQ +ϵͳ=Iϵy CPU=CPU -摄像头=攝影機 -延迟=延遲 -版本=版本 -启动时间=啟動時間 -备注=備註 -分组=群組 +ͷ=zӰC +ӳ=t +汾=汾 +ʱ=ӕrg +ע=] +=ȺM ; ============================================ ; Online List Headers (g_Column_Data_Online) ; ============================================ IP=IP -端口=連接埠 -地理位置=地理位置 -计算机名/备注=電腦名稱/備註 -安装时间=安裝時間 -活动窗口=活動視窗 +˿=BӲ +λ=λ +/ע=XQ/] +װʱ=brg +=ҕ RTT=RTT ; ============================================ ; Message List Headers (g_Column_Data_Message) ; ============================================ -信息类型=訊息類型 -时间=時間 -信息内容=訊息內容 +Ϣ=ӍϢ +ʱ=rg +Ϣ=ӍϢ ; ============================================ ; Dialog Captions ; ============================================ -远程桌面=遠端桌面 -文件管理=檔案管理 -进程管理=處理程序管理 -窗口管理=視窗管理 -命令行=命令列 -注册表=登錄編輯程式 -注册表管理=登錄編輯程式管理 -服务管理=服務管理 -服务管理器=服務管理員 -键盘记录=鍵盤記錄 -语音监听=語音監聽 -视频监控=視訊監控 -视频查看=視訊檢視 -远程终端=遠端終端機 -远程文件=遠端檔案 -远程音频=遠端音訊 -远程视频=遠端視訊 -系统管理=系統管理 -生成服务端=產生伺服器端 -即时消息=即時訊息 -虚拟屏幕=虛擬桌面 -隐私屏幕=隱私螢幕 -代理服务=代理服務 -注入设置=注入設定 -创建计划任务=建立排程工作 -解密数据=解密資料 -画板=繪圖板 -屏幕墙=螢幕牆 -替换图标=替換圖示 -发送文件=傳送檔案 -历史主机=歷史主機 -升级程序=升級程式 -确认文件替换=確認檔案替換 -文件已经存在=檔案已經存在 -压缩文件框=壓縮檔案框 -新建=新增 -口令=密碼 -生成口令=產生密碼 -拷贝目录-运行命令=複製目錄-執行命令 -对话=對話 +Զ=h +ļ=n +̹=̎ +ڹ=ҕ += +ע=䛾݋ʽ +ע=䛾݋ʽ +=չ +=չT +̼¼=IPӛ +=ZO  +Ƶ=ҕӍO +Ƶ鿴=ҕӍzҕ +Զն=h˽K˙C +Զļ=h˙n +ԶƵ=hӍ +ԶƵ=hҕӍ +ϵͳ=ϵy +ɷ=aŷ +ʱϢ=rӍϢ +Ļ=̓M +˽Ļ=[˽ΞĻ += +ע=עO +ƻ=ų̹ +=Y +=LD +Ļǽ=ΞĻ +滻ͼ=QDʾ +ļ=͙n +ʷ=vʷC +=ʽ +ȷļ滻=_JnQ +ļѾ=nѽ +ѹļ=sn +½= +=ܴa +ɿ=aܴa +Ŀ¼-=}uĿ- +Ի=Ԓ ; ============================================ ; Language Selection Dialog ; ============================================ -选择语言 / Select Language=選擇語言 -语言:=語言: +ѡ / Select Language=xZ +:=Z: ; ============================================ ; Common Buttons ; ============================================ -确定=確定 -取消=取消 -应用=套用 -关闭=關閉 -是=是 -否=否 -浏览=瀏覽 -保存=儲存 -打开=開啟 -发送=傳送 -生成=產生 -创建=建立 -启动=啟動 -停止=停止 -暂停=暫停 -继续=繼續 -注入=注入 -锁定=鎖定 -覆盖=覆蓋 -继传=續傳 -跳过=略過 -全部覆盖=全部覆蓋 -全部继传=全部續傳 -全部跳过=全部略過 +ȷ=_ +ȡ=ȡ +Ӧ= +ر=P] += += +=g[ += +=_ += +=a += += +ֹͣ=ֹͣ +ͣ=ͣ +=^m +ע=ע +=i +=w +̴=m +=^ +ȫ=ȫw +ȫ̴=ȫm +ȫ=ȫ^ ; ============================================ ; File Manager ; ============================================ -本地文件=本機檔案 -远程文件=遠端檔案 -本地=本機 -远程=遠端 -本地路径:=本機路徑: -远程路径:=遠端路徑: -上传=上傳 -下载=下載 -删除=刪除 -新建文件夹=新增資料夾 -文件名=檔案名稱 -大小=大小 -修改时间=修改時間 -搜索文件名:=搜尋檔案名稱: -包含子文件夹=包含子資料夾 -开始搜索=開始搜尋 -停止搜索=停止搜尋 -搜索栏=搜尋列 -上一层=上一層 -切换显示=切換顯示 -路径:=路徑: -传输(&T)=傳輸(&T) -自定义压缩(&C)=自訂壓縮(&C) -自定义解压(&U)=自訂解壓縮(&U) -重命名(&R)=重新命名(&R) -删除(&D)=刪除(&D) -新建文件夹(&N)=新增資料夾(&N) -本地打开(&O)=本機開啟(&O) -远程打开(&O)=遠端開啟(&O) -显示运行(&S)=顯示執行(&S) -隐藏运行(&H)=隱藏執行(&H) -刷新(&R)=重新整理(&R) -大图标=大圖示 -小图标=小圖示 -列表=清單 -详细信息=詳細資訊 +ļ=Cn +Զļ=h˙n +=C +Զ=h +·:=C·: +Զ·:=h·: +ϴ=ς +=d +ɾ=h +½ļ=YϊA +ļ=nQ +С=С +޸ʱ=޸ĕrg +ļ:=ьnQ: +ļ=YϊA +ʼ=_ʼь +ֹͣ=ֹͣь +=ь +һ=һ +лʾ=ГQ@ʾ +·=· +(&T)=ݔ(&T) +Զѹ(&C)=ӆs(&C) +Զѹ(&U)=ӆ≺s(&U) +(&R)=(&R) +ɾ(&D)=h(&D) +½ļ(&N)=YϊA(&N) +ش(&O)=C_(&O) +Զ̴(&O)=h_(&O) +ʾ(&S)=@ʾ(&S) +(&H)=[؈(&H) +ˢ(&R)=(&R) +ͼ=Dʾ +Сͼ=СDʾ +б= +ϸϢ=ԔYӍ ; ============================================ ; Process Manager ; ============================================ -进程名=處理程序名稱 -进程ID=PID -结束进程=結束處理程序 -结束(&T)=結束(&T) -结束=結束 -反黑屏=防黑屏 +=̎Q +ID=PID +=Y̎ +(&T)=Y(&T) +=Y += ; ============================================ ; Window Manager ; ============================================ -隐藏=隱藏 -显示=顯示 -最大化=最大化 -最小化=最小化 +=[ +ʾ=@ʾ += +С=С ; ============================================ ; Screen Spy / Remote Desktop ; ============================================ -全屏=全螢幕 -控制=控制 -仅查看=僅檢視 -画质=畫質 -帧率=影格率 -黑白屏幕=黑白螢幕 -高速屏幕=高速螢幕 -极速屏幕=極速螢幕 -屏幕截图方法:=螢幕擷取方法: -图像压缩方法:=影像壓縮方法: -多显示器支持:=多螢幕支援: -退出全屏=退出全螢幕 -控制屏幕=控制螢幕 -放下面=置於下層 -透明度=透明度 -截图=擷取螢幕 +ȫ=ȫΞĻ += +鿴=Hzҕ +=| +֡=Ӱ +ڰĻ=ڰΞĻ +Ļ=ΞĻ +Ļ=OΞĻ +Ļͼ:=ΞĻXȡ: +ͼѹ:=Ӱ񉺿s: +ʾ֧:=ΞĻ֧Ԯ: +˳ȫ=˳ȫΞĻ +Ļ=ΞĻ +=Œ +͸=͸ +ͼ=XȡΞĻ ; ============================================ ; Settings Dialog ; ============================================ -常规设置=一般設定 -网络设置=網路設定 -参数设置=參數設定 -桌面管理=桌面管理 -监听端口=監聽連接埠 -监听端口:=監聽連接埠: -最大连接数=最大連線數 -最大连接数:=最大連線數: -语言=語言 -保存设置=儲存設定 -公网地址:=公網位址: -上报间隔:=回報間隔: -软件检测:=軟體偵測: -多屏上墙:=多螢幕上牆: -UDP协议参数:=UDP協定參數: -FRP 代理:=FRP 代理: -服务端口:=服務連接埠: -下载端口:=下載連接埠: -操作提示: 1.监听端口支持填写多个,用英文分号分隔;程序同时监听TCP和UDP,且支持基于UDP的KCP;=操作提示: 1.監聽連接埠支援填寫多個,用英文分號分隔;程式同時監聽TCP和UDP,且支援基於UDP的KCP; -操作提示: 2.如果被控端跨网、地区或国家,务必设置公网IP;勾选FRP反向代理并设置服务端口和 token。=操作提示: 2.如果被控端跨網、地區或國家,務必設定公網IP;勾選FRP反向代理並設定服務連接埠和 token。 +=һO +=W·O +=O += +˿=O BӲ +˿:=O BӲ: +=B +:=B: +=Z +=O +ַ:=Wλַ: +ϱ:=؈g: +:=ܛwɜy: +ǽ:=ΞĻϠ: +UDPЭ:=UDPf: +FRP :=FRP : +˿:=BӲ: +ض˿:=dBӲ: +ʾ: 1.˿֧дӢķֺŷָͬʱTCPUDPֻ֧UDPKCP=ʾ: 1.O BӲ֧ԮӢķָ̖ʽͬrO TCPUDP֧ԮUDPKCP +ʾ: 2.ض˿ңùIPѡFRP÷˿ں token=ʾ: 2.ض˿W؅^ңձOWIPxFRPKOBӲ token ; ============================================ ; Build Client Dialog ; ============================================ -服务程序:=服務程式: -架构:=架構: -模式:=模式: -未选择文件=未選擇檔案 -主控IP地址:=主控IP位址: -协议:=協定: -加密:=加密: -分组名称:=群組名稱: -加壳:=加殼: -载荷类型:=負載類型: -程序增肥:=程式增肥: -安装目录:=安裝目錄: -程序名称:=程式名稱: -下载服务=下載服務 -下载地址(默认本机):=下載位址(預設本機): -通用=通用 -高级 (非必填项)=進階 (非必填項) -提示: 多个上线地址用分号分隔,99个字符以内。仅供学习和自用,严禁用于非法目的使用。=提示: 多個上線位址用分號分隔,99個字元以內。僅供學習和自用,嚴禁用於非法目的使用。 +:=ճʽ: +ܹ:=ܘ: +ģʽ:=ģʽ: +δѡļ=δxn +IPַ:=IPλַ: +Э:=f: +:=: +:=ȺMQ: +ӿ:=Ӛ: +غ:=ؓd: +:=ʽ: +װĿ¼:=bĿ: +:=ʽQ: +ط=d +صַ(Ĭϱ):=dλַ(AOC): +ͨ=ͨ +߼ (DZ)=MA (DZ) +ʾ: ߵַ÷ֺŷָ99ַڡѧϰãϽڷǷĿʹá=ʾ: Ͼλַ÷ָ̖99ԪԃȡHWã춷ǷĿʹá ; ============================================ ; Service Manager ; ============================================ -服务名称:=服務名稱: -显示名称:=顯示名稱: -描述:=描述: -可执行文件路径=可執行檔路徑 -启动类型:=啟動類型: -服务状态:=服務狀態: -启动方式=啟動方式 -自动启动=自動啟動 -手动启动=手動啟動 -停止服务=停止服務 -启动服务=啟動服務 +:=Q: +ʾ:=@ʾQ: +:=: +ִļ·=ɈЙn· +:=: +״̬:=ՠB: +ʽ=ӷʽ +Զ=Ԅӆ +ֶ=քӆ +ֹͣ=ֹͣ +=ӷ ; ============================================ ; Audio Dialog ; ============================================ -正在监听远程声音...=正在監聽遠端聲音... -发送本地语音到远程=傳送本機語音到遠端 +ڼԶ...=ڱO h•... +ͱԶ=ͱCZh ; ============================================ ; Chat Dialog ; ============================================ -发送消息=傳送訊息 -结束交谈=結束交談 -锁定屏幕\n屏蔽功能键=鎖定螢幕\n屏蔽功能鍵 -解除锁定=解除鎖定 +Ϣ=ӍϢ +̸=YՄ +Ļ\nιܼ=iΞĻ\nιI +=i ; ============================================ ; Authorization Dialog ; ============================================ -序 列 号:=序 列 號: -授权口令:=授權密碼: -授权方式:=授權方式: -验 证 码:=驗 證 碼: -序列号:=序列號: -密 码:=密 碼: -口 令:=密 碼: -有效期:=有效期: -连接数:=連線數: + := ̖: +Ȩ:=ڙܴa: +Ȩʽ:=ڙ෽ʽ: + ֤ := C a: +к:=̖: + := a: + := a: +Ч:=Ч: +:=B: ; ============================================ ; Injection Dialog ; ============================================ -文件路径: =檔案路徑: -注入方式:=注入方式: -落地目录:=落地目錄: +ļ·: =n·: +ע뷽ʽ=ע뷽ʽ +Ŀ¼=Ŀ䛣 ; ============================================ ; Scheduled Task Dialog ; ============================================ -任务名:=工作名稱: -文件路径:=檔案路徑: -作者:=作者: -描述:=描述: +=Q +ļ·=n· +ߣ=ߣ += ; ============================================ ; New Folder Dialog ; ============================================ -请输入目录:=請輸入目錄: -另一个输入框:=另一個輸入框: -提示信息=提示資訊 -输入数据:=輸入資料: +Ŀ¼:=ՈݔĿ: +һ:=һݔ: +ʾϢ=ʾYӍ +:=ݔY: ; ============================================ ; Copy Directory Dialog ; ============================================ -原目录=原目錄 -现目录=現目錄 -命令=命令 +ԭĿ¼=ԭĿ +Ŀ¼=FĿ += ; ============================================ ; Replace Icon Dialog ; ============================================ -目标程序=目標程式 -图标文件=圖示檔案 -提示: 替换完成后,请刷新程序进行查看;如若未成功,请更换图标重试。=提示: 替換完成後,請重新整理程式進行檢視;如若未成功,請更換圖示重試。 +Ŀ=Ŀ˳ʽ +ͼļ=Dʾn +ʾ: 滻ɺˢ³в鿴δɹͼԡ=ʾ: QᣬՈʽMЙzҕδɹՈQDʾԇ ; ============================================ ; Send File Dialog ; ============================================ -发送文件(999/999):=傳送檔案(999/999): +ļ(999/999):=͙n(999/999): ; ============================================ ; Update Dialog ; ============================================ -目标程序类型:=目標程式類型: +Ŀ:=Ŀ˳ʽ: ; ============================================ ; Wallet Dialog ; ============================================ -比特币 (BTC):=比特幣 (BTC): -提示信息: 劫持并替换被控端钱包地址;总字符数最多是470,只填写所需的地址,不需要全部填满。=提示資訊: 劫持並替換被控端錢包位址;總字元數最多是470,只填寫所需的位址,不需要全部填滿。 -警告信息: 此功能仅用于开源项目之研究,用户自行承担后果,不得用于非法目的。=警告資訊: 此功能僅用於開源專案之研究,使用者自行承擔後果,不得用於非法目的。 +ر (BTC):=؎ (BTC): +ʾϢ: ٳֲ滻ضǮַַ470ֻдĵַҪȫ=ʾYӍ: ٳցKQضXλַԪ470ֻλַҪȫM +Ϣ: ˹ܽڿԴĿ֮оûгеڷǷĿġ=YӍ: ˹܃H_Դ֮оʹгГ춷ǷĿġ ; ============================================ ; Rar/Compress Dialog ; ============================================ -Rar文件名称:=Rar檔案名稱: +Rarļƣ=RarnQ ; ============================================ ; Context Menu - Client Management ; ============================================ -修改备注=修改備註 -修改分组=修改群組 -添加关注=新增關注 -客户管理=用戶管理 -转移主机=轉移主機 -分享主机=分享主機 -删除主机=刪除主機 -卸载主机=解除安裝主機 -客户代理=用戶代理 -代理映射=代理對應 -代理端口=代理連接埠 -提权运行=提權執行 -执行程序=執行程式 -下载执行=下載執行 -上传执行=上傳執行 -升级程序=升級程式 -延长授权=延長授權 -撤销授权=撤銷授權 -注入记事本=注入記事本 -机器管理=機器管理 -注销=登出 -关机=關機 -重启=重新啟動 +޸ıע=޸Ă] +޸ķ=޸ȺM +ӹע=Pע +ͻ=Ñ +ת=DC +=C +ɾ=hC +ж=bC +ͻ=Ñ +ӳ=팦 +˿=BӲ +Ȩ= +ִг=гʽ +ִ=d +ϴִ=ς +=ʽ +ӳȨ=Lڙ +Ȩ=Nڙ +ע±=עӛ± +=C +ע=dz +ػ=PC +=† ; ============================================ ; Main Menu Items ; ============================================ -设置(&S)=設定(&S) -钱包(&W)=錢包(&W) -输入口令(&I)=輸入密碼(&I) -仅生成 -> C语言数组=僅產生 -> C語言陣列 -仅生成 -> bin 文件=僅產生 -> bin 檔案 -测试 bin 文件(&T)=測試 bin 檔案(&T) -生成+混淆 -> C语言数组=產生+混淆 -> C語言陣列 -生成+混淆 -> bin 文件=產生+混淆 -> bin 檔案 -解混淆+测试 bin 文件(&D)=解混淆+測試 bin 檔案(&D) -生成+AES -> C语言数组=產生+AES -> C語言陣列 -生成+AES -> bin 文件=產生+AES -> bin 檔案 -测试 AES bin文件=測試 AES bin 檔案 -替换图标(&R)=替換圖示(&R) -刷新插件(&P)=重新整理外掛程式(&P) -口令生成(&A)=密碼產生(&A) -主控生成(&M)=主控產生(&M) -上线提醒=上線提醒 -启用日志=啟用日誌 -转发系统热键=轉送系統快捷鍵 -守护主控程序=守護主控程式 -历史主机(&C)=歷史主機(&C) -迁移数据(&D)=遷移資料(&D) -导入数据(&I)=匯入資料(&I) -获取插件(&P)=取得外掛程式(&P) -切换语言(&L)=切換語言(&L) -免责声明=免責聲明 -发送反馈=傳送回饋 -软件介绍=軟體介紹 -请求授权=請求授權 +(&S)=O(&S) +Ǯ(&W)=X(&W) +(&I)=ݔܴa(&I) + -> C=Ha -> CZ + -> bin ļ=Ha -> bin n + bin ļ(&T)=yԇ bin n(&T) ++ -> C=a+ -> CZ ++ -> bin ļ=a+ -> bin n ++ bin ļ(&D)=+yԇ bin n(&D) ++AES -> C=a+AES -> CZ ++AES -> bin ļ=a+AES -> bin n + AES binļ=yԇ AES bin n +滻ͼ(&R)=QDʾ(&R) +ˢ²(&P)=ʽ(&P) +(&A)=ܴaa(&A) +(&M)=خa(&M) +=Ͼ +־=I +תϵͳȼ=DϵyI +ػس=oسʽ +ʷ(&C)=vʷC(&C) +Ǩ(&D)=wY(&D) +(&I)=RY(&I) +ȡ(&P)=ȡʽ(&P) +л(&L)=ГQZ(&L) +=؟• +ͷ=ͻ +=ܛwB +Ȩ=Ոڙ ; ============================================ ; Build Settings Menu ; ============================================ -参数详解(&A)=參數詳解(&A) -加密 IP (&E)=加密 IP (&E) -随机名称(&R)=隨機名稱(&R) -提权安装(&P)=提權安裝(&P) -标识信息(&F)=標識資訊(&F) +(&A)=Ԕ(&A) + IP (&E)= IP (&E) +(&R)=SCQ(&R) +Ȩװ(&P)=లb(&P) +ʶϢ(&F)=RYӍ(&F) ; ============================================ ; Decrypt Menu ; ============================================ -解密(&D)=解密(&D) -Chrome 浏览器=Chrome 瀏覽器 -Edge 浏览器=Edge 瀏覽器 -360 极速浏览器=360 極速瀏覽器 -360 浏览器=360 瀏覽器 -QQ 浏览器=QQ 瀏覽器 +(&D)=(&D) +Chrome =Chrome g[ +Edge =Edge g[ +360 =360 Oٞg[ +360 =360 g[ +QQ =QQ g[ ; ============================================ ; Drawing Menu ; ============================================ -置顶窗口=置頂視窗 -半透明=半透明 -位置跟随=位置跟隨 -大小跟随=大小跟隨 -编辑=編輯 -文字=文字 -清空=清空 +ö=ҕ +͸=͸ +λø=λøS +С=СS +༭=݋ += += ; ============================================ ; Tray Menu ; ============================================ -显示=顯示 -退出=結束 +ʾ=@ʾ +˳=Y ; ============================================ ; Status Bar ; ============================================ -进度=進度 +=M ; ============================================ ; String Table ; ============================================ -远程终端=遠端終端機 -窗口管理=視窗管理 -远程桌面=遠端桌面 -文件管理=檔案管理 -语音监听=語音監聽 -视频查看=視訊檢視 -服务管理=服務管理 -注册表查看=登錄編輯程式檢視 -服务生成=服務產生 -帮助=說明 -参数配置=參數設定 +Զն=h˽K˙C +ڹ=ҕ +Զ=h +ļ=n +=ZO  +Ƶ鿴=ҕӍzҕ +=չ +ע鿴=䛾݋ʽzҕ +=ծa +=f +=O ; ============================================ ; Status Messages ; ============================================ -在线=線上 -离线=離線 -连接中=連線中 -已连接=已連線 -未连接=未連線 += +=x +=B +=B +δ=δB ; ============================================ ; Confirmation Messages ; ============================================ -确定要退出吗?=確定要結束嗎? -确定要删除选中的客户端吗?=確定要刪除選取的用戶端嗎? -连接成功=連線成功 -连接失败=連線失敗 -操作成功=操作成功 -操作失败=操作失敗 +ȷҪ˳=_ҪY᣿ +ȷҪɾѡеĿͻ=_Ҫhxȡш᣿ +ӳɹ=Bɹ +ʧ=Bʧ +ɹ=ɹ +ʧ=ʧ ; ============================================ ; MessageBox Titles ; ============================================ -提示=提示 -错误=錯誤 -警告=警告 -确认删除=確認刪除 -异常=異常 -免责声明=免責聲明 -进程结束警告=處理程序結束警告 -路径 确认拷贝到剪切板=路徑 確認複製到剪貼簿 -注意=注意 +ʾ=ʾ +=e` += +ȷɾ=_Jh +쳣= +=؟• +̽=̎Y +· ȷϿа=· _J}uN +ע=ע ; ============================================ ; MessageBox Messages - Main Dialog ; ============================================ -一个主控程序已经在运行,请检查任务管理器。=一個主控程式已經在執行,請檢查工作管理員。 -请勿HOOK此程序!=請勿HOOK此程式! -创建执行代码的子菜单失败!=建立執行程式碼的子選單失敗! -请选择一个被控程序进行升级!=請選擇一個被控程式進行升級! -确定升级选定的被控程序吗?=確定升級選定的被控程式嗎? -需受控程序支持方可生效!=需受控程式支援方可生效! -确定删除选定的被控计算机吗?=確定刪除選定的被控電腦嗎? -计算机已经被用户锁屏,程序无 SYSTEM 权限。=電腦已經被使用者鎖定螢幕,程式無 SYSTEM 權限。 -可能无法进行远程桌面控制,是否继续?=可能無法進行遠端桌面控制,是否繼續? -格式错误,请重新申请口令!=格式錯誤,請重新申請密碼! -口令错误, 无法继续操作!=密碼錯誤, 無法繼續操作! -请通过工具菜单重新输入口令。=請透過工具選單重新輸入密碼。 -口令过期,请重新申请口令!=密碼過期,請重新申請密碼! -修改FRP代理开关,需要重启当前应用程序方可生效。=修改FRP代理開關,需要重新啟動目前應用程式方可生效。 -FRP代理服务异常,需要重启当前应用程序进行重试。=FRP代理服務異常,需要重新啟動目前應用程式進行重試。 -字符串长度超出[0, 250]范围限制!=字串長度超出[0, 250]範圍限制! -备注信息长度不能超过64个字符=備註資訊長度不能超過64個字元 -请通过菜单设置当前主控程序的公网地址(域名)!=請透過選單設定目前主控程式的公網位址(網域)! -此地址会写入即将生成的主控程序中。=此位址會寫入即將產生的主控程式中。 -密码不正确,无法生成主控程序!=密碼不正確,無法產生主控程式! -密码长度不能大于15。=密碼長度不能大於15。 -读取文件失败! 请稍后再次尝试。=讀取檔案失敗! 請稍後再次嘗試。 -操作文件失败! 请稍后再次尝试。=操作檔案失敗! 請稍後再次嘗試。 -写入哈希失败! 无法生成主控。=寫入雜湊失敗! 無法產生主控。 -Explorer 未正确初始化! 请稍后再试。=Explorer 未正確初始化! 請稍後再試。 -文件对话框未成功打开! 请稍后再试。=檔案對話框未成功開啟! 請稍後再試。 -主控程序创建失败!=主控程式建立失敗! -正在UPX压缩,请关注信息提示。=正在UPX壓縮,請關注資訊提示。 -文件位于: =檔案位於: -生成成功! 文件位于:=產生成功! 檔案位於: -请将64位的DLL放于主控程序的 'Plugins' 目录,再来点击此项菜单。=請將64位元的DLL放於主控程式的 'Plugins' 目錄,再來點擊此項選單。 -密码不正确!=密碼不正確! -本软件仅限于合法、正当、合规的用途。=本軟體僅限於合法、正當、合規的用途。 -您是否同意?=您是否同意? -如需修改授权信息,请联系管理员。是否现在修改授权?=如需修改授權資訊,請聯繫管理員。是否現在修改授權? -文件打开失败! 请稍后再试。=檔案開啟失敗! 請稍後再試。 -Shellcode 执行成功! =Shellcode 執行成功! -Shellcode 执行失败! 请用本程序生成的 bin 文件进行测试! =Shellcode 執行失敗! 請用本程式產生的 bin 檔案進行測試! -Shellcode 生成成功! 请自行编写调用程序。=Shellcode 產生成功! 請自行編寫呼叫程式。 -是否测试 =是否測試 -64位=64位元 -32位=32位元 -Shellcode 二进制文件? =Shellcode 二進位檔案? -超出使用时间可输入的字符数限制!=超出使用時間可輸入的字元數限制! -确定要以管理员权限重新启动目标应用程序吗?=確定要以管理員權限重新啟動目標應用程式嗎? -此操作可能触发 UAC 账户控制。=此操作可能觸發 UAC 帳戶控制。 -超出钱包地址可输入的字符数限制!=超出錢包位址可輸入的字元數限制! -确定卸载选定的被控程序吗?=確定解除安裝選定的被控程式嗎? -分组名称长度不得超过24个字符!=群組名稱長度不得超過24個字元! -此操作需客户端具有管理员权限,确定继续吗? =此操作需用戶端具有管理員權限,確定繼續嗎? -无法读取文件!=無法讀取檔案! -文件为空或超过12MB,无法使用此功能!=檔案為空或超過12MB,無法使用此功能! -请将64位的DLL放于主控程序的 'Plugins' 目录,是否继续?=請將64位元的DLL放於主控程式的 'Plugins' 目錄,是否繼續? -没有找到在线主机: =沒有找到線上主機: -没有反黑屏插件: =沒有防黑屏外掛程式: -需要正确启用FRP反向代理方可使用此功能!=需要正確啟用FRP反向代理方可使用此功能! -请通过=請透過 -访问代理端口!=存取代理連接埠! -远程控制时,=遠端控制時, -转发系统热键到远程桌面。=轉送系統快捷鍵到遠端桌面。 -不=不 -以传统方式启动主控程序,没有守护进程。=以傳統方式啟動主控程式,沒有守護處理程序。 -如果更换主控IP,必须将主机迁移到新的主控IP名下。=如果更換主控IP,必須將主機遷移到新的主控IP名下。 -注意,更换主控程序的机器可能导致授权失效!=注意,更換主控程式的機器可能導致授權失效! -语言已切换,重启程序后生效。=語言已切換,重新啟動程式後生效。 -导入主控程序的历史主机记录。=匯入主控程式的歷史主機記錄。 -此操作会覆盖本机的历史记录,请仅在迁移主控程序时进行操作。=此操作會覆蓋本機的歷史記錄,請僅在遷移主控程式時進行操作。 +һسѾУ=һسʽѽڈУՈz鹤T +HOOK˳!=ՈHOOK˳ʽ! +ִдӲ˵ʧ!=гʽaxʧ! +ѡһس!=ՈxһسʽM! +ȷѡıس?=_xıسʽ? +ܿسַ֧Ч!=ܿسʽ֧ԮЧ! +ȷɾѡıؼ?=_hxıX? +Ѿû SYSTEM Ȩޡ=XѽʹiΞĻʽo SYSTEM ޡ +޷ԶƣǷ?=ܟoMhƣǷ^m? +ʽ!=ʽe`ՈՈܴa! +, ޷!=ܴae`, o^m! +߲ͨ˵=Ո͸^xݔܴa +ڣ!=ܴa^ڣՈՈܴa! +޸FRPأҪǰӦó򷽿Ч=޸FRP_PҪ†ĿǰóʽЧ +FRP쳣ҪǰӦóԡ=FRPծҪ†ĿǰóʽMԇ +ַȳ[0, 250]Χ!=ִLȳ[0, 250]! +עϢȲܳ64ַ=]YӍLȲܳ^64Ԫ +ͨ˵õǰسĹַ!=Ո͸^xOĿǰسʽĹWλַW! +˵ַд뼴ɵسС=λַ뼴aسʽС +벻ȷ޷س!=ܴa_oaسʽ! +볤Ȳܴ15=ܴaLȲܴ15 +ȡļʧ! Ժٴγԡ=xȡnʧ! Ոٴ·Lԇ +ļʧ! Ժٴγԡ=nʧ! Ոٴ·Lԇ +дϣʧ! ޷ء=sʧ! oaء +Explorer δȷʼ! Ժԡ=Explorer δ_ʼ! Ոԇ +ļԻδɹ! Ժԡ=nԒδɹ_! Ոԇ +س򴴽ʧ!=سʽʧ! +UPXѹעϢʾ=UPXsՈPעYӍʾ +ļλ: =nλ: +ɳɹ! ļλ:=aɹ! nλ: +뽫64λDLLس 'Plugins' Ŀ¼˵=Ո64λԪDLLسʽ 'Plugins' Ŀ䛣فcxΡ +벻ȷ!=ܴa_! +ںϷϹ;=ܛwH춺ϷҎ; +Ƿͬ⣿=Ƿͬ⣿ +޸ȨϢϵԱǷ޸Ȩ=޸ڙYӍՈ“MTǷF޸ڙࣿ +ļʧ! Ժԡ=n_ʧ! Ոԇ +Shellcode ִгɹ! =Shellcode гɹ! +Shellcode ִʧ! ñɵ bin ļв! =Shellcode ʧ! Ոñʽa bin nMМyԇ! +Shellcode ɳɹ! бдó=Shellcode aɹ! Ոогʽ +Ƿ =Ƿyԇ +64λ=64λԪ +32λ=32λԪ +Shellcode ļ? =Shellcode Mλn? +ʹʱַ!=ʹÕrgݔԪ! +ȷҪԹԱȨĿӦó?=_ҪԹT†Ŀˑóʽ? +˲ܴ UAC ˻ơ=˲|l UAC ơ +Ǯַַ!=XλַݔԪ! +ȷжѡıس?=_bxıسʽ? +ƳȲó24ַ!=ȺMQLȲó^24Ԫ! +˲ͻ˾йԱȨޣȷ? =˲Ñ˾йTޣ_^m? +޷ȡļ!=oxȡn! +ļΪջ򳬹12MB޷ʹô˹!=nջ^12MBoʹô˹! +뽫64λDLLس 'Plugins' Ŀ¼Ƿ?=Ո64λԪDLLسʽ 'Plugins' Ŀ䛣Ƿ^m? +ûҵ: =]ҵC: +ûз: =]зʽ: +ҪȷFRPʹô˹!=Ҫ_FRPʹô˹! +ͨ=Ո͸^ +ʴ˿!=ȡBӲ! +Զ̿ʱ=h˿ƕr +תϵͳȼԶ档=DϵyIh档 += +Դͳʽسûػ̡=Ԃyʽسʽ]o̎ +IP뽫ǨƵµIP¡=QIP회CwƵµIP¡ +ע⣬سĻܵȨʧЧ!=ע⣬QسʽęC܌ڙʧЧ! +лЧ=ZГQ†ӳʽЧ +سʷ¼=RسʽĚvʷCӛ䛡 +˲ḲDZʷ¼Ǩسʱв=˲wCĚvʷӛ䛣ՈHwسʽrMв ; ============================================ ; MessageBox Messages - Build Dialog ; ============================================ -Shellcode 只能向64位电脑注入,注入器也只能是64位!=Shellcode 只能向64位元電腦注入,注入器也只能是64位元! -出现内部错误,请检查输入,重新编译程序!=出現內部錯誤,請檢查輸入,重新編譯程式! -客户端版本比主控程序更高, 无法生成!=用戶端版本比主控程式更高, 無法產生! -出现内部错误,未能找到标识信息!=出現內部錯誤,未能找到標識資訊! -服务程序创建失败!=服務程式建立失敗! -文件下载地址: =檔案下載位址: -文件生成失败: =檔案產生失敗: -ShellCode 转换异常, 异常代码: =ShellCode 轉換異常, 異常代碼: -内存异常:=記憶體異常: -文件异常:=檔案異常: -其他异常:=其他異常: -安装Windows服务必须设置,客户端运行时会请求管理员权限,可能会触发系统UAC提示。=安裝Windows服務必須設定,用戶端執行時會請求管理員權限,可能會觸發系統UAC提示。 -使用 ShellCode AES 在程序尾部追加载荷,可能无法在某些服务器系统运行! =使用 ShellCode AES 在程式尾部追加載荷,可能無法在某些伺服器系統執行! -文件名不合法,请检查:=檔案名稱不合法,請檢查: -请提供载荷的下载地址。下载地址前缀为 http 或 https。=請提供載荷的下載位址。下載位址前綴為 http 或 https。 +Shellcode ֻ64λע룬עҲֻ64λ!=Shellcode ֻ64λԪXע룬עҲֻ64λԪ! +ڲ룬±!=FȲe`Ոzݔ룬¾gʽ! +ͻ˰汾س, ޷!=Ñ˰汾سʽ, oa! +ڲδҵʶϢ!=FȲe`δҵRYӍ! +򴴽ʧ!=ճʽʧ! +ļصַ: =ndλַ: +ļʧ: =naʧ: +ShellCode ת쳣, 쳣: =ShellCode DQ, a: +ڴ쳣:=ӛw: +ļ쳣:=n: +쳣:=: +װWindowsãͻʱԱȨޣܻᴥϵͳUACʾ=bWindowsձOÑˈЕrՈTޣܕ|lϵyUACʾ +ʹ ShellCode AES ڳβ׷غɣ޷ijЩϵͳ! =ʹ ShellCode AES ڳʽβ׷dɣܟoijЩŷϵy! +ļϷ飺=nQϷՈz飺 +ṩغɵصַصַǰ׺Ϊ http https=ՈṩdɵdλַdλַǰY http https ; ============================================ ; MessageBox Messages - Password Dialog ; ============================================ -请确认是否正确设置公网地址(IP或域名)?=請確認是否正確設定公網位址(IP或網域)? -您输入的密码不正确,无法生成口令!=您輸入的密碼不正確,無法產生密碼! +ȷǷȷùַIP=Ո_JǷ_OWλַIPW򣩣 +벻ȷ޷ɿ!=ݔܴa_oaܴa! ; ============================================ ; MessageBox Messages - RC Edit Dialog ; ============================================ -请选择目标应用程序!=請選擇目標應用程式! -请选择[*.ico]图标文件!=請選擇[*.ico]圖示檔案! -解压程序失败,无法替换图标!=解壓縮程式失敗,無法替換圖示! -替换图标失败,错误代码: =替換圖示失敗,錯誤代碼: +ѡĿӦó!=ՈxĿˑóʽ! +ѡ[*.ico]ͼļ!=Ոx[*.ico]Dʾn! +ѹʧܣ޷滻ͼ!=≺sʽʧoQDʾ! +滻ͼʧܣ: =QDʾʧe`a: ; ============================================ ; MessageBox Messages - File Manager ; ============================================ -文件夹为空=資料夾為空 -压缩失败: =壓縮失敗: -解压失败: =解壓縮失敗: -请先选择要压缩的文件或文件夹!=請先選擇要壓縮的檔案或資料夾! -请先选择要解压的.zsta文件!=請先選擇要解壓縮的.zsta檔案! -文件创建失败=檔案建立失敗 -文件写入失败!=檔案寫入失敗! -请拖拽到文件管理器选定目录中=請拖曳到檔案管理器選定目錄中 -请选择文件!=請選擇檔案! -ZIP压缩完成=ZIP壓縮完成 -请选择目录!=請選擇目錄! -搜索关键词太长=搜尋關鍵字太長 +ļΪ=YϊA +ѹʧ: =sʧ: +ѹʧ: =≺sʧ: +ѡҪѹļļ!=ՈxҪsęnYϊA! +ѡҪѹ.zstaļ!=ՈxҪ≺s.zstan! +ļʧ=nʧ +ļдʧ!=nʧ! +קļѡĿ¼=ՈҷnxĿ +ѡļ=Ոxn +ZIPѹ=ZIPs +ѡĿ¼=ՈxĿ䛣 +ؼ̫=ьPI̫L ; ============================================ ; MessageBox Messages - System Dialog ; ============================================ -只能同时向一个进程进行代码注入!=只能同時向一個處理程序進行程式碼注入! -确定要向目标进程 (仅限64位) 进行代码注入吗?=確定要向目標處理程序 (僅限64位元) 進行程式碼注入嗎? -此操作可能被安全软件阻止,或导致进程崩溃!=此操作可能被安全軟體阻止,或導致處理程序當機! -只能同时向一个进程进行反黑屏操作!=只能同時向一個處理程序進行防黑屏操作! -确定要向目标进程进行反黑屏吗?=確定要向目標處理程序進行防黑屏嗎? -请确保目标进程、DLL及被控端架构务必相同!=請確保目標處理程序、DLL及被控端架構務必相同! +ֻͬʱһ̽дע!=ֻͬrһ̎Mгʽaע! +ȷҪĿ (64λ) дע?=_ҪĿ̎ (H64λԪ) Mгʽaע? +˲ܱȫֹ½̱!=˲ܱȫܛwֹ̎򮔙C! +ֻͬʱһ̽з!=ֻͬrһ̎Mз! +ȷҪĿ̽з?=_ҪĿ̎Mз? +ȷĿ̡DLLض˼ܹͬ!=Ո_Ŀ̎DLLض˼ܘձͬ! ; ============================================ ; MessageBox Messages - Other Dialogs ; ============================================ -初始化代理服务器失败!=初始化代理伺服器失敗! -创建录像文件失败:=建立錄影檔案失敗: -错误代码: =錯誤代碼: -文件保存失败:=檔案儲存失敗: -已复制数据到剪切板!=已複製資料到剪貼簿! -确定要卸载该程序?=確定要解除安裝該程式? +ʼʧ!=ʼŷʧ! +¼ļʧ:=Ӱnʧ: +: =e`a: +ļʧܣ=nʧ +Ѹݵа!=}uYϵN! +ȷҪжظó?=_Ҫbԓʽ? ; ============================================ ; List Columns - File Manager ; ============================================ -名称=名稱 -类型=類型 -总大小=總大小 -可用空间=可用空間 -修改日期=修改日期 -文件路径=檔案路徑 +=Q += +ܴС=С +ÿռ=ÿg +޸=޸ +ļ·=n· ; ============================================ ; List Columns - Process/Window Manager ; ============================================ -映像名称=映像名稱 +ӳ=ӳQ PID=PID -程序路径=程式路徑 -架构=架構 -句柄=控制代碼 -窗口名称=視窗名稱 -窗口状态=視窗狀態 -所属进程ID=所屬處理程序ID +·=ʽ· +ܹ=ܘ +=ƴa +=ҕQ +״̬=ҕB +ID=̎ID ; ============================================ ; List Columns - Service Manager ; ============================================ -真实名称=真實名稱 -显示名称=顯示名稱 -启动类型=啟動類型 -运行状态=執行狀態 -可执行文件路径=可執行檔路徑 +ʵ=挍Q +ʾ=@ʾQ += +״̬=РB +ִļ·=ɈЙn· ; ============================================ ; List Columns - Registry Manager ; ============================================ -数据=資料 +=Y ; ============================================ ; List Columns - Machine Dialog ; ============================================ -优先级=優先順序 -线程数=執行緒數 -用户名=使用者名稱 -内存=記憶體 -文件大小=檔案大小 -句柄HWND=控制代碼HWND -进程名=處理程序名稱 -进程位数=處理程序位元數 -协议=協定 -本地地址:端口=本機位址:連接埠 -远程地址:端口=遠端位址:連接埠 -目标IP归属地=目標IP歸屬地 -连接状态=連線狀態 -软件名称=軟體名稱 -发行商=發行商 -安装时间=安裝時間 -卸载命令及参数=解除安裝命令及參數 -访问时间=存取時間 -标题=標題 -网页地址=網頁位址 -收藏名称=我的最愛名稱 +ȼ= +߳=оw +û=ʹQ +ڴ=ӛw +ļС=nС +HWND=ƴaHWND +=̎Q +λ=̎λԪ +Э=f +صַ:˿=Cλַ:BӲ +Զ̵ַ:˿=hλַ:BӲ +ĿIP=ĿIPwٵ +״̬=BB +=ܛwQ +=l +װʱ=brg +ж=b +ʱ=ȡrg +=} +ҳַ=Wλַ +ղ=ҵQ Url=Url -描述=描述 -状态=狀態 -登陆身份=登入身分 -桌面交互=桌面互動 -服务名=服務名稱 -目录=目錄 -任务名称=工作名稱 -最后执行时间=上次執行時間 -下次执行时间=下次執行時間 += +״̬=B +½= +潻=滥 +=Q +Ŀ¼=Ŀ +=Q +ִʱ=ϴΈЕrg +´ִʱ=´ΈЕrg ; ============================================ ; ComboBox Items - Build Dialog ; ============================================ -TestRun - 磁盘DLL=TestRun - 磁碟DLL -TestRun - 内存DLL=TestRun - 記憶體DLL -TestRun - 注入任务管理器=TestRun - 注入工作管理員 -ghost.exe - Windows 服务=ghost.exe - Windows 服務 -TestRun - Windows 服务=TestRun - Windows 服務 -选择文件=選擇檔案 -随机上线=隨機上線 -并发上线=並行上線 -随机=隨機 -无=無 -载荷写入当前程序尾部=載荷寫入目前程式尾部 -载荷写入单独的二进制文件=載荷寫入單獨的二進位檔案 -载荷写入 BMP 格式图片=載荷寫入 BMP 格式圖片 -载荷写入 JPG 格式图片=載荷寫入 JPG 格式圖片 -载荷写入 PNG 格式图片=載荷寫入 PNG 格式圖片 -载荷写入 ZIP 压缩包=載荷寫入 ZIP 壓縮檔 -载荷写入 PDF 文件=載荷寫入 PDF 檔案 +TestRun - DLL=TestRun - ŵDLL +TestRun - ڴDLL=TestRun - ӛwDLL +TestRun - ע=TestRun - ע빤T +ghost.exe - Windows =ghost.exe - Windows +TestRun - Windows =TestRun - Windows +ѡļ=xn +=SCϾ +=KϾ +=SC +=o +غд뵱ǰβ=dɌĿǰʽβ +غд뵥Ķļ=dɌΪĶMλn +غд BMP ʽͼƬ=dɌ BMP ʽDƬ +غд JPG ʽͼƬ=dɌ JPG ʽDƬ +غд PNG ʽͼƬ=dɌ PNG ʽDƬ +غд ZIP ѹ=dɌ ZIP sn +غд PDF ļ=dɌ PDF n ; ============================================ ; ComboBox Items - Password Dialog ; ============================================ -计算机硬件信息=電腦硬體資訊 -主控IP或域名信息=主控IP或網域資訊 +ӲϢ=XӲwYӍ +IPϢ=IPWYӍ ; ============================================ ; ComboBox Items - Settings Dialog ; ============================================ -灰度图像传输=灰階影像傳輸 -屏幕差异算法=螢幕差異演算法 -H264压缩算法=H264壓縮演算法 -电报=Telegram +Ҷͼ=AӰݔ +Ļ㷨=ΞĻ㷨 +H264ѹ㷨=H264s㷨 +籨=Telegram ; ============================================ ; ComboBox Items - Inject Dialog ; ============================================ -CreateRemoteThread(落地反射注入)=CreateRemoteThread(落地反射注入) -QueueUserAPC(落地反射注入)=QueueUserAPC(落地反射注入) -NtCreateThreadEx(落地反射注入)=NtCreateThreadEx(落地反射注入) -CreateRemoteThread(shellcode注入)=CreateRemoteThread(shellcode注入) -QueueUserAPC(shellcode注入)=QueueUserAPC(shellcode注入) -NtCreateThreadEx(shellcode注入)=NtCreateThreadEx(shellcode注入) +CreateRemoteThread(طע)=CreateRemoteThread(طע) +QueueUserAPC(طע)=QueueUserAPC(طע) +NtCreateThreadEx(طע)=NtCreateThreadEx(طע) +CreateRemoteThread(shellcodeע)=CreateRemoteThread(shellcodeע) +QueueUserAPC(shellcodeע)=QueueUserAPC(shellcodeע) +NtCreateThreadEx(shellcodeע)=NtCreateThreadEx(shellcodeע) ; ============================================ ; ComboBox Items - Service Info Dialog ; ============================================ -自动=自動 -手动=手動 -已禁用=已停用 +Զ=Ԅ +ֶ=ք +ѽ=ͣ ; ============================================ ; Menu Items - Main Dialog ; ============================================ -序列号=序列號 -操作指导=操作指導 -执行代码=執行程式碼 +к=̖ +ָ=ָ +ִд=гʽa ; ============================================ ; Menu Items - Screen Spy Dialog ; ============================================ -刷新(&F)=重新整理(&F) -控制屏幕(&Y)=控制螢幕(&Y) -保存快照(&S)=儲存快照(&S) -录像(MJPEG)=錄影(MJPEG) -录像(H264)=錄影(H264) -获取剪贴板(&R)=取得剪貼簿(&R) -设置剪贴板(&L)=設定剪貼簿(&L) -修复分辨率(&G)=修復解析度(&G) -清晰度低60/100=清晰度低60/100 -清晰度中85/100=清晰度中85/100 -清晰度高100/100=清晰度高100/100 -打开-文件管理(&B)=開啟-檔案管理(&B) -打开-运行(&H)=開啟-執行(&H) -打开-Powershell(&N)=開啟-Powershell(&N) -打开-Chrome(&I)=開啟-Chrome(&I) -打开-Edge(&M)=開啟-Edge(&M) -打开-Brave(&D)=開啟-Brave(&D) -打开-Firefox(&V)=開啟-Firefox(&V) -打开-Iexplore(&Z)=開啟-Iexplore(&Z) -自定义CMD命令(&y)=自訂CMD命令(&y) -高级自定义命令(&O)=進階自訂命令(&O) -清理后台(&J)=清理後台(&J) -全屏(&F)=全螢幕(&F) -使用远程光标(&C)=使用遠端游標(&C) -自适应窗口大小(&A)=自適應視窗大小(&A) -跟踪被控端鼠标(&T)=追蹤被控端滑鼠(&T) -锁定被控端鼠标和键盘(&L)=鎖定被控端滑鼠和鍵盤(&L) -切换显示器(&1)=切換顯示器(&1) -多线程压缩(&2)=多執行緒壓縮(&2) -原始分辨率(&3)=原始解析度(&3) -限制为1080P(&4)=限制為1080P(&4) -最大帧率FPS:10=最大影格率FPS:10 -最大帧率FPS:15=最大影格率FPS:15 -最大帧率FPS:20=最大影格率FPS:20 -最大帧率FPS:25=最大影格率FPS:25 -最大帧率FPS:30=最大影格率FPS:30 -最大帧率无限制=最大影格率無限制 -帧率设置=影格率設定 +ˢ(&F)=(&F) +Ļ(&Y)=ΞĻ(&Y) +(&S)=(&S) +¼(MJPEG)=Ӱ(MJPEG) +¼(H264)=Ӱ(H264) +ȡ(&R)=ȡüN(&R) +ü(&L)=ON(&L) +޸ֱ(&G)=ޏͽ(&G) +ȵ60/100=ȵ60/100 +85/100=85/100 +ȸ100/100=ȸ100/100 +-ļ(&B)=_-n(&B) +-(&H)=_-(&H) +-Powershell(&N)=_-Powershell(&N) +-Chrome(&I)=_-Chrome(&I) +-Edge(&M)=_-Edge(&M) +-Brave(&D)=_-Brave(&D) +-Firefox(&V)=_-Firefox(&V) +-Iexplore(&Z)=_-Iexplore(&Z) +ԶCMD(&y)=ӆCMD(&y) +߼Զ(&O)=MAӆ(&O) +̨(&J)=̨(&J) +ȫ(&F)=ȫΞĻ(&F) +ʹԶ̹(&C)=ʹhΘ(&C) +ӦڴС(&A)=mҕС(&A) +ٱض(&T)=׷ۙض˻(&T) +ضͼ(&L)=iض˻IP(&L) +лʾ(&1)=ГQ@ʾ(&1) +߳ѹ(&2)=оws(&2) +ԭʼֱ(&3)=ԭʼ(&3) +Ϊ1080P(&4)=ƞ1080P(&4) +֡FPS:10=ӰFPS:10 +֡FPS:15=ӰFPS:15 +֡FPS:20=ӰFPS:20 +֡FPS:25=ӰFPS:25 +֡FPS:30=ӰFPS:30 +֡=Ӱʟo +֡=ӰO ; ============================================ ; Menu Items - Keyboard Dialog ; ============================================ -离线记录(&O)=離線記錄(&O) -清空记录(&C)=清空記錄(&C) -保存记录(&S)=儲存記錄(&S) +߼¼(&O)=xӛ(&O) +ռ¼(&C)=ӛ(&C) +¼(&S)=ӛ(&S) ; ============================================ ; Menu Items - Video Dialog ; ============================================ -视频压缩(&C)=視訊壓縮(&C) -保存录像(&V)=儲存錄影(&V) +Ƶѹ(&C)=ҕӍs(&C) +¼(&V)=Ӱ(&V) ; ============================================ ; Menu Items - File Manager Dialog ; ============================================ -分区高级搜索=分區進階搜尋 -下载(附带目录结构)=下載(附帶目錄結構) -打开文件位置=開啟檔案位置 +߼=օ^MAь +(Ŀ¼ṹ)=d(Ŀ䛽Y) +ļλ=_nλ ; ============================================ ; Menu Items - Proxy Dialog ; ============================================ -代理打开Chrome(请关闭所有Chrome进程)(&P)=代理開啟Chrome(請關閉所有Chrome處理程序)(&P) +Chrome(رChrome)(&P)=_Chrome(ՈP]Chrome̎)(&P) ; ============================================ ; Menu Items - Machine Dialog ; ============================================ -刷新数据(&F)=重新整理資料(&F) -复制数据(&V)=複製資料(&V) -删除文件(&C)=刪除檔案(&C) -结束进程(&E)=結束處理程序(&E) -冻结进程(&D)=凍結處理程序(&D) -解冻进程(&J)=解凍處理程序(&J) -强删文件(&Q)=強制刪除檔案(&Q) -注入管理(&I)=注入管理(&I) -还原窗口(&H)=還原視窗(&H) -隐藏窗口(&Y)=隱藏視窗(&Y) -关闭窗口(&E)=關閉視窗(&E) -最 大 化(&M)=最大化(&M) -最 小 化(&I)=最小化(&I) -卸载程序(&X)=解除安裝程式(&X) -&(R)执行任务=&(R)執行工作 -&(T)停止任务=&(T)停止工作 -&(D)删除任务=&(D)刪除工作 -&(C)创建任务=&(C)建立工作 -&(F)刷新任务=&(F)重新整理工作 -启动(&S)=啟動(&S) -停止(&O)=停止(&O) -暂停(&U)=暫停(&U) -恢复(&M)=恢復(&M) -重新启动(&E)=重新啟動(&E) -刷新(&R)=重新整理(&R) -属性(&R)=內容(&R) -删除服务(&D)=刪除服務(&D) -修改远程文件(&S)=修改遠端檔案(&S) -加载本地文件(&S)=載入本機檔案(&S) -结束进程(&C)=結束處理程序(&C) +ˢ(&F)=Y(&F) +(&V)=}uY(&V) +ɾļ(&C)=hn(&C) +(&E)=Y̎(&E) +(&D)=Y̎(&D) +ⶳ(&J)=̎(&J) +ǿɾļ(&Q)=Ƅhn(&Q) +ע(&I)=ע(&I) +ԭ(&H)=߀ԭҕ(&H) +ش(&Y)=[ҕ(&Y) +رմ(&E)=P]ҕ(&E) + (&M)=(&M) + С (&I)=С(&I) +жس(&X)=bʽ(&X) +&(R)ִ=&(R)й +&(T)ֹͣ=&(T)ֹͣ +&(D)ɾ=&(D)h +&(C)=&(C) +&(F)ˢ=&(F) +(&S)=(&S) +ֹͣ(&O)=ֹͣ(&O) +ͣ(&U)=ͣ(&U) +ָ(&M)=֏(&M) +(&E)=†(&E) +ˢ(&R)=(&R) +(&R)=(&R) +ɾ(&D)=h(&D) +޸Զļ(&S)=޸h˙n(&S) +رļ(&S)=d뱾Cn(&S) +(&C)=Y̎(&C) ; ============================================ ; FormatL - Dialog Title Formats ; ============================================ -%s - 语音监听=%s - 語音監聽 -%s - 画板演示=%s - 繪圖板展示 -%s - 解密数据=%s - 解密資料 -%s - 文件管理=%s - 檔案管理 -%s - 远程虚拟屏幕 %d×%d=%s - 遠端虛擬桌面 %d×%d -%s - 键盘记录=%s - 鍵盤記錄 -%s - 注册表管理=%s - 登錄編輯程式管理 -%s - 远程桌面控制 %d×%d=%s - 遠端桌面控制 %d×%d -%s - 代理服务=%s - 代理服務 -%s - 服务管理=%s - 服務管理 -%s - 远程终端=%s - 遠端終端機 -%s - 进程管理=%s - 處理程序管理 -%s - 窗口管理=%s - 視窗管理 -%s - 视频管理 %d×%d=%s - 視訊管理 %d×%d -远程交谈 - %s=遠端交談 - %s -文件管理 - %s=檔案管理 - %s -主机管理 - %s=主機管理 - %s +%s - =%s - ZO  +%s - ʾ=%s - LDչʾ +%s - =%s - Y +%s - ļ=%s - n +%s - ԶĻ %d%d=%s - h̓M %d%d +%s - ̼¼=%s - IPӛ +%s - ע=%s - 䛾݋ʽ +%s - Զ %d%d=%s - h %d%d +%s - =%s - +%s - =%s - չ +%s - Զն=%s - h˽K˙C +%s - ̹=%s - ̎ +%s - ڹ=%s - ҕ +%s - Ƶ %d%d=%s - ҕӍ %d%d +Զ̸̽ - %s=h˽Մ - %s +ļ - %s=n - %s + - %s=C - %s ; ============================================ ; FormatL - Status Messages ; ============================================ -有%d个主机在线=有%d台主機在線 -监听端口: %s成功=監聽連接埠: %s成功 -发送文件(%d/%d): %.2f%%=傳送檔案(%d/%d): %.2f%% -接收文件(%d/%d): %.2f%%=接收檔案(%d/%d): %.2f%% -%s (%d台设备)=%s (%d台裝置) -服务个数:%d=服務個數:%d -程序个数 / %d=程式個數 / %d -窗口名称 窗口个数【%d】=視窗名稱 視窗個數【%d】 -程序路径 / %d=程式路徑 / %d -窗口名称 / %d=視窗名稱 / %d -无权限或无数据=無權限或無資料 -共 %d 个服务=共 %d 個服務 -已经搜索 %d 请勿再次搜索=已經搜尋 %d 請勿再次搜尋 -共搜索到 %d 个=共搜尋到 %d 個 -软件有效期限: %s — %s, 并发连接数量: %d.=軟體有效期限: %s — %s, 並行連線數量: %d. +%d=%d̨Cھ +˿: %sɹ=O BӲ: %sɹ +ļ(%d/%d): %.2f%%=͙n(%d/%d): %.2f%% +ļ(%d/%d): %.2f%%=ՙn(%d/%d): %.2f%% +%s (%d̨豸)=%s (%d̨b) +:%d=Ղ:%d + / %d=ʽ / %d + ڸ%d=ҕQ ҕ%d +· / %d=ʽ· / %d + / %d=ҕQ / %d +Ȩ޻=o޻oY + %d = %d +Ѿ %d ٴ=ѽь %d Ոٴь + %d =ь %d +Ч: %s %s, : %d.=ܛwЧ: %s %s, KB: %d. ; ============================================ ; FormatL - Confirmation Messages ; ============================================ -确定要将这 %d 项删除吗?=確定要將這 %d 項刪除嗎? -确实要删除文件夹"%s"并将所有内容删除吗?=確實要刪除資料夾「%s」並將所有內容刪除嗎? -确实要把"%s"删除吗?=確實要把「%s」刪除嗎? -此文件夹已包含一个名为"%s"的文件=此資料夾已包含一個名為「%s」的檔案 -%s确实\n想终止这%d项进程吗?=%s確實\n想終止這%d項處理程序嗎? -%s确实\n想终止该项进程吗?=%s確實\n想終止該項處理程序嗎? +ȷҪ %d ɾ?=_Ҫ@ %d 헄h? +ȷʵҪɾļ"%s"ɾ?=_ҪhYϊA%sKЃ݄h? +ȷʵҪ"%s"ɾ?=_Ҫѡ%sh? +ļѰһΪ"%s"ļ=YϊAѰһ顸%sęn +%sȷʵ\nֹ%d?=%s_\nKֹ@%d̎? +%sȷʵ\nֹ?=%s_\nKֹԓ̎? ; ============================================ ; FormatL - Info Panel ; ============================================ -\r\n进程 PID: %s %s=\r\n處理程序 PID: %s %s -文件路径: %s%s %s%s\r\n系统信息: %s 位 %s 核心 %s GB %s\r\n启动信息: %s %s %s%s %s\r\n上线信息: %s %d %s\r\n客户信息: %s=檔案路徑: %s%s %s%s\r\n系統資訊: %s 位元 %s 核心 %s GB %s\r\n啟動資訊: %s %s %s%s %s\r\n上線資訊: %s %d %s\r\n用戶資訊: %s +\r\n PID: %s %s=\r\n̎ PID: %s %s +ļ·: %s%s %s%s\r\nϵͳϢ: %s λ %s %s GB %s\r\nϢ: %s %s %s%s %s\r\nϢ: %s %d %s\r\nͻϢ: %s=n·: %s%s %s%s\r\nϵyYӍ: %s λԪ %s %s GB %s\r\nYӍ: %s %s %s%s %s\r\nϾYӍ: %s %d %s\r\nÑYӍ: %s ; ============================================ ; FormatL - Proxy Dialog ; ============================================ -SOCKS 代理软件请设置服务器为: <127.0.0.1:%d>\r\n=SOCKS 代理軟體請設定伺服器為: <127.0.0.1:%d>\r\n +SOCKS ÷Ϊ: <127.0.0.1:%d>\r\n=SOCKS ܛwՈOŷ: <127.0.0.1:%d>\r\n ; ============================================ ; _TR - Additional Dialog Init/Prompt Strings ; ============================================ -操作错误=操作錯誤 -内部错误=內部錯誤 -使用提示=使用提示 -严禁用于非法侵入、控制、监听他人设备等违法行为=嚴禁用於非法侵入、控制、監聽他人裝置等違法行為 -有=有 -主机下线=主機離線 -UPX 处理完成=UPX 處理完成 -主控生成=主控產生 -当前主控程序的密码:=目前主控程式的密碼: -主控密码=主控密碼 -新的主控程序的密码:=新的主控程式的密碼: -使用天数=使用天數 -新主控程序使用天数:=新主控程式使用天數: -需要密码=需要密碼 -主控程序授权天数:=主控程式授權天數: -并发上线机器数量:=並行上線機器數量: -序列号(唯一ID):=序列號(唯一ID): -断开连接=中斷連線 -请输入分组名称:=請輸入群組名稱: -远程下载地址:=遠端下載位址: -请将EXE放在"Payloads"目录或输入下载地址。=請將EXE放在「Payloads」目錄或輸入下載位址。 -可执行文件 (*.exe)|*.exe||=可執行檔 (*.exe)|*.exe|| -请输入客户端端口:=請輸入用戶端連接埠: -达到最大连接数=達到最大連線數 +=e` +ڲ=Ȳe` +ʹʾ=ʹʾ +ϽڷǷ롢ơ豸ΥΪ=춷Ƿ롢ơO bõ`О += +=Cx +UPX =UPX ̎ +=خa +ǰس:=Ŀǰسʽܴa: +=ܴa +µس:=µسʽܴa: +ʹ=ʹ씵 +سʹ:=سʽʹ씵: +Ҫ=Ҫܴa +سȨ:=سʽڙ씵: +߻:=KϾC: +к(ΨһID):=̖(ΨһID): +Ͽ=ДB +:=ՈݔȺMQ: +Զصַ:=hdλַ: +뽫EXE"Payloads"Ŀ¼صַ=ՈEXEڡPayloadsĿ䛻ݔdλַ +ִļ (*.exe)|*.exe||=ɈЙn (*.exe)|*.exe|| +ͻ˶˿:=ՈݔÑBӲ: +ﵽ=_B ; ============================================ ; _TRF - Format Strings ; ============================================ -达到最大连接数限制: %lu, 请释放连接=達到最大連線數限制: %lu, 請釋放連線 +ﵽ: %lu, ͷ=_B: %lu, ՈጷB ; ============================================ ; _L - Expression Strings ; ============================================ -授权成功=授權成功 -版本不支持=版本不支援 -客户端版本最低要求: =用戶端版本最低要求: -以"服务+代理"形式启动主控程序,会开机自启及被守护。=以「服務+代理」形式啟動主控程式,會開機自啟及被守護。 +Ȩɹ=ڙɹ +汾֧=汾֧Ԯ +ͻ˰汾Ҫ: =Ñ˰汾Ҫ: +"+"ʽس򣬻Ὺػ=ԡ+ʽسʽ_CԆo ; ============================================ ; New Strings - 2015Remote.cpp ; ============================================ -启动TCP服务失败: =啟動TCP服務失敗: -。错误码: =。錯誤碼: -启动UDP服务失败: =啟動UDP服務失敗: +TCPʧ: =TCPʧ: +: =e`a: +UDPʧ: =UDPʧ: ; ============================================ ; New Strings - 2015RemoteDlg.cpp ; ============================================ -禁界: 远程协助软件=禁界: 遠端協助軟體 -软件初始化成功...=軟體初始化成功... -主机上线=主機上線 -授权提醒=授權提醒 -程序可能有使用限制,请联系管理员请求授权=程式可能有使用限制,請聯繫管理員請求授權 -下载服务启动失败,可能是端口被占用了。=下載服務啟動失敗,可能是連接埠被佔用了。 -调用函数StartServer失败! 错误代码:=呼叫函式StartServer失敗! 錯誤代碼: -\r\n是否关闭以下进程重试: =\r\n是否關閉以下處理程序重試: -压缩为 ZSTA 文件=壓縮為 ZSTA 檔案 -解压 ZSTA 文件=解壓縮 ZSTA 檔案 -ZSTA 压缩文件=ZSTA 壓縮檔案 +: ԶЭ=: h˅fܛw +ʼɹ...=ܛwʼɹ... +=CϾ +Ȩ=ڙ +ʹƣϵԱȨ=ʽʹƣՈ“MTՈڙ +طʧܣǶ˿ڱռˡ=dՆʧBӲˡ +úStartServerʧ! :=кʽStartServerʧ! e`a: +\r\nǷر½: =\r\nǷP]̎ԇ: +ѹΪ ZSTA ļ=s ZSTA n +ѹ ZSTA ļ=≺s ZSTA n +ZSTA ѹļ=ZSTA sn ; ============================================ ; New Strings - Chat.cpp ; ============================================ -提示: 对方聊天对话框在发送消息后才会弹出=提示: 對方聊天對話框在傳送訊息後才會彈出 +ʾ: ԷԻڷϢŻᵯ=ʾ: 쌦ԒڂӍϢŕ ; ============================================ ; New Strings - RegisterDlg.cpp ; ============================================ -(默认)=(預設) -(数据未设置值)=(資料未設定值) +(Ĭ)=(AO) +(δֵ)=(YδOֵ) ; ============================================ ; New Strings - sys\MachineDlg.cpp ; ============================================ -网络连接=網路連線 -软件信息=軟體資訊 -浏览记录=瀏覽記錄 -收 藏 夹=我的最愛 -WIN32服务=Win32服務 -驱动服务=驅動服務 -计划任务=排程工作 -就绪=就緒 -实时=即時 -高=高 -高于标准=高於標準 -标准=標準 -低于标准=低於標準 -空闲=閒置 -未知=未知 -正在接收数据 - 请稍后...=正在接收資料 - 請稍後... -发送还原命令=傳送還原命令 -发送隐藏命令=傳送隱藏命令 -发送关闭命令=傳送關閉命令 -发送最大化命令=傳送最大化命令 -发送最小化命令=傳送最小化命令 -选择文件=選擇檔案 +=W·B +Ϣ=ܛwYӍ +¼=g[ӛ + =ҵ +WIN32=Win32 +=ӷ +ƻ=ų̹ +=;w +ʵʱ=r += +ڱ׼=춘˜ +׼=˜ +ڱ׼=춘˜ +=f +δ֪=δ֪ +ڽ - Ժ...=ڽY - Ո... +ͻԭ=߀ԭ +=[ +͹ر=P] += +С=С +ѡļ=xn ; ============================================ ; New Strings - BuildDlg.cpp ; ============================================ -\r\n提示: 请生成"ServerDll.dll",以便程序正常运行。=\r\n提示: 請產生「ServerDll.dll」,以便程式正常執行。 -\n提示: 使用KCP协议生成服务,必须设置主控UDP协议参数为1。=\n提示: 使用KCP協定產生服務,必須設定主控UDP協定參數為1。 +\r\nʾ: "ServerDll.dll"ԱС=\r\nʾ: ՈaServerDll.dllԱʽС +\nʾ: ʹKCPЭɷ񣬱UDPЭΪ1=\nʾ: ʹKCPfaգOUDPf1 ; ============================================ ; New Strings - file\CFileManagerDlg.cpp ; ============================================ -远程计算机:磁盘列表=遠端電腦:磁碟清單 -共享=共用 -压缩完成=壓縮完成 -请选择上传路径: =請選擇上傳路徑: -请选择下载路径: =請選擇下載路徑: -文件上传=檔案上傳 -文件下载=檔案下載 -正在搜索...=正在搜尋... -重新搜索=重新搜尋 -远程目录:%s=遠端目錄:%s -准备粘贴=準備貼上 -开始压缩,不要关闭窗口,其他操作继续=開始壓縮,不要關閉視窗,其他操作繼續 -删除目录:%s (完成)=刪除目錄:%s (完成) -删除文件:%s (完成)=刪除檔案:%s (完成) -搜索完毕 共:%d 个文件=搜尋完畢 共:%d 個檔案 +Զ̼б=hXŵ += +ѹ=s +ѡϴ·: =Ոxς·: +ѡ·: =Ոxd·: +ļϴ=nς +ļ=nd +...=ь... +=ь +ԶĿ¼%s=hĿ䛣%s +׼ճ=ʂN +ʼѹҪرմڣ=_ʼsҪP]ҕ^m +ɾĿ¼%s ()=hĿ䛣%s () +ɾļ%s ()=hn%s () + %d ļ=ьꮅ %d n ; ============================================ ; New Strings - FileManagerDlg.cpp ; ============================================ -传送文件=傳送檔案 -接收文件=接收檔案 -本地:装载目录 %s 完成=本機:載入目錄 %s 完成 -远程:装载目录 %s 完成=遠端:載入目錄 %s 完成 -本地:装载目录 %s\*.* 完成=本機:載入目錄 %s\*.* 完成 -远程:装载目录 %s\*.* 完成=遠端:載入目錄 %s\*.* 完成 -远程:删除目录 %s\*.* 完成=遠端:刪除目錄 %s\*.* 完成 -远程:删除文件 %s 完成=遠端:刪除檔案 %s 完成 -远程:删除目录 %s (完成)=遠端:刪除目錄 %s (完成) -远程:删除文件 %s (完成)=遠端:刪除檔案 %s (完成) +ļ=͙n +ļ=ՙn +أװĿ¼ %s =CdĿ %s +Զ̣װĿ¼ %s =hˣdĿ %s +أװĿ¼ %s\*.* =CdĿ %s\*.* +Զ̣װĿ¼ %s\*.* =hˣdĿ %s\*.* +Զ̣ɾĿ¼ %s\*.* =hˣhĿ %s\*.* +Զ̣ɾļ %s =hˣhn %s +Զ̣ɾĿ¼ %s ()=hˣhĿ %s () +Զ̣ɾļ %s ()=hˣhn %s () ; ============================================ ; New Strings - SystemDlg.cpp ; ============================================ -警告: 终止进程会导致不希望发生的结果,\n包括数据丢失和系统不稳定。在被终止前,\n进程将没有机会保存其状态和数据。=警告: 終止處理程序會導致不希望發生的結果,\n包括資料遺失和系統不穩定。在被終止前,\n處理程序將沒有機會儲存其狀態和資料。 +: ֹ̻ᵼ²ϣĽ\nݶʧϵͳȶڱֹǰ\n̽ûлᱣ״̬ݡ=: Kֹ̎²ϣlĽY\nYzʧϵyڱKֹǰ\n̎򌢛]ЙCBYϡ ; ============================================ ; New Strings - CClientListDlg.cpp ; ============================================ -计算机名称=電腦名稱 -位置=位置 -系统=系統 -最后登录=最後登入 -关注=關注 -授权=授權 +=XQ +λ=λ +ϵͳ=ϵy +¼= +ע=Pע +Ȩ=ڙ ; ============================================ ; Encoding Check ; ============================================ -请使用ANSI编码的语言文件。=請使用ANSI編碼的語言檔案。 +ʹANSIļ=ՈʹANSIaZԙn + +; ============================================ +; New Strings - CInputDialog Calls +; ============================================ +Զ=ӆ +CMD:=ՈݔCMD: +ַ:=ݔλַ: +ע: =ՈݔC]: +޸ıע=޸Ă] +ת(Զԭ)=DC(Ԅӏԭ) +(ָ֧):=씵(֧Ԯc): +ɱʶ=aR +ñʶϢ:=ՈORYӍ: +½Ŀ¼=Ŀ +Ŀ¼:=ՈݔĿQ: +ȷϺ ȴֽ=_J 횵ȴFY +ҪĹؼ=ՈݔҪьPI +\n: =\ng: + \"IP\"IP= \"WIP\"ŷIP +\"IP\"ʹ÷IP=ՈO\"WIP\"ʹ÷ŷIP +[ʹFRP]=[ʹFRP] +[δʹFRP]=[δʹFRP] +ԡ״ṩκα֤ʹñķûгеDzκʹñķǷ;ûӦطɷ棬εʹñ߶κʹñ𺦲еΡ=ܛwԡFṩκαCʹñܛwLUʹгГ҂κʹñܛwlķǷ;ؓ؟ʹߑPɷҎKؓ؟εʹñܛw_lߌκʹñܛwaēpГ؟Ρ diff --git a/test/IniParser_test.cpp b/test/IniParser_test.cpp new file mode 100644 index 0000000..a64af6f --- /dev/null +++ b/test/IniParser_test.cpp @@ -0,0 +1,559 @@ +// IniParser_test.cpp - CIniParser 单元测试 +// 编译: cl /EHsc /W4 IniParser_test.cpp /Fe:IniParser_test.exe +// 运行: IniParser_test.exe + +#include +#include +#include +#include +#include "../common/IniParser.h" + +static int g_total = 0; +static int g_passed = 0; +static int g_failed = 0; + +#define TEST_ASSERT(expr, msg) do { \ + g_total++; \ + if (expr) { g_passed++; } \ + else { g_failed++; printf(" FAIL: %s\n %s:%d\n", msg, __FILE__, __LINE__); } \ +} while(0) + +#define TEST_STR_EQ(actual, expected, msg) do { \ + g_total++; \ + if (std::string(actual) == std::string(expected)) { g_passed++; } \ + else { g_failed++; printf(" FAIL: %s\n expected: \"%s\"\n actual: \"%s\"\n %s:%d\n", \ + msg, expected, actual, __FILE__, __LINE__); } \ +} while(0) + +// 辅助:写入临时文件 +static std::string WriteTempFile(const char* name, const char* content) +{ + std::string path = std::string("_test_") + name + ".ini"; + FILE* f = nullptr; +#ifdef _MSC_VER + fopen_s(&f, path.c_str(), "w"); +#else + f = fopen(path.c_str(), "w"); +#endif + if (f) { + fputs(content, f); + fclose(f); + } + return path; +} + +static void CleanupFile(const std::string& path) +{ + remove(path.c_str()); +} + +// ============================================ +// Test 1: 基本 key=value 解析 +// ============================================ +void Test_BasicKeyValue() +{ + printf("[Test 1] Basic key=value parsing\n"); + std::string path = WriteTempFile("basic", + "[Strings]\n" + "hello=world\n" + "foo=bar\n" + ); + + CIniParser ini; + TEST_ASSERT(ini.LoadFile(path.c_str()), "LoadFile should succeed"); + TEST_STR_EQ(ini.GetValue("Strings", "hello"), "world", "hello -> world"); + TEST_STR_EQ(ini.GetValue("Strings", "foo"), "bar", "foo -> bar"); + TEST_ASSERT(ini.GetSectionSize("Strings") == 2, "Section size should be 2"); + + CleanupFile(path); +} + +// ============================================ +// Test 2: key 尾部空格保留(核心特性) +// ============================================ +void Test_KeyTrailingSpace() +{ + printf("[Test 2] Key trailing space preserved\n"); + // 模拟: "请输入主机备注: =Enter host note:" + // key 是 "请输入主机备注: "(冒号+空格),不能被 trim + std::string path = WriteTempFile("trailing_space", + "[Strings]\n" + "key_no_space=value1\n" + "key_with_space =value2\n" + "key_with_2spaces =value3\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "key_no_space"), "value1", + "key without trailing space"); + TEST_STR_EQ(ini.GetValue("Strings", "key_with_space "), "value2", + "key with 1 trailing space (must preserve)"); + TEST_STR_EQ(ini.GetValue("Strings", "key_with_2spaces "), "value3", + "key with 2 trailing spaces (must preserve)"); + + // 不带空格的查找应该找不到 + TEST_STR_EQ(ini.GetValue("Strings", "key_with_space", "NOT_FOUND"), "NOT_FOUND", + "key without trailing space should NOT match"); + + CleanupFile(path); +} + +// ============================================ +// Test 3: value 中含特殊字符 +// ============================================ +void Test_SpecialCharsInValue() +{ + printf("[Test 3] Special characters in value\n"); + std::string path = WriteTempFile("special_chars", + "[Strings]\n" + "menu=Menu(&F)\n" + "addr=\n" + "fmt=%s connected %d times\n" + "paren=(auto-restore on expiry)\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "menu"), "Menu(&F)", "value with (&F)"); + TEST_STR_EQ(ini.GetValue("Strings", "addr"), "", "value with "); + TEST_STR_EQ(ini.GetValue("Strings", "fmt"), "%s connected %d times", "value with %s %d"); + TEST_STR_EQ(ini.GetValue("Strings", "paren"), "(auto-restore on expiry)", "value with parens"); + + CleanupFile(path); +} + +// ============================================ +// Test 4: 注释行跳过 +// ============================================ +void Test_Comments() +{ + printf("[Test 4] Comment lines skipped\n"); + std::string path = WriteTempFile("comments", + "; This is a comment\n" + "# This is also a comment\n" + "[Strings]\n" + "; ============================================\n" + "# Section header comment\n" + "key1=value1\n" + "; key2=should_not_exist\n" + "key3=value3\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "key1"), "value1", "key1 exists"); + TEST_STR_EQ(ini.GetValue("Strings", "key3"), "value3", "key3 exists"); + TEST_STR_EQ(ini.GetValue("Strings", "key2", "NOT_FOUND"), "NOT_FOUND", + "commented key2 should not exist"); + TEST_ASSERT(ini.GetSectionSize("Strings") == 2, "Only 2 keys (comments excluded)"); + + CleanupFile(path); +} + +// ============================================ +// Test 5: 空行跳过 +// ============================================ +void Test_EmptyLines() +{ + printf("[Test 5] Empty lines skipped\n"); + std::string path = WriteTempFile("empty_lines", + "\n" + "\n" + "[Strings]\n" + "\n" + "key1=value1\n" + "\n" + "\n" + "key2=value2\n" + "\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_ASSERT(ini.GetSectionSize("Strings") == 2, "2 keys despite empty lines"); + TEST_STR_EQ(ini.GetValue("Strings", "key1"), "value1", "key1"); + TEST_STR_EQ(ini.GetValue("Strings", "key2"), "value2", "key2"); + + CleanupFile(path); +} + +// ============================================ +// Test 6: section 切换 +// ============================================ +void Test_MultipleSections() +{ + printf("[Test 6] Multiple sections\n"); + std::string path = WriteTempFile("sections", + "[Strings]\n" + "key1=value1\n" + "key2=value2\n" + "[Other]\n" + "key1=other_value1\n" + "key3=other_value3\n" + "[Strings2]\n" + "keyA=valueA\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "key1"), "value1", "Strings.key1"); + TEST_STR_EQ(ini.GetValue("Strings", "key2"), "value2", "Strings.key2"); + TEST_STR_EQ(ini.GetValue("Other", "key1"), "other_value1", "Other.key1"); + TEST_STR_EQ(ini.GetValue("Other", "key3"), "other_value3", "Other.key3"); + TEST_STR_EQ(ini.GetValue("Strings2", "keyA"), "valueA", "Strings2.keyA"); + + // Strings section should not contain Other section's keys + TEST_STR_EQ(ini.GetValue("Strings", "key3", "NOT_FOUND"), "NOT_FOUND", + "Strings should not have Other's key3"); + + TEST_ASSERT(ini.GetSectionSize("Strings") == 2, "Strings has 2 keys"); + TEST_ASSERT(ini.GetSectionSize("Other") == 2, "Other has 2 keys"); + TEST_ASSERT(ini.GetSectionSize("Strings2") == 1, "Strings2 has 1 key"); + + CleanupFile(path); +} + +// ============================================ +// Test 7: 大文件(超过 32KB) +// ============================================ +void Test_LargeFile() +{ + printf("[Test 7] Large file (>32KB)\n"); + std::string path = std::string("_test_large.ini"); + FILE* f = nullptr; +#ifdef _MSC_VER + fopen_s(&f, path.c_str(), "w"); +#else + f = fopen(path.c_str(), "w"); +#endif + if (!f) { + printf(" SKIP: Cannot create temp file\n"); + return; + } + + fputs("[Strings]\n", f); + + // 写入大量条目使文件超过 32KB + const int entryCount = 2000; + for (int i = 0; i < entryCount; i++) { + fprintf(f, "key_%04d=value_for_entry_number_%04d_padding_text_here\n", i, i); + } + + // 在文件末尾写一个特殊条目 + fputs("last_key=last_value\n", f); + fclose(f); + + CIniParser ini; + TEST_ASSERT(ini.LoadFile(path.c_str()), "LoadFile should succeed for large file"); + + // 验证首尾和中间的条目 + TEST_STR_EQ(ini.GetValue("Strings", "key_0000"), + "value_for_entry_number_0000_padding_text_here", + "First entry"); + TEST_STR_EQ(ini.GetValue("Strings", "key_0999"), + "value_for_entry_number_0999_padding_text_here", + "Middle entry"); + TEST_STR_EQ(ini.GetValue("Strings", "key_1999"), + "value_for_entry_number_1999_padding_text_here", + "Last numbered entry"); + TEST_STR_EQ(ini.GetValue("Strings", "last_key"), "last_value", + "Entry at very end of large file"); + + size_t size = ini.GetSectionSize("Strings"); + TEST_ASSERT(size == entryCount + 1, + "Section size should be entryCount + 1 (last_key)"); + + printf(" File has %d entries, all readable\n", (int)size); + + CleanupFile(path); +} + +// ============================================ +// Test 8: 文件不存在 +// ============================================ +void Test_FileNotExist() +{ + printf("[Test 8] File not exist\n"); + + CIniParser ini; + TEST_ASSERT(!ini.LoadFile("_nonexistent_file_12345.ini"), "LoadFile should return false"); + TEST_ASSERT(!ini.LoadFile(nullptr), "LoadFile(nullptr) should return false"); + TEST_ASSERT(!ini.LoadFile(""), "LoadFile('') should return false"); + TEST_ASSERT(ini.GetSection("Strings") == nullptr, "No sections after failed load"); +} + +// ============================================ +// Test 9: 空文件 +// ============================================ +void Test_EmptyFile() +{ + printf("[Test 9] Empty file\n"); + std::string path = WriteTempFile("empty", ""); + + CIniParser ini; + TEST_ASSERT(ini.LoadFile(path.c_str()), "LoadFile should succeed for empty file"); + TEST_ASSERT(ini.GetSection("Strings") == nullptr, "No Strings section in empty file"); + TEST_ASSERT(ini.GetSectionSize("Strings") == 0, "Section size is 0"); + + CleanupFile(path); +} + +// ============================================ +// Test 10: value 中含 '='(只按第一个 '=' 分割) +// ============================================ +void Test_EqualsInValue() +{ + printf("[Test 10] Equals sign in value\n"); + std::string path = WriteTempFile("equals", + "[Strings]\n" + "formula=a=b+c\n" + "equation=x=1=2=3\n" + "normal=hello\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "formula"), "a=b+c", + "value with one '=' should keep it"); + TEST_STR_EQ(ini.GetValue("Strings", "equation"), "x=1=2=3", + "value with multiple '=' should keep all"); + TEST_STR_EQ(ini.GetValue("Strings", "normal"), "hello", + "normal value unaffected"); + + CleanupFile(path); +} + +// ============================================ +// Test 11: key 中含 \r\n 转义序列 +// ============================================ +void Test_EscapeCRLF_InKey() +{ + printf("[Test 11] Escape \\r\\n in key\n"); + // INI 文件中写字面量 \r\n,解析器应转为真正的 0x0D 0x0A + // 模拟代码中: _TR("\n编译日期: ") 和 _TR("操作失败\r\n请重试") + std::string path = WriteTempFile("escape_key", + "[Strings]\n" + "\\n compile date: =\\n Build Date: \n" + "fail\\r\\nretry=Fail\\r\\nRetry\n" + "line1\\nline2\\nline3=L1\\nL2\\nL3\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + // key "\n compile date: " (真正的换行 + 文本) + TEST_STR_EQ(ini.GetValue("Strings", "\n compile date: "), "\n Build Date: ", + "key with \\n at start"); + + // key "fail\r\nretry" (真正的 CR+LF) + TEST_STR_EQ(ini.GetValue("Strings", "fail\r\nretry"), "Fail\r\nRetry", + "key with \\r\\n in middle"); + + // key 含多个 \n + TEST_STR_EQ(ini.GetValue("Strings", "line1\nline2\nline3"), "L1\nL2\nL3", + "key with multiple \\n"); + + CleanupFile(path); +} + +// ============================================ +// Test 12: value 中含 \r\n 转义序列 +// ============================================ +void Test_EscapeCRLF_InValue() +{ + printf("[Test 12] Escape \\r\\n in value\n"); + std::string path = WriteTempFile("escape_value", + "[Strings]\n" + "msg=hello\\r\\nworld\n" + "multiline=line1\\nline2\\nline3\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "msg"), "hello\r\nworld", + "value with \\r\\n"); + TEST_STR_EQ(ini.GetValue("Strings", "multiline"), "line1\nline2\nline3", + "value with multiple \\n"); + + CleanupFile(path); +} + +// ============================================ +// Test 13: \\ 和 \" 转义 +// ============================================ +void Test_EscapeBackslashAndQuote() +{ + printf("[Test 13] Escape \\\\ and \\\" sequences\n"); + std::string path = WriteTempFile("escape_bsq", + "[Strings]\n" + "path=C:\\\\Users\\\\test\n" + "quoted=say \\\"hello\\\"\n" + "mixed=\\\"line1\\n line2\\\"\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "path"), "C:\\Users\\test", + "double backslash -> single backslash"); + TEST_STR_EQ(ini.GetValue("Strings", "quoted"), "say \"hello\"", + "escaped quotes"); + TEST_STR_EQ(ini.GetValue("Strings", "mixed"), "\"line1\n line2\"", + "mixed \\\" and \\n"); + + CleanupFile(path); +} + +// ============================================ +// Test 14: \t 转义 +// ============================================ +void Test_EscapeTab() +{ + printf("[Test 14] Escape \\t sequence\n"); + std::string path = WriteTempFile("escape_tab", + "[Strings]\n" + "col=name\\tvalue\n" + "header=ID\\tName\\tStatus\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + TEST_STR_EQ(ini.GetValue("Strings", "col"), "name\tvalue", + "\\t -> tab"); + TEST_STR_EQ(ini.GetValue("Strings", "header"), "ID\tName\tStatus", + "multiple \\t"); + + CleanupFile(path); +} + +// ============================================ +// Test 15: 未知转义保留原样 +// ============================================ +void Test_UnknownEscapePassthrough() +{ + printf("[Test 15] Unknown escape passthrough\n"); + std::string path = WriteTempFile("escape_unknown", + "[Strings]\n" + "unknown=hello\\xworld\n" + "trailing_bs=end\\\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + // \x 不是已知转义,应保留反斜杠 + TEST_STR_EQ(ini.GetValue("Strings", "unknown"), "hello\\xworld", + "unknown \\x keeps backslash"); + // 行尾的孤立反斜杠(fgets 去掉换行后,最后一个字符是 \) + TEST_STR_EQ(ini.GetValue("Strings", "trailing_bs"), "end\\", + "trailing backslash preserved"); + + CleanupFile(path); +} + +// ============================================ +// Test 16: key 中转义与尾部空格组合 +// ============================================ +void Test_EscapeWithTrailingSpace() +{ + printf("[Test 16] Escape + trailing space in key\n"); + // 模拟: _TR("\n编译日期: ") — key 以 \n 开头,以冒号+空格结尾 + std::string path = WriteTempFile("escape_trail", + "[Strings]\n" + "\\n date: =\\n Date: \n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + // key 是 "\n date: "(真正换行 + 文本 + 尾部空格) + TEST_STR_EQ(ini.GetValue("Strings", "\n date: "), "\n Date: ", + "escape \\n + trailing space in key"); + + // 不带尾部空格应找不到 + TEST_STR_EQ(ini.GetValue("Strings", "\n date:", "NOT_FOUND"), "NOT_FOUND", + "without trailing space should not match"); + + CleanupFile(path); +} + +// ============================================ +// Test 17: key 以 '[' 开头(不是 section 头) +// ============================================ +void Test_BracketKey() +{ + printf("[Test 17] Key starting with '[' (not a section header)\n"); + // 模拟: _TR("[使用FRP]") 和 _TR("[未使用FRP]") + std::string path = WriteTempFile("bracket_key", + "[Strings]\n" + "normal=value1\n" + "[tag1]=[Tag One]\n" + "[tag2]=[Tag Two]\n" + "after=value2\n" + ); + + CIniParser ini; + ini.LoadFile(path.c_str()); + + // [tag1]=[Tag One] 应该是 key=value,不是 section 头 + TEST_STR_EQ(ini.GetValue("Strings", "[tag1]"), "[Tag One]", + "[tag1] parsed as key, not section"); + TEST_STR_EQ(ini.GetValue("Strings", "[tag2]"), "[Tag Two]", + "[tag2] parsed as key, not section"); + + // 前后的普通 key 应仍在 Strings section + TEST_STR_EQ(ini.GetValue("Strings", "normal"), "value1", + "normal key before bracket keys"); + TEST_STR_EQ(ini.GetValue("Strings", "after"), "value2", + "normal key after bracket keys still in Strings"); + + TEST_ASSERT(ini.GetSectionSize("Strings") == 4, "Strings has 4 keys"); + + // 不应该有 tag1 或 tag2 section + TEST_ASSERT(ini.GetSection("tag1") == nullptr, "no tag1 section"); + TEST_ASSERT(ini.GetSection("tag2") == nullptr, "no tag2 section"); + + CleanupFile(path); +} + +// ============================================ +// main +// ============================================ +int main() +{ + printf("=== CIniParser Tests ===\n\n"); + + Test_BasicKeyValue(); + Test_KeyTrailingSpace(); + Test_SpecialCharsInValue(); + Test_Comments(); + Test_EmptyLines(); + Test_MultipleSections(); + Test_LargeFile(); + Test_FileNotExist(); + Test_EmptyFile(); + Test_EqualsInValue(); + Test_EscapeCRLF_InKey(); + Test_EscapeCRLF_InValue(); + Test_EscapeBackslashAndQuote(); + Test_EscapeTab(); + Test_UnknownEscapePassthrough(); + Test_EscapeWithTrailingSpace(); + Test_BracketKey(); + + printf("\n=== Results: %d/%d passed", g_passed, g_total); + if (g_failed > 0) + printf(", %d FAILED", g_failed); + printf(" ===\n"); + + return g_failed > 0 ? 1 : 0; +}