Baoulettes

Decrypt/Encrypt dokkan packet

Dec 29th, 2021 (edited)
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.85 KB | None | 0 0
  1. def decrypt_sign(data, ver_global: bool):
  2.     # print("---- Decrypt_sign - Begin")
  3.     dec_data = {}
  4.     if None != dec_data:
  5.         dec_data = None
  6.     SALT_LEN = 8
  7.     KEY_LEN = 32
  8.     IV_LEN = 16
  9.     ITERATIONS = 1
  10.     HASH_ALGO = MD5
  11.     if ver_global == True:
  12.         # print("------ Global - version - decrypt_sign")
  13.         password = 'Decrypt_Password_GLB'
  14.     else:
  15.         # print("------ Japan - version - decrypt_sign")
  16.         password = 'Decrypt_Password_JPN'
  17.     data = base64.b64decode(data)
  18.     salt = data[:SALT_LEN]
  19.     #print("sign_key_iv")
  20.     sign_key_iv = sign_key_iv_buffer = HASH_ALGO.new(password.encode() + salt).digest()
  21.     while len(sign_key_iv) < KEY_LEN + IV_LEN:
  22.         #print("sign_key_iv_buffer")
  23.         sign_key_iv_buffer = HASH_ALGO.new(sign_key_iv_buffer + password.encode() + salt).digest()
  24.         sign_key_iv += sign_key_iv_buffer
  25.     #print("sign_key")
  26.     sign_key, sign_iv = sign_key_iv[:KEY_LEN], sign_key_iv[KEY_LEN:]
  27.     #print("cipher")
  28.     cipher = AES.new(sign_key, AES.MODE_CBC, sign_iv)
  29.     #print("Padding.unpad (dec)")
  30.     try:
  31.         dec_data = Padding.unpad(cipher.decrypt(data[SALT_LEN:]), AES.block_size)
  32.     except Exception as e:
  33.         print(e)
  34.     # print("---- Decrypt_sign - End")
  35.     return json.loads(dec_data)
  36. def get_key_and_iv(
  37.     password,
  38.     salt,
  39.     klen=32,
  40.     ilen=16,
  41.     msgdgst='md5',
  42.     ):
  43.     mdf = getattr(__import__('hashlib', fromlist=[msgdgst]), msgdgst)
  44.     password = password.encode('ascii', 'ignore')  # convert to ASCII
  45.     try:
  46.         maxlen = klen + ilen
  47.         keyiv = mdf(password + salt).digest()
  48.         tmp = [keyiv]
  49.         while len(tmp) < maxlen:
  50.             tmp.append(mdf(tmp[-1] + password + salt).digest())
  51.             keyiv += tmp[-1]  # append the last byte
  52.         key = keyiv[:klen]
  53.         iv = keyiv[klen:klen + ilen]
  54.         return (key, iv)
  55.     except UnicodeDecodeError:
  56.         return (None, None)
  57. def encrypt_sign(tosign, ver_global: bool = False):
  58.     # print("---- Encrypt_sign - Begin")
  59.     strip_unicode = re.compile("([^-_a-zA-Z0-9!@#%&=,/'\";:~`\$\^\*\(\)\+\[\]\.\{\}\|\?\<\>\\]+|[^\s]+)")
  60.     tosign = tosign.replace("\'", "\"")
  61.     tosign = tosign.replace("True", "true")
  62.     tosign = tosign.replace("False", "false")
  63.     #print("encode")
  64.     tosign = pad(tosign)
  65.     key1 = str.encode(tosign)
  66.     if ver_global == True:
  67.         # print("------ Global - version - encrypt_sign")
  68.         password = 'Encrypt_Password_GLB'
  69.     else:
  70.         # print("------ Japan - version - encrypt_sign")
  71.         password = 'Enccrypt_Password_JPN'
  72.     salt = os.urandom(8)
  73.     (key, iv) = get_key_and_iv(password, salt, klen=32, ilen=16,
  74.                                msgdgst='md5')
  75.     cipher = AES.new(key, AES.MODE_CBC, iv)
  76.     a = cipher.encrypt(key1)
  77.     a = salt + a
  78.     # print("---- Encrypt_sign - End")
  79.     return base64.b64encode(a).decode()  
  80.  
  81. # Example :
  82. eza_f = re.search('.*\/z_battles/.*\/finish', flow.request.pretty_url)
  83. if None != eza_f:
  84.     print('-- [Finish] EZA stage - Start')
  85.     json_data = json.loads(flow.request.text)  
  86.     if flow.request.host == "ishin-global.aktsk.com":
  87.         #------decrypt_sign(packet phrase, is global = true else put false)
  88.         data = decrypt_sign(json_data['sign'], True)
  89.     else:
  90.         data = decrypt_sign(json_data['sign'], False)
  91.     #Do something there, Data will be json that is decrypted
  92.     if flow.request.host == "ishin-global.aktsk.com":
  93.         #----------encrypt_sign(packet phrase, is global = true else put false)
  94.         data_enc = encrypt_sign(str(data), True)
  95.     else:
  96.         data_enc = encrypt_sign(str(data), False)
  97.     #Put back the new phrase in sign.
  98.     newpacket = '{"sign": "'+data_enc+'"}\n'
  99.     try:
  100.         flow.request.text = newpacket
  101.         print('-- [Finish] EZA stage - End')
  102.     except Exception as e:
  103.         print(e)
Add Comment
Please, Sign In to add comment