Communitygithub.com

Prompt-Motion/ReaReverse

네이티브, 관리형, Electron/JavaScript, 패키징된 펌웨어 및 브라우저 타겟을 REA로 리버스 엔지니어링합니다. 출하된 아티팩트 또는 요청된 런타임 증거를 사용하여 기능을 설명하고, 버전을 비교하고, 코드를 디컴파일하거나 재구성을 안내합니다. 일반적인 소스 저장소 아키텍처 분석에는 REA를 사용하지 마십시오.

ReaReverse란 무엇인가요?

**Prompt-Motion/ReaReverse**는 AI 에이전트가 출하된 바이너리, 패키지, 디컴파일된 코드, 패시브 애플리케이션 런타임 증거를 분석해야 할 때 사용하는 기술 스킬입니다. 일반적인 소스 코드 분석과 달리, 이 스킬은 실제로 배포된 아티팩트의 내부 동작을 이해하거나, 버전 간 차이를 비교하거나, 리버스 엔지니어링을 통해 기능을 재구성하는 데 특화되어 있습니다. Claude Code, Codex, Cursor, Windsurf 등 다양한 AI 에이전트 플랫폼에서 MCP(Machine Context Protocol) 서버를 통해 연결되며, 필요에 따라 `npx` 명령어로 진단 및 설정할 수 있습니다. 주요 기능으로는 JavaScript 애플리케이션 분석(`analyze_javascript_application`), 바이너리 열기(`open_binary`), 안드로이드 패키지 검사(`inspect_android_package`), 펌웨어 분석, 네트워크 캡처 분석, SQLite 데이터베이스 검사 등이 있습니다. 특히 실제 런타임 환경이나 출하된 제품의 동작을 추론해야 하는 작업에서 유용하며, `npx -y rea-agents@latest` CLI를 통한 대체 사용도 지원하여 MCP 등록 없이도 일부 기능을 사용할 수 있습니다. 이 스킬은 Node.js, Ghidra, IDA Pro 등의 외부 엔진을 설치하지 않으며, 기존에 설치된 도구를 최대한 활용하도록 설계되었습니다.

지원 대상✓Claude Code✓Codex CLI✓Cursor✓Antigravity✓Gemini CLI✓OpenCode✓Windsurf
npx skills add https://github.com/Prompt-Motion/ReaReverse/tree/HEAD/.agents/skills/reverse-engineer-anything

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

REA

주장이 출하된 바이너리 또는 패키지, 디컴파일, 패시브 애플리케이션 런타임 증거, 또는 사용 가능한 소스로 확인되지 않은 동작과의 비교에 의존하는 경우 REA를 사용하십시오. 완전한 소스 저장소의 일반적인 분석에는 일반 저장소 도구를 사용하고 REA 준비 또는 제공자 명령을 실행하지 마십시오.

필요할 때만 연결

이 스킬을 설치하면 지침이 제공됩니다. REA MCP 서버를 등록하거나, 분석 엔진을 설치하거나, 이미 실행 중인 에이전트에 도구를 추가하지는 않습니다.

REA 도구를 사용할 수 있고 해당 등록이 오래된 것으로 알려지지 않은 경우 대상으로 직접 진행하십시오. 모든 조사 전에 진단 또는 설정을 실행하지 마십시오. 연결된 서버의 실제 도구 목록과 입력 스키마를 사용하십시오. 저장소 main에서 설치된 스킬은 이전 npm 릴리스에 없는 기능을 설명할 수 있습니다. 해당 서버가 보존된 참조를 광고하지 않는 경우 완전한 인라인 증거를 유지하십시오.

