SUMMARY.md 13 KB

996传奇盒子 反编译汇总

从 D:\ProgramFiles\996box\ 安装目录提取出来的关键信息汇总。 工具 / 方法 / 限制详见 README.md。

1. EXE 主体元数据

字段 值
文件大小 127,787,504 字节 (~122 MB)
FileVersion 5.1.1
ProductVersion 5.1.1.0
ProductName 996传奇盒子
CompanyName 浙江闲趣互娱网络科技有限公司
LegalCopyright Copyright © 2026 浙江闲趣互娱网络科技有限公司
InternalName 996传奇盒子
语言 英语(美国)
内部 Electron Electron 22.3.4 (Chromium 108, V8 10.8.168.25-electron.0)
数字签名状态 Valid
签名 CA DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1
签名有效期 2024-05-31 ~ 2027-06-04
签名指纹 E880D7CD1D3F4D4539C0C0DDE856948179A58C1A
证书签发主体 CN=浙江闲趣互娱网络科技有限公司, O=浙江闲趣互娱网络科技有限公司, L=丽水市, S=浙江省, C=CN

结论: 合法运营公司、国际代码签名证书(非自签,非黑产工具)。

2. 应用代码信息(app.asar 解包后)

项 值
package.json name 996chuanqihezi
package.json version 5.1.1
package.json coreVersion 1.9.2
package.json main src/index.js
package.json author 浙江闲趣互娱网络科技有限公司
打包器 @electron-forge
字符串加密 (硬编码) bytenode ^1.3.6 (实际使用自定义预编译 wrapper,详见 README)
asar 内容大小 81,479,191 字节 (含 node_modules)
解压后文件数 353
明文 JS 文件数 14 (含 preload 脚本)
HTML 文件数 12
编译字节码文件 (.jsc) 12
node_modules 包数 ~50 (axios / ali-oss / sqlite3 / socks-proxy-agent / bytenode / xxtea / crypto-js / etc.)

3. 业务明文 JS (可直接阅读源码)

