Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
REx-skill — REx@Skill - 바이너리 취약점 발견을 위한 에이전트 기반 리버스 엔지니어링 실행 스킬 | Kitploit
도구/GitHubGitHub/tihanyin/rex-skill
Static AnalysisDynamic Analysis (Sandboxing)Vulnerability AnalysisExploitationReverse EngineeringFuzzingMalware AnalysisUtilities & FrameworksBinary AnalysisAI-Assisted ReversingBinary Exploitation
447151일 전아직 검토되지 않음
GitHubtihanyin/rex-skill

REx-skill

REx@Skill - 바이너리 취약점 발견을 위한 에이전트 기반 리버스 엔지니어링 실행 스킬

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
REx@Skill

REx@Skill

Reverse Engineering eXecution Skill

컴파일된 바이너리에서 결함을 찾아내고 — 그것을 증명한다.
일곱 개의 서브에이전트, 하나의 증거 트리, 그리고 두 번의 실행을 비교 가능하게 만드는 고정된 툴체인.


Release Claude Code Nix Linux Python License


Ghidra

``` results/ ├── index.json every sha256 analysed -> its directory └── httpd-4f2a9c1e/ <- "httpd", sha256 4f2a9c1e... ├── decomp/ decompiled C ├── reach/ source -> sink paths ├── disasm/ disassembly, real VAs ├── bounds/ arithmetic to discharge ├── meta/ function map + base ├── sanitize/ hostile-allocator runs ├── strings/ inventory, by family ├── fuzz/ coverage-guided search ├── dynamic/ crafted-input battery ├── quarantine/ text aimed at YOU └── notes/ the threat model └── pipeline.json what ran, what did not ``` **이름에 해시가 들어가는 이유.** 프로그램의 두 빌드는 파일 이름은 공유하지만 SHA-256은 공유하지 않으므로, 증거와 바이너리가 조용히 어긋날 수 없다: 타겟을 다시 컴파일하면 오염된 디렉터리가 아니라 새로운 디렉터리가 생긴다.
radare2
rizin
QEMU
angr
z3
AFL++
Valgrind
capa
Unicorn
Triton
Frida
semgrep
LLVM
Python
Nix

Ghidra · radare2 · rizin · qemu-user · angr · z3 · AFL++ · valgrind · capa · Unicorn · Triton · Frida · semgrep · clang · Python · Nix
모두 고정됨, 모두 재현 가능


1. Claude 스킬 설치

1 · Claude Code — 이미 설치되어 있다면 건너뛴다.```bash curl -fsSL https://claude.ai/install.sh | bash

root@kitploit:~
**2 · REx@Skill** — 1개 스킬, 12개 레퍼런스, **7개 서브에이전트**, **33개 스크립트**.```bash
curl -fsSL https://raw.githubusercontent.com/tihanyin/REx-skill/main/install.sh | sh

3 · 바이너리 분석.```bash claude

/re-analyze path/to/binary # one target /re-analyze path/to/directory/ # a whole corpus, evidence gathered in parallel

root@kitploit:~
<div align="center">
<sub><code>install.sh</code>는 <code>~/.claude/</code>에만 기록합니다 — 스킬과 그 33개의 파이프라인 스크립트, 7개의 에이전트, <code>/re-analyze</code>.<br>Claude Code를 대신 설치해 주지는 않으며, 덮어쓸 항목은 백업하고, <code>--uninstall</code>은 이를 깔끔하게 제거합니다.</sub>
</div>

<br>

<details>
<summary><b>클론하는 편이 좋으신가요?</b> &nbsp;· &nbsp;<i>또는 다른 곳에 설치하거나 제거하기</i></summary>```bash
git clone https://github.com/tihanyin/REx-skill && cd REx-skill
./install.sh                              # into ~/.claude
./install.sh --prefix ~/.config/claude    # somewhere else
./install.sh --uninstall                  # take it back out

2. 이 스킬에서 사용하는 도구

Ghidra radare2 rizin QEMU angr z3 AFL++ Valgrind capa

Ghidra · radare2 · rizin · qemu-user · angr · z3 · AFL++ · valgrind · capa

Unicorn Triton Frida semgrep LLVM Python Nix Linux Anthropic

Unicorn · Triton · Frida · semgrep · clang · Python · Nix · Linux · Claude


