|
|
@ -1,4 +1,4 @@
|
|
|
|
#!/usr/bin/env python
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
import sys, string, types, hashlib, base64, re, urllib, binascii
|
|
|
|
import sys, string, types, hashlib, base64, re, urllib, binascii
|
|
|
|
import operator
|
|
|
|
import operator
|
|
|
|
from collections import Counter
|
|
|
|
from collections import Counter
|
|
|
@ -8,8 +8,8 @@ UPPER_LETTERS = [chr(x) for x in range(65, 91)]
|
|
|
|
COMMON_LETTERS = 'ETAOIN SHRDLU'
|
|
|
|
COMMON_LETTERS = 'ETAOIN SHRDLU'
|
|
|
|
|
|
|
|
|
|
|
|
def xorRepeating():
|
|
|
|
def xorRepeating():
|
|
|
|
plain = raw_input('Please input your Plaintext: ')
|
|
|
|
plain = input('Please input your Plaintext: ')
|
|
|
|
key = raw_input('Key: ')
|
|
|
|
key = input('Key: ')
|
|
|
|
hexkey = list()
|
|
|
|
hexkey = list()
|
|
|
|
i = 0
|
|
|
|
i = 0
|
|
|
|
for c in key:
|
|
|
|
for c in key:
|
|
|
@ -26,11 +26,11 @@ def xorRepeating():
|
|
|
|
print(resultString)
|
|
|
|
print(resultString)
|
|
|
|
|
|
|
|
|
|
|
|
def xorBrutePrompt():
|
|
|
|
def xorBrutePrompt():
|
|
|
|
isfile = (raw_input('f for file; for string:') == 'f')
|
|
|
|
isfile = (input('f for file; for string:') == 'f')
|
|
|
|
maxresults = input('How many top hits? ')
|
|
|
|
maxresults = input('How many top hits? ')
|
|
|
|
keylength = input('Maximum key length in bytes: ')
|
|
|
|
keylength = input('Maximum key length in bytes: ')
|
|
|
|
if isfile:
|
|
|
|
if isfile:
|
|
|
|
path = raw_input('path: ')
|
|
|
|
path = input('path: ')
|
|
|
|
path = path.strip()
|
|
|
|
path = path.strip()
|
|
|
|
results = list()
|
|
|
|
results = list()
|
|
|
|
with open(path, 'r') as file:
|
|
|
|
with open(path, 'r') as file:
|
|
|
@ -50,7 +50,7 @@ def xorBrutePrompt():
|
|
|
|
for i in tupel:
|
|
|
|
for i in tupel:
|
|
|
|
print(i[0])
|
|
|
|
print(i[0])
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
encoded = raw_input('Input your Hex String: ')
|
|
|
|
encoded = input('Input your Hex String: ')
|
|
|
|
result = xorSingleBrute(encoded, maxresults, keylength)
|
|
|
|
result = xorSingleBrute(encoded, maxresults, keylength)
|
|
|
|
sortedResults = sorted(result.items(), key=operator.itemgetter(1))[-maxresults:]
|
|
|
|
sortedResults = sorted(result.items(), key=operator.itemgetter(1))[-maxresults:]
|
|
|
|
for i, j in sortedResults:
|
|
|
|
for i, j in sortedResults:
|
|
|
@ -60,7 +60,7 @@ def xorBrutePrompt():
|
|
|
|
def xorSingleBrute(encoded='', maxresults=20, keybytes=1):
|
|
|
|
def xorSingleBrute(encoded='', maxresults=20, keybytes=1):
|
|
|
|
resultDict = dict()
|
|
|
|
resultDict = dict()
|
|
|
|
if(encoded == ''):
|
|
|
|
if(encoded == ''):
|
|
|
|
isfile = (raw_input('f for file; for string:') == 'f')
|
|
|
|
isfile = (input('f for file; for string:') == 'f')
|
|
|
|
for xor_key in range(0, 2**(keybytes*8)):
|
|
|
|
for xor_key in range(0, 2**(keybytes*8)):
|
|
|
|
decoded = '';
|
|
|
|
decoded = '';
|
|
|
|
for i, j in zip(encoded[::2], encoded[1::2]):
|
|
|
|
for i, j in zip(encoded[::2], encoded[1::2]):
|
|
|
@ -75,8 +75,8 @@ def commonCounter(inputString, limit=7):
|
|
|
|
|
|
|
|
|
|
|
|
def fixedxor(string1 = '', string2 = ''):
|
|
|
|
def fixedxor(string1 = '', string2 = ''):
|
|
|
|
if(string1 == ''):
|
|
|
|
if(string1 == ''):
|
|
|
|
string1 = raw_input('Please input your first hex string: ')
|
|
|
|
string1 = input('Please input your first hex string: ')
|
|
|
|
string2 = raw_input('Please input your second hex string: ')
|
|
|
|
string2 = input('Please input your second hex string: ')
|
|
|
|
hex1 = int(string1, 16)
|
|
|
|
hex1 = int(string1, 16)
|
|
|
|
hex2 = int(string2, 16)
|
|
|
|
hex2 = int(string2, 16)
|
|
|
|
result = hex1 ^ hex2
|
|
|
|
result = hex1 ^ hex2
|
|
|
@ -155,7 +155,7 @@ def zeroWidthString(inputstring):
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
resultstring+= u'\u200d' #zero-width joiner
|
|
|
|
resultstring+= u'\u200d' #zero-width joiner
|
|
|
|
resultstring += '<'
|
|
|
|
resultstring += '<'
|
|
|
|
print resultstring
|
|
|
|
print(resultstring)
|
|
|
|
|
|
|
|
|
|
|
|
def resolveZeroWidthString(inputstring):
|
|
|
|
def resolveZeroWidthString(inputstring):
|
|
|
|
charfound = False
|
|
|
|
charfound = False
|
|
|
@ -170,7 +170,7 @@ def resolveZeroWidthString(inputstring):
|
|
|
|
bytelist = split_len(binarystring, 8)
|
|
|
|
bytelist = split_len(binarystring, 8)
|
|
|
|
for byte in bytelist:
|
|
|
|
for byte in bytelist:
|
|
|
|
resultstring += translate(byte, 1, 5)
|
|
|
|
resultstring += translate(byte, 1, 5)
|
|
|
|
print resultstring
|
|
|
|
print(resultstring)
|
|
|
|
|
|
|
|
|
|
|
|
def split_len(seq, length):
|
|
|
|
def split_len(seq, length):
|
|
|
|
return [seq[i:i+length] for i in range(0, len(seq), length)]
|
|
|
|
return [seq[i:i+length] for i in range(0, len(seq), length)]
|
|
|
@ -203,20 +203,20 @@ def hammingDistance(string1, string2):
|
|
|
|
return diffs
|
|
|
|
return diffs
|
|
|
|
|
|
|
|
|
|
|
|
def urlEncoder():
|
|
|
|
def urlEncoder():
|
|
|
|
input = raw_input('Pleae input your String: ')
|
|
|
|
input = input('Pleae input your String: ')
|
|
|
|
print(urllib.quote_plus(input))
|
|
|
|
print(urllib.quote_plus(input))
|
|
|
|
|
|
|
|
|
|
|
|
def reverser():
|
|
|
|
def reverser():
|
|
|
|
string = raw_input('Please input your string to reverse:')
|
|
|
|
string = input('Please input your string to reverse:')
|
|
|
|
print(string[::-1])
|
|
|
|
print(string[::-1])
|
|
|
|
|
|
|
|
|
|
|
|
def base64prompt():
|
|
|
|
def base64prompt():
|
|
|
|
b64regex = '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
|
|
|
|
b64regex = '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
|
|
|
|
isfile = (raw_input('f for file, s for string: ') == 'f')
|
|
|
|
isfile = (input('f for file, s for string: ') == 'f')
|
|
|
|
if isfile:
|
|
|
|
if isfile:
|
|
|
|
path = raw_input('Path: ')
|
|
|
|
path = input('Path: ')
|
|
|
|
path = path.strip()
|
|
|
|
path = path.strip()
|
|
|
|
outputPath = raw_input('Output file: ')
|
|
|
|
outputPath = input('Output file: ')
|
|
|
|
with open(path, 'r') as file:
|
|
|
|
with open(path, 'r') as file:
|
|
|
|
contents = file.read()
|
|
|
|
contents = file.read()
|
|
|
|
file.close()
|
|
|
|
file.close()
|
|
|
@ -227,7 +227,7 @@ def base64prompt():
|
|
|
|
outfile.write(decoded)
|
|
|
|
outfile.write(decoded)
|
|
|
|
outfile.close()
|
|
|
|
outfile.close()
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
inputString = raw_input('Please input your string: ')
|
|
|
|
inputString = input('Please input your string: ')
|
|
|
|
if (re.match(b64regex, inputString)):
|
|
|
|
if (re.match(b64regex, inputString)):
|
|
|
|
print(base64.b64decode(inputString))
|
|
|
|
print(base64.b64decode(inputString))
|
|
|
|
else:
|
|
|
|
else:
|
|
|
@ -236,7 +236,7 @@ def base64prompt():
|
|
|
|
|
|
|
|
|
|
|
|
def rotPrompt():
|
|
|
|
def rotPrompt():
|
|
|
|
choice = input('What kind of ROT do you want to perform? 1-25, or all: ')
|
|
|
|
choice = input('What kind of ROT do you want to perform? 1-25, or all: ')
|
|
|
|
userInput = raw_input('Please insert a string: ')
|
|
|
|
userInput = input('Please insert a string: ')
|
|
|
|
if type(choice) is types.IntType:
|
|
|
|
if type(choice) is types.IntType:
|
|
|
|
print(rot(userInput, choice))
|
|
|
|
print(rot(userInput, choice))
|
|
|
|
else:
|
|
|
|
else:
|
|
|
@ -252,20 +252,20 @@ def translatePrompt():
|
|
|
|
inputType = input('Please specify input type: ')
|
|
|
|
inputType = input('Please specify input type: ')
|
|
|
|
outputType = input('Please specify output type: ')
|
|
|
|
outputType = input('Please specify output type: ')
|
|
|
|
if (inputType == 5):
|
|
|
|
if (inputType == 5):
|
|
|
|
inputString = raw_input('Please input your strings, seperated by semicolon: ')
|
|
|
|
inputString = input('Please input your strings, seperated by semicolon: ')
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
inputString = raw_input('Please input your values, seperated by semicolon: ')
|
|
|
|
inputString = input('Please input your values, seperated by semicolon: ')
|
|
|
|
|
|
|
|
|
|
|
|
inputList = inputString.split(';')
|
|
|
|
inputList = inputString.split(';')
|
|
|
|
for entry in inputList:
|
|
|
|
for entry in inputList:
|
|
|
|
print(str(translate(entry, inputType, outputType)))
|
|
|
|
print(str(translate(entry, inputType, outputType)))
|
|
|
|
|
|
|
|
|
|
|
|
def hashPrompt():
|
|
|
|
def hashPrompt():
|
|
|
|
typeChoice = raw_input('Would you like to hash a file or a String? f for file, s for string: ')
|
|
|
|
typeChoice = input('Would you like to hash a file or a String? f for file, s for string: ')
|
|
|
|
algoList = hashlib.algorithms_available
|
|
|
|
algoList = hashlib.algorithms_available
|
|
|
|
for word in algoList:
|
|
|
|
for word in algoList:
|
|
|
|
print(word)
|
|
|
|
print(word)
|
|
|
|
algoChoice = raw_input('Which hashing algorithm? ')
|
|
|
|
algoChoice = input('Which hashing algorithm? ')
|
|
|
|
if algoChoice in algoList:
|
|
|
|
if algoChoice in algoList:
|
|
|
|
hasher = hashlib.new(algoChoice)
|
|
|
|
hasher = hashlib.new(algoChoice)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
@ -273,13 +273,13 @@ def hashPrompt():
|
|
|
|
sys.exit(0)
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
|
|
|
|
if (typeChoice == 'f'):
|
|
|
|
if (typeChoice == 'f'):
|
|
|
|
filePath = raw_input('Please input a fully qualified path: ')
|
|
|
|
filePath = input('Please input a fully qualified path: ')
|
|
|
|
filePath = filePath.strip()
|
|
|
|
filePath = filePath.strip()
|
|
|
|
with open(filePath, 'rb') as hashFile:
|
|
|
|
with open(filePath, 'rb') as hashFile:
|
|
|
|
content = hashFile.read()
|
|
|
|
content = hashFile.read()
|
|
|
|
hasher.update(content)
|
|
|
|
hasher.update(content)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
inputString = raw_input('Please input a string: ')
|
|
|
|
inputString = input('Please input a string: ')
|
|
|
|
hasher.update(inputString)
|
|
|
|
hasher.update(inputString)
|
|
|
|
print(hasher.hexdigest())
|
|
|
|
print(hasher.hexdigest())
|
|
|
|
|
|
|
|
|
|
|
@ -296,7 +296,7 @@ print('8: XOR Bruteforce Single Byte ')
|
|
|
|
print('9: XOR Repeating Key')
|
|
|
|
print('9: XOR Repeating Key')
|
|
|
|
print('10: Zero-Width String')
|
|
|
|
print('10: Zero-Width String')
|
|
|
|
print('11: Resolve Zero-Width Strings')
|
|
|
|
print('11: Resolve Zero-Width Strings')
|
|
|
|
choice = raw_input('Please make a selection: ')
|
|
|
|
choice = input('Please make a selection: ')
|
|
|
|
if (choice == '1'):
|
|
|
|
if (choice == '1'):
|
|
|
|
rotPrompt()
|
|
|
|
rotPrompt()
|
|
|
|
elif (choice == '2'):
|
|
|
|
elif (choice == '2'):
|
|
|
@ -321,9 +321,9 @@ elif(choice == '8'):
|
|
|
|
elif(choice == '9'):
|
|
|
|
elif(choice == '9'):
|
|
|
|
xorRepeating()
|
|
|
|
xorRepeating()
|
|
|
|
elif(choice == '10'):
|
|
|
|
elif(choice == '10'):
|
|
|
|
i = raw_input('String:')
|
|
|
|
i = input('String:')
|
|
|
|
zeroWidthString(i)
|
|
|
|
zeroWidthString(i)
|
|
|
|
elif(choice == '11'):
|
|
|
|
elif(choice == '11'):
|
|
|
|
i = raw_input('String:')
|
|
|
|
i = input('String:')
|
|
|
|
resolveZeroWidthString(i)
|
|
|
|
resolveZeroWidthString(i)
|
|
|
|
print('Thank you for flying with PankiCrypt Airlines!')
|
|
|
|
print('Thank you for flying with PankiCrypt Airlines!')
|
|
|
|