BLA: AI 역공학 에이전트를 막는 배포 빌드 방어 도구
607바이트짜리 Electron 앱 패키지를 16.9MiB로 키워, AI 역공학 에이전트 REA가 용량 한도에 걸려 멈췄어요
- 누가
- qybaihe가 MIT로 공개한 도구예요. 앱이나 바이너리를 배포하는 개발자가 자기 빌드를 지키려고 쓰는 방어용이에요.
- 언제
- 2026년 10월 25일에 공개됐고, 최신 릴리스는 2026년 10월 31일의 bla-agents 1.6.3이에요.
- 어디서
- Claude Code, Cursor, Codex, Gemini CLI, OpenCode, Copilot CLI 등에 MCP와 스킬로 붙고, 보호는 내 PC에서 돌아요.
이게 불편했어요
기능을 만들어 앱으로 내보내면, REA 같은 AI 역공학 에이전트는 명령 하나로 그 배포물을 열어 분석해요. 그렇다고 사용자에게 가는 빌드를 망가뜨리거나 무거운 상용 패커를 붙이기는 부담스러웠어요.
그래서 이렇게 풀어요
BLA는 빌드 폴더를 스스로 찾아 세 겹을 심어요. 진짜처럼 보이는 미끼 자격증명과 가짜 제어 흐름(Poison), REA가 문서로 밝힌 분석 한도를 넘기는 크기와 중첩(Exhaust), 잘린 목록과 막다른 길(Hallucinate)이에요. 핵심 원칙은 보호한 프로그램의 동작, 내보내는 인터페이스, 형식의 유효성을 절대 깨지 않는 것이고, 마지막에 원본과 같은 입출력을 내는지 확인해요.

안에서는 이렇게 돌아가요
- 1
나 → Claude Code
「Harden my software against REA」파일을 지정하지 않으면 스킬은 어느 파일을 보호할지 묻지 말고 찾아내라고 적혀 있어요..agents/skills/blind-llm-agents/SKILL.md - 2
Claude Code → BLA MCP 서버
bla_harden { directory: "." }에이전트가 MCP 도구 bla_harden을 불러요. 파일을 하나만 지정하면 bla_defend를 써요.src/mcp/server.ts - 3
BLA MCP 서버 → dist/ · .asar · .wasm
보호할 빌드 산출물 찾기dist/, build/, out/, release/ 아래와 루트의 .wasm·.sqlite·.safetensors·바이너리를 찾아 형식을 가려요.src/engine/harden.ts - 4
dist/ · .asar · .wasm → bla harden 파이프라인
audit: 노출 점수파일마다 REA에 얼마나 드러나는지 100점 만점으로 매기고 복원 비용을 추정해요.src/engine/auditor.ts - 5
bla harden 파이프라인 → dist/ · .asar · .wasm
protect: 미끼와 한도 초과 장치가짜 자격증명과 미끼 제어 흐름을 심고, REA가 정해 둔 크기·중첩 한도를 넘기게 만들어요.src/engine/protector.ts - 6
dist/ · .asar · .wasm → 보호된 빌드와 보고서
verify: 원래와 같은 동작인지보호한 빌드가 원본과 같은 입출력을 내는지 확인하고, 형식별 결과를 보고해요.src/engine/verifier.ts
넣으면 이렇게 나와요
나한테 맞을까요
이럴 때 좋아요
- Electron 앱이나 WASM 모듈을 배포하면서 핵심 로직이 그대로 읽히는 게 걱정될 때
- 라이선스 검사나 권한 DB처럼 배포물 안에 둘 수밖에 없는 로직이 있을 때
- 배포 전에 소스맵이나 심볼이 새지 않는지 점검하고 싶을 때
이건 안 돼요
- README의 실측은 표에 있는 형식에서 진짜 REA로 잰 것이고, Ghidra·Frida·JADX 세션과 펌웨어·GPU 객체는 실측하지 않았다고 밝혀요.
- 벤치마크의 토큰·비용 배수(합계 약 612배)는 BLA 내부 추정치예요.
- APK를 다시 서명하는 보호는 지원하지 않아요.
- 자기 소프트웨어를 지키는 용도로만 쓰라고 DISCLAIMER.md에 적혀 있어요.
발행 전에 Devalley 편집자가 검토했어요. 칼럼은 어떻게 만드나요
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
- 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.

How it runs inside
- 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
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
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
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
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
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
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