REx@Skill은 리버스 엔지니어링 전문가들이 수집한 최신 도구들을 사용합니다. 각 도구가 포함된 이유는 설치가 편리해서가 아니라, 알려진 벤치마크와 실제 바이너리 분석 과제에서 그 자리를 입증했기 때문입니다. 여기서 재구현된 것은 아무것도 없습니다. 이 스킬의 역할은 눈앞의 질문에 어떤 도구가 답할 수 있는지, 그리고 그 답이 어느 정도 가치가 있는지를 아는 것입니다.

도구하는 일
Ghidra컴파일된 바이너리를 다시 읽을 수 있는 C로 되돌립니다
radare2 / rizin두 번째 디컴파일러로, 첫 번째 결과를 교차 검증하는 데 사용합니다
qemu-user일반 x86 머신에서 ARM, MIPS, PowerPC, RISC-V 바이너리를 실행합니다
z3수학 솔버 — 인덱스가 버퍼를 벗어날 수 있는지, 제수가 0이 될 수 있는지 증명합니다
angr어떤 입력이 주어진 코드 라인에 도달하는지 계산합니다
AFL++수백만 개의 생성된 입력을 프로그램에 던져 크래시를 유발합니다
valgrind그렇지 않으면 눈에 띄는 오류를 일으키지 않는 메모리 버그를 잡아냅니다
libdislocator버퍼를 한 바이트 넘겨 읽는 순간 바로 크래시가 나게 만듭니다
capa바이너리가 할 수 있는 일을 나열합니다: 암호화, 소켓 열기, 프로세스에 주입
floss일반 strings가 놓치는 숨겨진 텍스트를 찾아냅니다
Unicorn프로그램 전체를 실행하지 않고 선택한 입력에 대해 단일 함수를 실행합니다
Triton실행 중 공격자가 제어하는 데이터가 어디로 이동하는지 추적합니다
Frida실행 중인 프로그램을 관찰하고 변경합니다
semgrep / cppcheck디컴파일된 C에서 알려진 나쁜 패턴을 스캔합니다
pwntools오프셋, ELF 파싱, 익스플로잇 작업을 위한 헬퍼 라이브러리

다음은 이 스킬을 구축하고 측정할 때 사용한 정확한 버전입니다:

Ghidra 12.1.2 · radare2 6.2.0 · rizin 0.9.1 · qemu-user 11.1.0 + 9 cross-sysroots · angr 9.2.154 · z3 4.16.0 · AFL++ 5.00c · valgrind 3.27.1 · capa 9.4.0 · Unicorn 2.1.4 · Triton 3.7.0 · Frida 17.17.0 · clang 21.1.8 · semgrep 1.172.0 · floss 3.1.1 · yara 4.5.7 · binwalk 3.1.0 · pwntools 4.15.0 · cppcheck 2.21.1

모두 선택 사항입니다. scripts/capabilities.sh는 이 머신에 무엇이 있는지 보고하고, 각 스크립트는 찾을 수 없는 도구의 이름을 밝히며, 도구가 없으면 조용히 실패하는 대신 분석 범위를 limitations로 좁힙니다.

없으신가요? DEVSHELL이 모든 것을 고정된 버전으로 설치합니다

