Files
val-blog/memory/2026-05-07.md
T

369 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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"}