업데이트로 돌아가기
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++ 로고

릴리스 버전: 5.03c

GitHub 버전: 5.04a

저장소: 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를 사용하세요. aflplusplus 기본 구성은 Google의 fuzzbench에서 찾을 수 있습니다.

AFL++ 빌드 및 설치

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

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

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

참고: 가장 최신 개발 상태인 aflplusplus/aflplusplus:dev를 풀(pull)할 수도 있습니다.

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에 설명된 대로 사전(dictionary)도 함께 생성합니다.

  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. 발견된 크래시와 행(hang)은 -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++의 개발 상태 - 최첨단이며 컴파일되지 않거나 버그가 있는 체크아웃을 받을 수 있습니다. 우리는 'dev' 브랜치에 대해서만 PR(풀 리퀘스트)을 받습니다!
  • (기타): 특정 기능 작업이나 새로운 기능 또는 변경 사항 테스트를 위한 실험적 브랜치.

도움을 구합니다

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

기여하고 싶은 분(그리고 풀 리퀘스트를 보내고 싶은 분)은 제출하기 전에 기여 가이드라인을 읽어 주세요.

특별한 감사

원래 AFL과 AFL++에 대한 많은 개선은 기여자들의 피드백, 버그 보고 또는 패치 없이는 불가능했습니다.

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

기여자 목록

카테고리