도구가 없거나, 호출이 클라이언트에 의해 차단되거나, 필수 제공자를 사용할 수 없는 경우 연결 및 복구를 읽으십시오. 관찰된 차단 원인을 진단하고, 유용한 지원 작업을 계속 진행한 후 수리 후 원래 작업을 재개하십시오. 클라이언트 승인, 셸 PATH, 등록 및 엔진 가용성은 각각 다른 해결 방법이 있습니다. 모든 항목에 대해 설정을 반복하지 마십시오.

  1. REA 또는 클라이언트 구성을 변경하지 않고 진단하십시오. npx는 패키지를 다운로드하여 npm 캐시에 쓸 수 있습니다. Codex의 경우 npx -y rea-agents@latest doctor --client codex --json을 실행하십시오. 현재 지원되는 클라이언트로 대체하십시오: claude_code, claude_desktop, codex, cursor, gemini_cli, windsurf, devin, opencode, antigravity, copilot_cli, commandcode, vscode, grok_build, omp 또는 grok_bot. grok_bot에는 로컬 파일 등록이 없습니다. doctor는 Grok Bot 채팅 단계를 보고하며, 설정은 mcp.json을 작성하지 않습니다. 클라이언트를 알 수 없는 경우 doctor --json을 사용하고 설정 범위를 선택하기 전에 등록 결과를 검사하십시오.
  2. 이유를 구분하십시오. 누락, 잘못된 형식 또는 오래된 등록은 범위가 지정된 구성 수리가 필요합니다. 정렬된 등록이 있지만 활성 세션에 도구가 없는 경우 재시작/재연결이 필요합니다. doctor는 현재 에이전트가 연결되었음을 증명할 수 없습니다. 누락된 제공자는 해당 제공자가 필요한 작업에만 영향을 미칩니다. 정적 JavaScript 검사에는 Hopper나 Ghidra가 필요하지 않으며, Android 검사에는 별도의 JADX/Java 사전 요구 사항이 있습니다.
  3. 구성 수리를 위해 읽기 전용 계획을 준비하십시오: npx -y rea-agents@latest setup --client codex --dry-run --json. 현재 클라이언트의 ID를 사용하고, 정확한 제안 경로, 백업 및 변경 사항을 표시한 후 설정이 구성을 작성하거나 Hopper를 설치하기 전에 승인을 받으십시오. 설정은 일반적으로 일치하는 번들 스킬도 설치합니다. 검토된 계획에 해당 교체를 포함하십시오. 승인 후 npx -y rea-agents@latest setup --client codex --yes로 동일한 범위를 적용하십시오. --install-hopper는 해당 별도 설치가 필요하고 명시적으로 승인된 경우에만 추가하십시오.
  4. 영향을 받은 에이전트를 재시작/재연결하십시오. REA 도구가 실제로 세션에 나타나는지 확인한 후 원래 조사를 재개하십시오. 계속 없으면 설정을 반복하지 말고 클라이언트의 MCP 시작 오류를 검사하십시오.

REA 설정은 Node.js, npm, Homebrew, Java, Ghidra, IDA, JADX, Binwalk 또는 Unblob을 설치하거나 업그레이드하지 않습니다. 기존 사전 요구 사항을 사용하십시오. MCP 등록을 수리하기 위해 관련 없는 소프트웨어를 설치하지 마십시오. 지원되지 않는 클라이언트의 경우 버전이 고정된 rea-agents 패키지로 수동 stdio 등록을 사용하거나 CLI를 통해 계속 진행하십시오.

운영자가 제공한 JavaScript 트리 또는 ASAR에 대한 구체적인 CLI 대체는 다음과 같습니다:

npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

MCP 등록이나 네이티브 엔진이 필요하지 않습니다. MCP 결과와 동일한 주의를 기울여 반환된 증거, 그래프, 제한 사항 및 알려지지 않은 항목을 읽으십시오. CLI는 증거 레코드를 직접 반환합니다. 이 대체는 MCP가 구성되었음을 입증하지 않습니다. 네이티브 CLI 작업에는 여전히 선택한 엔진이 필요합니다. 기존 rea CLI를 선호하십시오. 설치된 것이 없고 REA 패키지 획득이 승인된 범위 내에 있는 경우 그 자리에 npx -y rea-agents@latest를 사용하십시오. 구성 수리는 읽기 전용 설정 계획으로 시작합니다. 승인된 변경 사항을 적용하기 전에 경로, 백업 및 스킬 교체를 표시하십시오. 기존 승인 및 대상 실행 경계를 유지하십시오. REA 설정은 Node.js, npm, Homebrew, Java, Ghidra, IDA, JADX, Binwalk 또는 Unblob을 포함한 관련 없는 소프트웨어를 설치하거나 업그레이드하지 않습니다.

먼저 대상을 라우팅

