def fix_cxi(filename, xorpad_file):
f = open(filename, "r+b")
# get exheader
f.seek(0x200)
exheader = bytearray(f.read(0x400))
# decrypt exheader when needed
if not xorpad_file is None:
xorpad = bytearray(open(xorpad_file, "rb").read(0x400))
exheader = xor(exheader, xorpad)
# set sd flag in exheader
exh_flags = exheader[0xD]
exh_flags = exh_flags | 2
exheader = exheader[:0xD] + struct.pack("B", exh_flags) + exheader[0xE:]
# reset the hash
f.seek(0x160)
f.write(sha256(exheader))
# write back modified exheader
f.seek(0x200)
# return save data size to be used on make_cia
save_data_size = struct.unpack("<Q", exheader[0x1C0:0x1C8])[0] / 1024
# reencrypt exheader when needed
if not xorpad_file is None:
exheader = xor(exheader, xorpad)
f.write(exheader)
return save_data_size
评论列表
文章目录