-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfuzzer.py
More file actions
58 lines (48 loc) · 2.12 KB
/
fuzzer.py
File metadata and controls
58 lines (48 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# -*- coding: utf-8 -*-
import atheris
import sys
import struct # IMPORTANTE: struct é usado no except, precisa ser importado
# Tenta importar o parser do arquivo que fizemos upload
try:
# Certifique-se de que binary_parser.py está no diretório raiz do Colab
with atheris.instrument_imports():
from binary_parser import parse_packet, ParsingError
except ImportError:
print("Erro: Não foi possível encontrar binary_parser.py.")
print("Certifique-se de que você fez o upload do arquivo para o Colab.")
sys.exit(1)
# Função alvo para o Fuzzing (obrigatória pelo Atheris)
def TestOneInput(data):
"""
Função que será chamada pelo fuzzer com dados gerados.
Args:
data: Um objeto bytes fornecido pelo fuzzer.
"""
try:
# Chama a função que queremos testar (o parser)
parse_packet(data)
except ParsingError:
# Erros de parsing esperados (definidos em ParsingError) são ignorados.
# O fuzzer busca por exceções NÃO esperadas (IndexError, TypeError, etc.)
# ou crashes mais sérios.
pass
except (IndexError, struct.error, TypeError, OverflowError) as e:
# Captura exceções específicas que indicam bugs potenciais e relança
# para que o Atheris as detecte como falhas.
print(f"\n>>> Exceção Inesperada Encontrada: {type(e).__name__}: {e}")
print(f">>> Input Causador (hex): {data.hex()}")
raise e
# Qualquer outra exceção não capturada aqui também será considerada um crash pelo Atheris.
# Configuração e Inicialização do Atheris
# sys.argv é necessário para o Atheris processar seus próprios argumentos
import os
# Define um diretório para armazenar os inputs do corpus
corpus_dir = "corpus"
os.makedirs(corpus_dir, exist_ok=True)
# Insere o diretório de corpus nos argumentos
sys.argv.append(corpus_dir)
atheris.Setup(sys.argv, TestOneInput)
# Inicia o processo de fuzzing
print("Iniciando Fuzzing com Atheris... (Pressione Ctrl+C para parar)")
atheris.Fuzz()
print("Fuzzing concluído ou interrompido.")