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

14 KiB
Raw Blame History

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.ioDocker 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-postgrespostgresql://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 URLhttps://maqt.tophttp://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 findstrSelect-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.ioDocker 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-postgrespostgresql://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 URLhttps://maqt.tophttp://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 findstrSelect-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() 返回 tokenqe() 返回是否已登录
  • 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 DevToolsCtrl+Shift+I / F12 打开
  • 远程 SSH 执行批处理脚本需注意编码(GBK)

React 混淆代码分析技巧

  • 搜索特征字符串(如 "home", "one-click-optimization")定位关键代码
  • useState 返回的解构模式:[state, setState] → 通常 N 是 setter
  • 条件渲染模式:condition && <Component /> 或三元表达式

后端部署完成(2026-05-08 凌晨)

Git 仓库

生产环境

  • 服务器: 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"}