qq经典农场小程序反编译出来的代码是高度混淆的,进行数据分析时很不方便 此项目可以辅助你进行反混淆,还原为基本可读的代码 也有利于你使用ai查找游戏逻辑,PB结构等
目前脚本并不完善还有一些报错,大佬可以尽情完善(实际上是codex太慢了我懒得让他改了)
代码依赖nodejs及bable模块,请自行下载nodejs 然后安装依赖:
npm install @babel/parser @babel/generator @babel/traverse @babel/types
将tools复制到你的游戏已解包代码根目录
所有脚本默认都基于 process.cwd() 工作,所以必须在项目根目录运行。
tools/deobfuscate-readable.jstools/decode-main-strings.jstools/normalize-resolved-js.jstools/extract-main-modules.jstools/extract-main-resolved-modules.jstools/format-deobfuscated-js.jstools/enhance-resolved-readability.jstools/inline-wrapper-objects.js
node tools\deobfuscate-readable.js作用:
- 处理根包和子包里的可读化入口
- 生成
deobfuscated/目录 - 当前会处理这些输入:
game.jssubContext.jssubpackages\internal\game.jssubpackages\main\game.js
输出:
deobfuscated\game.jsdeobfuscated\subContext.jsdeobfuscated\subpackages\internal\game.jsdeobfuscated\subpackages\main\game.js
控制台会打印每个文件的统计:
totalreplacedskipped
node tools\decode-main-strings.js作用:
- 自动加载主包
deobfuscated\subpackages\main\game.js - 自动寻找并加载 wasm
- 自动提取当前版本的字符串 seed / 指针 / 解码函数
- 把
STRINGS[...]替换成真实字符串
默认输出:
deobfuscated\subpackages\main\game.resolved.jsdeobfuscated\subpackages\main\strings.main.json
当前脚本会自动尝试这些 wasm 路径:
.tmp\acesdk.wasmtsdk\acesdk.wasmtsdk\acesdk.wasm.br.tmp\tsdk.wasmtsdk\tsdk.wasmtsdk\tsdk.wasm.br
控制台会打印:
decoded stringsreplaced STRINGS[...] referencesstring seedstring pointerdecode functionwasm exportwasm input
备注:
- 运行时如果末尾出现一次
_typeof2 is not a function这类 bootstrap 噪声,通常不影响字符串表产物。
node tools\normalize-resolved-js.js作用:
- 修复
obj["foo"] -> obj.foo - 修复部分关键字黏连
- 当前会处理:
deobfuscated\subpackages\main\game.resolved.jsdeobfuscated\subpackages\main\modules-resolved\*.js
说明:
- 第一次跑时如果
modules-resolved还不存在,建议先在拆模块之后再补跑一次。 - 它是就地修改,不会生成新文件。
推荐拆已解析版本:
node tools\extract-main-resolved-modules.js作用:
- 从
deobfuscated\subpackages\main\game.resolved.js里提取System.register(...) - 拆成单独模块文件
输出目录:
deobfuscated\subpackages\main\modules-resolved\deobfuscated\subpackages\main\modules-resolved\_manifest.txt
控制台会打印:
extracted modulesoutput dir
如果你想拆“未还原字符串”的版本,也可以用:
node tools\extract-main-modules.js它的输出目录是:
deobfuscated\subpackages\main\modules\
但平时更建议优先用 modules-resolved。
node tools\format-deobfuscated-js.js默认会自动格式化:
deobfuscated\subpackages\main\game.resolved.jsdeobfuscated\subpackages\main\modules-resolved\
也支持手动指定目标:
node tools\format-deobfuscated-js.js deobfuscated\subpackages\main\game.resolved.js
node tools\format-deobfuscated-js.js deobfuscated\subpackages\main\modules-resolved依赖:
@babel/parser@babel/generator
node tools\enhance-resolved-readability.js默认会处理:
deobfuscated\subpackages\main\game.resolved.jsdeobfuscated\subpackages\main\modules-resolved\
当前主要做:
- 部分短别名重命名
- 移除一部分
_RF.push/_RF.pop
控制台会打印:
enhanced filesrenamed aliasesremoved _RF calls
依赖:
@babel/parser@babel/traverse@babel/types@babel/generator
node tools\inline-wrapper-objects.js默认处理:
deobfuscated\subpackages\main\modules-resolved\deobfuscated\subpackages\main\game.resolved.js
当前只会内联能静态判断的简单包装器,例如:
- 字符串常量
===!==instanceof- 比较运算
控制台会打印:
processed fileswrapper replacements
如果你是从原包开始重新跑,建议按这个顺序:
node tools\deobfuscate-readable.js
node tools\decode-main-strings.js
node tools\normalize-resolved-js.js
node tools\extract-main-resolved-modules.js
node tools\format-deobfuscated-js.js
node tools\enhance-resolved-readability.js
node tools\format-deobfuscated-js.js
node tools\inline-wrapper-objects.js
node tools\format-deobfuscated-js.js更稳一点的校验方式:
node --check deobfuscated\subpackages\main\game.resolved.js
Get-ChildItem deobfuscated\subpackages\main\modules-resolved\*.js | ForEach-Object { node --check $_.FullName }最重要的输出通常是:
deobfuscated\subpackages\main\game.js- 第一层去壳后的主包
deobfuscated\subpackages\main\strings.main.json- 解出来的主包字符串表
deobfuscated\subpackages\main\game.resolved.js- 替换字符串后的总文件
deobfuscated\subpackages\main\modules-resolved\- 拆开的单模块目录
deobfuscated\subpackages\main\modules-resolved\_manifest.txt- 模块文件与原模块名映射
先检查这些位置是否存在:
.tmp\acesdk.wasmtsdk\acesdk.wasm.brtsdk\acesdk.wasm
当前版本最常见是:
tsdk\acesdk.wasm.br
需要补这些依赖:
@babel/parser@babel/generator@babel/traverse@babel/types
优先确认:
deobfuscated\subpackages\main\game.resolved.js是否已经生成- 是否先执行过
normalize-resolved-js.js - 文件里是否仍能看到
System.register(
modules:从game.js直接拆出来,字符串通常还没完全还原modules-resolved:从game.resolved.js拆出来,平时分析优先看这个
如果只看实用性,优先记住这几个:
tools/deobfuscate-readable.jstools/decode-main-strings.jstools/normalize-resolved-js.jstools/extract-main-resolved-modules.jstools/format-deobfuscated-js.js
后面的 enhance-resolved-readability.js 和 inline-wrapper-objects.js 更偏“继续打磨可读性”。