369 lines
14 KiB
Markdown
369 lines
14 KiB
Markdown
# 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` → Windows `100.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/register`
|
||
- `POST /api/activate-vip`
|
||
- `GET /api/session-status`
|
||
- `GET /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` → Windows `100.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/register`
|
||
- `POST /api/activate-vip`
|
||
- `GET /api/session-status`
|
||
- `GET /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"` 等
|
||
|
||
### 下一步
|
||
1. 搜索正确的导航函数 `A`(处理 VIP/登录检查后调用 `N` 设置页面)
|
||
2. 检查为何点击图标后状态不更新
|
||
3. 对比原版打包应用和 `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` 比 PowerShell `Select-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"}
|