Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def decrypt_sign(data, ver_global: bool):
- # print("---- Decrypt_sign - Begin")
- dec_data = {}
- if None != dec_data:
- dec_data = None
- SALT_LEN = 8
- KEY_LEN = 32
- IV_LEN = 16
- ITERATIONS = 1
- HASH_ALGO = MD5
- if ver_global == True:
- # print("------ Global - version - decrypt_sign")
- password = 'Decrypt_Password_GLB'
- else:
- # print("------ Japan - version - decrypt_sign")
- password = 'Decrypt_Password_JPN'
- data = base64.b64decode(data)
- salt = data[:SALT_LEN]
- #print("sign_key_iv")
- sign_key_iv = sign_key_iv_buffer = HASH_ALGO.new(password.encode() + salt).digest()
- while len(sign_key_iv) < KEY_LEN + IV_LEN:
- #print("sign_key_iv_buffer")
- sign_key_iv_buffer = HASH_ALGO.new(sign_key_iv_buffer + password.encode() + salt).digest()
- sign_key_iv += sign_key_iv_buffer
- #print("sign_key")
- sign_key, sign_iv = sign_key_iv[:KEY_LEN], sign_key_iv[KEY_LEN:]
- #print("cipher")
- cipher = AES.new(sign_key, AES.MODE_CBC, sign_iv)
- #print("Padding.unpad (dec)")
- try:
- dec_data = Padding.unpad(cipher.decrypt(data[SALT_LEN:]), AES.block_size)
- except Exception as e:
- print(e)
- # print("---- Decrypt_sign - End")
- return json.loads(dec_data)
- def get_key_and_iv(
- password,
- salt,
- klen=32,
- ilen=16,
- msgdgst='md5',
- ):
- mdf = getattr(__import__('hashlib', fromlist=[msgdgst]), msgdgst)
- password = password.encode('ascii', 'ignore') # convert to ASCII
- try:
- maxlen = klen + ilen
- keyiv = mdf(password + salt).digest()
- tmp = [keyiv]
- while len(tmp) < maxlen:
- tmp.append(mdf(tmp[-1] + password + salt).digest())
- keyiv += tmp[-1] # append the last byte
- key = keyiv[:klen]
- iv = keyiv[klen:klen + ilen]
- return (key, iv)
- except UnicodeDecodeError:
- return (None, None)
- def encrypt_sign(tosign, ver_global: bool = False):
- # print("---- Encrypt_sign - Begin")
- strip_unicode = re.compile("([^-_a-zA-Z0-9!@#%&=,/'\";:~`\$\^\*\(\)\+\[\]\.\{\}\|\?\<\>\\]+|[^\s]+)")
- tosign = tosign.replace("\'", "\"")
- tosign = tosign.replace("True", "true")
- tosign = tosign.replace("False", "false")
- #print("encode")
- tosign = pad(tosign)
- key1 = str.encode(tosign)
- if ver_global == True:
- # print("------ Global - version - encrypt_sign")
- password = 'Encrypt_Password_GLB'
- else:
- # print("------ Japan - version - encrypt_sign")
- password = 'Enccrypt_Password_JPN'
- salt = os.urandom(8)
- (key, iv) = get_key_and_iv(password, salt, klen=32, ilen=16,
- msgdgst='md5')
- cipher = AES.new(key, AES.MODE_CBC, iv)
- a = cipher.encrypt(key1)
- a = salt + a
- # print("---- Encrypt_sign - End")
- return base64.b64encode(a).decode()
- # Example :
- eza_f = re.search('.*\/z_battles/.*\/finish', flow.request.pretty_url)
- if None != eza_f:
- print('-- [Finish] EZA stage - Start')
- json_data = json.loads(flow.request.text)
- if flow.request.host == "ishin-global.aktsk.com":
- #------decrypt_sign(packet phrase, is global = true else put false)
- data = decrypt_sign(json_data['sign'], True)
- else:
- data = decrypt_sign(json_data['sign'], False)
- #Do something there, Data will be json that is decrypted
- if flow.request.host == "ishin-global.aktsk.com":
- #----------encrypt_sign(packet phrase, is global = true else put false)
- data_enc = encrypt_sign(str(data), True)
- else:
- data_enc = encrypt_sign(str(data), False)
- #Put back the new phrase in sign.
- newpacket = '{"sign": "'+data_enc+'"}\n'
- try:
- flow.request.text = newpacket
- print('-- [Finish] EZA stage - End')
- except Exception as e:
- print(e)
Add Comment
Please, Sign In to add comment