Esempio n. 1
0
def dis(code):
    code = code[:-4]  # strip ret
    chunks = chunk(code, 4)
    result = ''
    i = 0
    for c in chunks:
        disassembled_instruction = disassemble_from_binary(
            bin(bytes_to_long(c[::-1]))[2:], i)
        result += disassembled_instruction + "\n"
        i += 1
    result = result + 'ret'
    code = result
    for i in range(2, 12):
        code = code.replace('X' + str(i + 16), "S" + str(i))
    for i in range(2, 8):
        code = code.replace('X' + str(i + 10), "A" + str(i))
    code = code.replace("X2", 'SP')
    code = code.replace("X8", 'S0')
    code = code.replace("X9", 'S1')
    code = code.replace("X1,", 'RA,')
    code = code.replace("X10", 'A0')
    code = code.replace("X11", 'A1')
    code = re.sub("ADDI (.*?),X0,(.*)", "LI \g<1>,\g<2>", code)
    code = re.sub("JAL X0,(.*)", "J \g<1>", code)
    code = code.replace(",", ", ")
    code = code.lower()
    return code
Esempio n. 2
0
def brute_ecb_suffix(encrypt_function,
                     block_size=16,
                     expected_suffix_len=32,
                     pad_char='A'):
    suffix = ""
    recovery_block = expected_suffix_len / block_size - 1
    for i in range(expected_suffix_len - len(suffix) - 1, -1, -1):
        data = pad_char * i
        correct = chunk(encrypt_function(data), block_size)[recovery_block]
        for character in range(256):
            c = chr(character)
            test = data + suffix + c
            try:
                encrypted = chunk(encrypt_function(test),
                                  block_size)[recovery_block]
                if correct == encrypted:
                    suffix += c
                    print('FOUND', expected_suffix_len - i, c)
                    break
            except:
                pass
    return suffix
Esempio n. 3
0
def brute_ecb_suffix(encrypt, known_suffix="", expected_suffix_len=32, prefix="", block_size=16):
    block_len_hex = block_size * 2
    expected_suffix_len_hex = expected_suffix_len * 2
    suffix = known_suffix
    recovery_block = expected_suffix_len_hex / block_len_hex + 1
    for i in range(expected_suffix_len_hex - len(suffix), 0, -1):
        data = prefix + 'A' * i
        correct = chunk(encrypt(data), block_len_hex)[recovery_block]
        for c in '{' + "}" + "_" + string.letters + string.digits:
            test = data + suffix + c
            try:
                encrypted = chunk(encrypt(test), block_len_hex)[recovery_block]
                if correct == encrypted:
                    suffix += c
                    print('FOUND', expected_suffix_len_hex - i, c)
                    if c == "}":
                        print(suffix)
                        return suffix
                    break
            except:
                pass
    return suffix
Esempio n. 4
0
def asm(code):
    code = code.upper()
    code = code.replace("\nRET", "")
    code = re.sub("LI (.*?), (.*)", "ADDI \g<1>, X0, \g<2>", code)
    code = re.sub("J .*", "JAL X0, 0", code)
    code = code.replace(", ", ",")
    code = code.replace("SP", 'X2')
    code = code.replace("S0", 'X8')
    code = code.replace("S1", 'X9')
    code = code.replace("RA", 'X1')
    code = code.replace("A0", 'X10')
    code = code.replace("A1", 'X11')
    for i in range(2, 12):
        code = code.replace("S" + str(i), 'X' + str(i + 16))
    for i in range(2, 8):
        code = code.replace("A" + str(i), 'X' + str(i + 10))
    res = ''
    for line in code.split("\n"):
        line = line.strip('\n')
        instruction_as_binary, immediate = generate_binary_from_instruction(
            line)
        res += instruction_as_binary
    chunks = chunk(long_to_bytes(int(res, 2)), 4)
    return "".join(c[::-1] for c in chunks) + "g\x80\x00\x00"
Esempio n. 5
0
def main():
    sounds_list = get_sounds()
    print(sounds_list)
    final = []
    for sound in sounds_list:
        pitch = sound[0]
        octave = int(sound[1]) - 4
        if octave > 0:
            final_sound = pitch.lower()
        else:
            final_sound = pitch
        final.append(final_sound)
    parts = chunk("".join(final), 2)
    print(parts)
    scale = "DEFGABcdefgab"  # D-major
    x = []
    for part in parts:
        first = part[0]
        second = part[1]
        res = scale.index(first) << 4
        res += scale.index(second)
        x.append(res)
    flag = "".join([chr(c) for c in x])
    print(flag)
Esempio n. 6
0
def collect_outputs(s):
    out = []
    for i in range(160):
        aes_iv = get_iv(s)
        out.extend(map(bytes_to_long, chunk(aes_iv, 4))[::-1])
    return out
Esempio n. 7
0
def fix_signature(original_msg, signature, new_msg):
    signature = binascii.unhexlify(signature)
    c = chunk(signature, 16)
    for i in range(len(original_msg)):
        c[i] = flip_block(c[i], original_msg[i], new_msg[i])
    return b''.join(c)