업데이트로 돌아가기
New releaseSep 4, 2026

AFLplusplus v5.03c

AFL++는 최첨단 퍼저이며 벤치마크에서 1위를 차지했습니다. 원래 AFL을 기반으로 했습니다. 오늘날에는 qemu 5.1, 충돌 없는 커버리지, 향상된 laf-intel & redqueen, AFLfast++ 파워 스케줄, MOpt 뮤테이터, unicorn_mode 등 많은 기능이 포함되어 있습니다!

공유

American Fuzzy Lop plus plus (AFL++)

AFL++ logo

릴리스 버전: 5.03c

GitHub 버전: 5.03c

저장소: https://github.com/AFLplusplus/AFLplusplus

AFL++는 다음 사람들이 유지보수합니다:

원래는 Michal "lcamtuf" Zalewski가 개발했습니다.

AFL++는 Google의 AFL보다 우수한 포크입니다 - 더 빠른 속도, 더 많고 더 나은 뮤테이션, 더 많고 더 나은 인스트루멘테이션, 커스텀 모듈 지원 등을 제공합니다.

AFL++는 AGPL-3.0-or-later 라이선스로 배포되며, Apache-2.0 라이선스가 적용되는 파일도 포함합니다. 퍼징 하니스로 컴파일되는 모든 것은 Apache 2.0 라이선스가 유지됩니다. 각 파일은 자체 SPDX-License-Identifier 헤더에 라이선스를 명시합니다 — 해당 파일에 대해 따라야 하는 라이선스는 바로 그것입니다. AGPL을 사용할 수 없는 조직을 위해 상용 라이선스가 선택적으로 제공됩니다 (좋은 목적을 위한 기부를 통해 획득 — 프로젝트와 유지보수자는 금전적 이익을 받지 않습니다). 자세한 내용은 LICENSING.md의 쉬운 설명과 아래의 라이선스 섹션을 참조하세요.

시작하기

시작하는 데 도움이 되는 몇 가지 정보입니다:

  • AFL++ 문서 개요와 매우 유용한 그래픽 가이드는 docs/README.md를 방문하세요.
  • 튜토리얼을 시작하려면 docs/tutorials.md로 이동하세요.
  • 릴리스에 대해서는 Releases 탭과 브랜치를 참조하세요. 그러나 사용하기 가장 좋은 브랜치는 위험 감수 수준에 따라 stable 또는 dev입니다. 또한 AFL++의 중요한 변경 사항 목록과 기능 목록도 확인하세요.
  • 학술 연구에 AFL++를 사용하려면 웹사이트의 논문 페이지를 확인하세요.
  • 우리 연구를 인용하려면 인용 섹션을 참조하세요.
  • 비교를 위해서는 fuzzbench aflplusplus 설정을 사용하거나, AFL_LLVM_CMPLOG=1과 함께 afl-clang-fast를 사용하세요. Google의 fuzzbench에서 aflplusplus 기본 구성을 찾을 수 있습니다.

AFL++ 빌드 및 설치

모든 것이 컴파일된 AFL++를 쉽게 사용하려면 Docker Hub에서 이미지를 직접 가져오세요 (x86_64 및 arm64 모두 사용 가능):

docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus

이 이미지는 stable 브랜치에 푸시가 발생할 때 자동으로 게시됩니다 (브랜치 참조). 위 명령어를 사용하면 컨테이너의 /src에서 대상 소스 코드를 찾을 수 있습니다.

참고: aflplusplus/aflplusplus:dev도 가져올 수 있으며, 이는 AFL++의 가장 최신 개발 상태입니다.

AFL++를 직접 빌드하려면 — 이 방법을 권장합니다 — docs/INSTALL.md에서 계속 진행하세요.

빠른 시작: AFL++로 퍼징하기

참고: 시작하기 전에 퍼징의 일반적인 위험에 대해 읽어보세요.

