예제 #1
0
파일: m12.py 프로젝트: iamfionn/matasano
def break_ecb(oracle):
    bs = blocksize(oracle)
    l = len(oracle())
    string_length = len_string(oracle)

    plaintext = b''
    prefix = (l + bs - 1) * b'A'
    while len(plaintext) <= string_length:
        oracle_prefix = oracle(prefix)
        for i in range(127):
            test = prefix + plaintext + bytes([i])
            if oracle(test)[l:l + bs] == oracle_prefix[l:l + bs]:
                #if i < 10:             # hack to break if non-
                #    return plaintext   # printable padding found
                prefix = prefix[1:]
                plaintext += bytes([i])
                #print(chr(i), end = "", flush = True)
                break

    return de_pkcs7(plaintext)

if __name__ == "__main__":

    if not detect_ecb(oracle(64 * b'A')):
        print("Not ECB")
        raise SystemExit

    print(break_ecb(oracle).decode())

예제 #2
0
파일: m14.py 프로젝트: iamfionn/matasano
    bs = blocksize(oracle)
    for i in range(1, bs + 1): 
        if l < len(oracle(i * b'A')):
            return l - i - len_prefix(oracle)

def break_ecb(oracle):
    bs = blocksize(oracle)
    l = len(oracle())
    string_length = len_string(oracle)
    prefix_length = len_prefix(oracle)

    plaintext = b''
    uc = (l + bs - len_prefix(oracle) - 1) * b'A'
    while len(plaintext) <= string_length:
        oracle_input = oracle(uc)
        for i in range(127):
            test = uc + plaintext + bytes([i])
            if oracle(test)[l:l + bs] == oracle_input[l:l + bs]:
                uc = uc[1:]
                plaintext += bytes([i])
                #print(chr(i), end = "", flush = True)
                break

    return de_pkcs7(plaintext)

if __name__ == "__main__":
    assert detect_ecb(oracle(48 * b'A')), "Not ECB"

    print(break_ecb(oracle).decode())

예제 #3
0
def main() -> None:
    if not detect_ecb(oracle(64 * b"A")):
        print("Not ECB")
        raise SystemExit

    print(break_ecb(oracle).decode())
예제 #4
0
파일: m14.py 프로젝트: fionn/cryptopals
def main() -> None:
    assert detect_ecb(oracle(48 * b"A")), "Not ECB"
    print(break_ecb(oracle).decode())