MCP 프론트엔드 JS 리버스 엔지니어링 작업 규범
ACTION REQUIRED (읽은 후 즉시 실행)
NOW:../field-journal/precedent-reverse.md읽기 — 본 스킬의 작업이 승인된 정규 작업인지 확인NOW: 현재 작업이 본 스킬의 적용 범위에 해당하는지 확인NEXT:../tool-index.md읽기, 도구 가용성 및 실제 경로 확인NEXT: 도구가 없으면 bootstrap 호출, 경로를 추측하지 않음ACT: "워크플로우" 첫 단계로 진입하여 실행, 확인 상태에서 멈추지 않음
적용 범위
다음 시나리오에 해당하는 작업은 본 스킬을 우선 사용합니다:
- 인터페이스 서명, 암호화 파라미터, 리스크 관리 필드 식별
- 페이지 요청 체인 및 스크립트 출처 관찰
- 런타임에서 함수 입력값과 반환값 캡처
- 특정 XHR/Fetch/WebSocket 트리거 지점 추적
- 페이지 증거를 Node로 가져와 로컬 재현 및 환경 보완
대상이 바이너리, APK, PE, ELF, DLL, SO인 경우 ida-reverse, radare2 또는 reverse-engineering을 대신 사용하십시오.
현재 환경 기본 도구 매핑
본 스킬은 기본 도구 이름이 존재한다고 가정하지 않고, 현재 클라이언트 환경에서 사용 가능한 js-reverse_* 도구에 자동으로 바인딩됩니다.
현재 작업에 jshookmcp, JS hook, CDP, 브라우저 중단점, 네트워크 인터셉션, SourceMap 또는 AST 난독화 해제가 명시적으로 언급된 경우에도 본 스킬을 따릅니다. 단, 기본 MCP 면을 jshookmcp로 전환할 뿐, 이를 새로운 전체 진입점으로 취급하지 않습니다.
전제 조건: jshookmcp는 로컬에서 바로 실행할 수 있는 명령이 아니라, 먼저 다운로드하고 명시적으로 등록하고 활성화해야 하는 MCP 서버입니다. 선택한 클라이언트(Claude, Codex 등)의 MCP 설정에 연결하고 활성화한 후에야 관련 도구를 실제로 호출할 수 있습니다.
일반 매핑:
list_scripts->js-reverse_list_scriptsget_script_source->js-reverse_get_script_sourcesearch_in_sources->js-reverse_search_in_sourcesbreak_on_xhr->js-reverse_break_on_xhrevaluate_script->js-reverse_evaluate_scriptget_paused_info->js-reverse_get_paused_infoset_breakpoint_on_text->js-reverse_set_breakpoint_on_textlist_network_requests->js-reverse_list_network_requestsget_request_initiator->js-reverse_get_request_initiatorget_websocket_messages->js-reverse_get_websocket_messagestake_screenshot->js-reverse_take_screenshotnew_page->js-reverse_new_pagenavigate_page->js-reverse_navigate_pageselect_page->js-reverse_select_pageselect_frame->js-reverse_select_framepause/resume->js-reverse_pause_or_resume
향후 도구 이름 접두사가 변경되면 이 섹션을 먼저 업데이트하고, 실행 중에 임시로 추측하지 마십시오.
jshookmcp의 위치
- 역할:
js-reverse의 향상된 실행면, 독립적인 전체 제어가 아님 - 적합: 브라우저 자동화, CDP 디버깅, JS Hook, 네트워크 인터셉션, SourceMap 재구성, AST 보조 이해
- 호출 전제: 먼저
@jshookmcp/jshook를 다운로드하여 MCP 클라이언트 설정에 등록한 후, 해당 서버가 활성화되었는지 확인 - 권장 진입점: 여전히
Observe → Capture → Rebuild순서를 따르되,Observe/Capture단계에서 jshookmcp의 브라우저와 Hook 기능을 우선 호출 - anything-analyzer와의 관계: 둘 다 브라우저/네트워크 측 증거 수집 가능; anything-analyzer는 패킷 캡처 및 HTTP 분석에 더 치우치고, jshookmcp는 JS 런타임, CDP, Hook 및 소스 코드 이해에 더 치중
핵심 원칙
Observe-firstHook-preferredBreakpoint-lastRebuild-orientedEvidence-first
먼저 페이지를 관찰하고, 최소한의 샘플링을 수행한 후, 로컬 환경을 재구축하십시오. 증거를 건너뛰고 환경을 추측하지 마십시오.
5단계 워크플로우
1. Observe
목표: 대상 요청, 관련 스크립트, 후보 함수를 먼저 확인하고 환경을 추측하지 않음.
기본 동작:
js-reverse_new_page또는js-reverse_navigate_page로 대상 페이지 열기js-reverse_list_network_requests로 대상 요청 찾기js-reverse_get_request_initiator로 호출 출처 역추적js-reverse_list_scripts,js-reverse_search_in_sources로 스크립트 범위 좁히기
필수 산출물:
- 대상 요청 URL 또는 특징
- initiator 단서
- 의심스러운 스크립트 URL
- 초기 작업 기록
2. Capture
목표: 대상 요청에 대해 최소 침습적 샘플링을 수행하여 파라미터 예제, 호출 순서, 런타임 증거 확보.
규칙:
js-reverse_break_on_xhr우선js-reverse_evaluate_script로 가벼운 런타임 관찰 우선- 적중 후 먼저
js-reverse_get_paused_info확인 - 필요 시에만
js-reverse_set_breakpoint_on_text사용
3. Rebuild
목표: 페이지 증거를 정리하여 로컬에서 반복 가능한 Node 재현 자료로 만듦.
규칙:
- 로컬 환경 보완은 페이지 관찰 증거에 기반해야 함
window/document/navigator/crypto/storage를 공상으로 보완하는 것은 허용되지 않음- 매번 하나의 최소 인과 패치 결정만 기록
4. Patch
목표: 오류와 첫 번째 divergence를 기반으로 환경 보완을 진행하여 로컬 스크립트가 안정적으로 대상 파라미터를 출력할 때까지 진행.
규칙:
- 무엇이 부족한지 먼저 확인하고 그다음 보완
- 한 번에 하나의 최소 패치 결정만 수행
- 각 패치 후 즉시 재테스트
- 각 패치를 작업 기록에 작성
5. DeepDive
목표: 로컬 실행 성공 후, 난독화 해제, 제어 흐름 복원, 비즈니스 로직 추출 수행.
규칙:
- 현재 작업이 단순히 서명 출력만 필요하면 이 단계를 생략 가능
- 알고리즘 체인을 장기간 재사용해야 하면 이 단계는 필수
- Issue #65 난독화 우회 (U–AV §4): JSVMP (AD) →
E-js-vmp; CFF+문자열 배열 (AE) →E-js-deobf; DevTools/debugger 안티디버깅 (AF) →E-js-anti-debug. 전체 트리거 테이블은../reverse-engineering/references/nonpe-format-cookbook.md참조; AST 세부 사항은 여전히references/ast-deobfuscation.md사용
실행 요구사항
- 모든 중요 단계는 로컬 task artifact에 기록해야 함
- 도구 호출 이유를 설명할 수 없으면 호출하지 마십시오
js-reverse_*또는 jshookmcp의 기성 MCP 기능을 우선 사용하여 직접 증거를 수집하고, 스크립트를 먼저 작성하여 기능을 재발명하지 마십시오- 실패 시
references/fallbacks.md에 따라 복구 - 출력은
references/output-contract.md준수
필독 참조
- 자동화 진입점:
references/automation-entry.md - 파라미터 기본값:
references/tool-defaults.md - 작업 입력 템플릿:
references/task-input-template.md - MCP 전용 작업 오케스트레이션:
references/mcp-task-template.md - 작업 산출물:
references/task-artifacts.md - 로컬 재현:
references/local-rebuild.md - 환경 보완:
references/env-patching.md - Node 재현:
references/node-env-rebuild.md - 계측:
references/instrumentation.md - AST 난독화 해제:
references/ast-deobfuscation.md - 비 PE/JS 난독화 레시피 U–AV:
../reverse-engineering/references/nonpe-format-cookbook.md(AD/AE/AF) - 복구:
references/fallbacks.md - 출력 계약:
references/output-contract.md
라우팅 컨텍스트
상위 진입점: skills/SKILL.md (총괄), routing.md
상위 대안:
- anything-analyzer MCP (포트 23816)의 브라우저 도구를 대안 또는 보충으로 사용 가능
- jshookmcp를 더 강력한 브라우저/CDP/Hook/Network/SourceMap/AST 실행면으로 사용 가능
reverse-engineering/SKILL.md(대상이 프론트엔드 JS가 아닌 경우)
하위 출력:
- 환경 보완 필요 →
references/env-patching.md - 로컬 재현 필요 →
references/local-rebuild.md/references/node-env-rebuild.md - 난독화 해제 필요 →
references/ast-deobfuscation.md - 진행 불가 시 복구 →
references/fallbacks.md
동급 관련 모듈: anything-analyzer MCP (브라우저 자동화 및 HTTP 캡처 기능이 상호 보완 가능)
온디맨드 부트스트랩 (On-Demand Bootstrap)
본 스킬이 의존하는 MCP 기능은 통합 부트스트랩 시스템을 통해 설치할 수 있습니다. MCP 클라이언트 등록은 명시적으로 대상을 선택해야 하며, 기본적으로 어떤 클라이언트 전역 설정도 작성하지 않습니다.
자동화 기능 경계
| 기능 | 자동 등록 가능 | 방식 | 설명 |
|---|---|---|---|
| jshookmcp | ✓ | npm-mcp (npx 실행) | Claude / Codex / Both 명시적 선택 후 등록 |
| anything-analyzer | ✓ | local-http-mcp | 서비스 자동 시작 가능; 클라이언트 등록은 명시적 선택 필요 |
| Node.js | ✓ | winget 설치 | 런타임 종속성 |
부트스트랩 방식
# jshookmcp 설치 및 등록; Codex를 Claude 또는 Both로 변경 가능
powershell -File "<skill-root>\scripts\bootstrap-reverse.ps1" -Capability @('jshookmcp') -McpHostTarget Codex
# anything-analyzer 등록 및 시작
powershell -File "<skill-root>\scripts\bootstrap-reverse.ps1" -Capability @('anything-analyzer') -StartServices -McpHostTarget Codex
주의사항
jshookmcp등록 후에도 AI 클라이언트에서 해당 MCP 서버를 활성화해야 호출 가능-McpHostTarget을 전달하지 않으면 도구를 설치/준비하고registration-required상태를 반환하며 Claude 또는 Codex 설정을 수정하지 않음anything-analyzer는 pnpm과 프로젝트 소스 코드가 필요하며, bootstrap이 자동으로 clone하고 의존성을 설치함- Node.js가 설치되지 않은 경우 bootstrap이 먼저 winget을 통해 Node.js 22를 설치함
## 작업 완료 자가 점검 (완료를 주장하기 전에 MUST 통과)
- 나는 워크플로우의 각 단계를 실행했는가 (단순히 읽기만 한 것이 아니라)?
- 나는
tool-index를 기반으로 실제 도구 경로를 사용했는가? - 나는 재현 가능한 증거(명령어/스크립트/스크린샷/보고서)를 생산했는가?
- 나는 RULES가 요구하는 Checklist 항목을 완료하고 다시 작성했는가?