이것은 소스 코드가 있는 대상을 퍼징하기 위한 빠른 시작 가이드입니다. 프로세스에 대해 자세히 알아보려면 docs/fuzzing_in_depth.md를 참조하세요.

다른 대상을 퍼징하는 방법을 알아보려면 다음을 참조하세요:

단계별 빠른 시작:

  1. afl-cc를 사용하여 퍼징할 프로그램 또는 라이브러리를 컴파일하세요. 일반적인 방법은 다음과 같습니다:

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. 프로그램에 의미가 있는 작지만 유효한 입력 파일을 준비하세요. 복잡한 구문(SQL, HTTP 등)을 퍼징할 때는 dictionaries/README.md에 설명된 대로 사전도 생성하세요.

  3. 프로그램이 stdin에서 읽는 경우 다음과 같이 afl-fuzz를 실행하세요:

    ./afl-fuzz -i seeds_dir -o output_dir -- \
    /path/to/tested/program [...program's cmdline...]
    

    사전을 추가하려면 afl-fuzz에 -x /path/to/dictionary.txt를 추가하세요.

    프로그램이 파일에서 입력을 받는 경우 프로그램의 명령줄에 @@를 넣을 수 있습니다. AFL++가 자동 생성된 파일 이름을 해당 위치에 넣어줍니다.

  4. 퍼저 UI에서 빨간색으로 표시되는 모든 항목은 즉시 docs/afl-fuzz_approach.md#understanding-the-status-screen을 참조하여 조사하세요.

  5. 발견된 크래시와 행은 -o output_dir 디렉토리의 crashes/ 및 hangs/ 하위 디렉토리에서 찾을 수 있습니다. 크래시를 재생하려면 대상에 입력으로 전달하세요. 예를 들어 대상이 stdin을 사용하는 경우:

    cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]
    

    코어를 생성하거나 gdb를 직접 사용하여 크래시를 추적할 수 있습니다.

  6. 퍼징의 커버리지 분석을 위해 파트너 도구인 cov-analysis(퍼징 코퍼스 기반 소스 커버리지 리포트)와 fuzz-reachability(하니스가 도달할 수 있는 함수의 정적 분석으로, 실행 가능한 커버리지 격차와 데드 코드를 구분하고 인스트루멘테이션 허용 목록 생성)를 권장합니다.

  7. 아무리 강조해도 지나치지 않습니다 — 효과적으로 퍼징하려면 docs/fuzzing_in_depth.md 문서를 읽으세요!

연락처

질문이 있나요? 우려 사항이 있나요? 버그 리포트가 있나요?

브랜치

다음과 같은 브랜치가 있습니다:

  • release: 최신 릴리스
  • stable: AFL++의 안정적인 상태 — 안정성에 만족할 때 때때로 dev에서 동기화됩니다. 이것이 기본 브랜치입니다.
  • dev: AFL++의 개발 상태 — 최첨단이며 컴파일되지 않거나 버그가 있는 체크아웃을 받을 수 있습니다. PR(풀 리퀘스트)은 'dev' 브랜치에만 접수합니다!
  • (기타): 특정 기능 작업 또는 새로운 기능이나 변경 사항 테스트를 위한 실험 브랜치.

도움 요청

"help wanted" 태그가 있는 이슈 목록을 확인하세요. 이것이 AFL++를 지원하고 기여하는 방법이 될 수 있습니다 — 멋진 기능으로 확장해 보세요. 다른 아이디어가 있다면 — 이슈를 생성하여 제안하세요!

기여(및 풀 리퀘스트 전송)를 원하는 모든 분들은 제출 전에 기여 지침을 읽어주세요.

특별 감사

원래 AFL과 AFL++에 대한 많은 개선은 기여자들의 피드백, 버그 리포트 또는 패치 없이는 가능하지 않았을 것입니다.

감사합니다! (풀 리퀘스트를 보내는 분들은 이 목록에 자신을 추가해 주세요 :-)

기여자 목록

카테고리