사용자가 제공한 대상에서 첫 번째 도구를 선택하십시오. 활성 대상 네이티브 또는 아카이브 워크플로에는 open_binary를 사용하십시오. 대상이 없는 도구는 자체 명시적 경로 또는 엔드포인트를 사용하며 대상이 필요하지 않습니다.

  • ASAR 또는 추출된 JavaScript/Electron 트리: analyze_javascript_application.

  • 아카이브/패키지 멤버 인벤토리(ZIP/APK/IPA/MSIX/AppX 또는 DMG): 제공된 로컬 경로와 함께 open_binary를 사용하십시오. 그래프와 결과가 질문에 답하는 데 도움이 될 때 inspect_artifact를 사용하십시오.

  • Android APK 코드, 클래스, 메서드 또는 수신 참조: inspect_android_package를 사용한 다음 광고될 때 집중된 Android 도구를 사용하십시오. 아카이브 멤버 인벤토리는 여전히 위의 아카이브 경로를 사용합니다.

  • 관리형 PE/CLI 어셈블리: inspect_managed_artifact.

  • 펌웨어 이미지: 광고될 때 inspect_firmware_regions를 사용하십시오. 추출이 요청된 경우 호출자가 선택한 새로운 절대 출력 디렉터리와 함께 extract_firmware를 사용하십시오. 이러한 도구는 Linux에서 호출자가 제공한 Binwalk/Unblob을 사용합니다. 펌웨어 가이드를 참조하십시오.

  • .NET NativeAOT PE/ELF: 네이티브 Ghidra 분석. 네이티브 코드는 의사 코드를 생성할 수 있습니다. 선택적 메타데이터 복구 및 지원되는 호스트/레이아웃 경계는 references/native-and-artifacts.md의 NativeAOT 워크플로를 참조하십시오.

  • 사용자 소유의 이미 열려 있는 브라우저 페이지: list_browser_targets.

  • 에이전트가 수행해야 하는 브라우저 작업(클릭, 입력, 탐색): 선언된 작업과 함께 capture_browser_scenario를 사용하십시오. 연결/시작 및 집중된 후속 브라우저 도구는 런타임 관찰을 참조하십시오.

  • Fiddler Everywhere 트래픽 또는 네이티브 .saz 캡처: Fiddler 워크플로를 읽으십시오. 저장된 SAZ는 inspect_web_network_capture 및 format: "saz"로 검사하십시오. 라이브 트래픽의 경우 Everywhere의 별도 MCP 서버에 연결하십시오.

  • 보존된 HAR/SAZ/네이티브 mitmproxy/aioquic qlog 캡처: inspect_web_network_capture를 사용하십시오. 유용할 때 원본 레코드 서수를 선택하십시오. 생산자 필드와 바이트/번호 사이드카를 검사하되 기록된 URL을 가져오거나 라이브 속성을 주장하지 마십시오. 정확한 업스트림 프로필 및 자격 증명 제외는 기록 캡처를 참조하십시오. Qlog 지원은 aioquic 1.5.0 JSON 0.3부터 시작됩니다. 스트림 적용 범위 및 엔드포인트 손실 선언은 본문을 복구하거나 네트워크 손실을 입증하지 않습니다. 세부 요약을 선호한 다음 종류 qlog 추적/스트림 페이지를 사용하십시오. 기여/범위 페이지의 경우 하나의 추적, 스트림 ID 및 방향을 선택하십시오. 사실은 선택 전 모든 기록 이벤트 범위를 유지합니다. 다른 qlog 레이아웃 및 PCAP 상관 관계는 지원되지 않습니다.

  • 사용자 소유의 이미 열려 있는 Electron 런타임: list_electron_targets. electron-main Inspector 시도 전에 inspect_electron_fuses로 패키징된 퓨즈를 확인하십시오. 비활성화된 EnableNodeCliInspectArguments는 앱이 --inspect를 무시함을 의미합니다.

  • 패킷 필드 발견: inspect_packet_fields는 inspect_packet_capture의 필드를 선택하기 전에 설치된 프로토콜 및 필드 이름/유형을 검색합니다. 관련 레코드를 쿼리/페이지하십시오. 등록은 관찰된 트래픽을 입증하지 않습니다.

  • 기록된 패킷 캡처: 선택된 TShark 필드, 디스플레이 필터 및 디코드-AS 규칙과 함께 inspect_packet_capture를 사용하십시오. Linux, util-linux prlimit 및 REA_TSHARK_COMMAND가 필요합니다. 캡처 가이드를 참조하십시오. 패킷 제한은 필터링 전에 입력 패킷을 계산합니다. 출력은 기본적으로 50개의 일치하는 프레임입니다. 이후 페이지에는 match_offset / match_limit를 사용하거나 완전한 일치 출력에는 명시적 null 제한을 사용하십시오. 페이지 전체에서 소스 다이제스트를 유지하십시오. 이는 라이브 캡처를 수행하지 않습니다. 주소/DNS/SNI/프로토콜 요약의 경우 MCP 세부 요약과 함께 inspect_pcap_capture를 사용한 다음 보존된 종류 pcap 페이지를 사용하십시오. Wireshark 4.x tshark 및 capinfos가 필요하며, Linux prlimit 또는 Windows Job Objects가 필요합니다. 패킷 요약을 참조하십시오. 주소 페이지의 경우 정확한 DNS 질문을 선택하십시오. 페이지 소진은 네트워크 완전성을 입증하지 않습니다. 이는 기록을 읽으며 트래픽을 획득하지 않습니다.

  • 디코더 발견: inspect_signal_decoders는 설치된 디코더 ID 또는 선택된 디코더 도움말(채널 및 옵션 포함)을 검색합니다. 설정을 선택하기 전에 관련 세부 정보를 쿼리하고 페이지하십시오. 이는 하드웨어를 스캔하지 않습니다.

  • 기록된 로직/신호 추적: 명시적 디코더, 채널 및 프로토콜 설정과 함께 decode_signal_recording을 사용하십시오. Linux에서 util-linux prlimit과 함께 REA_SIGROK_COMMAND를 통해 sigrok-cli 0.7.2를 제공하십시오. 기록 가이드를 참조하십시오. 출력은 기본적으로 50개의 리터럴 라인입니다. 주석 클래스를 선택하고 line_offset / line_limit로 페이지를 매기거나 나머지 모든 출력에 대해 명시적 null을 사용하십시오. 창 개수는 디스플레이 라인이며 주석 또는 샘플이 아닙니다. 페이지 전체에서 소스 다이제스트를 유지하십시오. 이는 기존 파일을 읽습니다. 하드웨어 신호를 획득하지 않습니다.

  • 명시적 로컬 WebAssembly 아티팩트: inspect_wasm_artifact. REA_WABT_BIN_DIRECTORY를 통해 WABT 1.0.42를 제공하십시오. 정확한 바이트/도구 ID 및 디코딩된 WAT를 유지하십시오. JavaScript 글루 및 후보 경로를 명시적으로 선택하고 URL/경로 모호성을 유지하십시오. 암시적 가져오기 또는 대상 실행이 없습니다. WAT는 원본 소스가 아닙니다. WASM 가이드를 참조하십시오.

  • 명시적 로컬 EVM 바이트코드 캐리어: 호출자가 선택한 raw 또는 hex 인코딩과 함께 inspect_evm_interface를 사용하십시오. 캐리어/디코딩된 다이제스트를 유지하고 선택기, 인수 문자열 및 가변성을 추론된 후보로 처리하십시오. 이는 체인 조회 또는 대상 실행을 수행하지 않습니다. hex 또는 중복 stdout 없이 완전한 추론된 인터페이스를 위해 지원을 발견하고 detail: "summary"를 선택하십시오. 완전한 증거는 원래 ID로 유지됩니다. 정확한 함수 또는 bytecode_hex/stdout/stderr 페이지에는 반환된 parent_evidence_id를 사용하십시오. 후보 적용 범위는 인터페이스 완전성을 입증하지 않습니다. EVM 바이트코드 가이드를 참조하십시오.

  • 내장된 Go 컴파일러, 모듈 또는 빌드 설정 메타데이터: 명시적 로컬 파일과 함께 inspect_go_binary를 사용하십시오. 이 내장 대상 없는 검사는 Go 설치 또는 디스어셈블러가 필요하지 않습니다. 원시 모듈 바이트 및 소스 범위를 유지하십시오. 누락된 메타데이터는 바이너리가 Go가 아님을 입증하지 않으며, 구문 분석되지 않은 텍스트 레코드는 명시적으로 유지됩니다. Go 바이너리 가이드를 참조하십시오.

  • 내장된 cargo-auditable Rust 종속성 메타데이터: 명시적 로컬 ELF, PE 또는 씬 Mach-O 파일과 함께 inspect_rust_binary를 사용하십시오. 이 내장 대상 없는 검사는 Rust 설치 또는 디스어셈블러가 필요하지 않습니다. 패키지 순서, 종속성 인덱스 및 섹션 파일 범위를 유지하십시오. .dep-v0 섹션이 없으면 null 메타데이터이며 바이너리에 종속성이 없음을 증명하지 않습니다. rustc 커밋 해시는 읽기 전용 /rustc/<40-hex>/ 경로에서 추론된 것입니다. Rust 바이너리 가이드를 참조하십시오.

  • 명시적 로컬 SQLite 데이터베이스 스냅샷: inspect_sqlite_database. 네이티브 SQLite 제한을 제공하는 Node.js 24.x >=24.15 또는 26+로 검사하십시오. 먼저 스키마를 읽고(기본적으로 간결한 인벤토리) 행이 필요할 때 정확한 일반 테이블과 columns를 선택하십시오. 기본값은 선택된 테이블 스키마 및 20행입니다. 완전한 저장된 스키마는 schema_scope: "database"를 요청하십시오. 데이터베이스와 기존 형제 WAL ID를 모두 유지하십시오. 행 샘플은 잘림을 보고하고 순서가 지정되지 않습니다. 라이브 데이터베이스/WAL 쌍이 원자적으로 복사되었다고 가정하지 말고 정지된 스냅샷을 사용하십시오. SQLite 가이드를 참조하십시오.

  • 오프라인 레이아웃, 심볼, 재배치 또는 정적 완화 증거를 위한 명시적 Linux ELF 파일: inspect_binary_layout. 이 대상 없는 작업은 디스어셈블러 데이터베이스를 열지 않고 호출자가 제공한 pwntools를 사용합니다. 원시 위치 및 추론/적용 범위 제한을 유지하십시오. 오프라인 바이너리 가이드를 참조하십시오.

  • 제공된 Linux x86-64 ELF 코어: inspect_recorded_crash. 라이브 대상을 열지 않고 기록된 모든 스레드, 원시 노트 및 소스 바운드 레지스터를 읽으십시오. 기록된 PID는 라이브 프로세스를 선택하지 않습니다. 코어 전용 매핑 후보가 도움이 될 때만 include_debugger_context를 요청하십시오. 기록된 크래시 가이드를 참조하십시오.

  • PE 리소스 유형/이름/언어 트리 및 정적 아이콘 그룹 참조: 명시적 경로와 함께 inspect_pe_resources를 사용하십시오. 이 이식 가능한 작업은 활성 대상 또는 엔진이 필요하지 않습니다. 불투명 페이로드는 파일 범위와 SHA-256을 유지합니다.

  • 네이티브 실행 파일, 라이브러리 또는 분석 데이터베이스: open_binary를 사용한 다음 집중된 분석 도구를 직접 사용하십시오. 메타데이터 또는 인벤토리 컨텍스트가 유용하고 선택한 제공자에서 사용 가능한 경우 binary_overview를 호출하십시오.

