コード例 #1
0
def automation(usernames, passwdPCAPFiles, keyPCAPFiles, ivPCAPFiles,
               msgPCAPFiles):

    numberOfUsers = len(usernames)

    #------------------------CREATE NEW DIRECTORIES FOR ALL USERS------------------------

    print "Creating directories for all users..."
    DATA_FOLDERS, OUT_FOLDERS, DMSG_FOLDERS = forAllCreateDirectories(
        usernames)

    #-------------------------------Generate input pcap file paths-------------------------

    USERNAMES, PASWWD_PCAPS, IV_PCAPS, KEY_PCAPS, MESSAGE_PCAPS = [],[],[],[],[]

    for i in range(numberOfUsers):

        #User input should be the username followed by 4 PCAP files
        USERNAMES.append(usernames[i] + '_')
        PASWWD_PCAPS.append(PCAP_DIRECTORY + passwdPCAPFiles[i])
        IV_PCAPS.append(PCAP_DIRECTORY + ivPCAPFiles[i])
        KEY_PCAPS.append(PCAP_DIRECTORY + keyPCAPFiles[i])
        MESSAGE_PCAPS.append(PCAP_DIRECTORY + msgPCAPFiles[i])

    #--------------------------Generate output data file, and extract data ----------------------------

    print "Extracting data from PCAP files..."

    start = time.time()

    passwd_files, iv_files, key_files, message_files = [], [], [], []

    for i in range(numberOfUsers):

        #Username specific file names (extract from corresponding pcap files)
        passwd_files.append(DATA_FOLDERS[i] + USERNAMES[i] + PASWWD_FILE)
        iv_files.append(DATA_FOLDERS[i] + USERNAMES[i] + IV_FILE)
        key_files.append(DATA_FOLDERS[i] + USERNAMES[i] + KEY_FILE)
        message_files.append(DATA_FOLDERS[i] + USERNAMES[i] + MESSAGE_FILE)

        #Generate data files from PCAP files
        pcap.getPasswd(PASWWD_PCAPS[i], passwd_files[i])
        pcap.getIV(IV_PCAPS[i], iv_files[i])
        pcap.getZip(KEY_PCAPS[i], key_files[i])
        pcap.getCipherMessage(MESSAGE_PCAPS[i], message_files[i])

    #Stop and print timer
    end = time.time()
    print "Data extracted after", str(end - start), "seconds."

    #----------------------------NSA/Crack Request--------------------------------

    print "Cracking passwords"

    #Start timer
    start = time.time()
    #print("Starting timer")

    #requests(passwd_files, PASS_OUTPUTFILE)
    requestToCracker(passwd_files, PASS_OUTPUTFILE)

    #Stop and print timer
    end = time.time()
    print "All", str(numberOfUsers), "passwords cracked after", str(
        end - start), "seconds."

    #----------------------------Write passwords to files--------------------------------

    print "Writing password to corresponding user files."

    passwd_plains = []

    #Get file contents to a list
    with open(PASS_OUTPUTFILE) as f:
        content = f.readlines()

    passwds = []

    for i in range(numberOfUsers):

        #obtain password
        p = content[i].strip()
        p = p.split(" ")[1]
        passwds.append(p)

        #create plain password file path
        passwd_plains.append(OUT_FOLDERS[i] + USERNAMES[i] + PASSWORD_PLAIN)

        #write password plain file
        pFile = open(passwd_plains[i], "w")
        pFile.write(passwds[i] + '\n')
        pFile.close()

    #--------------------------Unzip Keys----------------------------

    print "Unzipping key files..."

    key_plains = []

    for i in range(numberOfUsers):

        #Unzip and create key file
        key_plains.append(OUT_FOLDERS[i] + USERNAMES[i] + KEY_PLAIN)
        unzip.unzipFile(key_files[i], key_plains[i], passwds[i])

    #--------------------------Parse Key----------------------------

    print "Parsing Keys..."

    parsed_keys = []

    for i in range(numberOfUsers):

        parsed_keys.append(OUT_FOLDERS[i] + USERNAMES[i] + KEY_PARSED)
        keyParser.keyParsing(key_plains[i], parsed_keys[i])

    #--------------------------Decrypt (AES-128)---------------------------

    print "First Layer Decryption..."

    for i in range(numberOfUsers):

        decrypt.callDecryptShell(message_files[i], iv_files[i], parsed_keys[i],
                                 DMSG_FOLDERS[i])

    #-----------------------------Delete files--------------

    for i in range(numberOfUsers):

        deleteBinaryFiles(DMSG_FOLDERS[i])

    #--------------------------Decrypt all three messages---------------------------

    shProcess = Popen(["mv", "../user*", "../dataProcessedPhase4"])
    # Wait for process to complete.
    shProcess.wait()

    callToCaesarCrack()
    callToAffineCrack()
    callToChainRotCrack()

    print "DONE"
