소스코드 비공개 JS를 AI 에이전트가 분석하는 REA, 실제 정확도 검증
요약
본 글은 AI 에이전트가 소스 코드가 비공개인 JavaScript 파일을 분석하는 REA 도구의 정확성을 검증한 내용을 다룹니다. 특히 상용 디컴파일러 없이 순수 JS 정적 분석에 초점을 맞추었으며, jQuery와 같은 공개 라이브러리를 대상으로 실제 코드와 비교하여 높은 신뢰도를 확인했습니다. REA 사용 시 Wakaru를 별도로 설치하고 환경 변수를 설정해야 하는 등 초기 설정 과정의 어려움과 성공적인 활용 방법을 제시합니다.
핵심 포인트
- AI 에이전트 REA로 비공개 JS 기능 분석 가능성 검증
- 상용 도구 없이 순수 정적 JavaScript 분석에 초점
- 분석 정확도 검증을 위해 공개 라이브러리(jQuery) 사용
- REA의 '코드 복원' 기능을 쓰려면 Wakaru 설치 및 환경 변수 설정 필수
이것은 무엇인가
coding agent(Claude Code 등)에게 네이티브 바이너리나 JavaScript/Electron 앱을 분석하게 하여, "소스 코드는 복원하지 않지만 기능의 동작을 조사한다"는 것을 목적으로 하는 MCP 서버/CLI 도구 REA (morluto/rea)(MIT 라이선스)를 실제로 직접 작동시키며 검증했다.
이번에는 검증 범위를 **정적 JavaScript 분석(Hopper/Ghidra/IDA 같은 상용 분석 도구를 사용하지 않는 범위)**으로 한정했다. 네이티브 바이너리 분석은 제외한다.
검증 대상 소프트웨어로는 jQuery 3.7.1의 빌드된 minified 파일(dist/jquery.min.js, MIT 라이선스)을 사용했다. 이는 npm registry에서 가져올 수 있는 공개 배포물이므로 재배포나 분석에 문제가 없다. jQuery는 "본질과 구현이 잘 알려진" 소프트웨어이므로, REA가 내놓은 분석 결과를 실제 소스 코드와 직접 비교하여 정확성을 검증할 수 있다는 장점이 있다.
맨 앞의 라이선스 주석(/*! jQuery v3.7.1 | ... */만으로도 어떤 라이브러리인지 알 수 있다)을 제거하고, 파일명마저 bundle.js 같은 이름 없는 것으로 바꿔서, "소스 코드와 본질이 비공개인 앱"을 모방했다.
출처:
- REA: https://github.com/morluto/rea (MIT)
- jQuery: https://github.com/jquery/jquery (MIT)
- Wakaru: https://github.com/pionxzh/wakaru (Apache-2.0, 후술)
、IPC 관련, 네이티브 어드온 등)이 모두 0으로 판정되어 jQuery가 순수 라이브러리이며 Electron 앱이 아님을 올바르게 인식했다.
recover-javascript-sources
먼저 실패
코드 복원: ```
$ npx rea-agents@latest recover-javascript-sources ./blind-target/bundle.js ./recovered
{
"code": "capability_unavailable",
"message": "Provide an absolute REA_WAKARU_COMMAND pointing to a Wakaru ^1.13.0 Linux x64 binary (verified with 1.14.0); no tool is installed by REA."
...
REA의 '코드 복원' 기능은 단독으로는 작동하지 않으며, 별도로 Wakaru(Apache-2.0, Rust로 만든 JavaScript 디컴파일러)를 직접 준비하여 환경 변수 `REA_WAKARU_COMMAND`에 바이너리의 절대 경로를 전달해야 했다. `--help`만으로는 알아차리기 어려웠고, 실제로 실행해서 에러 메시지를 읽기 전까지는 알지 못했다.
다행히 Wakaru는 npm으로 배포되고 있어(`npm install [email protected]`),
추가 유료 API 키 없이 바로 도입할 수 있었다.
$ npm install [email protected] --no-save
$ node_modules/@wakaru/cli-linux-x64/wakaru --version
wakaru 1.14.0
## 코드 복원, 재도전: 성공
$ export REA_WAKARU_COMMAND=/abs/path/node_modules/@wakaru/cli-linux-x64/wakaru
$ npx rea-agents@latest recover-javascript-sources
./blind-target/bundle.js ./recovered --format json
{
"report": {"detected_formats": ["amd"], "modules": [{"status": "decompiled"}],
"total": 1, "failed": 0, "elapsed_ms": 549},
...
이번에는 성공했다. 87,444바이트의 난독화된 입력에서, 191,015바이트・6,341행의 읽기 쉬운 JavaScript 파일이 0.549초 만에 생성되었다. `runtime_equivalence:
이는 일반적인 JS 문자열 이스케이프(2글자 텍스트)이지만, 복원 결과에서는 이 부분만 원본 NUL 바이트로 출력되었다(같은 줄의 `\x7f`는 올바르게 2글자로 유지됨). 문자열이 실행될 때의 값으로는 결과적으로 동등하므로 구문은 깨지지 않지만, '읽기 쉬운 소스 복원'이라는 도구의 목적에서 볼 때 에디터나 `grep`, `git diff` 등에서 이해할 수 없는 제어 문자로 보이게 되는 것은 명확한 결함이다. 문자열 연결을 템플릿 리터럴로 변경하는 변환 경로에서 이스케이프 시퀀스의 재이스케이프 처리의 일관성이 부족했기 때문으로 추측된다.
## 요약
- REA는 minified/소스 비공개 JavaScript에 대해, 정적 분석과 코드 복원 양쪽을 **추가 유료 API 키나 GPU 없이 실행할 수 있었다.** - 검증한 1개의 함수에 대해서는 복원 결과의 로직이 실제 소스와 완벽하게 일치하여, '소스 비공개 앱의 동작을 복원한다'는 주장에 구체적인 설득력이 있었다.
- 한편으로, 코드 복원 기능은 단독으로는 작동하지 않고 외부 도구(Wakaru)가 별도로 필요하다는 문서만으로는 알아차리기 어려운 의존성이 있었으며, 복원 결과에는 이스케이프 문자가 NUL 바이트로 깨지는 구체적인 결함도 발견되었다.
리버스 엔지니어링 계열의 도구이므로, 검증 대상은 직접 준비한 MIT 라이선스의 공개 배포물(jQuery)으로 한정하며, 교육 및 검증 목적에서의 사용이다.
### 토론

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기