기존 IDA MCP 구성의 경우 원래 입력 바이너리와 provider_id: "ida"를 사용하여 open_binary를 사용하십시오. .idb 또는 .i64 데이터베이스를 전달하지 마십시오. 레거시 연결된 프로필은 이미 열려 있는 GUI 입력을 SHA-256으로 바인딩하고 데이터베이스를 열린 상태로 둡니다. 최신 헤드리스 워크플로는 idat64를 가져오고 서버가 데이터베이스를 관리합니다. 네이티브 및 아티팩트 가이드를 참조하십시오.

증거 유지

결과를 유지하고 스트리밍 방지를 위해 증거 기록을 보존하십시오. 선택적 evidence_id와 parent_evidence_id는 페이지 매김 또는 증거 체인을 지원합니다. 값비싼 작업을 반복하지 않도록 요약 페이지 전에 후속 단계를 계획하십시오.

읽기 전용

REA는 관찰하고 분석합니다. 바이너리, 바이트코드 또는 프로세스 상태를 수정하지 마십시오. 쓰기 작업(패치 작성, 심볼 이름 바꾸기, 주석 달기, 브라우저 작업 실행)에는 명시적 사용자 승인이 필요합니다. 로컬 파일을 읽는 것은 쓰지 않습니다. 브라우저 시나리오는 사용자 시작 후 닫힙니다.

대상 외부에서 고려

이 워크플로는 출하된 아티팩트에 적용됩니다. 소스 저장소 메타데이터는 여기에서 다루지 않습니다.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

관련 스킬