style: Change files encoding format to UTF8-BOM

This commit is contained in:
yuanyuanxiang
2026-01-02 20:00:18 +01:00
parent ba9be08411
commit b6af9ce615
356 changed files with 2819 additions and 2819 deletions

View File

@@ -1,4 +1,4 @@
/*
/*
This is an implementation of the AES algorithm, specifically ECB, CTR and CBC mode.
Block size can be chosen in aes.h - available choices are AES128, AES192, AES256.
@@ -128,7 +128,7 @@ static const uint8_t Rcon[11] = {
*
* From Wikipedia's article on the Rijndael key schedule @ https://en.wikipedia.org/wiki/Rijndael_key_schedule#Rcon
*
* "Only the first some of these constants are actually used up to rcon[10] for AES-128 (as 11 round keys are needed),
* "Only the first some of these constants are actually used 鈥?up to rcon[10] for AES-128 (as 11 round keys are needed),
* up to rcon[8] for AES-192, up to rcon[7] for AES-256. rcon[0] is not used in AES algorithm."
*/

View File

@@ -1,4 +1,4 @@
#ifndef _AES_H_
#ifndef _AES_H_
#define _AES_H_
#include <stdint.h>

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <vector>
#include <string>
#include <iosfwd>
@@ -17,7 +17,7 @@
#include <corecrt_io.h>
#define MVirtualFree(a1, a2, a3) VirtualFree(a1, a2, a3)
#define MVirtualAlloc(a1, a2, a3, a4) VirtualAlloc(a1, a2, a3, a4)
#else // ʹ<EFBFBD>ø<EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD> LINUX <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
#else // 使得该头文件在 LINUX 正常使用
#include <thread>
#define strcat_s strcat
#define sprintf_s sprintf
@@ -67,7 +67,7 @@ typedef void* LPVOID, * HANDLE;
#define _MAX_PATH 260
#endif
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<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>
// 以下2个数字需全局唯一否则在生成服务时会出问题
#define FLAG_FINDEN "Hello, World!"
@@ -100,12 +100,12 @@ inline int isValid_10s()
return span <= 10;
}
// <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DLL_VERSION __DATE__ // DLL<EFBFBD>
// 当程序功能明显发生变化时,应该更新这个值,以便对被控程序进行区分
#define DLL_VERSION __DATE__ // DLL版本
#define TALK_DLG_MAXLEN 1024 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TALK_DLG_MAXLEN 1024 // 最大输入字符长度
// <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>״̬: 1-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> 2-<2D><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
// 客户端状态: 1-被控端退出 2-主控端退出
enum State {
S_CLIENT_NORMAL = 0,
S_CLIENT_EXIT = 1,
@@ -113,165 +113,165 @@ enum State {
S_CLIENT_UPDATE = 3,
};
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
// 命令枚举列表
enum {
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
TRANSFER_MODE_NORMAL = 0x00, // һ<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>Ѿ<EFBFBD><D1BE>У<EFBFBD>ȡ<EFBFBD><C8A1>
TRANSFER_MODE_ADDITION, // ׷<EFBFBD><EFBFBD>
TRANSFER_MODE_ADDITION_ALL, // ȫ<EFBFBD><EFBFBD>׷<EFBFBD><EFBFBD>
TRANSFER_MODE_OVERWRITE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TRANSFER_MODE_OVERWRITE_ALL, // ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TRANSFER_MODE_JUMP, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TRANSFER_MODE_JUMP_ALL, // ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TRANSFER_MODE_CANCEL, // ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 文件传输方式
TRANSFER_MODE_NORMAL = 0x00, // 一般,如果本地或者远程已经有,取消
TRANSFER_MODE_ADDITION, // 追加
TRANSFER_MODE_ADDITION_ALL, // 全部追加
TRANSFER_MODE_OVERWRITE, // 覆盖
TRANSFER_MODE_OVERWRITE_ALL, // 全部覆盖
TRANSFER_MODE_JUMP, // 覆盖
TRANSFER_MODE_JUMP_ALL, // 全部覆盖
TRANSFER_MODE_CANCEL, // 取消传送
// <EFBFBD><EFBFBD><EFBFBD>ƶ˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_ACTIVED = 0x00, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_LIST_DRIVE, // <EFBFBD>г<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
COMMAND_LIST_FILES, // <EFBFBD>г<EFBFBD>Ŀ¼<EFBFBD>е<EFBFBD><EFBFBD>ļ<EFBFBD>
COMMAND_DOWN_FILES, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
COMMAND_FILE_SIZE, // <EFBFBD>ϴ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С
COMMAND_FILE_DATA, // <EFBFBD>ϴ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_EXCEPTION, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>
COMMAND_CONTINUE, // <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>
COMMAND_STOP, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
COMMAND_DELETE_FILE, // ɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
COMMAND_DELETE_DIRECTORY, // ɾ<EFBFBD><EFBFBD>Ŀ¼
COMMAND_SET_TRANSFER_MODE, // <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ʽ
COMMAND_CREATE_FOLDER, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
COMMAND_RENAME_FILE, // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_OPEN_FILE_SHOW, // <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
COMMAND_OPEN_FILE_HIDE, // <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
// 控制端发出的命令
COMMAND_ACTIVED = 0x00, // 服务端可以激活开始工作
COMMAND_LIST_DRIVE, // 列出磁盘目录
COMMAND_LIST_FILES, // 列出目录中的文件
COMMAND_DOWN_FILES, // 下载文件
COMMAND_FILE_SIZE, // 上传时的文件大小
COMMAND_FILE_DATA, // 上传时的文件数据
COMMAND_EXCEPTION, // 传输发生异常,需要重新传输
COMMAND_CONTINUE, // 传输正常,请求继续发送数据
COMMAND_STOP, // 传输中止
COMMAND_DELETE_FILE, // 删除文件
COMMAND_DELETE_DIRECTORY, // 删除目录
COMMAND_SET_TRANSFER_MODE, // 设置传输方式
COMMAND_CREATE_FOLDER, // 创建文件夹
COMMAND_RENAME_FILE, // 文件或文件改名
COMMAND_OPEN_FILE_SHOW, // 显示打开文件
COMMAND_OPEN_FILE_HIDE, // 隐藏打开文件
COMMAND_SCREEN_SPY, // <EFBFBD><EFBFBD>Ļ<EFBFBD>
COMMAND_SCREEN_RESET, // <EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_ALGORITHM_RESET, // <EFBFBD>ı<EFBFBD><EFBFBD>
COMMAND_SCREEN_CTRL_ALT_DEL, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ctrl+Alt+Del
COMMAND_SCREEN_CONTROL, // <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SCREEN_BLOCK_INPUT, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SCREEN_BLANK, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD>
COMMAND_SCREEN_CAPTURE_LAYER, // <EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD>
COMMAND_SCREEN_GET_CLIPBOARD, // <EFBFBD><EFBFBD>ȡԶ<EFBFBD>̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SCREEN_SET_CLIPBOARD, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SCREEN_SPY, // 屏幕查看
COMMAND_SCREEN_RESET, // 改变屏幕深度
COMMAND_ALGORITHM_RESET, // 改变算法
COMMAND_SCREEN_CTRL_ALT_DEL, // 发送Ctrl+Alt+Del
COMMAND_SCREEN_CONTROL, // 屏幕控制
COMMAND_SCREEN_BLOCK_INPUT, // 锁定服务端键盘鼠标输入
COMMAND_SCREEN_BLANK, // 服务端黑屏
COMMAND_SCREEN_CAPTURE_LAYER, // 捕捉层
COMMAND_SCREEN_GET_CLIPBOARD, // 获取远程剪贴版
COMMAND_SCREEN_SET_CLIPBOARD, // 设置远程剪帖版
COMMAND_WEBCAM, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
COMMAND_WEBCAM_ENABLECOMPRESS, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>󾭹<EFBFBD>H263ѹ<EFBFBD><EFBFBD>
COMMAND_WEBCAM_DISABLECOMPRESS, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ԭʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
COMMAND_WEBCAM_RESIZE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>INT<EFBFBD>͵Ŀ<EFBFBD><EFBFBD><EFBFBD>
COMMAND_NEXT, // <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>(<28><><EFBFBD>ƶ<EFBFBD><C6B6>Ѿ<EFBFBD><D1BE>򿪶Ի<F2BFAAB6><D4BB><EFBFBD>)
COMMAND_WEBCAM, // 摄像头
COMMAND_WEBCAM_ENABLECOMPRESS, // 摄像头数据要求经过H263压缩
COMMAND_WEBCAM_DISABLECOMPRESS, // 摄像头数据要求原始高清模式
COMMAND_WEBCAM_RESIZE, // 摄像头调整分辩率后面跟两个INT型的宽高
COMMAND_NEXT, // 下一步(控制端已经打开对话框)
COMMAND_KEYBOARD, // <EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>¼
COMMAND_KEYBOARD_OFFLINE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD>̼<EFBFBD>¼
COMMAND_KEYBOARD_CLEAR, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_KEYBOARD, // 键盘记录
COMMAND_KEYBOARD_OFFLINE, // 开启离线键盘记录
COMMAND_KEYBOARD_CLEAR, // 清除键盘记录内容
COMMAND_AUDIO, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_AUDIO, // 语音监听
COMMAND_SYSTEM, // ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>....<EFBFBD><EFBFBD>
COMMAND_PSLIST, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
COMMAND_WSLIST, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
COMMAND_DIALUPASS, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_KILLPROCESS, // <EFBFBD>رս<EFBFBD><EFBFBD><EFBFBD>
COMMAND_SYSTEM, // 系统管理(进程,窗口....
COMMAND_PSLIST, // 进程列表
COMMAND_WSLIST, // 窗口列表
COMMAND_DIALUPASS, // 拨号密码
COMMAND_KILLPROCESS, // 关闭进程
COMMAND_SHELL, // cmdshell
COMMAND_SESSION, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>, ж<>أ<EFBFBD>
COMMAND_REMOVE, // ж<EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD>
COMMAND_DOWN_EXEC, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
COMMAND_UPLOAD_EXEC, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20>ϴ<EFBFBD>ִ<EFBFBD><D6B4>
COMMAND_CLEAN_EVENT, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>־
COMMAND_OPEN_URL_HIDE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>ҳ
COMMAND_OPEN_URL_SHOW, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ
COMMAND_RENAME_REMARK, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
COMMAND_REPLAY_HEARTBEAT, // <EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SERVICES, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SESSION, // 会话管理(关机,重启,注销, 卸载)
COMMAND_REMOVE, // 卸载后门
COMMAND_DOWN_EXEC, // 其它功能 - 下载执行
COMMAND_UPLOAD_EXEC, // 其它功能 - 上传执行
COMMAND_CLEAN_EVENT, // 其它管理 - 清除系统日志
COMMAND_OPEN_URL_HIDE, // 其它管理 - 隐藏打开网页
COMMAND_OPEN_URL_SHOW, // 其它管理 - 显示打开网页
COMMAND_RENAME_REMARK, // 重命名备注
COMMAND_REPLAY_HEARTBEAT, // 回复心跳包
COMMAND_SERVICES, // 服务管理
COMMAND_REGEDIT,
COMMAND_TALK, // <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>֤
COMMAND_UPDATE = 53, // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_SHARE = 59, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_PROXY = 60, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD>
TOKEN_SYSINFOLIST = 61, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_CHAT_START = 62, // Զ<EFBFBD>̽<EFBFBD≯
TOKEN_UNINSTALL = 63, // ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_PRIVATESCREEN = 64, // <EFBFBD><EFBFBD>˽<EFBFBD><EFBFBD>Ļ
TOKEN_MACHINE_MANAGE = 65, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_GET_FOLDER = 66, // <EFBFBD><EFBFBD>ȡĿ¼
COMMAND_GET_FILE = 67, // <EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD>
COMMAND_SEND_FILE = 68, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
COMMAND_TALK, // 即时消息验证
COMMAND_UPDATE = 53, // 客户端升级
COMMAND_SHARE = 59, // 分享主机
COMMAND_PROXY = 60, // 代理映射
TOKEN_SYSINFOLIST = 61, // 主机管理
TOKEN_CHAT_START = 62, // 远程交谈
TOKEN_UNINSTALL = 63, // 卸载主机
TOKEN_PRIVATESCREEN = 64, // 隐私屏幕
TOKEN_MACHINE_MANAGE = 65, // 机器管理
COMMAND_GET_FOLDER = 66, // 获取目录
COMMAND_GET_FILE = 67, // 获取文件
COMMAND_SEND_FILE = 68, // 发送文件
COMMAND_SWITCH_SCREEN = 69,
CMD_MULTITHREAD_COMPRESS = 70,
CMD_FPS = 71,
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ʶ
TOKEN_AUTH = 100, // Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
TOKEN_HEARTBEAT, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_LOGIN, // <EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD>
TOKEN_DRIVE_LIST, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
TOKEN_FILE_LIST, // <EFBFBD>ļ<EFBFBD><EFBFBD>б<EFBFBD>
TOKEN_FILE_SIZE, // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><EFBFBD>
TOKEN_FILE_DATA, // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_TRANSFER_FINISH, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_DELETE_FINISH, // ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_GET_TRANSFER_MODE, // <EFBFBD>õ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
TOKEN_GET_FILEDATA, // Զ<EFBFBD>̵õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_CREATEFOLDER_FINISH, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_DATA_CONTINUE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_RENAME_FINISH, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_EXCEPTION, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 服务端发出的标识
TOKEN_AUTH = 100, // 要求验证
TOKEN_HEARTBEAT, // 心跳包
TOKEN_LOGIN, // 上线包
TOKEN_DRIVE_LIST, // 驱动器列表
TOKEN_FILE_LIST, // 文件列表
TOKEN_FILE_SIZE, // 文件大小,传输文件时用
TOKEN_FILE_DATA, // 文件数据
TOKEN_TRANSFER_FINISH, // 传输完毕
TOKEN_DELETE_FINISH, // 删除完毕
TOKEN_GET_TRANSFER_MODE, // 得到文件传输方式
TOKEN_GET_FILEDATA, // 远程得到本地文件数据
TOKEN_CREATEFOLDER_FINISH, // 创建文件夹任务完成
TOKEN_DATA_CONTINUE, // 继续传输数据
TOKEN_RENAME_FINISH, // 改名操作完成
TOKEN_EXCEPTION, // 操作发生异常
TOKEN_BITMAPINFO, // <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>BITMAPINFO
TOKEN_FIRSTSCREEN, // <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><EFBFBD>ͼ
TOKEN_NEXTSCREEN, // <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͼ
TOKEN_CLIPBOARD_TEXT, // <EFBFBD><EFBFBD>Ļ<EFBFBD>鿴ʱ<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_BITMAPINFO, // 屏幕查看的BITMAPINFO
TOKEN_FIRSTSCREEN, // 屏幕查看的第一张图
TOKEN_NEXTSCREEN, // 屏幕查看的下一张图
TOKEN_CLIPBOARD_TEXT, // 屏幕查看时发送剪帖版内容
TOKEN_WEBCAM_BITMAPINFO, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>BITMAPINFOHEADER
TOKEN_WEBCAM_DIB, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_WEBCAM_BITMAPINFO, // 摄像头的BITMAPINFOHEADER
TOKEN_WEBCAM_DIB, // 摄像头的图像数据
TOKEN_AUDIO_START, // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_AUDIO_DATA, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_AUDIO_START, // 开始语音监听
TOKEN_AUDIO_DATA, // 语音监听数据
TOKEN_KEYBOARD_START, // <EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>¼<EFBFBD><EFBFBD>ʼ
TOKEN_KEYBOARD_DATA, // <EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_KEYBOARD_START, // 键盘记录开始
TOKEN_KEYBOARD_DATA, // 键盘记录的数据
TOKEN_PSLIST, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
TOKEN_WSLIST, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
TOKEN_DIALUPASS, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_SHELL_START, // Զ<EFBFBD><EFBFBD><EFBFBD>ն˿<EFBFBD>ʼ
TOKEN_SERVERLIST, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
COMMAND_SERVICELIST, // ˢ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
COMMAND_SERVICECONFIG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ʶ
TOKEN_TALK_START, // <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ʼ
TOKEN_TALKCMPLT, // <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
TOKEN_KEYFRAME=134, // <EFBFBD>ؼ<EFBFBD>֡
TOKEN_BITMAPINFO_HIDE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ
TOKEN_SCREEN_SIZE, // <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>С
TOKEN_DRIVE_LIST_PLUGIN = 150, // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
TOKEN_DRAWING_BOARD=151, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOKEN_PSLIST, // 进程列表
TOKEN_WSLIST, // 窗口列表
TOKEN_DIALUPASS, // 拨号密码
TOKEN_SHELL_START, // 远程终端开始
TOKEN_SERVERLIST, // 服务列表
COMMAND_SERVICELIST, // 刷新服务列表
COMMAND_SERVICECONFIG, // 服务端发出的标识
TOKEN_TALK_START, // 即时消息开始
TOKEN_TALKCMPLT, // 即时消息可重发
TOKEN_KEYFRAME=134, // 关键帧
TOKEN_BITMAPINFO_HIDE, // 虚拟屏幕
TOKEN_SCREEN_SIZE, // 屏幕大小
TOKEN_DRIVE_LIST_PLUGIN = 150, // 文件管理(插件)
TOKEN_DRAWING_BOARD=151, // 画板
TOKEN_DECRYPT = 199,
TOKEN_REGEDIT = 200, // ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_REG_FIND, // ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
TOKEN_REGEDIT = 200, // 注册表
COMMAND_REG_FIND, // 注册表 管理标识
TOKEN_REG_KEY,
TOKEN_REG_PATH,
COMMAND_BYE, // <EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD>˳<EFBFBD>
SERVER_EXIT=205, // <EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD>˳<EFBFBD>
COMMAND_BYE, // 被控端退出
SERVER_EXIT=205, // 主控端退出
COMMAND_CC, // CC
COMMAND_ASSIGN_MASTER, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_FILE_DETECT, // <EFBFBD>ļ<EFBFBD>̽<EFBFBD><EFBFBD>
COMMAND_FILE_REPORT, // <EFBFBD>ļ<EFBFBD><EFBFBD>ϱ<EFBFBD>
COMMAND_ASSIGN_MASTER, // 分配主控
COMMAND_FILE_DETECT, // 文件探测
COMMAND_FILE_REPORT, // 文件上报
SOCKET_DLLLOADER=210, // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLL
CMD_DLLDATA, // <EFBFBD><EFBFBD>ӦDLL<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_RUNASADMIN=214, // ADMIN <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_MASTERSETTING = 215, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_HEARTBEAT_ACK = 216, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
SOCKET_DLLLOADER=210, // 客户端请求DLL
CMD_DLLDATA, // 响应DLL数据
CMD_RUNASADMIN=214, // ADMIN 运行
CMD_MASTERSETTING = 215, // 主控设置
CMD_HEARTBEAT_ACK = 216, // 心跳回应
CMD_PADDING =217,
CMD_AUTHORIZATION = 222, // <EFBFBD><EFBFBD>Ȩ
CMD_SERVER_ADDR = 229, // <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ַ
TOKEN_ERROR = 230, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
TOKEN_SHELL_DATA = 231, // <EFBFBD>ն˽<EFBFBD><EFBFBD><EFBFBD>
CMD_EXECUTE_DLL = 240, // ִ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
TOKEN_CLIENT_MSG = 241, // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CMD_SET_GROUP = 242, // <EFBFBD>޸ķ<EFBFBD><EFBFBD><EFBFBD>
CMD_EXECUTE_DLL_NEW = 243, // ִ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
CMD_AUTHORIZATION = 222, // 授权
CMD_SERVER_ADDR = 229, // 主控地址
TOKEN_ERROR = 230, // 错误提示
TOKEN_SHELL_DATA = 231, // 终端结果
CMD_EXECUTE_DLL = 240, // 执行代码
TOKEN_CLIENT_MSG = 241, // 客户端消息
CMD_SET_GROUP = 242, // 修改分组
CMD_EXECUTE_DLL_NEW = 243, // 执行代码
};
enum MachineCommand {
@@ -291,15 +291,15 @@ enum ProxyManager {
COMMAND_PROXY_CONNECT_HOSTNAME,
};
// <EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 后台屏幕其他命令
enum HideScreenSpy {
COMMAND_FLUSH_HIDE, // ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ
COMMAND_SCREEN_SETSCREEN_HIDE, // <EFBFBD><EFBFBD><EFBFBD>÷ֱ<EFBFBD><EFBFBD><EFBFBD>
COMMAND_HIDE_USER, // <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_HIDE_CLEAR, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨
COMMAND_COMMAND_SCREENUALITY60_HIDE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_COMMAND_SCREENUALITY85_HIDE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_COMMAND_SCREENUALITY100_HIDE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_FLUSH_HIDE, // 刷新屏幕
COMMAND_SCREEN_SETSCREEN_HIDE, // 重置分辨率
COMMAND_HIDE_USER, // 自定义命令
COMMAND_HIDE_CLEAR, // 清理后台
COMMAND_COMMAND_SCREENUALITY60_HIDE, // 清晰度
COMMAND_COMMAND_SCREENUALITY85_HIDE, // 清晰度
COMMAND_COMMAND_SCREENUALITY100_HIDE, // 清晰度
IDM_OPEN_Explorer = 33,
IDM_OPEN_run,
@@ -328,7 +328,7 @@ struct ZdyCmd {
char cmdline[_MAX_PATH];
};
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 解密数据
enum DecryptCommand {
COMMAND_LLQ_GetChromePassWord,
COMMAND_LLQ_GetEdgePassWord,
@@ -341,11 +341,11 @@ enum DecryptCommand {
typedef DecryptCommand BroType;
// <EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>
#define CMD_WINDOW_CLOSE 0 // <EFBFBD>رմ<EFBFBD><EFBFBD><EFBFBD>
#define CMD_WINDOW_TEST 1 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 这是服务管理页面既有定义
#define CMD_WINDOW_CLOSE 0 // 关闭窗口
#define CMD_WINDOW_TEST 1 // 操作窗口
// MachineManager ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ǰ<><C7B0><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ֵ˳<D6B5>򲻵<EFBFBD><F2B2BBB5>޸<EFBFBD>
// MachineManager 系统管理, 前几个枚举值顺序不得修改
enum MachineManager {
COMMAND_MACHINE_PROCESS,
COMMAND_MACHINE_WINDOWS,
@@ -356,16 +356,16 @@ enum MachineManager {
COMMAND_MACHINE_WIN32SERVICE,
COMMAND_MACHINE_DRIVERSERVICE,
COMMAND_MACHINE_TASK,
COMMAND_MACHINE_HOSTS, //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_MACHINE_HOSTS, //不能乱序号
COMMAND_APPUNINSTALL,//ж<EFBFBD><EFBFBD>
COMMAND_WINDOW_OPERATE,//<EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>
COMMAND_WINDOW_CLOSE,//<EFBFBD>ر<EFBFBD>
COMMAND_PROCESS_KILL,//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_PROCESS_KILLDEL,//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>----ɾ<EFBFBD><EFBFBD>
COMMAND_PROCESS_DEL,//ǿ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_PROCESS_FREEZING,//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMMAND_PROCESS_THAW,//<EFBFBD>
COMMAND_APPUNINSTALL,//卸载
COMMAND_WINDOW_OPERATE,//窗口控制
COMMAND_WINDOW_CLOSE,//关闭
COMMAND_PROCESS_KILL,//结束进程
COMMAND_PROCESS_KILLDEL,//结束进程----删除
COMMAND_PROCESS_DEL,//强制删除 不需要结束进程
COMMAND_PROCESS_FREEZING,//冻结
COMMAND_PROCESS_THAW,//解冻
COMMAND_HOSTS_SET,//hosts
COMMAND_SERVICE_LIST_WIN32,
@@ -407,7 +407,7 @@ struct WINDOWSINFO {
int h;
};
// Զ<EFBFBD>̽<EFBFBD≯
// 远程交谈
enum ChatManager {
COMMAND_NEXT_CHAT,
COMMAND_CHAT_CLOSE,
@@ -415,7 +415,7 @@ enum ChatManager {
COMMAND_CHAT_SCREEN_UNLOCK,
};
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 文件管理
enum FileManager {
COMMAND_COMPRESS_FILE_PARAM=220,
COMMAND_FILES_SEARCH_START,
@@ -458,7 +458,7 @@ enum FileManager {
TOKEN_FILE_SEARCHPLUS_NUMBER,
};
// Զ<EFBFBD>̻<EFBFBD><EFBFBD><EFBFBD>
// 远程画板
enum RemoteDraw {
CMD_DRAW_POINT = 0,
CMD_DRAW_END = 1,
@@ -471,19 +471,19 @@ enum RemoteDraw {
};
enum {
CLIENT_TYPE_DLL = 0, // <EFBFBD>ͻ<EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLL<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CLIENT_TYPE_ONE = 1, // <EFBFBD>ͻ<EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>EXE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CLIENT_TYPE_MEMEXE = -1, // <EFBFBD>ڴ<EFBFBD>EXE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CLIENT_TYPE_MODULE = 2, // DLL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CLIENT_TYPE_DLL = 0, // 客户端代码以DLL运行
CLIENT_TYPE_ONE = 1, // 客户端代码以单个EXE运行
CLIENT_TYPE_MEMEXE = -1, // 内存EXE运行
CLIENT_TYPE_MODULE = 2, // DLL需由外部程序调用
CLIENT_TYPE_SHELLCODE = 4, // Shellcode
CLIENT_TYPE_MEMDLL = 5, // <EFBFBD>ڴ<EFBFBD>DLL<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CLIENT_TYPE_LINUX = 6, // LINUX <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>
CLIENT_TYPE_MEMDLL = 5, // 内存DLL运行
CLIENT_TYPE_LINUX = 6, // LINUX 客户端
};
enum {
SHARE_TYPE_YAMA = 0, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SHARE_TYPE_HOLDINGHANDS = 1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HoldingHands: https://github.com/yuanyuanxiang/HoldingHands
SHARE_TYPE_YAMA_FOREVER = 100, // <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD>
SHARE_TYPE_YAMA = 0, // 分享给同类程序
SHARE_TYPE_HOLDINGHANDS = 1, // 分享给 HoldingHands: https://github.com/yuanyuanxiang/HoldingHands
SHARE_TYPE_YAMA_FOREVER = 100, // 永久分享
};
inline const char* GetClientType(int typ)
@@ -534,21 +534,21 @@ inline int compareDates(const std::string& date1, const std::string& date2)
return 0;
} catch (const std::exception& e) {
std::cerr << "Date parse error: " << e.what() << std::endl;
return -2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return -2; // 返回特殊值表示出错
}
}
// <EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ClientType<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫһ<EFBFBD>£<EFBFBD>רΪ`TestRun`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`ServerDll`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
// `TestRun` ֻ<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD>Ŀ<EFBFBD><EFBFBD>
// 此枚举值和ClientType相似,但又不是完全一致,专为`TestRun`定制
// 指本质上运行`ServerDll`的形式
// `TestRun` 只用于技术研究目的
enum TestRunType {
Startup_DLL, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLL
Startup_MEMDLL, // <EFBFBD>ڴ<EFBFBD>DLL<EFBFBD><EFBFBD><EFBFBD>޴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
Startup_InjDLL, // Զ<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD> DLL<4C><4C>ע<EFBFBD><D7A2>DLL·<4C><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DLL<EFBFBD><EFBFBD>
Startup_Shellcode, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Shell code <EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>shell code <EFBFBD><EFBFBD>
Startup_InjSC, // Զ<EFBFBD><EFBFBD> Shell code <EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>shell code <EFBFBD><EFBFBD>
Startup_GhostMsc, // Windows <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Startup_TestRunMsc, // Windows <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Startup_DLL, // 磁盘DLL
Startup_MEMDLL, // 内存DLL无磁盘文件
Startup_InjDLL, // 远程注入 DLL注入DLL路径仍依赖磁盘DLL
Startup_Shellcode, // 本地 Shell code (在当前程序执行shell code
Startup_InjSC, // 远程 Shell code (注入其他程序执行shell code
Startup_GhostMsc, // Windows 服务
Startup_TestRunMsc, // Windows 服务
};
inline int MemoryFind(const char* szBuffer, const char* Key, int iBufferSize, int iKeySize)
@@ -565,7 +565,7 @@ enum ProtoType {
PROTO_TCP = 0, // TCP
PROTO_UDP = 1, // UDP
PROTO_HTTP = 2, // HTTP
PROTO_RANDOM = 3, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PROTO_RANDOM = 3, // 随机
PROTO_KCP = 4, // KCP
PROTO_HTTPS = 5, // HTTPS
};
@@ -573,8 +573,8 @@ enum ProtoType {
#define KCP_SESSION_ID 666
enum RunningType {
RUNNING_RANDOM = 0, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RUNNING_PARALLEL = 1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RUNNING_RANDOM = 0, // 随机上线
RUNNING_PARALLEL = 1, // 并发上线
};
enum ProtocolEncType {
@@ -590,27 +590,27 @@ enum ClientCompressType {
};
#pragma pack(push, 4)
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// 所连接的主控程序信息
typedef struct CONNECT_ADDRESS {
public:
char szFlag[32]; // <EFBFBD><EFBFBD>ʶ
char szServerIP[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
char szPort[8]; // <EFBFBD><EFBFBD><EFBFBD>ض˿<EFBFBD>
int iType; // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bEncrypt; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char szBuildDate[12]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>)
int iMultiOpen; // ֧<EFBFBD>ִ򿪶<EFBFBD><EFBFBD><EFBFBD>
int iStartup; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
int iHeaderEnc; // <EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char protoType; // Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char runningType; // <EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>ʽ
char szGroupName[24]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char runasAdmin; // <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char szReserved[11]; // ռλ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>300<EFBFBD>ֽ<EFBFBD>
uint64_t clientID; // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD><EFBFBD>ʶ
uint64_t parentHwnd; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
uint64_t superAdmin; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
char pwdHash[64]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ
char szFlag[32]; // 标识
char szServerIP[100]; // 主控IP
char szPort[8]; // 主控端口
int iType; // 客户端类型
bool bEncrypt; // 上线信息是否加密
char szBuildDate[12]; // 构建日期(版本)
int iMultiOpen; // 支持打开多个
int iStartup; // 启动方式
int iHeaderEnc; // 数据加密类型
char protoType; // 协议类型
char runningType; // 运行方式
char szGroupName[24]; // 分组名称
char runasAdmin; // 是否提升权限运行
char szReserved[11]; // 占位使结构体占据300字节
uint64_t clientID; // 客户端唯一标识
uint64_t parentHwnd; // 父进程窗口句柄
uint64_t superAdmin; // 管理员主控ID
char pwdHash[64]; // 密码哈希
public:
void SetType(int typ)
@@ -715,8 +715,8 @@ public:
#define FOREVER_RUN 2
// <EFBFBD>ͻ<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD>Ա:
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬(run)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(h)<29><>ͨѶ<CDA8>ͻ<EFBFBD><CDBB><EFBFBD>(p)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><DFB2><EFBFBD>(user)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(conn).
// 客户端程序线程信息结构体, 包含5个成员:
// 运行状态(run)、句柄(h)、通讯客户端(p)、调用者参数(user)和连接信息(conn).
struct ThreadInfo {
int run;
HANDLE h;
@@ -740,27 +740,27 @@ struct ThreadInfo {
};
struct PluginParam {
char IP[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
int Port; // <EFBFBD><EFBFBD><EFBFBD>ض˿<EFBFBD>
const State *Exit; // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>״̬
const void* User; // CONNECT_ADDRESS* ָ<EFBFBD><EFBFBD>
char IP[100]; // 主控IP
int Port; // 主控端口
const State *Exit; // 客户端状态
const void* User; // CONNECT_ADDRESS* 指针
PluginParam(const char*ip, int port, const State *s, const void* u=0) : Port(port), Exit(s), User(u)
{
strcpy_s(IP, ip);
}
};
// <EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ָ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 将字符串按指定字符分隔为向量
inline std::vector<std::string> StringToVector(const std::string& str, char ch, int reserved = 1)
{
// ʹ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
// 使用字符串流来分隔字符串
std::istringstream stream(str);
std::string item;
std::vector<std::string> result;
// <EFBFBD><EFBFBD><EFBFBD>ֺŷָ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
// 按分号分隔字符串
while (std::getline(stream, item, ch)) {
result.push_back(item); // <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>
result.push_back(item); // 将分隔出来的子字符串添加到结果向量中
}
while (result.size() < reserved)
result.push_back("");
@@ -769,40 +769,40 @@ inline std::vector<std::string> StringToVector(const std::string& str, char ch,
}
enum LOGIN_RES {
RES_CLIENT_TYPE = 0, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RES_SYSTEM_BITS = 1, // ϵͳλ<EFBFBD><EFBFBD>
RES_SYSTEM_CPU = 2, // CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RES_SYSTEM_MEM = 3, // ϵͳ<EFBFBD>ڴ<EFBFBD>
RES_FILE_PATH = 4, // <EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>
RES_CLIENT_TYPE = 0, // 类型
RES_SYSTEM_BITS = 1, // 系统位数
RES_SYSTEM_CPU = 2, // CPU核数
RES_SYSTEM_MEM = 3, // 系统内存
RES_FILE_PATH = 4, // 文件路径
RES_RESVERD = 5, // ?
RES_INSTALL_TIME = 6, // <EFBFBD><EFBFBD>װʱ<EFBFBD><EFBFBD>
RES_INSTALL_INFO = 7, // <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>Ϣ
RES_PROGRAM_BITS = 8, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
RES_EXPIRED_DATE = 9, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RES_CLIENT_LOC = 10, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
RES_CLIENT_PUBIP = 11, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
RES_EXE_VERSION = 12, // EXE<EFBFBD>
RES_USERNAME = 13, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RES_ISADMIN = 14, // <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD>
RES_INSTALL_TIME = 6, // 安装时间
RES_INSTALL_INFO = 7, // 安装信息
RES_PROGRAM_BITS = 8, // 程序位数
RES_EXPIRED_DATE = 9, // 到期日期
RES_CLIENT_LOC = 10, // 地理位置
RES_CLIENT_PUBIP = 11, // 公网地址
RES_EXE_VERSION = 12, // EXE版本
RES_USERNAME = 13, // 电脑用户名称
RES_ISADMIN = 14, // 是否具有管理员权限
RES_MAX,
};
// <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>С<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><EFBFBD><EFBFBD>ϰ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD>.
// Ϊ<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>20241228<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 服务上线后发送的计算机信息
// 此结构体一旦发生变化(比如大小),则以前版本的客户端无法连接新版主控.
// 新版客户端也无法连接老版本的主控程序.
// 为此,自20241228提交以来,为这个结构体预留字段,以便未来之不时之需
// 请勿再修改此结构体,除非你决定不再兼容以前的程序或者单独编写代码来兼容
typedef struct LOGIN_INFOR {
unsigned char bToken; // 1.<EFBFBD><EFBFBD>½<EFBFBD><EFBFBD>Ϣ
char OsVerInfoEx[156]; // 2.<EFBFBD><EFBFBD><EFBFBD>Ϣ
unsigned int dwCPUMHz; // 3.CPU<EFBFBD><EFBFBD>Ƶ
char moduleVersion[24]; // 4.DLLģ<EFBFBD><EFBFBD><EFBFBD>
char szPCName[240]; // 5.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char szMasterID[20]; // 5.1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
int bWebCamIsExist; // 6.<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
unsigned int dwSpeed; // 7.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char szStartTime[20]; // 8.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
char szReserved[512]; // 9.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
unsigned char bToken; // 1.登陆信息
char OsVerInfoEx[156]; // 2.版本信息
unsigned int dwCPUMHz; // 3.CPU主频
char moduleVersion[24]; // 4.DLL模块版本
char szPCName[240]; // 5.主机名
char szMasterID[20]; // 5.1 主控ID
int bWebCamIsExist; // 6.是否有摄像头
unsigned int dwSpeed; // 7.网速
char szStartTime[20]; // 8.启动时间
char szReserved[512]; // 9.保留字段
LOGIN_INFOR()
{
@@ -854,7 +854,7 @@ inline uint64_t GetUnixMs()
return system_ms.time_since_epoch().count();
}
// <EFBFBD>̶<EFBFBD>1024<EFBFBD>ֽ<EFBFBD>
// 固定1024字节
typedef struct Heartbeat {
uint64_t Time;
char ActiveWnd[512];
@@ -888,13 +888,13 @@ typedef struct HeartbeatACK {
char Reserved[23];
} HeartbeatACK;
// <EFBFBD>̶<EFBFBD>500<EFBFBD>ֽ<EFBFBD>
// 固定500字节
typedef struct MasterSettings {
int ReportInterval; // <EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int Is64Bit; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>64λ
char MasterVersion[12]; // <EFBFBD><EFBFBD><EFBFBD>ذ汾
int DetectSoftware; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int UsingFRPProxy; // <EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><EFBFBD>FRP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ReportInterval; // 上报间隔
int Is64Bit; // 主控是否64
char MasterVersion[12]; // 主控版本
int DetectSoftware; // 检测软件
int UsingFRPProxy; // 是否使用FRP代理
char WalletAddress[472]; // Wallets
int EnableKBLogger; // Since 2025-11-27
int EnableLog; // Since 2025-12-17
@@ -904,26 +904,26 @@ typedef struct MasterSettings {
#define MasterSettingsOldSize 500
#pragma pack(push, 1)
// 100<EFBFBD>ֽ<EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><>С + <20><><EFBFBD>÷<EFBFBD>ʽ + DLL<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 100字节: 运行类型 + 大小 + 调用方式 + DLL名称
typedef struct DllExecuteInfo {
int RunType; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int Size; // DLL <EFBFBD><EFBFBD>С
int CallType; // <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>ʽ
char Name[32]; // DLL <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int RunType; // 运行类型
int Size; // DLL 大小
int CallType; // 调用方式
char Name[32]; // DLL 名称
char Md5[33]; // DLL MD5
int Pid; // <EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
char Is32Bit; // <EFBFBD>Ƿ<EFBFBD>32λDLL
int Pid; // 被注入进程ID
char Is32Bit; // 是否32DLL
char Reseverd[18];
} DllExecuteInfo;
typedef struct DllExecuteInfoNew {
int RunType; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int Size; // DLL <EFBFBD><EFBFBD>С
int CallType; // <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>ʽ
char Name[32]; // DLL <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int RunType; // 运行类型
int Size; // DLL 大小
int CallType; // 调用方式
char Name[32]; // DLL 名称
char Md5[33]; // DLL MD5
int Pid; // <EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
char Is32Bit; // <EFBFBD>Ƿ<EFBFBD>32λDLL
int Pid; // 被注入进程ID
char Is32Bit; // 是否32DLL
char Reseverd[18];
char Parameters[400];
} DllExecuteInfoNew;
@@ -956,9 +956,9 @@ enum {
SHELLCODE = 0,
MEMORYDLL = 1,
CALLTYPE_DEFAULT = 0, // Ĭ<EFBFBD>ϵ<EFBFBD><EFBFBD>÷<EFBFBD>ʽ: ֻ<>Ǽ<EFBFBD><C7BC><EFBFBD>DLL,<2C><>Ҫ<EFBFBD><D2AA>DLL<4C><4C><EFBFBD><EFBFBD>ʱִ<CAB1>д<EFBFBD><D0B4><EFBFBD>
CALLTYPE_IOCPTHREAD = 1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>run<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>: DWORD (__stdcall *run)(void* lParam)
CALLTYPE_FRPC_CALL = 2, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>FRPC
CALLTYPE_DEFAULT = 0, // 默认调用方式: 只是加载DLL,需要在DLL加载时执行代码
CALLTYPE_IOCPTHREAD = 1, // 调用run函数启动线程: DWORD (__stdcall *run)(void* lParam)
CALLTYPE_FRPC_CALL = 2, // 调用FRPC
};
typedef DWORD(__stdcall* PidCallback)(void);
@@ -985,26 +985,26 @@ inline void xor_encrypt_decrypt(unsigned char *data, int len, const std::vector<
inline std::tm ToPekingTime(const time_t* t)
{
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>
// 获取当前时间(如果传入的指针为空)
std::time_t now = (t == nullptr) ? std::time(nullptr) : *t;
// <EFBFBD>̰߳<EFBFBD>ȫ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ UTC ʱ<EFBFBD><EFBFBD>
// 线程安全地转换为 UTC 时间
std::tm utc_time{};
#ifdef _WIN32 // Windows ʹ<EFBFBD><EFBFBD> gmtime_s
#ifdef _WIN32 // Windows 使用 gmtime_s
if (gmtime_s(&utc_time, &now) != 0) {
return { 0, 0, 0, 1, 0, 100 }; // ʧ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2000-01-01 00:00:00
return { 0, 0, 0, 1, 0, 100 }; // 失败时返回 2000-01-01 00:00:00
}
#else // Linux / macOS ʹ<EFBFBD><EFBFBD> gmtime_r
#else // Linux / macOS 使用 gmtime_r
if (gmtime_r(&now, &utc_time) == nullptr) {
return { 0, 0, 0, 1, 0, 100 };
}
#endif
// ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>UTC+8<EFBFBD><EFBFBD>
// 转换为北京时间(UTC+8
utc_time.tm_hour += 8;
// <EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 规范化时间(处理溢出,如跨天)
std::mktime(&utc_time);
return utc_time;
@@ -1027,11 +1027,11 @@ inline std::string ToPekingDateTime(const time_t* t)
}
typedef struct Validation {
char From[20]; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char To[20]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char Admin[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>صĹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>
int Port; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>˿ڣ<EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD>ǰ<EFBFBD>˿ڣ<EFBFBD>
char Checksum[16]; // Ԥ<EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
char From[20]; // 开始日期
char To[20]; // 结束日期
char Admin[100]; // 管理员地址(当前主控的公网地址)
int Port; // 管理员端口(默认当前端口)
char Checksum[16]; // 预留字段
Validation(float days, const char* admin, int port, const char* id="")
{
time_t from = time(NULL), to = from + time_t(86400 * days);
@@ -1052,7 +1052,7 @@ typedef struct Validation {
} Validation;
#ifdef _DEBUG
// Ϊ<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><EFBFBD>ʽ<EFBFBD>汾û<EFBFBD><EFBFBD>
// 为了解决远程桌面屏幕花屏问题而定义的宏,仅调试时使用,正式版本没有
#define SCREENYSPY_IMPROVE 0
#define SCREENSPY_WRITE 0
#endif
@@ -1066,7 +1066,7 @@ typedef struct Validation {
#include <windows.h>
#endif
// <EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>е<EFBFBD>λͼд<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
// 将内存中的位图写入文件
inline bool WriteBitmap(LPBITMAPINFO bmpInfo, const void* bmpData, const std::string& filePrefix, int index = -1)
{
char path[_MAX_PATH];
@@ -1091,7 +1091,7 @@ inline bool WriteBitmap(LPBITMAPINFO bmpInfo, const void* bmpData, const std::st
return false;
}
class MSG32 // <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(32λ)
class MSG32 // 自定义控制消息(32)
{
public:
uint32_t hwnd;
@@ -1126,9 +1126,9 @@ public:
}
};
// Windows <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢMSG<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD>64λϵͳ<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>Ϣ(ͳһ<CDB3><D2BB><EFBFBD><EFBFBD>64λwindows <EFBFBD><EFBFBD>MSG<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
class MSG64 // <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(64λ)
// Windows 自定义的消息MSG在32位和64位系统下大小不同导致跨平台架构远程控制异常
// 需要使用自定义的消息(统一采用64windows MSG定义)
class MSG64 // 自定义控制消息(64)
{
public:
uint64_t hwnd;
@@ -1203,7 +1203,7 @@ typedef struct ClientMsg {
ClientMsg(const char* title, const char* text)
{
cmd = TOKEN_CLIENT_MSG;
strcpy_s(this->title, title ? title : "<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Ϣ");
strcpy_s(this->title, title ? title : "提示信息");
strcpy_s(this->text, text ? text : "");
}
} ClientMsg;

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <windows.h>
// A DLL runner.

View File

@@ -1,115 +1,115 @@
#pragma once
#pragma once
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
// 加密函数
inline void encrypt_v1(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
if (i % 2 == 0) {
data[i] = data[i] + key; // ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> key
data[i] = data[i] + key; // 偶数索引加 key
} else {
data[i] = data[i] - key; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> key
data[i] = data[i] - key; // 奇数索引减 key
}
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
// 解密函数
inline void decrypt_v1(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
if (i % 2 == 0) {
data[i] = data[i] - key; // ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> key <EFBFBD><EFBFBD>ԭ
data[i] = data[i] - key; // 偶数索引减 key 还原
} else {
data[i] = data[i] + key; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> key <EFBFBD><EFBFBD>ԭ
data[i] = data[i] + key; // 奇数索引加 key 还原
}
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> - ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ת
// 加密函数 - 使用异或和位旋转
inline void encrypt_v2(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
// ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>key<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ1λ
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>key<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ1λ
// 偶数索引与key异或后左循环移位1位
// 奇数索引与key异或后右循环移位1位
data[i] ^= key;
if (i % 2 == 0) {
data[i] = (data[i] << 1) | (data[i] >> 7); // <EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
data[i] = (data[i] << 1) | (data[i] >> 7); // 左循环移位
} else {
data[i] = (data[i] >> 1) | (data[i] << 7); // <EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
data[i] = (data[i] >> 1) | (data[i] << 7); // 右循环移位
}
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
// 解密函数
inline void decrypt_v2(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
// <EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 加密的逆操作
if (i % 2 == 0) {
data[i] = (data[i] >> 1) | (data[i] << 7); // <EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ԭ
data[i] = (data[i] >> 1) | (data[i] << 7); // 右循环移位还原
} else {
data[i] = (data[i] << 1) | (data[i] >> 7); // <EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ԭ
data[i] = (data[i] << 1) | (data[i] >> 7); // 左循环移位还原
}
data[i] ^= key; // <EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ
data[i] ^= key; // 再次异或还原
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> V3 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>key<65>Ķ<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
// 加密函数 V3 - 基于索引和key的动态计算
inline void encrypt_v3(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
unsigned char dynamic_key = key + (i % 8); // <EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD>key<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char dynamic_key = key + (i % 8); // 动态变化的key基于索引
if (i % 3 == 0) {
data[i] = (data[i] + dynamic_key) ^ dynamic_key; // <EFBFBD>ӷ<EFBFBD> + <20><><EFBFBD><EFBFBD>
data[i] = (data[i] + dynamic_key) ^ dynamic_key; // 加法 + 异或
} else if (i % 3 == 1) {
data[i] = (data[i] ^ dynamic_key) - dynamic_key; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD>
data[i] = (data[i] ^ dynamic_key) - dynamic_key; // 异或 + 减法
} else {
data[i] = ~(data[i] + dynamic_key); // ȡ<EFBFBD><EFBFBD> + <20>ӷ<EFBFBD>
data[i] = ~(data[i] + dynamic_key); // 取反 + 加法
}
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> V3
// 解密函数 V3
inline void decrypt_v3(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
unsigned char dynamic_key = key + (i % 8);
if (i % 3 == 0) {
data[i] = (data[i] ^ dynamic_key) - dynamic_key; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD>
data[i] = (data[i] ^ dynamic_key) - dynamic_key; // 逆操作:先异或再减
} else if (i % 3 == 1) {
data[i] = (data[i] + dynamic_key) ^ dynamic_key; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[i] = (data[i] + dynamic_key) ^ dynamic_key; // 逆操作:先加再异或
} else {
data[i] = ~data[i] - dynamic_key; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD>
data[i] = ~data[i] - dynamic_key; // 逆操作:取反再减
}
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> V4 - <20><><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 加密函数 V4 - 基于伪随机序列(简单线性同余生成器)
inline void encrypt_v4(unsigned char* data, size_t length, unsigned char key)
{
unsigned char rand = key;
for (size_t i = 0; i < length; i++) {
rand = (rand * 13 + 17) % 256; // α<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>LCG<EFBFBD><EFBFBD>
data[i] ^= rand; // <EFBFBD><EFBFBD>α<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rand = (rand * 13 + 17) % 256; // 伪随机数生成(LCG
data[i] ^= rand; // 用伪随机数异或加密
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> V4<56><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7>ԣ<EFBFBD>
// 解密函数 V4与加密完全相同因为异或的自反性
inline void decrypt_v4(unsigned char* data, size_t length, unsigned char key)
{
encrypt_v4(data, length, key); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵĽ<EFBFBD><EFBFBD>ܾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
encrypt_v4(data, length, key); // 异或加密的解密就是再执行一次
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> V5 - V5 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>
// 加密函数 V5 - V5 版本(动态密钥派生 + 多重位运算)
inline void encrypt_v5(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
unsigned char dynamic_key = (key + i) ^ 0x55; // <EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char dynamic_key = (key + i) ^ 0x55; // 动态密钥派生
data[i] = ((data[i] + dynamic_key) ^ (dynamic_key << 3)) + (i % 7);
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> V5
// 解密函数 V5
inline void decrypt_v5(unsigned char* data, size_t length, unsigned char key)
{
for (size_t i = 0; i < length; i++) {
@@ -118,18 +118,18 @@ inline void decrypt_v5(unsigned char* data, size_t length, unsigned char key)
}
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD> V6<56><36><EFBFBD>Է<EFBFBD><D4B7>ԣ<EFBFBD> - V6 <20><EFBFBD><E6B1BE>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20>Է<EFBFBD><D4B7>Խ<EFBFBD><D4BD>ܣ<EFBFBD>
// 加密/解密函数 V6自反性 - V6 版本(伪随机流混淆 + 自反性解密)
inline void encrypt_v6(unsigned char* data, size_t length, unsigned char key)
{
unsigned char rand = key;
for (size_t i = 0; i < length; i++) {
rand = (rand * 31 + 17) % 256; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data[i] ^= rand + i; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ̬
rand = (rand * 31 + 17) % 256; // 简单伪随机生成
data[i] ^= rand + i; // 异或动态值
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD> V6<56><36>ֱ<EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD> encrypt_v6 <EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>
// 解密函数 V6直接调用 encrypt_v6 即可)
inline void decrypt_v6(unsigned char* data, size_t length, unsigned char key)
{
encrypt_v6(data, length, key); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD>
encrypt_v6(data, length, key); // 异或的自反性
}

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
// This file implements a serial of data encoding methods.
#include <vector>
extern "C" {

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <string>
#include <vector>
@@ -6,12 +6,12 @@
#pragma pack(push, 1)
struct FileChunkPacket {
unsigned char cmd; // COMMAND_SEND_FILE
uint32_t fileIndex; // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t totalNum; // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint64_t fileSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С
uint64_t offset; // <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>е<EFBFBD>ƫ<EFBFBD><EFBFBD>
uint64_t dataLength; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
uint64_t nameLength; // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '\0'<EFBFBD><EFBFBD>
uint32_t fileIndex; // 文件编号
uint32_t totalNum; // 文件总数
uint64_t fileSize; // 整个文件大小
uint64_t offset; // 当前块在文件中的偏移
uint64_t dataLength; // 本块数据长度
uint64_t nameLength; // 文件名长度(不含 '\0'
};
#pragma pack(pop)

View File

@@ -1,20 +1,20 @@

/*
原文https://github.com/yuanyuanxiang/SimpleRemoter/releases/tag/v1.0.1.1
鍘熸枃锛歨ttps://github.com/yuanyuanxiang/SimpleRemoter/releases/tag/v1.0.1.1
自v1.1.1版本开始,主控程序需要授权,并且会自动连接到授权服务器,您可以联系作者请求授权。
如果对这个有意见,请使用早期版本(<v1.0.8)。自行修改和编译程序,也可以解决该问题(参考 #91
鑷獀1.1.1鐗堟湰寮€濮嬶紝涓绘帶绋嬪簭闇€瑕佹巿鏉冿紝骞朵笖浼氳嚜鍔ㄨ繛鎺ュ埌鎺堟潈鏈嶅姟鍣紝鎮ㄥ彲浠ヨ仈绯讳綔鑰呰姹傛巿鏉冦€?
濡傛灉瀵硅繖涓湁鎰忚锛岃浣跨敤鏃╂湡鐗堟湰锛?v1.0.8锛夈€傝嚜琛屼慨鏀瑰拰缂栬瘧绋嬪簭锛屼篃鍙互瑙e喅璇ラ棶棰橈紙鍙傝€?#91锛夈€?
作者投入了业余精力来维护、更新本软件,开源仅供学习交流之用,盈利并非主要目的。
若需使用发布版本,须获得授权,需要支付一定的授权费用。
浣滆€呮姇鍏ヤ簡涓氫綑绮惧姏鏉ョ淮鎶ゃ€佹洿鏂版湰杞欢锛屽紑婧愪粎渚涘涔犱氦娴佷箣鐢紝鐩堝埄骞堕潪涓昏鐩殑銆?
鑻ラ渶浣跨敤鍙戝竷鐗堟湰锛岄』鑾峰緱鎺堟潈锛岄渶瑕佹敮浠樹竴瀹氱殑鎺堟潈璐圭敤銆?
你可以自由修改代码并自行编译使用(请参考上述问题:#91此情况下不收取任何费用。
建议用户优先尝试自行编译,或测试旧版本是否已能满足需求;如仍有需要且具备预算,可再考虑正式授权。
浣犲彲浠ヨ嚜鐢变慨鏀逛唬鐮佸苟鑷缂栬瘧浣跨敤锛堣鍙傝€冧笂杩伴棶棰橈細#91锛夛紝姝ゆ儏鍐典笅涓嶆敹鍙栦换浣曡垂鐢ㄣ€?
寤鸿鐢ㄦ埛浼樺厛灏濊瘯鑷缂栬瘧锛屾垨娴嬭瘯鏃х増鏈槸鍚﹀凡鑳芥弧瓒抽渶姹傦紱濡備粛鏈夐渶瑕佷笖鍏峰棰勭畻锛屽彲鍐嶈€冭檻姝e紡鎺堟潈銆?
如已获得授权,后续发布的新版本可继续使用,且未使用完的授权时间将自动顺延至新版本。
濡傚凡鑾峰緱鎺堟潈锛屽悗缁彂甯冪殑鏂扮増鏈彲缁х画浣跨敤锛屼笖鏈娇鐢ㄥ畬鐨勬巿鏉冩椂闂村皢鑷姩椤哄欢鑷虫柊鐗堟湰銆?
⚠️ 本软件仅限于合法、正当、合规的用途。禁止将本软件用于任何违法、恶意、侵权或违反道德规范的行为。
作者不对任何因滥用软件所引发的法律责任、损害或争议承担任何责任,并保留在发现或怀疑不当用途时拒绝或终止授权的权利。
鈿狅笍 鏈蒋浠朵粎闄愪簬鍚堟硶銆佹褰撱€佸悎瑙勭殑鐢ㄩ€斻€傜姝㈠皢鏈蒋浠剁敤浜庝换浣曡繚娉曘€佹伓鎰忋€佷镜鏉冩垨杩濆弽閬撳痉瑙勮寖鐨勮涓恒€?
浣滆€呬笉瀵逛换浣曞洜婊ョ敤杞欢鎵€寮曞彂鐨勬硶寰嬭矗浠汇€佹崯瀹虫垨浜夎鎵挎媴浠讳綍璐d换锛屽苟淇濈暀鍦ㄥ彂鐜版垨鎬€鐤戜笉褰撶敤閫旀椂鎷掔粷鎴栫粓姝㈡巿鏉冪殑鏉冨埄銆?
--------------------------------------------------------------------------------------------------------------
@@ -35,14 +35,14 @@ If further functionality is required and budget is available, you may then consi
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.
鈿狅笍 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版本,甚至使用无需授权的版本(如能满足需求).
// 当然这些早期版本没有包含问题修复和新的功能.
// 涓绘帶绋嬪簭鍞竴鏍囪瘑
// 鎻愮ず: 淇敼杩欎釜鍝堝笇鍙兘閫犳垚涓€浜涘姛鑳藉彈闄愶紝鑷富鎺х殑v1.1.1鐗堟湰璧凤紝绋嬪簭鐨勮澶氬姛鑳戒緷璧栦簬璇ュ搱甯?
// 鍥犳锛屽浜庢兂鐮撮櫎绋嬪簭鎺堟潈闄愬埗鐨勮涓猴紝寤鸿鍩轰簬v1.1.1鐗堟湰锛岀敋鑷充娇鐢ㄦ棤闇€鎺堟潈鐨勭増鏈紙濡傝兘婊¤冻闇€姹傦級.
// 褰撶劧杩欎簺鏃╂湡鐗堟湰娌℃湁鍖呭惈闂淇鍜屾柊鐨勫姛鑳?
#define MASTER_HASH "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43"

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
// This file implements a serial of data header encoding methods.
#include <cstring>
#include <common/skCrypter.h>
@@ -19,7 +19,7 @@ enum HeaderEncType {
HeaderEncNum,
};
// <EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>(4<>ֽ<EFBFBD>) + <20><><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>(4<>ֽ<EFBFBD>)
// 数据编码格式:标识符 + 编码后长度(4字节) + 解码后长度(4字节)
const int FLAG_COMPLEN = 4;
const int FLAG_LENGTH = 8;
const int HDR_LENGTH = FLAG_LENGTH + 2 * sizeof(unsigned int);
@@ -35,12 +35,12 @@ inline void default_decrypt(unsigned char* data, size_t length, unsigned char ke
{
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
// 加密函数
inline void encrypt(unsigned char* data, size_t length, unsigned char key)
{
if (key == 0) return;
for (size_t i = 0; i < length; ++i) {
unsigned char k = static_cast<unsigned char>(key ^ (i * 31)); // <EFBFBD><EFBFBD>̬<EFBFBD>Ŷ<EFBFBD> key
unsigned char k = static_cast<unsigned char>(key ^ (i * 31)); // 动态扰动 key
int value = static_cast<int>(data[i]);
switch (i % 4) {
case 0:
@@ -53,14 +53,14 @@ inline void encrypt(unsigned char* data, size_t length, unsigned char key)
value -= k;
break;
case 3:
value = ~(value ^ k); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
value = ~(value ^ k); // 多步变换:先异或再取反
break;
}
data[i] = static_cast<unsigned char>(value & 0xFF);
}
}
// <EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
// 解密函数
inline void decrypt(unsigned char* data, size_t length, unsigned char key)
{
if (key == 0) return;
@@ -78,7 +78,7 @@ inline void decrypt(unsigned char* data, size_t length, unsigned char key)
value += k;
break;
case 3:
value = ~(value) ^ k; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
value = ~(value) ^ k; // 解开:先取反,再异或
break;
}
data[i] = static_cast<unsigned char>(value & 0xFF);
@@ -111,7 +111,7 @@ typedef struct HeaderFlag {
}
} HeaderFlag;
// д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>ͷ
// 写入数据包的头
inline HeaderFlag GetHead(EncFun enc)
{
char header[FLAG_LENGTH + 1] = { 'H','E','L','L', 0 };
@@ -144,8 +144,8 @@ inline int compare(const char *flag, const char *magic, int len, DecFun dec, uns
return -1;
}
// <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>бȶ<EFBFBD>
// 比对数据包前几个字节
// 会用指定的解密函数先对数据包头进行解密,再来进行比对
inline FlagType CheckHead(const char* flag, DecFun dec)
{
FlagType type = FLAG_UNKNOWN;
@@ -163,7 +163,7 @@ inline FlagType CheckHead(const char* flag, DecFun dec)
return type;
}
// <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>
// 解密需要尝试多种方法,以便能兼容老版本通讯协议
inline FlagType CheckHead(char* flag, HeaderEncType& funcHit)
{
static const DecFun methods[] = { default_decrypt, decrypt, decrypt_v1, decrypt_v2, decrypt_v3, decrypt_v4, decrypt_v5, decrypt_v6 };

View File

@@ -1,4 +1,4 @@
//=====================================================================
//=====================================================================
//
// KCP - A Better ARQ Protocol Implementation
// skywind3000 (at) gmail.com, 2010-2011

View File

@@ -1,4 +1,4 @@
//=====================================================================
//=====================================================================
//
// KCP - A Better ARQ Protocol Implementation
// skywind3000 (at) gmail.com, 2010-2011

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "common/commands.h"
@@ -51,24 +51,24 @@ static inline std::string GetRegistryName() {
return name;
}
// 获取当前会话用户的注册表根键
// SYSTEM 进程无法使用 HKEY_CURRENT_USER,需要通过 HKEY_USERS\<SID> 访问
// 返回的 HKEY 需要调用者在使用完毕后调用 RegCloseKey 关闭
// 鑾峰彇褰撳墠浼氳瘽鐢ㄦ埛鐨勬敞鍐岃〃鏍归敭
// SYSTEM 杩涚▼鏃犳硶浣跨敤 HKEY_CURRENT_USER锛岄渶瑕侀€氳繃 HKEY_USERS\<SID> 璁块棶
// 杩斿洖鐨?HKEY 闇€瑕佽皟鐢ㄨ€呭湪浣跨敤瀹屾瘯鍚庤皟鐢?RegCloseKey 鍏抽棴
inline HKEY GetCurrentUserRegistryKey()
{
HKEY hUserKey = NULL;
// 获取当前进程的会话 ID
// 鑾峰彇褰撳墠杩涚▼鐨勪細璇?ID
DWORD sessionId = 0;
ProcessIdToSessionId(GetCurrentProcessId(), &sessionId);
// 获取该会话的用户令牌
// 鑾峰彇璇ヤ細璇濈殑鐢ㄦ埛浠ょ墝
HANDLE hUserToken = NULL;
if (!WTSQueryUserToken(sessionId, &hUserToken)) {
// 如果失败(可能不是服务进程),回退到 HKEY_CURRENT_USER
// 濡傛灉澶辫触锛堝彲鑳戒笉鏄湇鍔¤繘绋嬶級锛屽洖閫€鍒?HKEY_CURRENT_USER
return HKEY_CURRENT_USER;
}
// 获取令牌中的用户信息大小
// 鑾峰彇浠ょ墝涓殑鐢ㄦ埛淇℃伅澶у皬
DWORD dwSize = 0;
GetTokenInformation(hUserToken, TokenUser, NULL, 0, &dwSize);
if (dwSize == 0) {
@@ -76,7 +76,7 @@ inline HKEY GetCurrentUserRegistryKey()
return HKEY_CURRENT_USER;
}
// 分配内存并获取用户信息
// 鍒嗛厤鍐呭瓨骞惰幏鍙栫敤鎴蜂俊鎭?
TOKEN_USER* pTokenUser = (TOKEN_USER*)malloc(dwSize);
if (!pTokenUser) {
SAFE_CLOSE_HANDLE(hUserToken);
@@ -89,7 +89,7 @@ inline HKEY GetCurrentUserRegistryKey()
return HKEY_CURRENT_USER;
}
// SID 转换为字符串
// 灏?SID 杞崲涓哄瓧绗︿覆
LPSTR szSid = NULL;
if (!ConvertSidToStringSidA(pTokenUser->User.Sid, &szSid)) {
free(pTokenUser);
@@ -97,9 +97,9 @@ inline HKEY GetCurrentUserRegistryKey()
return HKEY_CURRENT_USER;
}
// 打开 HKEY_USERS\<SID>
// 鎵撳紑 HKEY_USERS\<SID>
if (RegOpenKeyExA(HKEY_USERS, szSid, 0, KEY_READ | KEY_WRITE, &hUserKey) != ERROR_SUCCESS) {
// 尝试只读方式
// 灏濊瘯鍙鏂瑰紡
if (RegOpenKeyExA(HKEY_USERS, szSid, 0, KEY_READ, &hUserKey) != ERROR_SUCCESS) {
hUserKey = NULL;
}
@@ -112,7 +112,7 @@ inline HKEY GetCurrentUserRegistryKey()
return hUserKey ? hUserKey : HKEY_CURRENT_USER;
}
// 检查是否需要关闭注册表根键(非预定义键需要关闭)
// 妫€鏌ユ槸鍚﹂渶瑕佸叧闂敞鍐岃〃鏍归敭锛堥潪棰勫畾涔夐敭闇€瑕佸叧闂級
inline void CloseUserRegistryKeyIfNeeded(HKEY hKey)
{
if (hKey != HKEY_CURRENT_USER &&
@@ -130,7 +130,7 @@ inline void CloseUserRegistryKeyIfNeeded(HKEY hKey)
#endif
// 配置读取类: 文件配置.
// 閰嶇疆璇诲彇绫? 鏂囦欢閰嶇疆.
class config
{
private:
@@ -154,7 +154,7 @@ public:
return ::GetPrivateProfileIntA(MainKey.c_str(), SubKey.c_str(), nDef, m_IniFilePath);
}
// 获取配置项中的第一个整数
// 鑾峰彇閰嶇疆椤逛腑鐨勭涓€涓暣鏁?
virtual int Get1Int(const std::string& MainKey, const std::string& SubKey, char ch=';', int nDef=0)
{
std::string s = GetStr(MainKey, SubKey, "");
@@ -181,7 +181,7 @@ public:
}
};
// 配置读取类: 注册表配置.
// 閰嶇疆璇诲彇绫? 娉ㄥ唽琛ㄩ厤缃?
class iniFile : public config
{
private:
@@ -204,13 +204,13 @@ public:
}
}
// 写入整数,实际写为字符串
// 鍐欏叆鏁存暟锛屽疄闄呭啓涓哄瓧绗︿覆
bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) override
{
return SetStr(MainKey, SubKey, std::to_string(Data));
}
// 写入字符串
// 鍐欏叆瀛楃涓?
bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) override
{
std::string fullPath = m_SubKeyPath + "\\" + MainKey;
@@ -225,7 +225,7 @@ public:
return bRet;
}
// 读取字符串
// 璇诲彇瀛楃涓?
std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") override
{
std::string fullPath = m_SubKeyPath + "\\" + MainKey;
@@ -245,7 +245,7 @@ public:
return result;
}
// 读取整数,先从字符串中转换
// 璇诲彇鏁存暟锛屽厛浠庡瓧绗︿覆涓浆鎹?
int GetInt(const std::string& MainKey, const std::string& SubKey, int defVal = 0) override
{
std::string val = GetStr(MainKey, SubKey);
@@ -282,19 +282,19 @@ public:
}
}
// 写入整数(写为二进制)
// 鍐欏叆鏁存暟锛堝啓涓轰簩杩涘埗锛?
bool SetInt(const std::string& MainKey, const std::string& SubKey, int Data) override
{
return SetBinary(MainKey, SubKey, reinterpret_cast<const BYTE*>(&Data), sizeof(int));
}
// 写入字符串(以二进制方式)
// 鍐欏叆瀛楃涓诧紙浠ヤ簩杩涘埗鏂瑰紡锛?
bool SetStr(const std::string& MainKey, const std::string& SubKey, const std::string& Data) override
{
return SetBinary(MainKey, SubKey, reinterpret_cast<const BYTE*>(Data.data()), static_cast<DWORD>(Data.size()));
}
// 读取字符串(从二进制数据转换)
// 璇诲彇瀛楃涓诧紙浠庝簩杩涘埗鏁版嵁杞崲锛?
std::string GetStr(const std::string& MainKey, const std::string& SubKey, const std::string& def = "") override
{
std::vector<BYTE> buffer;
@@ -304,7 +304,7 @@ public:
return std::string(buffer.begin(), buffer.end());
}
// 读取整数(从二进制解析)
// 璇诲彇鏁存暟锛堜粠浜岃繘鍒惰В鏋愶級
int GetInt(const std::string& MainKey, const std::string& SubKey, int defVal = 0) override
{
std::vector<BYTE> buffer;

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <vector>
#include <cstdint>
@@ -11,14 +11,14 @@ class StreamCipher
private:
uint32_t state;
// <EFBFBD>򵥷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 简单非线性伪随机数生成器
uint8_t prngNext()
{
// <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>xorshift32<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 例子:xorshift32,改造一点非线性
state ^= (state << 13);
state ^= (state >> 17);
state ^= (state << 5);
// <EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>򵥵ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա任
// 再混合一个简单的非线性变换
uint8_t out = (state & 0xFF) ^ ((state >> 8) & 0xFF);
return out;
}
@@ -26,7 +26,7 @@ private:
public:
StreamCipher(uint32_t key) : state(key) {}
// <EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>Գƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD>
// 加密解密(对称,长度不变)
void process(uint8_t* data, size_t len)
{
for (size_t i = 0; i < len; ++i) {
@@ -38,20 +38,20 @@ public:
class PrintableXORCipher
{
public:
// <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>32~126<32><36>Χ<EFBFBD><CEA7><EFBFBD>ַ<EFBFBD>
// 对称加解密,输入和输出均为可打印字符
// 前提输入是32~126范围的字符
void process(char* data, size_t len)
{
for (size_t i = 0; i < len; ++i) {
char c = data[i];
// <EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ǿɴ<EFBFBD>ӡ<EFBFBD><EFBFBD>Χ
// 保证输入字符是可打印范围
if (c < 32 || c > 126) {
// <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>
// 不处理非打印字符(或者你也可以自定义错误处理)
continue;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x55<EFBFBD><EFBFBD>'U'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32~126֮<EFBFBD><EFBFBD>
// 异或0x55'U')且确保结果仍是32~126之间
char encrypted = c ^ 0x55;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>Χ<EFBFBD>ڣ<EFBFBD><EFBFBD>򵥼Ӽ<EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 如果不在范围,修正回范围内(简单加减循环)
if (encrypted < 32) encrypted += 95;
if (encrypted > 126) encrypted -= 95;
data[i] = encrypted;

View File

@@ -1,4 +1,4 @@
#define JPEG_LIB_VERSION 62
#define JPEG_LIB_VERSION 62
#define LIBJPEG_TURBO_VERSION 2.1.1
#define LIBJPEG_TURBO_VERSION_NUMBER 2001001

View File

@@ -1,4 +1,4 @@
/*
/*
* jmorecfg.h
*
* This file was part of the Independent JPEG Group's software:

View File

@@ -1,4 +1,4 @@
/*
/*
* jpeglib.h
*
* This file was part of the Independent JPEG Group's software:

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <string>
#include <winsock2.h>
#include <iphlpapi.h>
@@ -37,8 +37,8 @@ inline void splitIpPort(const std::string& input, std::string& ip, std::string&
}
/**
* IPConverter: IP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡIP<EFBFBD><EFBFBD>Ӧ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD>.
* Ŀǰ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>API<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>.
* IPConverter: IP 操作类用于获取公网IP获取IP对应的地理位置等.
* 目前是通过调用公开的互联网API完成假如该查询网站不可访问则需要重新适配.
*/
class IPConverter
{
@@ -49,23 +49,23 @@ public:
}
/**
* <EFBFBD>жϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP <20><>ַ<EFBFBD>Ƿ<EFBFBD><C7B7>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
* @param ipAddress IP <EFBFBD><EFBFBD>ַ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "192.168.1.1"<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true; <EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> false
* 判断给定的 IP 地址是否是局域网(内网)IP
* @param ipAddress IP 地址字符串(如 "192.168.1.1"
* @return 如果是局域网 IP返回 true; 否则返回 false
*/
bool IsPrivateIP(const std::string& ipAddress)
{
// <EFBFBD><EFBFBD> IP <EFBFBD><EFBFBD>ַ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƹ<EFBFBD>ʽ
// IP 地址字符串转换为二进制格式
in_addr addr;
if (inet_pton(AF_INET, ipAddress.c_str(), &addr) != 1) {
Mprintf("Invalid IP address: %s\n", ipAddress.c_str());
return false;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP <20><>ַת<D6B7><D7AA>Ϊ<EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 将二进制 IP 地址转换为无符号整数
unsigned long ip = ntohl(addr.s_addr);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP <20><>ַ<EFBFBD>Ƿ<EFBFBD><C7B7>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>
// 检查 IP 地址是否在局域网范围内
if ((ip >= 0x0A000000 && ip <= 0x0AFFFFFF) || // 10.0.0.0/8
(ip >= 0xAC100000 && ip <= 0xAC1FFFFF) || // 172.16.0.0/12
(ip >= 0xC0A80000 && ip <= 0xC0A8FFFF) || // 192.168.0.0/16
@@ -76,13 +76,13 @@ public:
return false;
}
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
// 获取本机地理位置
std::string GetLocalLocation()
{
return GetGeoLocation(getPublicIP());
}
// <EFBFBD><EFBFBD>ȡ IP <EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>[ipinfo.io])
// 获取 IP 地址地理位置(基于[ipinfo.io])
std::string GetGeoLocation(const std::string& IP)
{
if (IP.empty()) return "";
@@ -98,14 +98,14 @@ public:
DWORD bytesRead;
std::string readBuffer;
// <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> WinINet
// 初始化 WinINet
hInternet = InternetOpen("IP Geolocation", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet == NULL) {
Mprintf("InternetOpen failed! %d\n", GetLastError());
return "";
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> HTTP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 创建 HTTP 请求句柄
std::string url = "http://ipinfo.io/" + ip + "/json";
hConnect = InternetOpenUrlA(hInternet, url.c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hConnect == NULL) {
@@ -114,13 +114,13 @@ public:
return "";
}
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 读取返回的内容
char buffer[4096];
while (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0) {
readBuffer.append(buffer, bytesRead);
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> JSON <EFBFBD><EFBFBD>Ӧ
// 解析 JSON 响应
Json::Value jsonData;
Json::Reader jsonReader;
std::string location;
@@ -128,7 +128,7 @@ public:
if (jsonReader.parse(readBuffer, jsonData)) {
std::string country = jsonData["country"].asString();
std::string city = jsonData["city"].asString();
std::string loc = jsonData["loc"].asString(); // <EFBFBD><EFBFBD>γ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
std::string loc = jsonData["loc"].asString(); // 经纬度信息
if (city.empty() && country.empty()) {
} else if (city.empty()) {
location = country;
@@ -144,7 +144,7 @@ public:
Mprintf("Failed to parse JSON response: %s.\n", readBuffer.c_str());
}
// <EFBFBD>رվ<EFBFBD><EFBFBD><EFBFBD>
// 关闭句柄
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
@@ -158,7 +158,7 @@ public:
bool isLocalIP(const std::string& ip)
{
if (isLoopbackAddress(ip)) return true; // <EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD>ַ
if (isLoopbackAddress(ip)) return true; // 先检查回环地址
ULONG outBufLen = 15000;
IP_ADAPTER_ADDRESSES* pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);
@@ -185,29 +185,29 @@ public:
return false;
}
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP, <20><>ȡʧ<C8A1>ܷ<EFBFBD><DCB7>ؿ<EFBFBD>
// 获取公网IP, 获取失败返回空
std::string getPublicIP()
{
clock_t t = clock();
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>ѯԴ
// 多个候选查询源
static const std::vector<std::string> urls = {
"https://checkip.amazonaws.com", // ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
"https://api.ipify.org", // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>
"https://ipinfo.io/ip", // <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD>
"https://icanhazip.com", // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
"https://ifconfig.me/ip" // ĩλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
"https://checkip.amazonaws.com", // 全球最稳
"https://api.ipify.org", // 主流高可用
"https://ipinfo.io/ip", // 备用方案
"https://icanhazip.com", // 轻量快速
"https://ifconfig.me/ip" // 末位兜底
};
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> WinINet <EFBFBD>
// 打开 WinINet 会话
HINTERNET hInternet = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (!hInternet) {
Mprintf("InternetOpen failed. cost %d ms.\n", clock() - t);
return "";
}
// <EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱ (<28><><EFBFBD><EFBFBD>)
DWORD timeout = 3000; // 3 <EFBFBD><EFBFBD>
// 设置超时 (毫秒)
DWORD timeout = 3000; // 3
InternetSetOptionA(hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &timeout, sizeof(timeout));
InternetSetOptionA(hInternet, INTERNET_OPTION_SEND_TIMEOUT, &timeout, sizeof(timeout));
InternetSetOptionA(hInternet, INTERNET_OPTION_RECEIVE_TIMEOUT, &timeout, sizeof(timeout));
@@ -216,7 +216,7 @@ public:
char buffer[2048];
DWORD bytesRead = 0;
// <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ͬ IP <20><>ѯԴ
// 轮询不同 IP 查询源
for (const auto& url : urls) {
HINTERNET hConnect = InternetOpenUrlA(
hInternet, url.c_str(), NULL, 0,
@@ -225,19 +225,19 @@ public:
);
if (!hConnect) {
continue; // <EFBFBD><EFBFBD>ǰԴʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
continue; // 当前源失败,尝试下一个
}
memset(buffer, 0, sizeof(buffer));
if (InternetReadFile(hConnect, buffer, sizeof(buffer) - 1, &bytesRead) && bytesRead > 0) {
result.assign(buffer, bytesRead);
// ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD>Ϳո<EFBFBD>
// 去除换行符和空格
while (!result.empty() && (result.back() == '\n' || result.back() == '\r' || result.back() == ' '))
result.pop_back();
InternetCloseHandle(hConnect);
break; // <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break; // 成功获取,停止尝试
}
InternetCloseHandle(hConnect);

View File

@@ -1,13 +1,13 @@
#pragma once
#pragma once
#pragma warning(disable: 4996)
#pragma warning(disable: 4819)
// 互斥锁、睡眠函数、自动锁、自动计时、自动日志等
// 浜掓枼閿併€佺潯鐪犲嚱鏁般€佽嚜鍔ㄩ攣銆佽嚜鍔ㄨ鏃躲€佽嚜鍔ㄦ棩蹇楃瓑
#include "logger.h"
// 自动日志
// 鑷姩鏃ュ織
class CAutoLog
{
private:
@@ -64,8 +64,8 @@ public:
}
protected:
CRITICAL_SECTION* m_cs; // 外部锁
CRITICAL_SECTION i_cs; // 内部锁
CRITICAL_SECTION* m_cs; // 澶栭儴閿?
CRITICAL_SECTION i_cs; // 鍐呴儴閿?
};
typedef CLock CLocker;
@@ -104,7 +104,7 @@ public:
}
};
// 智能计时器,计算函数的耗时
// 鏅鸿兘璁℃椂鍣紝璁$畻鍑芥暟鐨勮€楁椂
class auto_tick
{
private:
@@ -147,7 +147,7 @@ public:
};
#if defined (_DEBUG) || defined (WINDOWS)
// 智能计算当前函数的耗时,超时会打印
// 鏅鸿兘璁$畻褰撳墠鍑芥暟鐨勮€楁椂锛岃秴鏃朵細鎵撳嵃
#define AUTO_TICK(thresh, tag) auto_tick TICK(__FILE__, __FUNCTION__, __LINE__, thresh, tag)
#define STOP_TICK TICK.stop()
#else
@@ -160,14 +160,14 @@ public:
#include <MMSystem.h>
#pragma comment(lib, "winmm.lib")
// 高精度的睡眠函数
// 楂樼簿搴︾殑鐫$湢鍑芥暟
#define Sleep_m(ms) { Sleep(ms); }
// 以步长n毫秒在条件C下等待T秒(n是步长必须能整除1000)
// 浠ユ闀縩姣鍦ㄦ潯浠禖涓嬬瓑寰匱绉?n鏄闀匡紝蹇呴』鑳芥暣闄?000)
#define WAIT_n(C, T, n) { int s=(1000*(T))/(n); s=max(s,1); while((C)&&(s--))Sleep(n); }
// 在条件C成立时等待T秒(步长10ms)
// 鍦ㄦ潯浠禖鎴愮珛鏃剁瓑寰匱绉?姝ラ暱10ms)
#define WAIT(C, T) { WAIT_n(C, T, 10); }
// 在条件C成立时等待T秒(步长1ms)
// 鍦ㄦ潯浠禖鎴愮珛鏃剁瓑寰匱绉?姝ラ暱1ms)
#define WAIT_1(C, T) { WAIT_n(C, T, 1); }

View File

@@ -1,8 +1,8 @@
#pragma once
#pragma once
#include "header.h"
// 数据包协议封装格式
// 鏁版嵁鍖呭崗璁皝瑁呮牸寮?
// Copy left: 962914132@qq.com & ChatGPT
enum PkgMaskType {
MaskTypeUnknown = -1,
@@ -18,16 +18,16 @@ inline ULONG UnMaskHttp(char* src, ULONG srcSize)
const char* header_end_mark = "\r\n\r\n";
const ULONG mark_len = 4;
// 查找 HTTP 头部结束标记
// 鏌ユ壘 HTTP 澶撮儴缁撴潫鏍囪
for (ULONG i = 0; i + mark_len <= srcSize; ++i) {
if (memcmp(src + i, header_end_mark, mark_len) == 0) {
return i + mark_len; // 返回 Body 起始位置
return i + mark_len; // 杩斿洖 Body 璧峰浣嶇疆
}
}
return 0; // 无效数据
return 0; // 鏃犳晥鏁版嵁
}
// TryUnMask 尝试去掉伪装的协议头.
// TryUnMask 灏濊瘯鍘绘帀浼鐨勫崗璁ご.
inline ULONG TryUnMask(char* src, ULONG srcSize, PkgMaskType& maskHit)
{
if (srcSize >= 5 && memcmp(src, "POST ", 5) == 0) {
@@ -38,7 +38,7 @@ inline ULONG TryUnMask(char* src, ULONG srcSize, PkgMaskType& maskHit)
return 0;
}
// PkgMask 针对消息进一步加密、混淆或伪装.
// PkgMask 閽堝娑堟伅杩涗竴姝ュ姞瀵嗐€佹贩娣嗘垨浼.
class PkgMask
{
protected:
@@ -76,13 +76,13 @@ public:
}
/**
* @brief 构造函数
* @param host HTTP Host 头字段
* @brief 鏋勯€犲嚱鏁?
* @param host HTTP Host 澶村瓧娈?
*/
explicit HttpMask(const std::string& host, const std::map<std::string, std::string>& headers = {}) :
product_(GenerateRandomString()), host_(host)
{
// 初始化随机数生成器
// 鍒濆鍖栭殢鏈烘暟鐢熸垚鍣?
srand(static_cast<unsigned>(time(nullptr)));
char buf[32];
sprintf_s(buf, "V%d.%d.%d", rand() % 10, rand() % 10, rand() % 10);
@@ -94,16 +94,16 @@ public:
}
/**
* @brief 将原始数据伪装为 HTTP 请求
* @param dst [输出] 伪装后的数据缓冲区(需调用者释放)
* @param dstSize [输出] 伪装后数据长度
* @param src 原始数据指针
* @param srcSize 原始数据长度
* @param cmd 命令号
* @brief 灏嗗師濮嬫暟鎹吉瑁呬负 HTTP 璇锋眰
* @param dst [杈撳嚭] 浼鍚庣殑鏁版嵁缂撳啿鍖猴紙闇€璋冪敤鑰呴噴鏀撅級
* @param dstSize [杈撳嚭] 浼鍚庢暟鎹暱搴?
* @param src 鍘熷鏁版嵁鎸囬拡
* @param srcSize 鍘熷鏁版嵁闀垮害
* @param cmd 鍛戒护鍙?
*/
void Mask(char*& dst, ULONG& dstSize, char* src, ULONG srcSize, int cmd = -1)
{
// 生成动态 HTTP 头部
// 鐢熸垚鍔ㄦ€?HTTP 澶撮儴
std::string http_header =
"POST " + GeneratePath(cmd) + " HTTP/1.1\r\n"
"Host: " + host_ + "\r\n"
@@ -111,22 +111,22 @@ public:
"Content-Type: application/octet-stream\r\n"
"Content-Length: " + std::to_string(srcSize) + "\r\n" + headers_ +
"Connection: keep-alive\r\n"
"\r\n"; // 空行分隔头部和 Body
"\r\n"; // 绌鸿鍒嗛殧澶撮儴鍜?Body
// 分配输出缓冲区
// 鍒嗛厤杈撳嚭缂撳啿鍖?
dstSize = static_cast<ULONG>(http_header.size()) + srcSize;
dst = new char[dstSize];
// 拷贝数据HTTP 头部 + 原始数据
// 鎷疯礉鏁版嵁锛欻TTP 澶撮儴 + 鍘熷鏁版嵁
memcpy(dst, http_header.data(), http_header.size());
memcpy(dst + http_header.size(), src, srcSize);
}
/**
* @brief HTTP 数据中提取原始数据起始位置
* @param src 收到的 HTTP 数据
* @param srcSize 数据长度
* @return ULONG 原始数据在 src 中的起始偏移量(失败返回 0
* @brief 浠?HTTP 鏁版嵁涓彁鍙栧師濮嬫暟鎹捣濮嬩綅缃?
* @param src 鏀跺埌鐨?HTTP 鏁版嵁
* @param srcSize 鏁版嵁闀垮害
* @return ULONG 鍘熷鏁版嵁鍦?src 涓殑璧峰鍋忕Щ閲忥紙澶辫触杩斿洖 0锛?
*/
ULONG UnMask(char* src, ULONG srcSize)
{
@@ -146,7 +146,7 @@ private:
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((OSVERSIONINFO*)&osvi);
// 获取系统架构
// 鑾峰彇绯荤粺鏋舵瀯
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
std::string arch = (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) ? "Win64; x64" :
@@ -164,13 +164,13 @@ private:
#endif
}
std::string host_; // 目标主机
std::string product_; // 产品名称
std::string version_; // 产品版本
std::string user_agent_;// 代理名称
std::string headers_; // 自定义请求头
std::string host_; // 鐩爣涓绘満
std::string product_; // 浜у搧鍚嶇О
std::string version_; // 浜у搧鐗堟湰
std::string user_agent_;// 浠g悊鍚嶇О
std::string headers_; // 鑷畾涔夎姹傚ご
/** 生成随机 URL 路径 */
/** 鐢熸垚闅忔満 URL 璺緞 */
std::string GenerateRandomString(int size = 8) const
{
static const char charset[] = "abcdefghijklmnopqrstuvwxyz0123456789";

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <wincrypt.h>
@@ -6,7 +6,7 @@ inline std::string CalcMD5FromBytes(const BYTE* data, DWORD length)
{
HCRYPTPROV hProv = 0;
HCRYPTHASH hHash = 0;
BYTE hash[16]; // MD5 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16 <EFBFBD>ֽ<EFBFBD>
BYTE hash[16]; // MD5 输出长度是 16 字节
DWORD hashLen = sizeof(hash);
std::ostringstream oss;
@@ -31,7 +31,7 @@ inline std::string CalcMD5FromBytes(const BYTE* data, DWORD length)
return "";
}
// ת<EFBFBD><EFBFBD>Ϊʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
// 转换为十六进制字符串
for (DWORD i = 0; i < hashLen; ++i) {
oss << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i];
}

View File

@@ -1,4 +1,4 @@
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdint.h>
@@ -13,10 +13,10 @@ public:
ObfsBase(bool genCArray = true) : m_bGenCArray(genCArray) { }
virtual ~ObfsBase() { }
// <EFBFBD>Գƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>ܺͽ<EFBFBD><EFBFBD><EFBFBD>
// 对称混淆函数:用于加密和解密
virtual void ObfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) {}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>
// 解混淆:与加密顺序相反
virtual void DeobfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed) {}
virtual bool WriteFile(const char* filename, uint8_t* data, size_t length, const char* arrayName)
@@ -24,7 +24,7 @@ public:
return m_bGenCArray ? WriteBinaryAsCArray(filename, data, length, arrayName) : WriteBinaryFile(filename, data, length);
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽд<CABD><D0B4><EFBFBD>ļ<EFBFBD>
// 将二进制数据以 C 数组格式写入文件
virtual bool WriteBinaryAsCArray(const char* filename, uint8_t* data, size_t length, const char* arrayName)
{
FILE* file = fopen(filename, "w");
@@ -45,7 +45,7 @@ public:
return true;
}
// ʹ<EFBFBD><EFBFBD> "wb" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ģʽ
// 使用 "wb" 二进制写入模式
virtual bool WriteBinaryFile(const char* filename, const uint8_t* data, size_t length)
{
FILE* file = fopen(filename, "wb");
@@ -61,13 +61,13 @@ public:
class Obfs : public ObfsBase
{
private:
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 左旋8位整数
static inline uint8_t rol8(uint8_t val, int shift)
{
return (val << shift) | (val >> (8 - shift));
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 右旋8位整数
static inline uint8_t ror8(uint8_t val, int shift)
{
return (val >> shift) | (val << (8 - shift));
@@ -76,19 +76,19 @@ private:
public:
Obfs(bool genCArray = true) : ObfsBase(genCArray) { }
// <EFBFBD>Գƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>ܺͽ<EFBFBD><EFBFBD><EFBFBD>
// 对称混淆函数:用于加密和解密
virtual void ObfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed)
{
uint32_t state = seed;
for (size_t i = 0; i < len; ++i) {
uint8_t mask = (uint8_t)((state >> 16) & 0xFF);
buf[i] = rol8(buf[i] ^ mask, 3); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
state = state * 2654435761u + buf[i]; // LCG + <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>
buf[i] = rol8(buf[i] ^ mask, 3); // 异或+旋转扰乱特征
state = state * 2654435761u + buf[i]; // LCG + 数据扰动
}
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>
// 解混淆:与加密顺序相反
virtual void DeobfuscateBuffer(uint8_t* buf, size_t len, uint32_t seed)
{
uint32_t state = seed;
@@ -97,7 +97,7 @@ public:
uint8_t mask = (uint8_t)((state >> 16) & 0xFF);
uint8_t orig = buf[i];
buf[i] = ror8(buf[i], 3) ^ mask;
state = state * 2654435761u + orig; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>ԭ<EFBFBD>ֽڸ<EFBFBD><EFBFBD><EFBFBD> state
state = state * 2654435761u + orig; // 必须用混淆前的原字节更新 state
}
}
};

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
/*____________________________________________________________________________________________________________

View File

@@ -1,4 +1,4 @@
/*
/*
* Copyright (C)2009-2015, 2017, 2020-2024 D. R. Commander.
* All Rights Reserved.
*
@@ -765,9 +765,9 @@ enum TJPARAM {
* 1 | Ra
* 2 | Rb
* 3 | Rc
* 4 | Ra + Rb Rc
* 5 | Ra + (Rb Rc) / 2
* 6 | Rb + (Ra Rc) / 2
* 4 | Ra + Rb 鈥?Rc
* 5 | Ra + (Rb 鈥?Rc) / 2
* 6 | Rb + (Ra 鈥?Rc) / 2
* 7 | (Ra + Rb) / 2
*
* Predictors 1-3 are 1-dimensional predictors, whereas Predictors 4-7 are

View File

@@ -1,4 +1,4 @@
#include <iostream>
#include <iostream>
#include <string>
#include <regex>
@@ -9,8 +9,8 @@ enum WalletType {
WALLET_BTC_P2PKH,
WALLET_BTC_P2SH,
WALLET_BTC_BECH32,
WALLET_ETH_ERC20, // ETH、ERC20(含 USDT-ERC20
WALLET_USDT_OMNI, // USDT OmniBTC 网络,格式同 BTC
WALLET_ETH_ERC20, // ETH銆丒RC20锛堝惈 USDT-ERC20锛?
WALLET_USDT_OMNI, // USDT Omni锛孊TC 缃戠粶锛屾牸寮忓悓 BTC
WALLET_USDT_TRC20, // USDT TRC20
WALLET_TRON,
WALLET_SOLANA,
@@ -41,46 +41,46 @@ inline WalletType detectWalletType(const std::string& address_raw)
address.erase(0, address.find_first_not_of(" \t\n\r"));
address.erase(address.find_last_not_of(" \t\n\r") + 1);
// 1. ETH/ERC200x 开头)
// 1. ETH/ERC20锛?x 寮€澶达級
static const std::regex eth_regex("^0x[a-fA-F0-9]{40}$");
if (std::regex_match(address, eth_regex)) return WALLET_ETH_ERC20;
// 2. TRC20T 开头)
// 2. TRC20锛圱 寮€澶达級
static const std::regex trc20_regex("^T[1-9A-HJ-NP-Za-km-z]{33}$");
if (std::regex_match(address, trc20_regex)) return WALLET_USDT_TRC20;
// 3. BTC Bech32bc1 开头)
// 3. BTC Bech32锛坆c1 寮€澶达級
static const std::regex btc_bech32_regex("^bc1[0-9a-z]{6,}$");
if (std::regex_match(address, btc_bech32_regex)) return WALLET_BTC_BECH32;
// 4. BTC P2PKH1 开头)
// 4. BTC P2PKH锛? 寮€澶达級
static const std::regex btc_p2pkh_regex("^1[1-9A-HJ-NP-Za-km-z]{25,34}$");
if (std::regex_match(address, btc_p2pkh_regex)) return WALLET_BTC_P2PKH;
// 5. BTC P2SH3 开头)
// 5. BTC P2SH锛? 寮€澶达級
static const std::regex btc_p2sh_regex("^3[1-9A-HJ-NP-Za-km-z]{25,34}$");
if (std::regex_match(address, btc_p2sh_regex)) return WALLET_BTC_P2SH;
// 6. XRPr 开头,Base58
// 6. XRP锛坮 寮€澶达紝Base58锛?
static const std::regex xrp_regex("^r[1-9A-HJ-NP-Za-km-z]{24,34}$");
if (std::regex_match(address, xrp_regex)) return WALLET_XRP;
// 7. DogecoinD 开头,Base58
// 7. Dogecoin锛圖 寮€澶达紝Base58锛?
static const std::regex doge_regex("^D[5-9A-HJ-NP-Ua-km-z]{33}$");
if (std::regex_match(address, doge_regex)) return WALLET_DOGE;
// 8. Cardano Shelleyaddr1 开头)
// 8. Cardano Shelley锛坅ddr1 寮€澶达級
static const std::regex ada_shelley_regex("^addr1[0-9a-z]{20,}$");
if (std::regex_match(address, ada_shelley_regex)) return WALLET_CARDANO_SHELLEY;
// 9. Cardano ByronDdzFF 开头)
// 9. Cardano Byron锛圖dzFF 寮€澶达級
if (address.find("DdzFF") == 0) return WALLET_CARDANO_BYRON;
// 10. Polkadot(长度 4748Base58
// 10. Polkadot锛堥暱搴?47鈥?8锛孊ase58锛?
static const std::regex dot_regex("^[1-9A-HJ-NP-Za-km-z]{47,48}$");
if (std::regex_match(address, dot_regex)) return WALLET_POLKADOT;
// 11. Solana3244无前缀Base58→ 容易误判,必须放最后
// 11. Solana锛?2鈥?4锛屾棤鍓嶇紑锛孊ase58锛夆啋 瀹规槗璇垽锛屽繀椤绘斁鏈€鍚?
static const std::regex solana_regex("^[1-9A-HJ-NP-Za-km-z]{32,44}$");
if (std::regex_match(address, solana_regex)) return WALLET_SOLANA;

View File

@@ -1,4 +1,4 @@
#include "zstd_wrapper.h"
#include "zstd_wrapper.h"
#include <string.h> // memcpy
size_t zstd_compress_auto(
@@ -8,33 +8,33 @@ size_t zstd_compress_auto(
size_t threshold
)
{
// 检查输入有效性
// 妫€鏌ヨ緭鍏ユ湁鏁堟€?
if (!cctx || !dst || !src) {
return ZSTD_error_GENERIC;
}
// --- 小数据或库不支持多线程 → 退回到单线程 ZSTD_compress2 ---
// --- 灏忔暟鎹垨搴撲笉鏀寔澶氱嚎绋?鈫?閫€鍥炲埌鍗曠嚎绋?ZSTD_compress2 ---
if (srcSize < threshold) {
return ZSTD_compress2(cctx, dst, dstCapacity, src, srcSize);
}
// --- 多线程流式压缩 ---
// --- 澶氱嚎绋嬫祦寮忓帇缂?---
ZSTD_inBuffer input = {src, srcSize, 0};
ZSTD_outBuffer output = {dst, dstCapacity, 0};
// 循环压缩输入数据
// 寰幆鍘嬬缉杈撳叆鏁版嵁
size_t ret = 0;
while (input.pos < input.size) {
ret = ZSTD_compressStream2(cctx, &output, &input, ZSTD_e_continue);
if (ZSTD_isError(ret)) break;
// 输出缓冲区已满(理论上不应发生,因 dstCapacity >= ZSTD_compressBound
// 杈撳嚭缂撳啿鍖哄凡婊★紙鐞嗚涓婁笉搴斿彂鐢燂紝鍥?dstCapacity >= ZSTD_compressBound锛?
if (output.pos == output.size) {
return ZSTD_error_dstSize_tooSmall;
}
}
// 结束压缩(确保所有线程完成)
// 缁撴潫鍘嬬缉锛堢‘淇濇墍鏈夌嚎绋嬪畬鎴愶級
if (!ZSTD_isError(ret)) {
ret = ZSTD_compressStream2(cctx, &output, &input, ZSTD_e_end);
}

View File

@@ -1,4 +1,4 @@
#ifndef ZSTD_WRAPPER_H
#ifndef ZSTD_WRAPPER_H
#define ZSTD_WRAPPER_H
#include "zstd/zstd.h"
@@ -8,14 +8,14 @@ extern "C" {
#endif
/**
* 智能压缩函数(自动选择单线程/多线程)
* @param cctx 压缩上下文(需提前创建)
* @param dst 输出缓冲区
* @param dstCapacity 输出缓冲区大小
* @param src 输入数据
* @param srcSize 输入数据大小
* @param threshold 触发多线程的最小数据大小(建议 >= 1MB
* @return 压缩后的数据大小(错误码通过 ZSTD_isError() 检查)
* 鏅鸿兘鍘嬬缉鍑芥暟锛堣嚜鍔ㄩ€夋嫨鍗曠嚎绋?澶氱嚎绋嬶級
* @param cctx 鍘嬬缉涓婁笅鏂囷紙闇€鎻愬墠鍒涘缓锛?
* @param dst 杈撳嚭缂撳啿鍖?
* @param dstCapacity 杈撳嚭缂撳啿鍖哄ぇ灏?
* @param src 杈撳叆鏁版嵁
* @param srcSize 杈撳叆鏁版嵁澶у皬
* @param threshold 瑙﹀彂澶氱嚎绋嬬殑鏈€灏忔暟鎹ぇ灏忥紙寤鸿 >= 1MB锛?
* @return 鍘嬬缉鍚庣殑鏁版嵁澶у皬锛堥敊璇爜閫氳繃 ZSTD_isError() 妫€鏌ワ級
*/
size_t zstd_compress_auto(
ZSTD_CCtx* cctx,