Installs into .claude/skills of the current project.
Are you the author of Re Router?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/sodam-ai-re-router)
---
description: 리버스 엔지니어링(내 코드·앱 이해/분석) 요청을 안전하게 시작할 때 사용. "이 코드 뭐하는지", "이 앱 어떻게 동작", "리버싱", "분석해줘" 등 자연어 요청을 감지해 라우팅 + 동의 게이트로 안내. 방어·교육·본인 소유물 전용.
---
# re-router — "무엇을 하고 싶나요?" + 안전 동의 게이트
이 스킬은 SoDam-Reverse-Eng의 **입구**다. 항상 **세 가지를 순서대로** 한다:
안전 스코프 고정 → 라우팅 → 동의 게이트.
## 0. 안전 스코프 (절대 규칙 — 안전 1층: AI 출력 거부)
이 도구는 **방어·교육·본인 소유물 분석 전용**이다. 아래는 **출력 자체를 거부**한다 — 코드도, 위치도, 단계 설명도 제공하지 않는다:
- 크랙·DRM 우회·인증/로그인/라이선스 우회 방법
- "이 인증 분기를 어디서 NOP/패치하면 통과되는지" 같은 **우회 지점 지목**
- 토큰·키·비밀번호·개인정보 **추출** 방법
- 악성코드 제작·개조
거부할 때는 **짧고 친절하게** 이유를 말하고, 가능하면 방어적 대안(예: "이 코드가 안전한지 점검")을 제안한다.
> 왜 AI가 1차로 막나: deny-hook(2층)은 *도구 호출*만 막는다. 크랙 가이드가 '보고서 텍스트'로 새어 나가는 건 hook이 못 막으므로 **AI인 내가 1차 방어**다.
## 0-A. 안전장치 자가검증 (3층 무결성 — 시작 시 필수)
라우팅으로 넘어가기 전에 먼저 Bash로 `node hooks/_selftest.mjs`(설치된 플러그인 경로 기준, 인식 안 되면 `${CLAUDE_PLUGIN_ROOT}/hooks/_selftest.mjs`)를 실행한다. **결과에 ❌가 하나라도 있으면 분석을 시작하지 않고 즉시 중단**하고, 실패 항목을 그대로 보여주며 재설치·복구를 안내한다(fail-closed — 변조 의심 상태로 다음 단계를 진행하지 않는다). 04_PROJECT_SPEC.md ALWAYS DO "hook 무결성을 시작 시 검증"을 실제로 충족하기 위한 절차다.
## 1. 라우팅 (무엇을 하고 싶나요?)
사용자 의도를 확인한다. **현재 1·2·4번 활성**(2026-07-27 갱신 — 안드로이드는 2026-07-13 실사용 라이브 검증 완료가 실제 보고서 파일로 확인됨):
1. **내 코드/앱 이해·문서화** ✅ (지금 가능) → `re-analyze-mycode` 스킬로 진행
2. **안드로이드 앱 분석(APK)** ✅ (지금 가능) → `re-analyze-android` 스킬로 진행
3. 바이너리 RE (Ghidra) — 🔜 Phase 3 (골격 완료·Ghidra/Java 설치 필요, 라이브 미검증)
4. **AI 코딩 에이전트 구조 분석** ✅ (지금 가능) → `re-analyze-agent` 스킬로 진행
3을 고르면: "아직 도구 설치(Ghidra/Java)가 필요해 라이브 검증 전입니다 — 지금은 '내 코드/앱'·'안드로이드 앱 분석'·'AI 코딩 에이전트 구조 분석'이 가능합니다"라고 안내한다.
## 2. 동의 게이트 (분석 전 필수 — 통과 못 하면 분석 0건, 번호 선택 — 자연어 "예/아니오" 타이핑 요구 금지)
분석 대상 경로를 확인한 뒤, `AskUserQuestion` 도구로 아래 3개 질문을 **한 번에** 물어보세요(re-start·re-android·re-binary와 동일한 3문항·버튼 선택형 구조로 통일, 2026-07-27). 사용자가 "예"/"아니오"를 직접 타이핑하게 하지 말고, 반드시 선택지를 눌러 고르는 형태로 제시하세요:
- 질문 1 (header: "소유권") — "이 대상은 본인 소유 또는 분석 허가를 받은 것이 맞나요?"
- 옵션: "예, 맞습니다" / "아니오"
- 질문 2 (header: "분석 목적") — "이 분석은 방어·교육 목적이 맞나요?"
- 옵션: "예, 맞습니다" / "아니오"
- 질문 3 (header: "이용 동의") — "결과는 참고용이며, 안전/위험을 단정하지 않고 책임은 사용자에게 있음을 이해하셨나요?"
- 옵션: "예, 이해했습니다" / "아니오"
**세 질문 모두 "예" 계열 선택** → 3단계(진행)로. **하나라도 "아니오" 선택 또는 응답 거부** → 즉시 **중단**한다.
동의가 확인되면 아래 방법으로 `.sodam-re/consent-log.jsonl`에 한 줄을 추가한다(파일이 없으면 새로 생성, 기존 내용 뒤에 append — 덮어쓰기 금지). **JSON을 손으로 만들어 Write하거나 Bash echo/printf로 직접 쓰지 않는다** — 윈도우 경로의 백슬래시가 수동 이스케이프 누락(2026-08-19)과 셸 자체의 이스케이프 처리(2026-08-21, Git Bash가 이중 백슬래시를 다시 벗겨냄)로 **두 번** 실제로 깨진 전례가 있다:
1. `Write` 도구로 임시 스크립트 `.sodam-re/_consent_tmp.mjs`를 만든다:
```js
import fs from 'fs';
const entry = {
id: 'con-' + Date.now(),
target_scope: String.raw`<분석 대상 경로>`,
ownership: '<질문1 응답 그대로>',
disclaimer_ack: true,
agreed_at: new Date().toISOString(),
};
fs.appendFileSync('.sodam-re/consent-log.jsonl', JSON.stringify(entry) + '\n');
```
2. `Bash`로 `node .sodam-re/_consent_tmp.mjs` 실행(파일명만 넘기므로 셸 이스케이프 위험 없음).
3. 실행 후 스크립트 파일은 삭제한다.
**왜 이 방식인가**: `String.raw`는 백슬래시를 이스케이프 없이 그대로 쓸 수 있게 하고, `JSON.stringify()`가 나머지 이스케이프를 전담한다 — AI가 `\`를 `\\`로 세어 바꾸는 수작업 자체가 없어진다. `Write` 도구는 셸을 거치지 않으므로 Bash의 이스케이프 문제도 원천 차단된다.
(02_DATA_MODEL의 ConsentRecord — `session_id`는 세션 개념이 구현돼 있지 않아 SafetyLog와 동일하게 생략한다.) 기록 실패해도 분석은 계속 진행한다(감사용 기록일 뿐 동의 판정 자체엔 영향 없음 — SafetyLog와 동일한 fail-safe 원칙).
## 3. 진행
동의가 끝나면 `re-analyze-mycode`로 넘긴다. 결과는 **반드시** `re-report` 표준 형식으로 낸다.
## 4. (참고) 자연어 요청이 막막할 때
RE 요청을 어떻게 표현할지 막막하면(예: 뭘 물어봐야 할지 모르겠을 때), SoDam-Prompt가 설치되어 있다면 그쪽의 `explain-simply`·`long-text-summary` 스킬로 먼저 말을 다듬어보는 것도 방법이다. **완전히 선택 사항**이며, 없어도 위 1~3단계(라우팅·동의 게이트·분석)는 그대로 작동한다 — 이 도구는 Prompt에 의존하지 않는다.