PORTFOLIO

rea-kit

비공개 운영 개발 기간 5일

우리 앱 산출물을 정적 역산해 증거 보고서로

어디서 쓸 수 있나요

  • 명령줄 도구 공개 링크 없음
rea-kit 개념 이미지
rea-kit 개념 이미지

프로젝트 개요

우리가 만든 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 (코어/진입점)4model.js, status.js, index.js, i18n.jsrelscope, relscopeBoot, rmBuildModel, rmEdgeWidth, rmFormatValue, rmGroupChain 외 13개src/schema(14), src/viewer(2)
src/layout7size.js, index.js, timeline.js, tree.js 외 3개rmFixedMeasure, rmLayout, rmCountCrossings, rmLayoutLayered, rmLayoutSequence, rmLayoutManual 외 25개src (코어/진입점)(5), src/schema(2)
src/schema5rules.js, validate.js, messages.js, public.js 외 1개rmPublish, rmPublicCheck, rmPublicScanText, rmMessage, rmCheckLink, rmEditDistance 외 31개src/render(2)
src/viewer4instance.js, dom.js, fx.js, list.jsrmFxCamera, rmFxFlip, rmFxReduced, rmFxRipple, rmBuildList, rmButton 외 5개src (코어/진입점)(18), src/render(12), src/schema(9), src/layout(6)
src/render3svg.js, geometry.js, icon-data.jsrmDrawEdge, rmDrawGroup, rmDrawNode, rmEl, rmIcon, rmText 외 12개src/layout(6), src (코어/진입점)(3)
src/export1export.jsrmExport, rmPaint, rmSvgStringsrc/viewer(2)
scripts11gen-self-map.mjs, build.mjs, new-spec.mjs, tree-from-dir.mjs 외 7개lintText, rmBuildSelfMap, rmModuleIdsrc/schema(20)
demo6fuzz.mjs, esm.mjs, perf.mjs, csp-collector.js 외 2개--

그래프 노드 종류별 분포 (총 1,350개 노드 · 1,858개 엣지)

노드 종류(kind)개수
javascript-module650
source-module313
javascript-asset154
endpoint80
artifact63
source-map62
electron-renderer13
storage11
package3
unknown1

관찰된 엔드포인트 후보 (상위 3/3건)

종류리터럴 값호출 메커니즘출처 파일
networkP.urlcall:fetchsrc/status.js, dist/relscope.js, dist/relscope.mjs
networkfcall:fetchscripts/validate-spec.mjs
networku.hrefcall:fetchsrc/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

비슷한 제품을 만들고 싶으신가요?

이 프로젝트를 보고 떠오른 아이디어나 궁금한 점을 편하게 남겨 주세요.

이 프로젝트로 문의하기