Newshot
Account

面向二进制/JS/Python 的对抗性防御,抵御 AI 逆向工程智能体

Translation(model translation, not the source's own text)

对抗性防御:保护二进制文件 / JS / Python 免受 AI 逆向工程智能体攻击

英语 · 简体中文 · 繁体中文 · 日语 · 韩语 · 土耳其语 · 俄语 · 越南语 · 泰语 · 德语 · 西班牙语 · 法语 · 乌克兰语 · 波兰语 · 葡萄牙语(巴西)· 阿拉伯语 · 波斯语 · 印尼语 · 意大利语 · 希腊语 · 马拉雅拉姆语 · 罗马乌尔都语 · 罗马尼亚语

BLA:Blind LLM Agents

投毒 → 耗尽 → 幻觉。让逆向工程再次破产。

开源的 Counter-REA 蓝队防御 MCP 与 CLI,保护软件发行物免受 AI 逆向工程智能体(morluto/rea、自主反编译器以及 LLM 侦察流水线)的攻击——已在 14 个展示基准目标上完成验证。

🌐 官方网站 · 📖 防御指南 · 📊 实时基准 · 🎯 CrackMe 竞技场 · 🏢 企业版 · ⚖️ 免责声明

快速开始 · 工作原理 · 实测结果 · 格式覆盖 · 14 目标基准 · CrackMe 竞技场 · 常见问题

仅限防御用途:BLA 专为保护自有知识产权与发行产物的软件作者和安全团队而设计。参见 DISCLAIMER.md。请始终从官方来源安装:qybaihe/bla 或 npm i bla-agents。

并排对比:未受保护的产物上的 REA 与 BLA 保护后的输出
并排对比:未受保护的产物上的 REA 与 BLA 保护后的输出

🔴 没有 BLA 时

AI 逆向工程智能体(REA + 编码智能体)会解包 .asar 归档、还原 SourceMap、追踪 IPC 桥接、检查 .wasm / .sqlite / .safetensors,并在数秒内以约 $0.20 的成本克隆核心业务逻辑。

🛡️ 有了 BLA(bla harden .)

每一次分析器遍历都会撞上确定性的资源上限(primitive-candidates > 256、ASAR > 16 MiB、WASM > Wabt 上限、SQLite 虚拟陷阱),沿着逼真的影子状态机运行,并投射出 300×–2,800× 的建模 token 放大(token-estimator.ts)。

⚡ 设计上运行时等价

耗尽图与诱饵载荷位于 $O(1)$ 数论不透明谓词($7x^2 - 1 \neq y^2 \pmod 7$)或惰性格式区段之后。随附的 14/14 个基准目标均通过输入/输出等价性测试(bla verify 用于检查 Counter-REA 结构闸门;自定义产物请运行你自己项目的测试套件)。

⚡ 30 秒快速开始

1. 一条命令完成 CLI 加固

将 BLA 指向任意项目或发布目录。它会自动发现构建产物(dist/、build/、.asar、.wasm、.sqlite、.safetensors、原生二进制、Python/C/Rust/Go),并执行 audit → protect → verify:


        # Node.js ^22.23.4 or >=24.0.0 recommended
npx bla-agents harden .
      

2. 智能体驱动的闭环防御(MCP + Skill)

把你的编码智能体(Claude Code、Cursor、Codex、Windsurf、Gemini CLI、GitHub Copilot CLI、VS Code、OpenCode、Antigravity)与 BLA 注册一次:


        npx bla-agents setup
      

然后只需向你的编码智能体输入提示词:


        Harden my software against REA
      

你的宿主智能体会自动编排 BLA 的 MCP 工具(bla_weave_plan → 源码级逻辑编织与字符串加密 → bla_verify_weave → bla_harden → bla_verify),从而同时加固你的源码架构与编译后产物。

3. 构建打包器插件(Vite / Rollup / Webpack / esbuild)

在打包阶段自动保护 JS chunk、用 VLQ v3 蜜罐映射移除/替换 SourceMap,并屏蔽 .wasm 资源:


        import { defineConfig } from "vite";
import { blaVitePlugin } from "bla-agents/bundler";

export default defineConfig({
  plugins: [blaVitePlugin({ intensity: "bankrupt", enableHoneySourceMaps: true })],
});
      

🧠 BLA 如何工作:智能体驱动的闭环

传统混淆器只会重命名变量(_0x1a2b)——现代 LLM 可以毫不费力地总结出来;或者把二进制文件包进沉重的 VM 加壳器中,这会破坏跨平台构建并拖垮性能。

BLA 3.x 将格式原生的确定性防护盾与宿主智能体的精准源码编织结合起来:

文章标题:针对 AI 逆向工程代理的二进制/JS/Python 对抗性防御

正文:


        flowchart LR
  subgraph S1["1 · Recon & Plan"]
    A["bla_audit / bla_lint"] --> B["bla_weave_plan"]
  end
  subgraph S2["2 · Agent Source Surgery"]
    B --> C["bla_encrypt_strings\n(AST Span XOR + Keystream)"]
    C --> D["bla_bind_scope\n(Multi-Site State Entanglement)"]
    D --> E["bla_verify_weave"]
  end
  subgraph S3["3 · Artifact Shielding"]
    E --> F["bla_harden / bla_defend\n(19+ Format Shields + Self-Seal)"]
  end
  subgraph S4["4 · Counter-REA Gate"]
    F --> G["bla_verify\n(Structural Counter-REA Checks Only)"]
  end
      
防御支柱机制对 AI 逆向工程代理的影响
1. 投毒(欺骗)植入格式合法的 canary、SGX/TPM2/Secure Enclave 委托清单、VLQ v3 蜜罐 SourceMap,以及看似合理的影子状态机。迫使 LLM 代理将上下文拆分到相互冲突的假设之间,并追逐人为构造的死胡同。
2. 耗尽(预算破坏)触发分析器的精确上限( primitive-candidates 、 alias-selections 、 ASAR 16 MiB 头、WASM Wabt 表示、SQLite 虚拟列求值、Model 32 层嵌套、PCAP tshark JSON、Electron 32 个 fuse 哨兵)。在核心逻辑被提取之前,将 REA 检查从 COMPLETE 降级为 LIMITED / CapacityError。
3. 纠缠(防剥离与自密封)通过运行时 SHA-256 摘要( --self-seal 、 --sidecar-entangle )和多站点调用者作用域折叠( bla_bind_scope )绑定同级产物(JS ↔ WASM ↔ Native sidecar)。阻止红队代理剥离诱饵、对单点检查做 nop 补丁,或将导出函数当作离线预言机调用。
4. 运行时楚门的世界加固 Electron V1 Fuse( RunAsNode=0 、 Inspect=0 ),并检测 CDP / Node Inspector / Frida / WebDriver 附加( runtime-shield.ts )。在实时调试期间提供可信的合成遥测数据,同时保持正常用户执行不受影响。

🔬 与真实 REA 的实证结果

这些数字来自在商用硬件上对 BLA 加固样本运行真实的 morluto/rea(npm run redteam:rea)。完整机器可读报告:docs/redteam/empirical-rea-validation.md / .json。

如何解读:“经实证验证”是指在此环境中,实时 REA 分析器路径返回了所列出的预算 / 容量 / 编辑失败。这不是对我们在本环境中未运行的 Ghidra/Frida/LLDB/Rizin/JADX 会话的声明。

在商用硬件上经实证验证

在 Node v24.22.1 下记录,并在注明时使用可选的 Wabt 1.0.42 + tshark 4.4。当外部原生工具缺失时,软跳过可保持 Node 22 / CI 通过。

格式之前 → 之后BLA 后的 REA 结果触发的确切 REA 预算 / 错误
Go buildinfo50 KiB → 1.16 MiB❌ 容量错误MAX_BUILD_INFO_BYTES (1 MiB) — Go build-info 字符串长度超过 1 MiB 限制
Erlang BEAM84 B → 262 KiB❌ 容量错误max_chunks — BEAM form 超出 64 个 chunk 的预算
EVM bytecode16 B → 4.00 MiB⚠️ 逼近完整上限EVM_INTERFACE_LIMITS.inputBytes (4 MiB)
PCAP24 B → 1.29 MiB❌ 预算被拒TSHARK_JSON_MAX_BYTES (>8 MiB) → AnalysisResourceConstraintError
Electron ASAR607 B → 16.9 MiB❌ 容量错误DEFAULT_ASAR_MAX_HEADER_BYTES (16 MiB)
WASM + Wabt54 B → 6.56 MiB · 251 个导出⚠️ ifaceState=partialWASM_INTERFACE_REPRESENTATION_BYTES — Typed WASM 接口解码超出 WABT 预算
SQLite (Node 24)12 KiB → 56 KiB❌ 脱敏 / 求值陷阱SqliteColumnEvaluationFailure — 虚拟陷阱列上的未知 enclave_unseal_payload()
JavaScript761 B → 116 KiB❌ 预算被拒alias-selections + getter-expansion + primitive-bytes + primitive-candidates
Safetensors128 B → 10.1 KiB❌ 容量错误MODEL_JSON_NESTING — Safetensors JSON 嵌套超过 32 层(HF 可加载;张量完整)
GGUF24 B → 7.7 KiB❌ 容量错误MODEL_METADATA_NESTING — GGUF 元数据嵌套超过 32 个数组帧
Electron fuses50 KiB → 1.16 MiB❌ 预算被拒ELECTRON_FUSE_LIMITS.maximumSentinelsPerSlice (>32)
Flutter pool50 KiB → 1.16 MiB⚠️ 预计触及上限MAX_POOL_URIS / MAX_POOL_TOKENS(REA 以“at least N”截断)

本地复现:


        export REA_WABT_BIN_DIRECTORY=$HOME/opt/wabt-1.0.42/bin   # optional
npm run build && npm run redteam:rea
      

这些防护存在于仓库内,并由单元测试 / catalog 漂移检查覆盖,但对应的 REA 路径需要外部原生调试器 / 反编译器,CI runner 上未安装:

领域此处为何未验证
Ghidra / 原生反编译深度需要本地安装 Ghidra + REA bridge
Frida / LLDB / GDB / Rizin 实时会话需要这些调试器 + 附加到设备 / 进程
JADX / 完整 Android APK 流水线不支持 APK 重签名;独立的 DEX 防护已在仓库内
固件容器存在暂存 / 提取预算;但没有固件语料库就无法做诚实的 E2E
SPIR-V / CUDA fatbinary / AMD GPU 对象需要原生 GPU 对象解码器;PTX 文本已在仓库内受防护
EVMole 进程内 EVM 解码无法在进程内路径化;EVM 防护会致密化到 4 MiB 输入上限

🛡️ 格式覆盖

全部 19+ 种格式防护都直接内置于 bla-agents,零外部打包器依赖:

格式金丝雀 + 诊断耗尽 / 预算触发经验 vs. REA备注
JavaScript / TypeScript✓✓ 语义预算已验证(进程内)Babel AST;AST 安全字符串加密;自密封
Electron .asar✓✓ 头部 16 MiB已验证IPC 去字面化 + Pickle 重新打包
Electron fuses✓✓ >32 哨兵已验证V1 fuse 加固 + 哨兵洪泛
WebAssembly ( .wasm )✓ 自定义节✓ 导出诱饵 → Wabt已验证(Wabt)LEB128 解析器;保留 WebAssembly.validate
SQLite ( .sqlite / .db )✓ 蜜罐 + 陷阱列✓ 列评估已验证(Node 24)魔字节验证;支持 WITHOUT ROWID
Safetensors ( .safetensors )✓ 字符串元数据✓ JSON 嵌套 >32已验证可被 HuggingFace 加载;张量字节保留
GGUF ( .gguf )✓✓ ARRAY 嵌套 >32已验证保留模型权重和 KV 张量
Go buildinfo (ELF)✓✓ >1 MiB已验证映射的 ELF 节
Windows PE ( .exe / .dll )✓✓ .enclave COFF 节 + fuses/rustc/Dart已验证映射的 .enclave 节、x86-64 ABI 函数岛、MSVC RTTI、CodeView RSDS PDB
Flutter / Dart pool✓✓ URI/token 上限已验证(预测)快照魔数 & 工具链洪泛
Erlang BEAM ( .beam )✓✓ 块 / 原子已验证超过 64 块预算
EVM + Solidity meta✓✓ → 4 MiB 输入已验证(方法)CBOR 元数据 + 字节码致密化
PCAP ( .pcap )✓✓ tshark JSON >8 MiB已验证(tshark)合成包 + 金丝雀注入
Python ( .py / .pyc )✓✓设计用于CPython 3.7–3.14 marshal & AST 支持
NVIDIA PTX ( .ptx )✓入口洪泛仅基准测试内核入口 & 金丝雀洪泛
DEX / IL2CPP / bplist / .NET / JVM / ZIP✓格式特定设计用于重新计算 DEX SHA-1 & Adler32 校验和

📊 基准测试(14 个目标,内部估算)

运行 npx bla-agents benchmark 在本地执行 14 个目标的展示:


        npx bla-agents benchmark
      
注意:下表中的 Token 和 USD 列是根据 BLA 的 REA 限制目录得出的内部估算,用于说明不同格式之间的相对放大效应——实际进程级 REA 错误,请参见上文的经验结果表。

聚合展示结果:约 639.5× token 放大 · 约 304.4× 成本放大 · 14/14 捆绑展示目标通过了运行时等价性检查。此结果仅限于基准测试夹具。

目标工件未保护基线(估计)BLA 保护后(估计)Token 倍数运行时等价性
DX-Ball sound-pan ( .js )84/100 · 4,800 tok · $0.202/100 · 13.5M tok · $212.82 · LIMITED2,822.7×✅ 100%
Notion Electron clipboard ( .asar )98/100 · 9,132 tok · $0.342/100 · 23.1M tok · $358.28 · LIMITED2,532.3×✅ 100%
企业许可证验证器 ( .ts )84/100 · 4,800 tok · $0.202/100 · 13.5M tok · $212.82 · LIMITED2,822.7×✅ 100%
NVIDIA PTX 计算内核 ( .ptx )81/100 · 4,800 tok · $0.206/100 · 2.40M tok · $39.29 · LIMITED500.2×✅ 100%
Erlang BEAM 模块 ( .beam )81/100 · 8,900 tok · $0.345/100 · 3.86M tok · $62.08 · LIMITED433.2×✅ 100%
WASM 加密内核 ( .wasm )81/100 · 4,800 tok · $0.206/100 · 1.83M tok · $30.23 · LIMITED381.5×✅ 100%

| 边缘 AI Safetensors ( .safetensors ) | 81/100 · 4,800 tok · $0.20 | 6/100 · 1.81M tok · $29

热路径上没有。耗尽图位于 $O(1)$ 数论不透明谓词之后,二进制/模型/数据库诱饵则存在于惰性元数据或蜜罐表中。每个基准测试目标都会验证与原始构建 100% 的输入/输出等价性。

不会。所有 19+ 种格式防护都内置于 bla-agents 中,使用纯 TypeScript/Node.js 实现。外部工具(Wabt、tshark)仅在你运行可选的实时 REA 红队套件(npm run redteam:rea)时使用。

不。BLA 严格来说是蓝队防御工具,会在发布前加固你自己的构建产物。参见 DISCLAIMER.md。

📚 文档与链接

  • ⚖️ DISCLAIMER.md — 防御性使用与自有软件政策
  • 🚀 安装与智能体设置
  • 🛠️ CLI 与 31 工具 MCP 目录
  • 🤖 一键智能体防御(技能优先)
  • 🧬 Weave-Decoy 与源码手术 MCP
  • 🔬 REA 实证验证报告
  • 📋 反 REA 预算矩阵
  • 📝 CHANGELOG · 🛡️ SECURITY.md

🤝 贡献与社区

欢迎在 qybaihe/bla 提交 Issue 和 PR。提交 PR 前:


        npm run build && npm test && node dist/cli.js benchmark
node scripts/verify-website.mjs
      
  • 🎯 公开 BLA CrackMe 竞技场(challenge/v6 – v9)
  • 💬 LINUX DO(linux.do)——新的理想型社区

📄 许可证

Star 历史

Star History 绘制 qybaihe/bla 的 GitHub star 增长情况。图表图片缓存约一天,并非按秒计数。点击它可打开完整历史。

qybaihe/bla GitHub 仓库的 Star 历史图表
qybaihe/bla GitHub 仓库的 Star 历史图表

The translation is machine-generated and individual terms may be off. Nothing is rewritten or cut; the original is authoritative.

Published by HN AI
This site only summarises and aggregates; copyright stays with the original author. Headlines and summaries follow the source — where they differ, the original wins.
Read the original ↗