零成本本地反混淆 JS 压缩代码:humanify 免费还原 3 步上手

📅 2026/8/14 8:13:41
零成本本地反混淆 JS 压缩代码:humanify 免费还原 3 步上手
零成本本地反混淆 JS 压缩代码humanify 免费还原 3 步上手【免费下载链接】humanifyDeobfuscate Javascript code using ChatGPT项目地址: https://gitcode.com/gh_mirrors/hu/humanify还在为压缩后的 JavaScript 代码头痛满屏的a、b、c变量名缩成一行的函数体改一个需求要在脑内完成十次人肉逆编译。这个场景几乎所有前端都经历过。今天要介绍的humanify就是专门解决这个痛点的开源工具。它是一个基于大语言模型的JavaScript 反混淆代码还原工具让 AI 帮你猜出每个缩写变量的真实含义再在语法树层面安全地把a改回inputString。更重要的是它支持完全离线的本地模式——不花一分钱 API 费用代码也全程不出你的电脑。这篇文章不打算按说明书式的顺序讲我们换一种方式从一次真实的改 bug 灾难开始一步步带你完成选型、安装、上手、避坑最后用代码前后对比让你直观看到效果。半夜对着 a/b/c 改 bug你缺的不是手速而是一个反混淆工具想象这样一个周五晚上线上突然报了个错你定位到vendor.min.js发现生产代码长这样function a(e,t){var n[];var re.length;var i0;for(;ir;it){...}return n}函数名是a参数是e、t内部变量是n、r、i。你要在其中找到那个传错的参数只能一行一行数括号、猜含义。运气好半小时运气不好整晚搭进去。传统的美化工具Prettier、js-beautify只能帮你换行缩进改不了名字——因为把a改成splitString这件事需要理解代码语义而这恰恰是普通工具做不到、但大语言模型擅长的。humanify 的思路很直接让 LLM 只看某个变量周围一小段代码然后建议一个更合适的名字而真正执行重命名时交给 oxc 在 AST 层面做确定性操作保证所有引用同步更新、词法作用域不出错。也就是说AI 只负责想名字改代码的脏活累活由编译器级的引擎干。核心逻辑在 src/rename/walker.rs 里有兴趣可以翻一翻。动手前先做一次选择本地反混淆和云端 API 差在哪装工具之前先花 30 秒想清楚你要用哪种模式humanify 一次支持 OpenAI、Gemini、Anthropic、Ollama本地、OpenRouter、Requesty 六种后端。我们聚焦最容易纠结的两类——本地Ollama和云端 API对比维度本地模式Ollama云端 APIOpenAI/Gemini 等费用完全免费按 token 计费中等文件约 $0.1–$1隐私代码不出本机代码会发送到云端安装复杂度需装 Ollama 拉模型只需注册账号拿 key速度取决于你的 CPU/GPU网络往返通常秒回命名准确度受本地模型影响大模型更聪明偶尔更准适合谁追求免费、代码敏感、量大的场景追求质量、偶尔用一两次、能接受付费我的建议很直接免费党选本地省事党选云端两边都配好也不冲突——同一个文件本地跑一遍不满意换云端再跑一遍就行。本地模式还有个隐藏福利可以换模型。默认推荐qwen3.5:4b内存友好、速度不错如果你机器够强也可以ollama pull更大的模型用-m参数临时切换命名质量往往跟着提升。三步跑通本地反混淆装环境、拉模型、输命令好决定走本地路线了。全程只需要三步每一步都是一条可以复制的命令。第一步装好 Ollama 本地推理引擎Ollama 是一个管理本地大模型权重的工具装好后会在localhost:11434上开一个 OpenAI 兼容的 API。到官网下载对应系统的安装包即可macOS / Windows / Linux 都有。装完顺手验证一下服务是否在跑# 查看 Ollama 服务状态出现版本号说明已就绪 ollama --versionhumanify 的 Ollama 预设会默认连http://localhost:11434/v1这个配置在 src/cli/ollama.rs 里写得明明白白。第二步拉取推荐模型# 拉取默认推荐的 4B 模型约 2~3GB首次下载需要几分钟 ollama pull qwen3.5:4b只有拉过的模型才能被调用。想换成别的模型也很简单先ollama pull 名字跑命令时用-m指过去。第三步执行第一条还原命令humanify 是一个 Rust 编译出的单文件二进制从项目 Releases 页面下载对应系统的包解压即可无需 Node、无需 npm。下载后放到 PATH 里# Linux x86_64 示例其他平台在 Releases 里选对应文件 curl -L release下载地址 | tar xz sudo mv humanify /usr/local/bin/然后就可以跑你的第一个还原任务了# 把 obfuscated.js 还原成 readable.js humanify ollama obfuscated.js -o readable.js如果一切顺利几秒到几十秒后取决于你的硬件和文件大小readable.js里那些a、e、t就变成了有意义的单词。想确认命令参数随时敲# 查看完整参数说明 humanify --help拆开看看一次还原在幕后走了哪四步知其然也要知其所以然。这一节我们用大白话拆解 humanify 的脑回路全程不涉及术语轰炸。阶段一解析——把字符串变成一棵语法树输入是一坨纯文本。humanify 先用 oxc 解析器把它变成一棵 AST抽象语法树同时做语义分析搞清楚每个变量在哪个作用域、哪些地方引用了它。这一步做错了后面全完蛋所以 src/rename/walker.rs 里对解析错误做了严格处理——解析失败直接报错退出绝不硬着头皮往下走。阶段二取上下文——告诉模型这个变量身边是谁模型要起名字总得先看代码吧humanify 会按作用域从大到小的顺序遍历每个标识符把该变量周围的一小段代码截出来喂给模型。默认截 500 个字符你可以用--context-size调整。这个设计很聪明每次请求只带局部上下文既能省 token又能让模型聚焦。阶段三推理命名——但最终决定权不在模型手里模型看完上下文给出一个建议名比如把e改成inputString。但建议只是建议——humanify 还会做一系列兜底校验去掉非法字符、把foo bar变成fooBar、遇到static这类保留字自动加下划线前缀。这些规则在 src/rename/safe_name.rs 里注释写得非常清楚。阶段四重写输出——安全兜底再格式化名字定了接下来是工程活通过 AST 层面的重命名同步更新所有引用处理作用域冲突同一作用域撞名就自动加2、3后缀最后生成代码。整个流程只改名字不动任何程序逻辑——这是它区别于让 AI 重写整个文件方案的核心卖点。参数工具箱从单文件到批量处理的进阶玩法基础命令跑通了接下来这组参数工具箱能帮你把工具用出花来。用 stdin/stdout 把还原命令接进你的管道humanify 支持 Unix 风格 I/O输入写-表示读标准输入不写-o就输出到标准输出。这意味着它可以和任意命令无缝串联# 从文件读、输出到标准输出 cat splitstring.min.js | humanify ollama - splitstring.js调整上下文窗口掌控速度与内存上下文越大模型看得越全但请求越慢、内存越高。小文件用默认 500 就行大文件想省内存可以调小# 缩小上下文加快处理、降低内存占用 humanify ollama large-file.js --context-size 300批量还原整个目录的 .min.jshumanify 单次只处理一个文件但配上 Shell 循环就能批量干活# 逐个处理当前目录下所有 .min.js 文件输出到 output/ 目录 mkdir -p output for file in *.min.js; do humanify ollama $file -o output/${file%.min.js}.js done接上 webcrack 拆解 webpack 打包文件遇到 webpack 打包产物先拆包再还原效果翻倍# 先拆 webpack 包再交给 humanify 还原 npx webcrack bundle.min.js | humanify ollama - -o bundle.js加一个进度条大文件不再心里没底大文件处理时间长容易让人以为卡死了。加个--progress参数就能在终端看到完成了多少标识符# 显示标识符级别的进度条 humanify ollama big-file.js -o out.js --progress嵌入 CI/CD每次构建后自动还原把它写进 GitHub Actions 之类的流水线构建完顺手产出可读版本- name: Deobfuscate production code run: | humanify ollama dist/production.min.js -o dist/deobfuscated/本地模式在 CI 上也能跑只是 CPU 环境偏慢——官方在代码里专门给 Ollama 预设设了 1800 秒的超时上限就是考虑到纯 CPU 机器上单次推理可能要 10~15 分钟。翻车实录五个高频报错和它们的绕坑命令再顺手的工具也会踩坑。下面五个问题是我自己试出来的高频坑每个都配了可落地的修复命令。报错一连接被拒Ollama 没在跑humanify: failed to connect to http://localhost:11434/v1最常见的原因Ollama 服务没启动。修法# 先确认服务在跑 ollama serve # 另开一个终端再执行还原命令 humanify ollama obfuscated.js -o readable.js报错二模型未找到model qwen3.5:4b not found说明本地还没拉这个模型或者名字拼错了。修法# 先拉模型 ollama pull qwen3.5:4b # 也可以用 -m 指定你本地已有的其他模型 humanify ollama obfuscated.js -m llama3.1 -o readable.js报错三处理慢得像卡死本地推理本来就不快CPU 上尤其明显。三个优化手段按顺序试# 1. 缩小上下文窗口 humanify ollama big.js -o out.js --context-size 300 # 2. 换更小的模型 humanify ollama big.js -m qwen3.5:4b -o out.js # 3. 显示进度条确认它在干活而不是卡死 humanify ollama big.js -o out.js --progress报错四输出乱码或解析失败humanify: parse error: ...输入文件本身语法不合法或文件编码不是 UTF-8。先自查# 确认文件是 UTF-8 编码 file obfuscated.js # 用 node 快速验证语法 node --check obfuscated.js报错五输出内容为空或原样输出模型如果没给出有效建议工具会原样保留名字安全优先。可以加-v看详细日志确认每个标识符的处理过程# -v 会把配置和每个重命名步骤打到 stderr humanify ollama obfuscated.js -o readable.js -v效果说话同一段压缩代码还原前后长什么样理论讲再多不如看一眼前后对比。这是 README 里的经典示例先看输入——一行压缩代码function a(e,t){var n[];var re.length;var i0;for(;ir;it){if(itr){n.push(e.substring(i,it))}else{n.push(e.substring(i,r))}}return n}运行humanify ollama splitstring.min.js -o splitstring.js之后输出是这样的function splitString(inputString, chunkSize) { var chunks []; var stringLength inputString.length; var startIndex 0; for (; startIndex stringLength; startIndex chunkSize) { if (startIndex chunkSize stringLength) { chunks.push(inputString.substring(startIndex, startIndex chunkSize)); } else { chunks.push(inputString.substring(startIndex, stringLength)); } } return chunks; }看到了吗工具准确识别出这是一个按指定长度分割字符串的函数a变成了splitStringe变成了inputStringt变成了chunkSize逻辑一行没动可读性天壤之别。这种命名质量再配一个格式化工具基本就是源码级的阅读体验了。收尾照着这份行动清单开始你的第一个还原任务到这里本地反混淆这条链路你已经完整走通了。收个尾给你一份下一步行动清单装环境安装 Ollamaollama pull qwen3.5:4b装工具从 Releases 下载 humanify 二进制并放进 PATH跑第一个任务humanify ollama 你的文件.js -o readable.js验证结果用node --check或直接跑一遍测试确认逻辑没变进阶玩法把--progress、--context-size、stdin 管道、webcrack 组合用起来纳入流程把还原命令写进你的 CI/CD让可读版本自动产出humanify 的代码完全开源MIT 协议全部实现都在仓库里想深入了解可以直接翻源码重命名管线看 src/rename/LLM 交互看 src/llm/命令行入口看 src/main.rs。想从源码构建执行git clone https://gitcode.com/gh_mirrors/hu/humanify cd humanify cargo build cargo test如果发现 bug 或想加新功能欢迎提 Issue 或提交 Pull Request——项目本身就很活跃每个 PR 都会自动跑格式检查、clippy 和测试放心贡献。最后提醒一句反混淆只是第一步读懂业务逻辑、理解代码意图才是真正目的。但有了 humanify至少你不再需要对着a(e,t)猜上一整晚了。把这份清单存好下次再遇到压缩代码直接开工。【免费下载链接】humanifyDeobfuscate Javascript code using ChatGPT项目地址: https://gitcode.com/gh_mirrors/hu/humanify创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考