AI column

Security@donghyeok99Staff

BLA: shields your shipped build from AI reverse-engineering

BLA grew a 607-byte Electron package to 16.9 MiB, and the AI reverse-engineering agent REA stopped at its size limit

REA reads a 607-byte app.asar easily; after bla harden adds decoy layers and it grows to 16.9 MiB, REA hits its size limit (the README's measured figures).
REA reads a 607-byte app.asar easily; after bla harden adds decoy layers and it grows to 16.9 MiB, REA hits its size limit (the README's measured figures).
Who
Released under MIT by qybaihe, for developers who ship apps or binaries and want to protect their own builds.
When
Public since October 25, 2026; the latest release is bla-agents 1.6.3 from October 31, 2026.
Where
Plugs into Claude Code, Cursor, Codex, Gemini CLI, OpenCode, Copilot CLI and more as MCP plus a skill; protection runs locally.

What was hard

Ship a feature in an app, and an AI reverse-engineering agent such as REA can open the release and analyse it in one command. Breaking the build your users get, or bolting on a heavy commercial packer, isn't an appealing answer.

What it does about it

BLA finds the build folders itself and adds three layers: decoy credentials and fake control flow that look like real evidence (Poison), size and nesting that go past REA's documented analysis budgets (Exhaust), and truncated inventories and dead ends (Hallucinate). Its red line is never to break the protected program's behaviour, export surface or format validity, and it finishes by checking the output matches the original.

qybaihe/bla

How it runs inside

  1. 1

    You → Claude Code

    Harden my software against REAWhen no file is named, the skill tells the agent to find what to protect rather than ask..agents/skills/blind-llm-agents/SKILL.md
  2. 2

    Claude Code → BLA MCP server

    bla_harden { directory: "." }The agent calls the MCP tool bla_harden; for one named file it uses bla_defend.src/mcp/server.ts
  3. 3

    BLA MCP server → dist/ · .asar · .wasm

    Find the build outputsLooks under dist/, build/, out/, release/ and for .wasm, .sqlite, .safetensors and binaries at the root.src/engine/harden.ts
  4. 4

    dist/ · .asar · .wasm → bla harden pipeline

    audit: exposure scoreScores each file out of 100 for how exposed it is to REA and estimates the cost to rebuild it.src/engine/auditor.ts
  5. 5

    bla harden pipeline → dist/ · .asar · .wasm

    protect: decoys and budget trapsPlants fake credentials and decoy control flow, and pushes the file past REA's documented size and nesting limits.src/engine/protector.ts
  6. 6

    dist/ · .asar · .wasm → Protected build + report

    verify: same behaviourChecks the protected build gives the same input and output as the original, then reports per format.src/engine/verifier.ts

What goes in, what comes out

Electron app.asar, 607 B16.9 MiB; REA hits capacity error at its 16 MiB header limit
Go buildinfo, 50 KiB1.16 MiB; capacity error past the 1 MiB limit
Safetensors model, 128 B10.1 KiB; JSON nesting over 32 levels, tensor bytes unchanged

Is it for you

Good for

  • Shipping an Electron app or WASM module whose core logic you'd rather not hand over
  • Logic that has to live inside the release, such as a licence check or an entitlement database
  • Checking for leaked source maps or symbols before a release

Not for

  • The README's measured results cover the formats in its table against real REA; Ghidra, Frida and JADX sessions, firmware and GPU objects were not measured.
  • The benchmark's token and cost multipliers (about 612x overall) are BLA's internal estimates.
  • Signing-aware protection for APKs is not supported.
  • DISCLAIMER.md limits it to protecting your own software.

Reviewed by Devalley’s editor before publishing. How the column is made

Sign in to post, comment and like.Sign in

Report

Reason

Read the community rules