Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.35 KB | None | 0 0
  1. from multiprocessing import Process
  2.  
  3. def encrypt(key, msg):
  4.     key = list(key)
  5.     msg = list(msg)
  6.     for char_key in key:
  7.         for i in range(len(msg)):
  8.             if i == 0:
  9.                 tmp = ord(msg[i]) + ord(char_key) + ord(msg[-1])
  10.             else:
  11.                 tmp = ord(msg[i]) + ord(char_key) + ord(msg[i-1])
  12.  
  13.             while tmp > 255:
  14.                 tmp -= 256
  15.             msg[i] = chr(tmp)
  16.     return ''.join(msg)
  17.  
  18. def decrypt(key, msg):
  19.     key = list(key)
  20.     msg = list(msg)
  21.     for char_key in reversed(key):
  22.         for i in reversed(range(len(msg))):
  23.             if i == 0:
  24.                 tmp = ord(msg[i]) - (ord(char_key) + ord(msg[-1]))
  25.             else:
  26.                 tmp = ord(msg[i]) - (ord(char_key) + ord(msg[i-1]))
  27.             while tmp < 0:
  28.                 tmp += 256
  29.             msg[i] = chr(tmp)
  30.     return ''.join(msg)
  31.  
  32. def is_ascii(txt, prc = 0.6):
  33.     tot = len(txt)
  34.     num_ascii = 0
  35.     for c in txt:
  36.         if ord(c) < 128:
  37.             num_ascii += 1
  38.     return (num_ascii / tot) >= prc
  39.  
  40. def are_there_some_spaces(txt, some = 5):
  41.     tot = len(txt)
  42.     num_spaces = 0
  43.     for c in txt:
  44.         if ord(c) == 0x20: # space hex code
  45.             num_spaces += 1
  46.     return num_spaces >= some
  47.  
  48. def brute_force_job(words, start, end, job):
  49.     print('I am job #{0}, trying from {1} to {2}...'.format(job, start, end))
  50.     enc_file = open('ciphertext', 'rb')
  51.     enc_text = enc_file.read()
  52.     for index in range(start, end):
  53.         key = words[index].strip()
  54.         dec = decrypt(key, enc_text)
  55.         try:
  56.             # dec_text = dec.decode()
  57.             if are_there_some_spaces(dec, 5):
  58.                 print('Found Key: {0}'.format(key))
  59.                 print('Found Txt: {0}'.format(dec))
  60.         except:
  61.             continue
  62.  
  63. def brute_force(wordlist_path, cpu = 8):
  64.     wordlist = open(wordlist_path, 'r')
  65.     words = wordlist.readlines()
  66.     chunk_size = len(words) / cpu
  67.     curr_start = 0
  68.     curr_end = curr_start + chunk_size
  69.     for c in range(cpu):
  70.         if c == cpu - 1:
  71.             curr_end = len(words)
  72.         p = Process(target=brute_force_job, args=(words, curr_start, curr_end, c))
  73.         p.start()
  74.         curr_start = curr_end
  75.         curr_end = curr_end + chunk_size
  76.  
  77.  
  78. if __name__ == '__main__':
  79.     brute_force('/usr/share/wordlists/rockyou.txt', 8)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement