14 KiB
14 KiB
2026-05-07
maqt-backend 项目
项目背景
- 逆向分析「码枪堂」(MaQiangTang v7.0.4) 游戏优化工具,自建后端替换原版 API
- 软件为 Electron + React 架构,反编译产物在 Windows 机器上
- 无源码,只有编译后的 JS 文件,通过修改 minified JS 来替换 API URL
技术栈选型
- 后端: Express + Prisma + PostgreSQL
- 数据库: PostgreSQL 16-alpine (Docker)
- 镜像拉取: 国内环境需用 DaoCloud 镜像
docker.m.daocloud.io(Docker Hub 超时) - 认证: JWT (
maqt-jwt-secret-key-2026-change-in-production) - 加密:
maqt-encryption-key-32bytes!
基础设施
- 后端地址:
http://localhost:3001(Mac 本机) - Tailscale 访问: Mac
100.105.17.52→ Windows100.99.186.30 - Windows 远程:
nplx@100.99.186.30(SSH 端口 22) - 后端项目路径:
/Users/guchen/.openclaw/workspace/maqt-backend/ - Docker 容器:
maqt-postgres→postgresql://maqt:maqt123456@localhost:5432/maqt - 后端运行:
tsx watch src/index.ts(开发模式,热重载)
数据库结构
Prisma Schema 11 张表:User, VipCard, Scheme, SchemeAob, FilterShare, Favorite, Like, Category, UserLog, DeviceBinding 种子数据:14 个分类 + 170 张 VIP 卡密
API 端点(已验证)
POST /api/login✅ 正常(testuser/123456 返回 JWT)POST /api/registerPOST /api/activate-vipGET /api/session-statusGET /api/vip-status
前端改动
- 替换
CfKCgw5l.js中 API URL:https://maqt.top→http://100.105.17.52:3001 - 变量
Te定义为新地址 - 其他 JS 文件(
2rOwIVQn.js,BFRCeBkE.js,BShhLx-D.js)无 API URL 引用 - 前端需在 Windows 上通过
npm install electron --save-dev运行
关键问题与解决
- CORS 跨域: Electron 使用
file://协议,默认 CORS 拒绝 → 改为app.use(cors({ origin: true, credentials: true }))允许所有来源 - 网络错误: 用户登录时遇到「网络错误」,已修复 CORS 配置(待验证)
- Windows 编码: 启动脚本必须用 GBK 编码避免中文乱码
$PLUGINSDIR: 是批处理变量名,不是真实文件夹名
学习记录
- Windows minified JS 替换: 远程 SSH grep
findstr比Select-String更稳定 - Electron 调试:
Ctrl+Shift+I/F12打开开发者工具查看 Console - tsx watch 模式: 文件修改后自动重启,适合开发迭代
桌面端复刻构想(待实施)
背景
反编译的代码高度混淆,修补困难。建议从零重写 Electron 桌面端,复用核心优化程序。
可复用的核心资产
原生程序(位于 $PLUGINSDIR/app-64/resources/):
| 文件 | 用途 |
|---|---|
MaqiangTangh1.exe |
主优化程序 |
MaqiangTangh2.exe |
辅助优化程序 |
MaqiangTangHardwareMonitor.exe |
硬件监控 |
nvidiaProfileInspector.exe |
NVIDIA 显卡配置 |
apply-gamma-force.ps1 |
Gamma 校准脚本 |
restore-gamma-force.ps1 |
Gamma 恢复脚本 |
Delta Force.nip |
游戏优化配置 |
Argyll/ |
色彩管理工具 |
icc-profiles/ |
ICC 配置文件 |
CustomSettingNames.xml |
设置名称映射 |
Reference.xml |
参考配置 |
bin/ |
其他工具 |
xixi-haha-media/ |
媒体资源 |
新项目结构
maqt-desktop/
├── electron/ # 主进程(新写)
│ ├── main.ts # 窗口管理、IPC
│ ├── preload.ts # 干净的 electronAPI
│ └── ipc/ # IPC 处理器
├── src/ # React UI(新写)
│ ├── App.tsx # 主应用
│ ├── components/ # macOS 风格组件
│ ├── pages/ # 各功能页面
│ └── hooks/ # 状态管理
├── native/ # 复用原版程序
│ ├── MaqiangTangh1.exe
│ ├── nvidiaProfileInspector.exe
│ └── ...
├── package.json
└── electron-builder.yml
实施阶段
阶段 1:基础框架 + UI(需新写)
- Electron 主进程:窗口管理、IPC、原生功能
- React 前端:macOS 风格桌面 UI、导航、Dock
- preload 脚本:干净的 electronAPI 接口
- 登录/VIP 状态管理
阶段 2+:功能对接(复用现有)
- 调用
MaqiangTangh1.exe执行优化 - 调用 PowerShell 脚本做 Gamma 校准
- 使用现有的 maqt-backend API
技术栈
- Electron: 最新稳定版
- React: Vite + TypeScript
- UI: Tailwind CSS + macOS 风格组件
- 状态管理: Zustand 或 Jotai(轻量)
- IPC: electronAPI 暴露原生功能
2026-05-07
maqt-backend 项目
项目背景
- 逆向分析「码枪堂」(MaQiangTang v7.0.4) 游戏优化工具,自建后端替换原版 API
- 软件为 Electron + React 架构,反编译产物在 Windows 机器上
- 无源码,只有编译后的 JS 文件,通过修改 minified JS 来替换 API URL
技术栈选型
- 后端: Express + Prisma + PostgreSQL
- 数据库: PostgreSQL 16-alpine (Docker)
- 镜像拉取: 国内环境需用 DaoCloud 镜像
docker.m.daocloud.io(Docker Hub 超时) - 认证: JWT (
maqt-jwt-secret-key-2026-change-in-production) - 加密:
maqt-encryption-key-32bytes!
基础设施
- 后端地址:
http://localhost:3001(Mac 本机) - Tailscale 访问: Mac
100.105.17.52→ Windows100.99.186.30 - Windows 远程:
nplx@100.99.186.30(SSH 端口 22) - 后端项目路径:
/Users/guchen/.openclaw/workspace/maqt-backend/ - Docker 容器:
maqt-postgres→postgresql://maqt:maqt123456@localhost:5432/maqt - 后端运行:
tsx watch src/index.ts(开发模式,热重载)
数据库结构
Prisma Schema 11 张表:User, VipCard, Scheme, SchemeAob, FilterShare, Favorite, Like, Category, UserLog, DeviceBinding 种子数据:14 个分类 + 170 张 VIP 卡密
API 端点(已验证)
POST /api/login✅ 正常(testuser/123456 返回 JWT)POST /api/registerPOST /api/activate-vipGET /api/session-statusGET /api/vip-status
前端改动
- 替换
CfKCgw5l.js中 API URL:https://maqt.top→http://100.105.17.52:3001 - 变量
Te定义为新地址 - 其他 JS 文件(
2rOwIVQn.js,BFRCeBkE.js,BShhLx-D.js)无 API URL 引用 - 前端需在 Windows 上通过
npm install electron --save-dev运行
关键问题与解决
- CORS 跨域: Electron 使用
file://协议,默认 CORS 拒绝 → 改为app.use(cors({ origin: true, credentials: true }))允许所有来源 - 网络错误: 用户登录时遇到「网络错误」,已修复 CORS 配置(待验证)
- Windows 编码: 启动脚本必须用 GBK 编码避免中文乱码
$PLUGINSDIR: 是批处理变量名,不是真实文件夹名
学习记录
- Windows minified JS 替换: 远程 SSH grep
findstr比Select-String更稳定 - Electron 调试:
Ctrl+Shift+I/F12打开开发者工具查看 Console - tsx watch 模式: 文件修改后自动重启,适合开发迭代
桌面端复刻构想(待实施)
背景
反编译的代码高度混淆,修补困难。建议从零重写 Electron 桌面端,复用核心优化程序。
可复用的核心资产
原生程序(位于 $PLUGINSDIR/app-64/resources/):
| 文件 | 用途 |
|---|---|
MaqiangTangh1.exe |
主优化程序 |
MaqiangTangh2.exe |
辅助优化程序 |
MaqiangTangHardwareMonitor.exe |
硬件监控 |
nvidiaProfileInspector.exe |
NVIDIA 显卡配置 |
apply-gamma-force.ps1 |
Gamma 校准脚本 |
restore-gamma-force.ps1 |
Gamma 恢复脚本 |
Delta Force.nip |
游戏优化配置 |
Argyll/ |
色彩管理工具 |
icc-profiles/ |
ICC 配置文件 |
CustomSettingNames.xml |
设置名称映射 |
Reference.xml |
参考配置 |
bin/ |
其他工具 |
xixi-haha-media/ |
媒体资源 |
新项目结构
maqt-desktop/
├── electron/ # 主进程(新写)
│ ├── main.ts # 窗口管理、IPC
│ ├── preload.ts # 干净的 electronAPI
│ └── ipc/ # IPC 处理器
├── src/ # React UI(新写)
│ ├── App.tsx # 主应用
│ ├── components/ # macOS 风格组件
│ ├── pages/ # 各功能页面
│ └── hooks/ # 状态管理
├── native/ # 复用原版程序
│ ├── MaqiangTangh1.exe
│ ├── nvidiaProfileInspector.exe
│ └── ...
├── package.json
└── electron-builder.yml
实施阶段
阶段 1:基础框架 + UI(需新写)
- Electron 主进程:窗口管理、IPC、原生功能
- React 前端:macOS 风格桌面 UI、导航、Dock
- preload 脚本:干净的 electronAPI 接口
- 登录/VIP 状态管理
阶段 2+:功能对接(复用现有)
- 调用
MaqiangTangh1.exe执行优化 - 调用 PowerShell 脚本做 Gamma 校准
- 使用现有的 maqt-backend API
技术栈
- Electron: 最新稳定版
- React: Vite + TypeScript
- UI: Tailwind CSS + macOS 风格组件
- 状态管理: Zustand 或 Jotai(轻量)
- IPC: electronAPI 暴露原生功能
Dock 消失问题调试(进行中)
问题现象
解包后的 Electron 桌面应用与原版相比,首页 dock(底部导航栏)消失了。
已确认的代码逻辑
- dock 组件:
$t只在Ee = "home" !== t时渲染(即不在首页时才显示) - 状态定义:
[j,N]=ye.useState("home"),j 是当前页面,N 是设置函数 - 桌面图标数组:包含"快速优化"、"画面滤镜"、"滤镜社区"、"改枪方案"等
- 点击处理:每个图标有
action: ()=>A(targetId,{vipRequired:!0}) - 登录检查:
We()返回 token,qe()返回是否已登录 - VIP 上下文:
gt()返回{isVip, vipExpireAt, refreshVipStatus}
问题根因(待验证)
- dock 不显示是设计如此:只在离开首页后才显示
- 真正问题:点击桌面图标后导航不工作,状态停留在 "home",导致 dock 永远不显示
- 导航函数
A的完整实现尚未找到
关键标识
- localStorage 键名:
Lt="desktop_custom_shortcuts_v1",Dt="desktop_builtin_shortcuts_v1" - VIP 检查集合:
vt=new Set(["game-crosshair","xixi-haha","forbidden-force","resolution","one-click-optimization"]) - 桌面图标 ID:
"desktop-one-click-optimization","desktop-exposure","desktop-filter-community","desktop-weapon"等
下一步
- 搜索正确的导航函数
A(处理 VIP/登录检查后调用N设置页面) - 检查为何点击图标后状态不更新
- 对比原版打包应用和
npx electron .运行环境的差异
MaqiangTang 原生程序详细分析
程序概览
| 程序 | 大小 | 技术栈 | 功能 |
|---|---|---|---|
| MaqiangTangh1.exe | 364 KB | 未知(C++/Go?) | 主优化程序 |
| MaqiangTangh2.exe | 180 KB | 未知 | 辅助优化程序 |
| MaqiangTangHardwareMonitor.exe | 5.2 MB | 较大,完整功能 | 硬件监控服务 |
| MaqiangTangXiXiOverlay.exe | 152 KB | .NET 8.0 + WebView2 | 游戏内 Overlay UI |
Electron 服务架构
main.js (Electron 主进程)
│
├── SystemOptimizationService
│ ├── optimizeItem() → 执行优化
│ └── restoreItem() → 恢复默认
│
├── HardwareMonitorService
│ └── 调用 MaqiangTangHardwareMonitor.exe
│
├── XiXiOverlayNativeService
│ └── 调用 MaqiangTangXiXiOverlay.exe(游戏内 Overlay)
│
└── ResolutionService / PowerManagementService 等
工具程序(tools/ 目录)
| 文件 | 用途 |
|---|---|
| VibranceBridge.exe (62MB) | 颜色振动控制,有对应 vibranceDLL.dll |
| DVChange.exe | 分辨率切换 |
| nvidiaProfileInspector.exe | NVIDIA 配置管理(含 CustomSettingNames.xml) |
| gsynctoggle.exe | G-Sync 开关控制 |
| dbInstaller.exe | 驱动安装工具 |
色彩管理工具
| 工具 | 功能 |
|---|---|
| Argyll/bin/iccvcgt.exe | ICC VCGT 工具,处理显卡 Gamma Tag |
| bin/x64/dispwin.exe | Argyll CMS 显示窗口控制 |
配置文件
| 文件 | 用途 |
|---|---|
| CustomSettingNames.xml | NVIDIA 设置名称映射(含 3D Vision 等隐藏设置) |
| Reference.xml | 参考配置 |
学习记录
Windows 远程调试技巧
findstr比 PowerShellSelect-String更稳定,适合在混淆 JS 中搜索- Electron DevTools:
Ctrl+Shift+I/F12打开 - 远程 SSH 执行批处理脚本需注意编码(GBK)
React 混淆代码分析技巧
- 搜索特征字符串(如
"home","one-click-optimization")定位关键代码 - useState 返回的解构模式:
[state, setState]→ 通常N是 setter - 条件渲染模式:
condition && <Component />或三元表达式
后端部署完成(2026-05-08 凌晨)
Git 仓库
- 仓库名: mqsrv
- 地址: https://git.gch3n.online/gch3n/mqsrv
- 代码已推送(含 API 分析文档)
生产环境
- 服务器: gch3n.online(腾讯云)
- Docker 容器:maqt-postgres (PostgreSQL 16) + maqt-backend (Node.js)
- 内部端口: 3002
- 公网代理: https://gch3n.online/delta/* → localhost:3002
- Caddy 反向代理已配置
字段差异修复
- User 模型字段: favoritesCount(非 favoritedCount), downloadsCount(非 uses)
- req.user 类型: userId(非 id)
- 预存 jwt.ts 类型错误已修复(expiresIn 兼容)
桌面端复刻规划
- 完整开发规划文档: maqt-desktop/DEVELOPMENT_PLAN.md
- 涵盖: 页面线框图、组件树、API 清单、UI 设计规范、7 阶段开发计划
- 设计风格: 军工战术风 HUD
Fiddler 抓包关键发现
关键 POST Body 格式
- 注册: {"username","password","email"}
- 登录: {"username","password","installId","deviceHash","platform","osVersion","appVersion"}
- VIP 激活: {"cardKey":"xxx"}
原版注册端点和数据
- POST /api/register → 字段: username, password, email
- 示例: {"username":"sixteenth","password":"@WT65eijh10","email":"sixteenth@126.com"}