Advertisement
Guest User

Untitled

a guest
Mar 5th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.38 KB | None | 0 0
  1. import os
  2. import shutil
  3. import subprocess
  4. from stem.control import Controller
  5. import stem.process
  6. from flask import Flask
  7. from flask import request
  8. import socket
  9. from flask import jsonify
  10. import base64
  11. import hashlib
  12. import binascii
  13. from Crypto import Random
  14. from Crypto.Cipher import AES
  15.  
  16.  
  17. BS = 16
  18. pad = lambda s: bytes(s + (BS - len(s) % BS) * chr(BS - len(s) % BS), 'utf-8')
  19. unpad = lambda s : s[0:-s[-1]]
  20.  
  21.  
  22. class AESCipher:
  23.  
  24.     def __init__( self, key ):
  25.         self.key = key
  26.  
  27.     def encrypt( self, raw ):
  28.         raw = pad(raw)
  29.         iv = Random.new().read( AES.block_size )
  30.         cipher = AES.new( self.key, AES.MODE_CBC, iv )
  31.         return base64.b64encode( iv + cipher.encrypt( raw ) )
  32.  
  33.     def decrypt( self, enc ):
  34.         enc = base64.b64decode(enc)
  35.         iv = enc[:16]
  36.         cipher = AES.new(self.key, AES.MODE_CBC, iv )
  37.         return unpad(cipher.decrypt( enc[16:] ))
  38.  
  39. def encryptKey(key, password, username):
  40.     encryptionkey = hashlib.pbkdf2_hmac('sha256', password.encode(), username.encode(), 1000000)
  41.     aes = AESCipher(encryptionkey)
  42.     print(key)
  43.     return aes.encrypt(key)
  44. def decryptKey(encryptedkey, password, username):
  45.     encryptionkey = hashlib.pbkdf2_hmac('sha256', password.encode(), username.encode(), 1000000)
  46.     aes = AESCipher(encryptionkey)
  47.     return aes.decrypt(encryptedkey)
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54. def get_free_tcp_port():
  55.     tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  56.     tcp.bind(('', 0))
  57.     addr, port = tcp.getsockname()
  58.     tcp.close()
  59.     return port
  60.  
  61. def print_bootstrap_lines(line):
  62.     if "Bootstrapped" in line:
  63.         print(line)
  64.  
  65.  
  66. class hiddenservice:
  67.     def __init__(self, username, password, ports, CONTROL_PORT):
  68.         self.username = username
  69.         self.password = password
  70.         self.ports = ports
  71.         self.controller = Controller.from_port(port=CONTROL_PORT)
  72.         self.controller.authenticate()
  73.         if os.path.exists("%s/DataDirs/%s/key_content" % (directory, username)):
  74.             try:
  75.                 with open("%s/DataDirs/%s/key_content" % (directory, username), "r") as file:
  76.                     key = decryptKey(base64.b64decode(file.read()), password, username).decode()
  77.             except Exception:
  78.                 #os.remove("%s/DataDirs/%s/key_content" % (directory, username))
  79.                 print("probably wrong password")
  80.                 pass
  81.             try:
  82.                 self.onion = self.controller.create_ephemeral_hidden_service({80:5000}, key_type='RSA1024', key_content=key)
  83.             except Exception:
  84.                 pass
  85.  
  86.         if not os.path.exists("%s/DataDirs/%s/key_content" % (directory, username)):
  87.             self.onion = self.controller.create_ephemeral_hidden_service({80:5000})
  88.             with open("%s/DataDirs/%s/key_content" % (directory, username), "w") as file:
  89.                 file.write(base64.b64encode(encryptKey(self.onion.private_key, password, username)).decode())
  90.  
  91. SOCKS_PORT=get_free_tcp_port()
  92. CONTROL_PORT=get_free_tcp_port()
  93. directory=os.path.dirname(os.path.realpath(__file__))
  94.  
  95.  
  96. username="test"
  97. password="pass"
  98.  
  99.  
  100.  
  101. tor_process = stem.process.launch_tor_with_config(tor_cmd='%s/Tor/tor.exe' % directory,config={
  102.         'SocksPort': str(SOCKS_PORT),
  103.         'ControlPort': str(CONTROL_PORT),
  104.         'DataDirectory': '%s/DataDirs/%s' % (directory, username)
  105.     },
  106.     init_msg_handler=print_bootstrap_lines
  107.     )
  108.  
  109.  
  110. app = Flask(__name__)
  111.  
  112. @app.route('/')
  113. def index():
  114.     return "<h1>djkhashjgndashnjd</h1>"
  115. @app.route('/message')
  116. def message():
  117.     print(request.args.get('content'))
  118.     return jsonify(success=True)
  119.  
  120. hs = hiddenservice(username, password, {80:5000}, CONTROL_PORT)
  121. print(hs.onion.service_id)
  122. app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement