Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import glob
- import json
- import sys
- import shutil
- import os
- #this might change, not sure, but probably not since 16 is a great number
- HEADER_LENGTH = 16
- def decrypt_image(enc_png, key, path):
- print("Decrypting %s" % enc_png)
- dec_name = os.path.splitext(os.path.basename(enc_png))[0] + ".png"
- dec_data = decrypt_generic(enc_png, key)
- dec_file = open(os.path.join(path, "dump/img", dec_name), 'wb')
- dec_file.write(dec_data)
- dec_file.close()
- def decrypt_audio(enc_ogg, key, path):
- print("Decrypting %s" % enc_ogg)
- dec_name = os.path.splitext(os.path.basename(enc_ogg))[0] + ".ogg"
- dec_data = decrypt_generic(enc_ogg, key)
- dec_file = open(os.path.join(path, "dump/audio", dec_name), 'wb')
- dec_file.write(dec_data)
- dec_file.close()
- def decrypt_generic(file_name, key):
- enc_data = bytearray(open(file_name, 'rb').read())
- dec_data = enc_data[16:]
- for i in range(0, HEADER_LENGTH):
- dec_data[i] ^= key[i]
- return dec_data
- if __name__ == "__main__":
- if len(sys.argv) == 1:
- print("Please supply path to Game.exe(s) to unpack")
- sys.exit(1)
- for i in range(1, len(sys.argv)):
- if os.path.basename(sys.argv[i]) != 'Game.exe':
- print("Please supply path to Game.exe(s) to unpack")
- sys.exit(1)
- for i in range(1, len(sys.argv)):
- game_path = os.path.dirname(sys.argv[i])
- sysjson_p = open(os.path.join(game_path, "www/data/System.json"), 'r')
- sysjson = json.loads(sysjson_p.read())
- enc_key = sysjson['encryptionKey']
- enc_key = bytearray.fromhex(enc_key)
- sys.stdout.write(enc_key)
- has_images = sysjson['hasEncryptedImages']
- has_audio = sysjson['hasEncryptedAudio']
- sysjson_p.close()
- if os.path.exists(os.path.join(game_path, "dump")):
- shutil.rmtree(os.path.join(game_path, "dump"))
- os.mkdir(os.path.join(game_path, "dump"))
- if has_images:
- os.mkdir(os.path.join(game_path, "dump/img"))
- for enc_png in glob.iglob(os.path.join(game_path, "www/img/**/*.rpgmvp")):
- decrypt_image(enc_png, enc_key, game_path)
- if has_audio:
- os.mkdir(os.path.join(game_path, "dump/audio"))
- for enc_ogg in glob.iglob(os.path.join(game_path, "www/audio/**/*.rpgmvo")):
- decrypt_audio(enc_ogg, enc_key, game_path)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement