Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
wtf — 분산형, 코드 커버리지 기반 스냅샷 퍼저로, Windows 및 Linux의 사용자 모드와 커널 모드 타겟을 지원하며, 에뮬레이터 및 하이퍼바이저 백엔드를 포함합니다. | Kitploit
도구/GitHubGitHub/0vercl0k/wtf
Dynamic Analysis (Sandboxing)Vulnerability AnalysisExploitationFuzzingBinary Analysis
GitHub0vercl0k/wtf

wtf

분산형, 코드 커버리지 기반 스냅샷 퍼저로, Windows 및 Linux의 사용자 모드와 커널 모드 타겟을 지원하며, 에뮬레이터 및 하이퍼바이저 백엔드를 포함합니다.

저장소 보기
1.8k1541111개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

what the fuzz

분산형, 코드 커버리지 기반, 크로스 플랫폼 스냅샷 기반 퍼저로, Microsoft Windows 및 Linux 사용자 모드(실험적!)에서 실행되는 사용자 또는 커널 모드 대상을 공격하도록 설계되었습니다.

개요

what the fuzz 혹은 wtf는 분산형, 코드 커버리지 기반, 사용자 정의 가능, 크로스 플랫폼 스냅샷 기반 퍼저로, Microsoft Windows 또는 Linux(실험적, linux_mode 참조)에서 실행되는 사용자 또는 커널 모드 대상을 공격하도록 설계되었습니다. 대상의 실행은 bochscpu를 사용한 에뮬레이터 내부(가장 느리고 정밀), Windows Hypervisor Platform APIs를 사용한 Windows VM 내부, 또는 KVM APIs를 사용한 Linux VM 내부(가장 빠름)에서 수행할 수 있습니다.

이는 다양한 소프트웨어에서 메모리 손상 취약점을 발견했습니다: IDA Pro, 유명 AAA 게임, Windows 커널, Microsoft RDP 클라이언트, NVIDIA GPU Display 드라이버 등이 있습니다.

컴파일된 바이너리는 CI 아티팩트 또는 Windows 및 Linux용 릴리스 섹션에서 확인할 수 있습니다.

이 퍼저의 역사나 실제 대상에서의 사용 방법에 대해 더 알고 싶다면, 시작하기 좋은 다음 글들을 추천합니다 🔥

  • Building a new snapshot fuzzer & fuzzing IDA
  • Fuzzing Modern UDP Game Protocols With Snapshot-based Fuzzers by Markus Gaasedelen
  • Fuzzing RDPEGFX with "what the fuzz" by Colas Le Guernic, Jérémy Rubert, and Anonymous
  • A Journey to Network Protocol Fuzzing – Dissecting Microsoft IMAP Client Protocol by Wayne Chin Yick Low
  • Snapshot Fuzzing section of Trail Of Bits' Testing Handbook
  • Attacking EDRs Part 4: Fuzzing Defender's Scanning and Emulation Engine (mpengine.dll) by Manuel Feifel

사용법

기능을 시험해보는 가장 좋은 방법은 fuzzer_hevd / fuzzer_tlv_server 모듈을 사용하는 것입니다. target-hevd.7z / target-tlv_server.7z 아카이브를 다운로드하여 targets/ 디렉토리에 압축 해제하세요. 아카이브에는 모든 대상에 예상되는 디렉토리 트리가 포함되어 있습니다:

  • inputs는 입력 테스트 케이스가 들어가는 폴더입니다.
  • outputs는 현재 최소 세트 파일이 저장되는 폴더입니다.
  • coverage는 .cov 파일이 위치해야 하는 폴더입니다.
  • crashes는 크래시가 저장되는 폴더입니다.
  • state는 메모리 덤프(mem.dmp), CPU 상태(regs.json), 그리고 심볼 저장소(symbol-store.json)가 저장되는 폴더입니다. 심볼 저장소는 Linux 시스템에서 심볼/dbgeng을 지원하지 않기 때문에 중단점을 설정할 위치를 알기 위해 사용되는 간단한 JSON 파일입니다. wtf는 Windows에서 대상을 실행할 때마다 런타임에 이 파일을 생성합니다.

다음은 최신 릴리스에 첨부된 target-hevd.7z 파일을 다운로드하여 wtf의 복제본 targets 디렉토리에 압축 해제했다고 가정합니다. wtf/targets/hevd 디렉토리가 있어야 하며, 그 안에 inputs / outputs 등의 디렉토리가 있습니다.

서버 노드 시작

서버는 기본적으로 두뇌 역할을 하며 모든 상태(집계된 코드 커버리지, 코퍼스 등)를 추적하고, 테스트 케이스를 생성하여 클라이언트에 배포합니다.

로컬 서버 노드를 시작하는 방법은 다음과 같습니다:```text wtf.exe master --name hevd --max_len=1028 --runs=10000000

`max_len` 옵션은 생성된 테스트 케이스의 크기를 제한하는 데 사용됩니다. `runs`는 생성할 테스트 케이스의 개수이고, `address`는 **wtf**가 수신 대기해야 하는 주소를 지정합니다. `target`은 위에서 설명한 디렉터리 트리가 있는 디렉터리입니다(사용자는 `--input` / `--output` / `--crashes`로 해당 디렉터리를 재정의할 수도 있습니다). `name`은 퍼징 모듈 이름을 지정하여, 마스터가 정의한 생성자 함수를 호출할 수 있도록 합니다.

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/4a03fc75eed3ed5a92f7f10def697dbf220ae36b0701f05b37759eb432fc0fd9.webp">
</p>

### 퍼징 노드

클라이언트 노드는 서버가 생성하여 배포한 테스트 케이스를 실행하고, 그 결과(코드 커버리지, 결과 등)를 서버로 다시 전달합니다.

*bochscpu* 백엔드를 사용하는 클라이언트 노드를 시작하는 방법은 다음과 같습니다.```text
wtf.exe fuzz --name hevd --limit 10000000

The fuzz 서브커맨드는 name 옵션과 함께 사용되어 어떤 퍼저 모듈을 사용할지 지정하고, backend는 실행 백엔드를 지정하며, limit는 테스트 케이스당 실행할 최대 명령어 수를 지정합니다(백엔드에 따라 이 옵션의 의미가 다릅니다).

테스트 케이스 실행

테스트 케이스(또는 테스트 케이스로 가득 찬 폴더)를 실행하려면 run 서브커맨드를 사용할 수 있습니다.

다음은 crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 테스트 케이스를 실행하는 방법입니다:``` wtf.exe run --name hevd --limit 10000000 --input crashes\crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/49b3ca8582d6314724e5615c687472499d5f8f41d04c9543c0a6a070c51f56f8.webp">
</p>

### 코퍼스 minset 하기

코퍼스를 minset 하기 위해서는, 퍼징 작업과 마찬가지로 서버 노드 하나와 필요한 만큼의 클라이언트 노드를 사용해야 합니다. `runs` 옵션을 0으로 설정하기만 하면 됩니다.

이렇게 하면 `outputs`에 있는 코퍼스를 `minset` 디렉토리로 minset할 수 있습니다 (또한 `inputs`와 `outputs` 디렉토리를 재정의하는 방법을 보여줍니다):```
wtf.exe master --name hevd --max_len=1028 --runs=0 --inputs=outputs --outputs=minset

실행 트레이스 생성

실행 백엔드에서 내부를 조사할 수 있는 주요 메커니즘은 실행 트레이스를 생성하는 것입니다. bochscpu는 이를 수행하는 가장 빠른 백엔드입니다. 다른 백엔드에서 VMX 모드를 종료하는 것은 매우 비용이 많이 들기 때문입니다.

다음은 crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 테스트 케이스에 대한 실행 트레이스를 생성하는 방법입니다:``` wtf.exe run --name hevd --limit 10000000 --input crashes\crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 --trace-type=rip

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/340b4b251e378eaf21c6f5ffdd4f013bd2cef89f23a604cffd0ebf897d27c71f.webp">
</p>

실행 트레이스를 심볼화하려면 [symbolizer-rs](https://github.com/0vercl0k/symbolizer-rs)를 사용해야 합니다. 다음은 위에서 생성된 `crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0.trace` 실행 트레이스를 심볼화하는 방법입니다:```
symbolizer-rs.exe --trace crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0.rip.trace

Tenet 추적 생성

더 많은 컨텍스트 인식이 필요하다면, bochscpu 백엔드를 사용하여 Tenet 추적 탐색기에 로드할 수 있는 실행 추적을 생성할 수 있습니다. 아래에서는 memmove의 충돌에서 시작하여 소스 포인터가 어디에서 오는지(사용자 모드!)를 역추적합니다:``` wtf.exe run --name hevd --limit 10000000 --input crashes\crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 --trace-type=tenet

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/34df2f5ca8f378db664d3f01bcbefdd43409e300d256d50e3f4f630eb06cc7be.webp">
</p>

### 코드 커버리지 트레이스 생성

코드 커버리지 트레이스를 생성하려면 `run` 하위 명령어에 `--trace-type=cov` 옵션을 사용하면 됩니다.

`minset` 폴더 내의 모든 파일에 대한 코드 커버리지 트레이스를 생성하여 `coverage-traces` 폴더에 저장하는 방법은 다음과 같습니다:

```bash
python kitty.py run --trace-type=cov --pcap-dir minset --output-dir coverage-traces

wtf.exe run --name hevd --input minset --trace-path=coverage-traces --trace-type=cov

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/c338442f63a8dd105180ec38f8d3f7ffd5679442b400d5fb14e843ef73658ce3.webp">
</p>
도구 다운로드