コード例 #2
0
def main():

    #------------------------CREATE NEW DIRECTORY------------------------

    USERNAME = sys.argv[1]

    DATA_FOLDER = "../" + USERNAME + "Data/"
    if not os.path.exists(DATA_FOLDER):
        os.makedirs(DATA_FOLDER)

    OUT_FOLDER = "../" + USERNAME + "Output/"
    if not os.path.exists(OUT_FOLDER):
        os.makedirs(OUT_FOLDER)

    DMSG_FOLDER = OUT_FOLDER + "decriptedMessage/"
    if not os.path.exists(DMSG_FOLDER):
        os.makedirs(DMSG_FOLDER)

    #-------------------------------USER INPUT-------------------------

    #User input should be the username followed by 4 PCAP files
    USERNAME = USERNAME + '_'
    PASWWD_PCAP = PCAP_DIRECTORY + sys.argv[2]
    IV_PCAP = PCAP_DIRECTORY + sys.argv[3]
    KEY_PCAP = PCAP_DIRECTORY + sys.argv[4]
    MESSAGE_PCAP = PCAP_DIRECTORY + sys.argv[5]

    #--------------------------PCAP -> DATA FILES ----------------------------

    #username specific file names (extract from corresponding pcap files)
    passwd_file = DATA_FOLDER + USERNAME + PASWWD_FILE
    iv_file = DATA_FOLDER + USERNAME + IV_FILE
    key_file = DATA_FOLDER + USERNAME + KEY_FILE
    message_file = DATA_FOLDER + USERNAME + MESSAGE_FILE

    #Generate data files from PCAP files
    pcap.getPasswd(PASWWD_PCAP, passwd_file)
    pcap.getIV(IV_PCAP, iv_file)
    pcap.getZip(KEY_PCAP, key_file)
    pcap.getCipherMessage(MESSAGE_PCAP, message_file)

    #----------------------------NSA Request--------------------------------

    #Obtain encrypted password
    cryptFile = open(passwd_file, "r")
    cryptedPass = cryptFile.readline().strip() + ' '

    #!!!Later on change port to be random and check if its used
    #Send request in a child process
    userProcess = mp.Process(target=nsa.NSA_user,
                             args=((LOCAL_HOST, LOCAL_PORT, cryptedPass)))
    userProcess.start()

    #Listener
    passwd_plain = OUT_FOLDER + USERNAME + PASSWORD_PLAIN
    nsa.NSA_listener('', LOCAL_PORT, passwd_plain)

    #Join child process
    userProcess.join()

    #--------------------------Unzip Key----------------------------

    #Obtain password
    pFile = open(passwd_plain, "r")
    password = pFile.read()
    pFile.close()

    #Get the second part
    password = password.split(" ")
    password = password[1]
    password = password[:-1]

    print password

    #Unzip and create key file
    key_plain = OUT_FOLDER + USERNAME + KEY_PLAIN
    unzip.unzipFile(key_file, key_plain, password)

    #--------------------------Parse Key----------------------------

    key_parsed = OUT_FOLDER + USERNAME + KEY_PARSED
    keyParser.keyParsing(key_plain, key_parsed)

    #--------------------------Decrypt---------------------------

    key_parsed = OUT_FOLDER + USERNAME + KEY_PARSED
    decrypt.callDecryptShell(message_file, iv_file, key_parsed, DMSG_FOLDER)