PORTFOLIO
rea-kit
비공개 운영 개발 기간 5일우리 앱 산출물을 정적 역산해 증거 보고서로
어디서 쓸 수 있나요
-
명령줄 도구 공개 링크 없음
프로젝트 개요
우리가 만든 Flutter·Android 앱, 네이티브 바이너리, JS·Electron 앱, HAR 캡처를 정적으로 역산해, 근거(Evidence ID)와 한계를 함께 남긴 짧은 한국어 보고서와 대화형 관계도로 정리하는 명령줄 도구입니다. 실행 중인 앱을 건드리지 않고 산출물 파일만 읽습니다.
주요 기능
- Flutter APK 빌드 식별·두 빌드 대조
- JS 앱 엔드포인트 후보 요약(잡음 자동 제외)
- HAR 의 쿠키·토큰을 보관소와 보고서에서 자동 가림
- 모든 결론에 증거 ID 와 한계 표시
샘플 결과물
실제 출력에서 경로·해시·보관 위치 같은 중요 정보는 가렸습니다.
보고서 샘플
샘플 결과물 — rea-kit js-summary 를 우리 공개 도구 RelScope 저장소에 돌린 실제 출력입니다(2026-10-21).
분석한 기기의 경로·보관 위치는 가렸고, 해시는 앞 8자만 남겼습니다. 나머지는 출력 그대로입니다.
JS/Electron 정적 구조 요약 — [경로 가림]/relscope
결론: JS/Electron 정적 분석 완료 — 파싱된 JS 154개(실패 0건), 아키텍처 8개 계층, 노드 1,350개, 엔드포인트 후보 3건(잡음 73개 제외) (정적 관찰일 뿐 실행 증명 아님)
보고서 전체 보기 (74줄)
아키텍처 계층 및 기능(공개 심볼·내부 의존성) 분석 (8개 계층)
| 계층(서브시스템) | 모듈 수 | 주요 파일 | 공개 기능 심볼(exports) | 참조하는 내부 계층(imports) |
|---|---|---|---|---|
src (코어/진입점) | 4 | model.js, status.js, index.js, i18n.js | relscope, relscopeBoot, rmBuildModel, rmEdgeWidth, rmFormatValue, rmGroupChain 외 13개 | src/schema(14), src/viewer(2) |
src/layout | 7 | size.js, index.js, timeline.js, tree.js 외 3개 | rmFixedMeasure, rmLayout, rmCountCrossings, rmLayoutLayered, rmLayoutSequence, rmLayoutManual 외 25개 | src (코어/진입점)(5), src/schema(2) |
src/schema | 5 | rules.js, validate.js, messages.js, public.js 외 1개 | rmPublish, rmPublicCheck, rmPublicScanText, rmMessage, rmCheckLink, rmEditDistance 외 31개 | src/render(2) |
src/viewer | 4 | instance.js, dom.js, fx.js, list.js | rmFxCamera, rmFxFlip, rmFxReduced, rmFxRipple, rmBuildList, rmButton 외 5개 | src (코어/진입점)(18), src/render(12), src/schema(9), src/layout(6) |
src/render | 3 | svg.js, geometry.js, icon-data.js | rmDrawEdge, rmDrawGroup, rmDrawNode, rmEl, rmIcon, rmText 외 12개 | src/layout(6), src (코어/진입점)(3) |
src/export | 1 | export.js | rmExport, rmPaint, rmSvgString | src/viewer(2) |
scripts | 11 | gen-self-map.mjs, build.mjs, new-spec.mjs, tree-from-dir.mjs 외 7개 | lintText, rmBuildSelfMap, rmModuleId | src/schema(20) |
demo | 6 | fuzz.mjs, esm.mjs, perf.mjs, csp-collector.js 외 2개 | - | - |
그래프 노드 종류별 분포 (총 1,350개 노드 · 1,858개 엣지)
| 노드 종류(kind) | 개수 |
|---|---|
| javascript-module | 650 |
| source-module | 313 |
| javascript-asset | 154 |
| endpoint | 80 |
| artifact | 63 |
| source-map | 62 |
| electron-renderer | 13 |
| storage | 11 |
| package | 3 |
| unknown | 1 |
관찰된 엔드포인트 후보 (상위 3/3건)
| 종류 | 리터럴 값 | 호출 메커니즘 | 출처 파일 |
|---|---|---|---|
| network | P.url | call:fetch | src/status.js, dist/relscope.js, dist/relscope.mjs |
| network | f | call:fetch | scripts/validate-spec.mjs |
| network | u.href | call:fetch | src/viewer/instance.js, dist/relscope.js, dist/relscope.mjs |
관찰 (Observation)
- 대상 경로:
[경로 가림]/relscope(루트 아티팩트 SHA-256:b05163f3…(가림)) - 통계: 대상 파일 279개 · 파싱된 JS 154개 · AST 노드 350,151개 · finding 1,243건 · 파싱 실패 0건
- 패키지 구성: 루트
relscope@0.18.1· 분석된 내장 패키지(2개):@dagrejs/dagre@3.1.1,@dagrejs/graphlib@4.0.5 - Electron 표면(정적 구문 관찰): BrowserWindow 0개 · preload 0개 · contextBridge 0개 · IPC 연산 0건(리터럴 채널 0개, 매칭쌍 0개)
- 정적 엔드포인트 리터럴 후보: 3건 관찰됨
- 엔드포인트 노드 80개 중 73개를 잡음으로 제외: 시험·의존성 코드 출처 35개 ·
path속성 값이 라우트 경로 꼴(/로 시작) 아님 34개 · Map 등 조회 호출(값이 URL 꼴 아님) 4개 — REA 원본 분류는 보관소 증거에 그대로 있음 - 클라이언트 저장소 접근:
call:localStorage.getItem(src/viewer/instance.js, dist/relscope.js) ·call:localStorage.removeItem(src/viewer/instance.js, dist/relscope.js) ·call:localStorage.setItem(src/viewer/instance.js, dist/relscope.js) - HTML/렌더러 진입점(11개):
demo/index.html,demo/view.html,demo/fuzz.html,docs/structure.html,demo/esm.html외 6개 - 내장 JSON/템플릿 자산(43개):
templates/pipeline.json(edges,id,nodes,relscope,title),examples/dataflow.json(edges,groups,id,meta,nodes),templates/network.json(edges,id,nodes,relscope,title),sites.json,examples/lifecycle.json(edges,id,nodes,relscope,title) 외 38개 - 핵심 허브 모듈(상위 5개):
src/viewer/instance.js(in:38/out:1),src/schema/rules.js(in:0/out:26),src/render/svg.js(in:13/out:7),src/layout/size.js(in:1/out:16),src/schema/validate.js(in:8/out:6) - 주요 소스 모듈 순위에서 시험·의존성 코드 111개 제외
추론 (Inference)
- 관찰된 엔드포인트·IPC·모듈 관계는 정적 AST 구문에서 추출된 후보이며, 실제 런타임 도달·호출 여부는 증명하지 않음
미상 (Unknown)
- 동적 문자열 조합(
fetch(baseUrl + path)등)이나 난독화된 참조, 범위 밖 파일의 관계는 정적 분석으로 알 수 없음(미상)
한계 (Limitations — 원문 보존)
- CommonJS and ESM binding relationships were recovered from inert syntax and resolved only within the inventoried artifact container.
- Graph coverage is incomplete; unavailable facts remain explicit and must not be read as absence.
- JavaScript and HTML were parsed as inert text; bundle bootstrap code was never executed.
- Static imports, entrypoints, workers, endpoints, and storage relationships do not prove runtime execution.
- Static paths and relationships may remain unresolved when expressions are dynamic or obfuscated.
- Webpack/Rspack factories were recovered from AST literals; REA did not invoke push handlers or bundle bootstrap code.
- test/fixtures/csp/bad-5.html has 1 inline JavaScript body starting at line 1 that was not analyzed; endpoints, storage, imports and other facts in it are absent from the evidence.
근거 (Evidence)
- Evidence ID:
ev_09aab544…(가림) - 대상 SHA-256:
b05163f3…(가림) - REA 버전:
6.7.0 - 보관소 키:
eb1d58d4…(가림)(신규 분석) - 보관 경로:
[가림 — 분석한 기기의 증거 보관소]
관계도 샘플 · 구성도 · 양(선 굵기)
WORK WITH ME
비슷한 제품을 만들고 싶으신가요?
이 프로젝트를 보고 떠오른 아이디어나 궁금한 점을 편하게 남겨 주세요.