src/index.js          83,117 B   主进程入口 (Electron 主控制器,占整个 app 95% 业务逻辑)
src/proxyWindow.js    10,968 B   代理设置窗口
src/spawnLauncher.js   8,543 B   子进程启动器
src/render/mainPreload.js      22,205 B   主窗口 preload (暴露给渲染进程的 IPC 桥)
src/render/loginPreload.js     12,795 B   登录窗口 preload
src/render/activePreload.js    11,816 B   活动子窗口 preload
src/render/unsafePreload.js    11,834 B   高权限子窗口 preload (nodeIntegration=true)
src/render/updaterPreload.js   10,248 B   更新窗口 preload
src/render/messagePreload.js    7,088 B   消息弹窗 preload
src/render/openPreload.js       7,043 B   通用 window.open preload
src/render/xPreload.js          6,499 B   X 模式 preload
src/browserRender/*.js          ~5,000 B   6 个 BrowserView 子 preload (极简)

4. 离线兜底 HTML (可直接阅读)

src/offline/bvFrame.html       9,165 B   BrowserView 框架
src/offline/error.html         8,036 B   错误页
src/offline/frame.html         8,752 B   主框架占位
src/offline/loginOffline.html  8,464 B   离线登录页
src/offline/loginTrojan.html   8,892 B   检测到劫持/防作弊触发页
src/offline/mainProcess.html   1,849 B   主进程占位
src/offline/process.html       2,821 B   加载中页
src/offline/relaunchToDns.html 7,277 B   DNS 修复引导
src/offline/setDns.html          443 B   DNS 设置
src/offline/titlebar.html      6,374 B   自定义标题栏
src/offline/trojan.html       10,005 B   反劫持页

5. 远程服务 URL (从 .jsc 字符串中提取,跨 13 个文件汇总去重)

5.1 主 API 域名

用途 URL
主 API https://pc-api.996box.com
主 API (预发) https://pc-api-pre.996box.com/
主 API (开发) https://pc-api-dev.996box.com/
主 API (开发, http) http://pc-api-dev.996box.com/
数据收集 https://box-collect.xqhuyu.com
数据收集 (开发) https://box-collect.dev.xqhuyu.com
数据收集 (开发, http) http://box-collect.dev.xqhuyu.com
测试 JSON https://pc.996box.com/static/json/test.json
域名兜底获取 http://120.26.231.18/pc_domain.php (阿里云服务器直连)

5.2 CDN / 静态资源

用途 URL
客户端版本文件 http://cdnwd.dhsf.xqhuyu.com/client/version.dat
客户端 CDN 根 http://cdnwd.dhsf.xqhuyu.com/client/
国内版 CDN http://cdnwd.dhsf.xqhuyu.com/client/996CN/
包版本(老) http://static.dhsf.996box.com/box/Package/version_20230111.dat
360 兼容包 http://static.dhsf.996box.com/box/Package/360compkill64.zip
LGm 版本 https://static.dhsf.996box.com/pcGameConfig/version_LGm.dat
游戏登录器 https://static.dhsf.996box.com/pcGameConfig/loginGame.exe

5.3 第三方回传

用途 URL
百度 OCPC 转化回传 https://ocpc.baidu.com/ocpcapi/api/uploadConvertData
360 点睛转化回传 https://convert.dop.360.cn/uploadWebConvert
996 SDK 事件日志 https://log.tj.996sdk.com/v1/event
996 官网(带百度 vid) https://www.996box.com/?bd_vid=
玩家公网 IP 查询 https://ipinfo.io/ip

5.4 业务路径模板 (从 .jsc 字面量提取)

/versionLF.json       客户端版本号
/home/homePage        主页面
/login/account        登录接口
/updater              更新页

6. 硬编码的 API 密钥 / 签名 key (从 .jsc 明文提取)

文件来源 值 推测用途
config.jsc a3e031d8b98743c69fc98d34f12fef08 32 字符 MD5-like,作 SIGN_KEY
config.jsc BE05C86B947A4E20BB51113760768DF2 32 字符 UUID,可能作加密 IV
config.jsc BB0AAAC906FC4B7CADB116A213D46689 32 字符 UUID
config.jsc 2bacba2daddbaada0bcef1fb4a132edd 32 字符 MD5-like
config.jsc 25ebf1b2094da4d1b74abf7e575faed4 32 字符 MD5-like
config.jsc 735f61ca52b75dc11a264405b331081c 32 字符 MD5-like
bridge/core.jsc f3c56e7a89af3717b2770e8a4d151a66 32 字符 MD5-like,可能 SHA_KEY
tools.jsc ba8449f635c74366a6f038bfe1265de2 32 字符 MD5-like
config.jsc yAeOlBTx4JQg 短字符串密钥
config.jsc nkj62TR8KjX4 短字符串密钥
config.jsc QdVG 短字符串密钥
config.jsc GAjWNTqNpOVx 短字符串密钥
config.jsc LQqZE 短字符串密钥

警告: 这些 key 在客户端硬编码,任何人都能拿到。所以本质上没有"安全"可言 — 任何客户端安全机制只能防小白,不能防有心人。 这与"私服盒子"行业生态完全吻合(私服本身就是灰色产业)。

7. 杀软白名单/检测 (从 .jsc 标识符)

Huorong          火绒
QQPCMgr          QQ 电脑管家

说明应用启动时会主动检测这两个进程,推测要么绕过(逃避杀软拦截),要么是互相兼容的检测。

8. 关键字符串混淆 (无法还原)

urlCreator.jsc 中的 URL 字符串被作者深度混淆(例如 ֤샞ᘢ尮ӝ 这种是 XOR 加密后的字节序列)。只有运行 urlCreator.createTextUrl(...) 才能解密出真实 URL。

可以从 config.jsc 拿到 5 种环境的明文主域名 (PRO_MAIN_DOMAIN/PRE_MAIN_DOMAIN/DEV_MAIN_DOMAIN/LOCAL_MAIN_DOMAIN/CUSTOM_MAIN_DOMAIN 等),但每个域名的具体值已被混淆,无法在不运行代码的情况下还原。

9. bytenode 字节码加载失败原因(技术细节)

测试环境 V8 版本 结果
Node 24.11.1 V8 12.x ❌ cachedDataRejected
Node 18.20.4 (V8 10.2) V8 10.2 ❌ cachedDataRejected
Electron 22.3.4 (V8 10.8.168.25-electron.0) 完全匹配 996box V8 ❌ 仍 rejected
bytenode 1.3.6 + Electron 22 完全匹配 ❌ 仍 rejected

根因:

  1. 作者使用了自定义 .jsc 格式: 文件头 0xa4 0x05 不是 bytenode 标准格式(标准 bytenode 1.5+ 写 0xa9, 1.3.x 直接写无 wrapper)。说明作者用 bytenode 编译后,自己用脚本加了一层 wrapper,或者用了 bytenode 的 fork。
  2. V8 内部 versionHash 跨进程不匹配: 即使 V8 版本号完全一致,字节码的 versionHash 还和编译时的 V8 标志/快照/RandomNumberGenerator 状态相关。V8 拒绝以"硬错"(cachedDataRejected)而不是"软错"的方式,使得热补丁/重新编译是唯一出路。

可能的解决方案 (未尝试, 工作量极大):

  • 用 V8 SDK + 同样的 V8 10.8 源码重编 bytenode 的兼容加载器
  • 用 Frida hook V8 的 ScriptDeserializer 强制接受
  • 直接 patch V8 ScriptData::Get 函数绕过验证
  • 在 996box 主进程里 attach debugger, attach 到 urlCreator.createTextUrl 函数,动态调出来 — 最实用

10. 目录结构

D:\传奇\996box-decompiled\
├── README.md                    本目录说明
├── SUMMARY.md                   本文件 (汇总提取的高价值信息)
├── src-app/                     解包后的 app.asar 完整内容 (含 node_modules)
│   ├── package.json
│   ├── src/
│   │   ├── index.js                       明文主入口
│   │   ├── proxyWindow.js
│   │   ├── spawnLauncher.js
│   │   ├── render/                        8 个 preload 脚本
│   │   ├── browserRender/                 6 个 BrowserView preload
│   │   ├── offline/                       12 个离线兜底 HTML
│   │   ├── localpages/                    内置 React 静态资源 (aliplayer/yidun 等)
│   │   ├── assets/                        图标 + axios.min.js + crypto-js.min.js
│   │   ├── libs/                          [字节码] 核心库
│   │   │   ├── urlCreator.jsc             [字节码] 远程 URL 生成器 (字符串混淆)
│   │   │   ├── request.jsc                [字节码] HTTP 封装
│   │   │   ├── encrypt.jsc                [字节码] 加密/编码
│   │   │   ├── tools.jsc                  [字节码] 工具函数集
│   │   │   ├── Buryingpoint.jsc           [字节码] 埋点 SDK
│   │   │   └── titlebarConfig.jsc         [字节码] 标题栏配置
│   │   ├── bridge/                        [字节码] 主/登录/更新/通用 IPC 桥
│   │   │   ├── core.jsc
│   │   │   ├── main.jsc
│   │   │   ├── common.jsc
│   │   │   └── server.jsc
│   │   ├── static/                        [字节码] 静态配置 / 备注
│   │   │   ├── config.jsc                 [字节码] ★ 主配置文件,字符串明文
│   │   │   └── remark.jsc
│   │   ├── workers/                       [字节码] Web Worker
│   │   │   └── dbWorker.jsc
│   │   ├── message.html                   自定义消息弹窗
│   │   ├── xmode.html                     X 模式页
│   │   └── versionLF.json
│   └── node_modules/                      ~50 个 npm 依赖
├── jsc-extract/                   反编译 .jsc 的所有产出
│   ├── extract-strings.js                字符串提取脚本
│   ├── probe-*.js                        各种 V8 加载实验脚本
│   └── strings/                          13 个 .jsc 的字符串提取结果
│       ├── src__libs__urlCreator.md
│       ├── src__libs__Buryingpoint.md
│       ├── src__libs__encrypt.md
│       ├── src__libs__request.md
│       ├── src__libs__titlebarConfig.md
│       ├── src__libs__tools.md
│       ├── src__bridge__core.md
│       ├── src__bridge__main.md
│       ├── src__bridge__common.md
│       ├── src__bridge__server.md
│       ├── src__static__config.md         ★ 包含 16 个真实 URL + 8 个 key
│       ├── src__static__remark.md
│       └── src__workers__dbWorker.md
├── tools/                          反编译用的辅助工具
│   ├── node18/                           Node 18.20.4 (V8 10.2)
│   └── electron22/                        Electron 22.3.4 (V8 10.8)
└── package.json / node_modules/     装着 bytenode / v8-compile-cache (实验用)

11. 推荐后续工作

  1. 动态拦截提取 urlCreator 真实 URL: 在 996box 主进程 attach V8 Inspector, hook urlCreator.createTextUrl 函数, 直接打印返回值。
    • 工具: frida-electron 或 V8 Inspector Protocol
    • 预期: 5 个环境(pro/pre/dev/local/custom)的主域名 + 全部子路径
  2. 分析 mainPreload.js / unsafePreload.js 的 IPC 桥: 与 index.js 对比, 能完整还原 Electron 前后端 API 表面。
  3. 如果有 localpages/aliplayer-min.js 实际使用: 那是阿里云播放器 SDK,可能用于游戏内视频/直播集成。
  4. 明文 key 是否对应公网 API 真实存在的 key: 把 a3e031d8... 当 SHA_KEY 试一下 pc-api.996box.com 的请求签名,看是否对得上 — 可判定 API 服务端校验是否安全。