mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-23 13:20:54 +00:00
feat(fuzz): Adds seed corpus for cdc and msc classes
This commit is contained in:
parent
8775d55adc
commit
02f1f05697
BIN
test/fuzz/device/cdc/cdc_seed_corpus.zip
Normal file
BIN
test/fuzz/device/cdc/cdc_seed_corpus.zip
Normal file
Binary file not shown.
BIN
test/fuzz/device/msc/msc_seed_corpus.zip
Normal file
BIN
test/fuzz/device/msc/msc_seed_corpus.zip
Normal file
Binary file not shown.
46
tools/pcapng_to_corpus.py
Executable file
46
tools/pcapng_to_corpus.py
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import argparse
|
||||||
|
import pcapng
|
||||||
|
import zipfile
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
def extract_packets(pcap_file):
|
||||||
|
"""Reads a wireshark packet capture and extracts the binary packets"""
|
||||||
|
packets = []
|
||||||
|
with open(pcap_file, 'rb') as fp:
|
||||||
|
scanner = pcapng.FileScanner(fp)
|
||||||
|
for block in scanner:
|
||||||
|
if isinstance(block, pcapng.blocks.EnhancedPacket):
|
||||||
|
packets.append(block.packet_data)
|
||||||
|
return packets
|
||||||
|
|
||||||
|
def build_corpus_zip(zip_file_output, packets):
|
||||||
|
"""Builds a zip file with a file per packet
|
||||||
|
|
||||||
|
The structure of this zip corpus is a simple content addressable storage
|
||||||
|
i.e. seed_file_name == sha256_digest(packet).
|
||||||
|
"""
|
||||||
|
with zipfile.ZipFile(zip_file_output, 'a') as out:
|
||||||
|
for packet in packets:
|
||||||
|
hash = hashlib.sha256(packet).hexdigest()
|
||||||
|
if hash not in out.namelist():
|
||||||
|
out.writestr(hash, packet)
|
||||||
|
|
||||||
|
|
||||||
|
def main(pcap_file, output_zip_file):
|
||||||
|
packets = extract_packets(pcap_file)
|
||||||
|
build_corpus_zip(output_zip_file, packets)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
prog = "pcapng_to_corpus.py",
|
||||||
|
description="""Converts a wireshark capture to a zip of binary packet
|
||||||
|
files suitable for an oss-fuzz corpus. In the case the
|
||||||
|
zip corpus already exists, this script will modify
|
||||||
|
the zip file in place adding seed entries.""")
|
||||||
|
parser.add_argument('pcapng_capture_file')
|
||||||
|
parser.add_argument('oss_fuzz_corpus_zip')
|
||||||
|
args = parser.parse_args()
|
||||||
|
main(args.pcapng_capture_file, args.oss_fuzz_corpus_zip)
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user