세 개의 명령이면 위의 모든 도구가 정확히 이 버전으로 PATH에 올라갑니다 — 찾아 헤맬 것도, 반쯤 설정된 채로 남을 것도 없습니다.```bash git clone https://github.com/tihanyin/REx-skill 2>/dev/null || git -C REx-skill pull cd REx-skill curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install --no-confirm nix develop ./devshell scripts/capabilities.sh

root@kitploit:~
| | |
|---|---|
| **0** | 저장소를 클론하거나, 이미 가지고 있다면 업데이트합니다 — 위의 한 줄짜리 스킬 설치 프로그램은 클론을 남기지 **않습니다**. 임시 체크아웃에서 작동하고 제거하므로, 툴체인과 스크립트에는 자체 클론이 필요합니다 |
| **1** | 핀 고정을 담당하는 패키지 관리자인 Nix를 설치합니다 — 그런 다음 **새 터미널을 여세요**. *이미 Nix가 있나요? 건너뛰세요.* 기존 설치 위에 설치 프로그램을 다시 실행하면 `Found existing plan in /nix/receipt.json`과 함께 실패하는데, 이는 이미 가지고 있는 것을 건드리지 않겠다는 의미이지 고쳐야 할 오류가 아닙니다 |
| **2** | 셸에 진입합니다. 저장소 루트에서 실행하여 `scripts/`가 계속 사용 가능하도록 합니다. 처음에는 많은 것을 다운로드하지만, 그 이후에는 매번 몇 초면 됩니다 |
| **3** | 이를 확인합니다: `ghidra pyghidra r2 rizin`, `qemu-user architectures: 7`, `angr`, `z3`, `afl` — 맨몸 머신이 내놓는 `MISS` 줄 대신에 |

`exit`를 하면 `PATH`가 정확히 원래대로 돌아옵니다. *Ubuntu 22.04.5 LTS
(x86-64), Determinate Nix 3.22.4에서 테스트되었습니다.*

<details>
<summary><b>왜 툴체인을 핀 고정해야 할까요?</b></summary>

- **비교 가능한 실행.** 디컴파일러의 출력이 *바로* 분석가의 입력입니다. 서로 다른
  Ghidra 버전을 쓰는 두 사람은 같은 실험을 하는 것이 아니며, 어느 쪽도 상대방의
  결과를 검증할 수 없습니다.
- **여러분의 머신에 아무것도 설치되지 않습니다.** Nix는 모든 패키지를 그것을
  빌드한 것의 해시 아래에 보관하므로, 셸에 진입하면 `PATH`만 바뀌고 그 외에는
  아무것도 바뀌지 않습니다. 셸을 나가면 시스템은 정확히 원래대로입니다.
- **5년 후에도 여전히 작동합니다.** 세 개의 고정된 리비전이 전체 툴체인을
  재빌드하며, 이것이 바로 발표된 수치를 나중에 다시 검증할 수 있게 해줍니다.

세 개의 리비전이 전체 툴체인을, 어떤 머신에서든, 미래의 어느 시점에서든
재빌드합니다:```
nixpkgs        ffb3c9b700e759be2ef13237c9d8f953b32a1e46
nixpkgs-angr   ac62194c3917d5f474c1a844b6fd6da2db95077d
capa-rules     v9.4.0

devshell/flake.lock가 기준이며, devshell/DEVSHELL.md에 모든 도구의 버전과 용도가 나열되어 있습니다.


3. REx@Skill 방법론과 아키텍처

REx@Skill은 바이너리에 결함이 있는지 판단하고 이를 입증하는 방법입니다. 일곱 개의 서브에이전트가 이를 수행하며, 하나의 증거 디렉터리를 공유합니다.

하나의 에이전트가 바이너리를 증거로 바꿉니다. 디컴파일된 C 코드, 디스어셈블리, 문자열, 어떤 코드가 어디에 도달하는지에 대한 맵, 그리고 실제로 실행했을 때 무슨 일이 일어나는지 입니다. 그런 다음 다섯 개의 에이전트가 동시에 그 증거를 읽으며, 각자 다른 종류의 결함을 추적하고, 그중 어느 것도 다른 에이전트가 무엇을 찾았는지 볼 수 없습니다 — 하나의 디컴파일러를 공유하는 다섯 명의 독자는 같은 실수를 하므로, 이들을 분리해 두면 하나의 의견이 다섯 번 반복되는 대신 다섯 개의 독립적인 판독을 얻을 수 있습니다. 일곱 번째 에이전트는 코드를 먼저 읽고, 그다음에 그들의 발견을 읽은 뒤, 어느 것이 타당한지 판정합니다.

바이너리에서 네 가지가 지목되고 위치가 특정되지 않으면 어떤 것도 버그로 보고되지 않습니다. 공격자가 제어하는 데이터가 들어오는 곳(소스), 그것이 깨뜨릴 수 있는 연산(싱크), 그것을 막았어야 할 검사(깨진 가드), 그리고 피해를 입는 주체(영향받는 주체)입니다. 하나라도 빠지면 입증되지 않은 단서로 나갈 뿐, 발견으로 나가지 않습니다.

모든 실행은 동일한 세 가지를 산출합니다. 발견 사항, 무엇이 배제되었는지와 그 이유, 그리고 호스트가 실행할 수 없었던 것입니다.

