#!/usr/bin/env python3 # Autodict-QL - Optimal token generation for fuzzing # Part of AFL++ Project # Author : Microsvuln - Arash.vre@gmail.com import string import os import binascii import codecs import struct import errno import argparse import re import base64 from binascii import unhexlify def parse_args(): parser = argparse.ArgumentParser( description=( "Helper - Specify input file to analysis and output folder to save corpdirus for constants in the overall project ------- Example usage : python2 thisfile.py outdir o.txt" ) ) parser.add_argument( "corpdir", help="The path to the corpus directory to generate files." ) parser.add_argument( "infile", help="Specify file output of codeql analysis - ex. ooo-hex.txt, analysis take place on this file, example : python2 thisfile.py outdir out.txt", ) return parser.parse_args() def ensure_dir(dir): try: os.makedirs(dir) except OSError as e: if e.errno == errno.EEXIST: # print "[-] Directory exists, specify another directory" exit(1) def do_analysis1(corpdir, infile): with open(infile, "rb") as f: lines = f.readlines()[1:] f.close() new_lst = [] n = 1 for i, num in enumerate(lines): if i != 0: new_lst.append(num) str1 = str(num) print("num is " + str1) str1 = str1.rstrip("\n\n") # str1 = str1.replace("0x",""); str1 = str1.replace("|", "") str1 = str1.rstrip("\r\n") str1 = str1.rstrip("\n") str1 = str1.replace(" ", "") # str1 = str1.translate(None, string.punctuation) translator = str.maketrans("", "", string.punctuation) str1 = str1.translate(translator) str1 = str1[1:] str1 = str1[:-1] print("After cleanup : " + str1) if ( (str1 != "0") and (str1 != "ffffffff") and (str1 != "fffffffe") or (len(str1) == 4) or (len(str1) == 8) ): print("first : " + str1) if len(str1) > 8: str1 = str1[:-1] elif len(str1) == 5: str1 = str1 = "0" try: # str1 = str1.decode("hex") with open(corpdir + "/lit-seed{0}".format(n), "w") as file: str1 = str1.replace("0x", "") print(str1) str1 = int(str1, base=16) str1 = str1.to_bytes(4, byteorder="little") file.write(str(str1)) file.close() with open(corpdir + "/lit-seed{0}".format(n), "r") as q: a = q.readline() a = a[1:] print( "AFL++ Autodict-QL by Microsvuln : Writing Token :" + str(a) ) q.close() with open( corpdir + "/lit-seed{0}".format(n), "w" ) as w1: w1.write(str(a)) print("Done!") w1.close() except: print("Error!") n = n + 1 def main(): args = parse_args() ensure_dir(args.corpdir) do_analysis1(args.corpdir, args.infile) if __name__ == "__main__": main()