Example #1
0
def mutate_recursive_replacement(generalized_input, func, grimoire_inference):

    depth = rand.select(RECURSIVE_REPLACEMENT_DEPTH)
    generalized_input = recursive_replacement(generalized_input,
                                              grimoire_inference, depth)
    data = grimoire_inference.generalized_to_string(generalized_input)

    func(data, label="grim_recursive")
Example #2
0
def mutate_replace_strings(generalized_input, func, grimoire_inference,
                           string_matches):
    if len(string_matches) == 0:
        return

    payload = grimoire_inference.generalized_to_string(generalized_input)

    match = rand.select(string_matches)
    rand_str = rand.select(grimoire_inference.strings)

    # replace single instance
    data = payload[0:match.start()] + rand_str + payload[match.end():]
    func(data, label="grim_repl_str")

    # replace all instances
    data = payload.replace(payload[match.start():match.end()], rand_str)
    func(data, label="grim_repl_str")
Example #3
0
def get_select_bitmap(elements, samples):

    array = [x for x in range(elements)]
    bitmap = [0 for _ in range(elements)]

    for _ in range(samples*elements):
        val = rand.select(array)
        bitmap[val] += 1

    return bitmap
Example #4
0
def get_gauss_sum(array, samples):

    # gauss sum over range(1...n)
    expect = 0.5*array[-1]*(array[-1]+1)

    # random sampled counting should arrive at similar result
    count = 0
    for _ in range(samples*len(array)):
        count += rand.select(array)

    real = count/samples
    return expect, real
Example #5
0
def random_generalized(grimoire_inference):
    rand_generalized = list(
        grimoire_inference.generalized_inputs.keys())[rand.int(
            len(grimoire_inference.generalized_inputs))]
    rand_generalized = pad_generalized_input(rand_generalized)

    if rand.int(100) > CHOOSE_SUBINPUT and len(rand_generalized) > 0:
        if rand.int(100) < 50 and len(rand_generalized) > 0:
            gap_indices = filter_gap_indices(rand_generalized)
            min_index, max_index = rand.select(gap_indices), rand.select(
                gap_indices)
            min_index, max_index = min(min_index,
                                       max_index), max(min_index, max_index)
            rand_generalized = rand_generalized[min_index:max_index + 1]
        else:
            random_token = list(grimoire_inference.tokens.keys())[rand.int(
                len(grimoire_inference.tokens))]
            rand_generalized = pad_generalized_input(random_token)

        assert rand_generalized[0] == b'' and rand_generalized[-1] == b''
    return rand_generalized
Example #6
0
def recursive_replacement(generalized_input, grimoire_inference, depth):
    for _ in range(depth):

        if len(generalized_input) >= 64 << 10:
            return generalized_input

        gap_indices = filter_gap_indices(generalized_input)

        if len(gap_indices) == 0:
            return generalized_input

        random_index = rand.select(gap_indices)

        generalized_input = generalized_input[
            0:random_index] + random_generalized(
                grimoire_inference) + generalized_input[random_index + 1:]

    return generalized_input