이 기술 세트는 열 개의 아키텍처에서 테스트되었습니다 — x86-64, i686, ARM, AArch64, MIPS와 MIPS64(양쪽 엔디언 모두), 32비트 PowerPC, RISC-V, Apple arm64 — 그리고 ELF, PE, Mach-O, 펌웨어, 원시 블롭에서 테스트되었습니다. 여기서 범위가 제한되지 않습니다. 디컴파일러가 리프팅할 수 있는 아키텍처라면 모두 범위에 들어갑니다.

the seven subagents
SVG
에이전트실행 시점한 줄 요약
01re-recon가장 먼저, 단독으로증거를 추출합니다. 버그를 추적하지 않습니다 — 여기서 확신에 찬 발견이 나오는 것이 바로 실패 모드입니다.
02re-bughunt항상결함이 존재한다는 가장 강력하고 정직한 논거를 세웁니다. 모든 싱크를 열거합니다.
03re-safety항상그것이 건전함을 입증하려 시도하고, 이행할 수 없는 모든 의무를 보고합니다.
04re-arithmetic인덱싱하거나 크기를 다루는 경우호출 경계를 넘나드는 크기, 인덱스, 폭, 부호 유무 — 누군가의 머릿속이 아니라 솔버에 의해 이행됩니다.
05re-lifecycle할당하는 경우할당, 해제, 소유권, 초기화, 오류 경로. 오류 경로는 아무도 테스트하지 않은 경로입니다.
06re-logic인증하는 경우권한 부여, 상태 머신, 암호화, 여기서 검증하고 저기서 사용. grep할 서명이 없습니다.
07re-reconcile마지막에, 단독으로누구의 결론보다 코드를 먼저 읽은 뒤, 판정하고 보고합니다.
돌려받는 것

바이너리당 하나의 디렉터리, 이름은 <filename>-<SHA-256의 처음 8자리 16진수>:

pipeline_status.py는 그 트리를 감사하고 어떤 단계가 한 번도 실행되지 않았는지 보고한다 — 한 번도 실행되지 않은 단계는 오류를 남기지 않고 부재하는 디렉터리만 남기며, 이는 "실행했지만 아무것도 찾지 못함"과 정확히 똑같이 읽히기 때문이다.


4. 도구 목록 — 어떤 스크립트가 무엇을 호출하는가

디컴파일 및 읽기

도구버전사용처용도
Ghidra12.1.2ghidra_export.py batch_decompile.sh decompile_addr.py디컴파일러 — 핵심을 떠받치는 도구
pyghidra3.1.0위 세 가지와 동일헤드리스로 구동
radare26.2.0run_tools.sh strings_report.py brief.py모든 명령에서 JSON 출력
rizin0.9.1capabilities.sh preflight.sh두 번째 디컴파일러 — 교차 검증
binutils2.46triage.py inventory.py run_tools.shreadelf, objdump, nm, strings, size
file5.48모든 진입점매번 첫 번째 명령

트리아지 — 무엇인지, 무엇을 할 수 있는지

도구버전사용처용도
capa9.4.0run_tools.sh brief.py규칙 기반 기능 식별, 주소 포함
floss3.1.1strings_report.pystrings가 볼 수 없는 문자열
yara4.5.7run_tools.sh analyze.sh패커, 암호 상수, 라이브러리 버전
detect-it-easy3.21run_tools.sh패커 및 컴파일러 식별
checksecpwntoolstriage.py brief.pyNX / RELRO / canary / PIE

실행 — 가장 큰 단일 지렛대

도구버전사용처용도
qemu-user11.1.0dynamic_probe.py quick_dynamic.sh이종 아키텍처 바이너리 실행
9개 크로스 sysrootglibcsetup_sysroots.sh이것들이 없으면 qemu는 이종 동적 바이너리를 로드조차 할 수 없다
gdb / ltrace / strace17.2capabilities.sh가 이들을 보고트레이스; ltrace는 여기서 가장 덜 활용되는 도구다

한 측정 비교에서 동일한 모델이 실행이 가능할 때 불가능할 때보다 대략 3배의 재현율을 기록했다. 이 행이 sysroot가 flake와 함께 제공되는 이유다.

조용한 버그를 시끄럽게 만들기

