#!/usr/bin/python from __future__ import print_function,division from Crypto.Protocol.KDF import PBKDF2 from Crypto.Cipher import AES from base64 import decodestring,encodestring from sys import stdout,stdin from json import loads,dumps from math import ceil # fshack.py <Vault1.sav >Vault2.sav # cp Vault2.sav Vault2.sav.bpk INITIALIZATION_VECTOR = b'tu89geji340t89u2' PASSWORD = b'UGxheWVy' KEY_SIZE = 32 # Derive the key from our password and IV key = PBKDF2(PASSWORD, INITIALIZATION_VECTOR, KEY_SIZE) def decode(s): # Use AES in Block cipher mode with our key and IV aes = AES.new(key, AES.MODE_CBC, INITIALIZATION_VECTOR) message = decodestring(encrypted_data) decrypted_data = aes.decrypt(message) decrypted_data = decrypted_data[:decrypted_data.rindex("}")+1] return loads(decrypted_data) def encode(d): aes = AES.new(key, AES.MODE_CBC, INITIALIZATION_VECTOR) message = dumps(d, separators=(',',':')) pad = int(ceil(len(message)/16))*16-len(message) pad = chr(pad) * pad message += pad encrypted_data = aes.encrypt(message) return encodestring(encrypted_data).translate(None,"\n") encrypted_data = stdin.readline() decrypted_data = decode(encrypted_data) #decrypted_data["vault"]["storage"]["resources"]["Nuka"] = 999999.00 # caps decrypted_data["vault"]["storage"]["resources"]["NukaColaQuantum"] = 9999.00 encrypted_data = encode(decrypted_data) stdout.write(encrypted_data)