about summary refs log tree commit diff
path: root/utils/autodict_ql/strncmp-strings.py
blob: f00fa3dab42e8b78e4f1e4b42159c9d3e4b60e10 (plain) (blame)
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
59
60
61
62
63
#!/usr/bin/env python3
# Autodict-QL - Optimal token generation for fuzzing
# Part of AFL++ Project
# Author : Microsvuln - Arash.vre@gmail.com

import os
import string
import binascii 
import codecs
import errno
import struct
import argparse
import re
from binascii import unhexlify

def ensure_dir(dir):
    try:
        os.makedirs(dir)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise

def parse_args():
    parser = argparse.ArgumentParser(description=(
        "Helper - Specify input file analysis and output folder to save corpus for strings in the overall project ---------------------------------------------------------------------------  Example usage : python2 thisfile.py outdir str.txt"    ))
    parser.add_argument("corpdir",
        help="The path to the corpus directory to generate strings.")
    parser.add_argument("infile",
        help="Specify file output of codeql analysis - ex. ooo-atr.txt, analysis take place on this file, example : python2 thisfile.py outdir strings.txt")

    return parser.parse_args()


def do_string_analysis(corpdir, infile1):
    with open(infile1, "r") as f1:        
        lines = f1.readlines()[1:]       
        f1.close()       
        new_lst1 = []
        n = 1
        for i, num1 in enumerate(lines):
            if i != 0:
                new_lst1.append(num1)
                print("num : %s" % num1)
                str11 = str(num1)
                str11 = str11.replace("|","")
                str11 = str11.replace("\n","")
                str11 = str11.lstrip()
                str11 = str11.rstrip()
                str11 = str(str11)
                if ((" " in str11 ) or (")" in str11) or ("(" in str11) or ("<" in str11) or (">" in str11)) :
                    print("Space / Paranthesis String : %s" % str11)
                else :
                    with open(corpdir+'/strncmp-str{0}'.format(n), 'w') as file:                    
                            file.write(str11)
                            print("AFL++ Autodict-QL by Microsvuln : Writing Token : %s" % str11)
                            n=n+1

def main():
    args = parse_args()    
    ensure_dir(args.corpdir)
    do_string_analysis(args.corpdir, args.infile)
if __name__ == '__main__':
    main()