도구버전사용처용도
valgrind3.27.1sanitize_run.sh다시 빌드할 수 없는 바이너리에 대한 ASan에 가장 가까운 것
AFL++5.00cfuzz_target.sh quick_dynamic.sh커버리지 기반 퍼징, QEMU 모드
libdislocatorAFL++와 함께sanitize_run.sh quick_dynamic.sh할당당 페이지 — 조용한 OOB 읽기를 폴트로 바꾼다
clang21.1.8triage.py리프팅된 코드에 -fsanitize=...

해결 및 에뮬레이션

도구버전사용처용도
z34.16.0check_bound.py경계 주장을 해소 — 9가지 모드와 일반 탈출구
angr9.2.154symfn.py함수별 심볼릭 하네스: 하이재킹, OOB 쓰기, 0으로 나누기
unicorn2.1.4emulate.py선택한 입력에 대해 단 하나의 함수를 격리 실행
triton3.7.0사용 가능구체적 트레이스에 대한 콘콜릭 실행 및 테인트
pwntools4.15.0brief.py run_tools.shcyclic() 오프셋, ELF/GOT 파싱

디컴파일된 C에 대한 정적 분석

도구버전사용처용도
cppcheck2.21.1run_tools.sh analyze.sh컴파일되지 않는 코드를 견딘다 — 디컴파일러 출력은 컴파일되지 않는다
semgrep1.172.0run_tools.sh analyze.sh패턴 규칙, 빌드 불필요
flawfinder2.0.20capabilities.sh어휘적; 의견이 있는 grep
셸에도 있음 — 펌웨어, 포맷, 익스플로잇 가능성

binwalk 3.1.0 · unsquashfs · sasquatch · jefferson · ubi_reader · kaitai-struct-compiler 0.11 · tshark 4.6.8 · hexyl · pev 0.81 · osslsigncode · diffoscope 328 · patchelf 0.15.2 · ROPgadget 7.7 · one_gadget 1.9.0 · honggfuzz · radamsa 0.7 · bitwuzla 0.9.1 · rr 5.9.0 · bpftrace 0.26.0 · upx 5.2.0

모든 버전이 포함된 전체 목록: devshell/DEVSHELL.md


5. Claude가 아닌 다른 것과 함께 사용하기

general-skill/SKILL-RE.md는 하나의 자족적인 파일이다 — name/description 프런트매터가 있는 3,750줄의 순수 Markdown. Claude 번들이 가진 모든 것이 한 조각에 들어 있다: 동일한 증거 기준, 동일한 파이프라인, 이종 아키텍처 퍼징에 관한 동일한 규칙. scripts/가 그 옆에 위치하도록 저장소를 클론한 다음:

러너방법
CodexAGENTS.md가 그것을 가리키게 하거나, 시스템 프롬프트로 붙여넣기
opencodeopencode.json에 {"instructions": ["SKILL-RE.md"]}
Cursor / Windsurf프로젝트 규칙으로 넣기
일반 API 루프그냥 Markdown이다 — 앞에 붙이면 된다
사람교과서처럼 읽힌다; 그게 핵심이었다

왜 두 가지 형태인가? Claude 번들은 16 KB 코어에 더해 필요할 때 로드되는 열두 개의 참조 파일이다 — 특정 질문이 특정 챕터를 필요로 하기 전까지는 작은 컨텍스트. Claude Code만 그 포인터를 따라가므로, 다른 모든 러너는 대신 단일 파일을 받는다.



6. 내부에는 무엇이 있는가```

. ├── claude-skill/ the Claude Code form │ ├── skills/reverse-engineering/ │ │ ├── SKILL.md 16 KB core, loaded on every trigger │ │ └── references/ 12 files, pulled in on demand │ ├── agents/ 7 subagents │ └── commands/ /re-analyze — orchestrates all three phases │ ├── general-skill/ the portable form │ ├── SKILL-RE.md the whole methodology, one file, 32 sections │ └── AGENTS.md points any agent at it │ ├── scripts/ 32 tools — the pipeline and its parts ├── devshell/ flake.nix + flake.lock + DEVSHELL.md ├── images/ logo and figures └── install.sh one command into ~/.claude

root@kitploit:~
### 중요한 스크립트들

| | |
|---|---|
| `capabilities.sh` | 이 호스트가 실제로 할 수 있는 것 — **계획을 세우기 전에 확인** |
| `analyze.sh` | 전체 파이프라인을 순서대로, 0-5단계, 그다음 넘김 |
| `batch_analyze.sh` | 동일한 파이프라인을 대상 **디렉터리** 전체에 적용 |
| `pipeline_status.py` | 증거 트리 감사: 어떤 단계가 실행되었고, 각 부재가 무엇을 초래하는지 |
| `overview.py` | 프로그램의 형태: 개수, 호출 트리, 싱크, 소스 |
| `brief.py` | 한 대상에 대한 모든 도구의 출력을 통합하고, 공백을 명시 |
| `fn.py` | 전체 디컴파일 대신 **하나의** 함수만 읽기 |
| `reach.py` | 호출 그래프 상의 소스 → 싱크 경로 |
| `bounds_worklist.py` | 해결해야 할 산술적 주장들을 세 계층으로 나열 |
| `check_bound.py` | z3로 하나를 해결 — 9가지 모드와 일반 탈출구 |
| `symfn.py` | 하나의 함수를 위한 심볼릭 하네스 |
| `emulate.py` | 선택한 입력으로 하나의 함수를 격리 실행 |
| `quick_dynamic.sh` | 그냥 실행: 입력 없이, 그다음 대부분을 깨뜨리는 입력으로 |
| `fuzz_target.sh` | 프로그램이 **실제로 읽는** 채널을 겨냥한 퍼징 |
| `sanitize_run.sh` | 적대적 할당자 — 조용한 힙 버그를 크래시로 만들기 |
| `sanitize.py` | 무엇이든 읽기 전에 모델이 지시한 텍스트를 격리 |

---

## 7. 한계

**이 스킬은 Claude Code가 실행되는 어디서든 실행된다** — Linux, macOS, WSL. 이것은 마크다운이다:
코어, 12개의 레퍼런스, 7개의 서브에이전트, 그리고 `/re-analyze`. 그 안에 플랫폼 특화된 것은
없으며, 스크립트들은 이식성 있는 Python과 bash이다. 달라지는 것은
*그 아래의 도구들*이다.

**DEVSHELL은 Linux에서 빌드되고 테스트된다** — x86-64 (Ubuntu 22.04.5 LTS)와
aarch64. macOS는 취약한 지점인데, 도구 중 열한 개가 Darwin에는
아예 존재하지 않기 때문이다:

| | |
|---|---|
| **macOS에 없음** | `qemu-user` · `gdb` · `gef` · `ltrace` · `strace` · `valgrind` · `AFL++` · `honggfuzz` · `frida` · `bpftrace` · `rr` |
| **또한** | `capa`의 고정 빌드는 Darwin에서 자체 테스트 스위트를 통과하지 못함 |
| **그리고** | argv 퍼징은 `__libc_start_main`을 가로채는데, 이는 glibc이다 — macOS에 해당하는 것이 없음 |

`qemu-user`는 **Linux** 시스템 콜을 변환하므로, 정의상 Linux이며, 아홉 개의
크로스 아키텍처 sysroot도 함께 따라간다.

**그래서 Mac에 남는 것.** 모든 정적 단계: Ghidra 디컴파일,
radare2와 rizin, angr와 z3, 정적 분석기, 트리아지, 문자열과
도달 가능성. 잃는 것은 *실행* — 동적 프로브, 새니타이저 실행,
퍼징, 그리고 모든 외래 아키텍처 바이너리. 이는 실질적인 손실이다: 크래시는 이
방법론이 가진 가장 강력한 증거이며, 어떤 정적 분석도 이를 대체하지 못한다.

**아무것도 그렇지 않은 척하지 않는다.** `scripts/capabilities.sh`는 호스트가
실제로 할 수 있는 것을 보고하고, `scripts/pipeline_status.py`는 해당 단계를 부재로 표시하며,
그 비용은 보고서의 `limitations`에 들어간다. 실행되지 않은 단계는
실행되어 아무것도 찾지 못한 단계로 보고되지 않는다 — 스킬의 §9.1을 참조.

> **요약:** 분석은 Linux에서. 읽기, 계획, 보고서 작성은 어디서든.

---

<div align="center">

**Norbert Tihanyi** · [x.com/@TihanyiNorbert](https://x.com/TihanyiNorbert)

<sub>발견 = 소스 · 싱크 · 깨진 가드 · 영향받는 주체.<br>그보다 못한 것은 가설이다.</sub>

</div>
도구 다운로드