ctr_cci: improve encrypt and decrypt

This commit is contained in:
xprism1 2024-09-08 01:12:23 +08:00
parent 31ab2eed7a
commit 2a34e6e4ad

View File

@ -213,17 +213,32 @@ class CCIReader:
sys.stdout = open(os.devnull, 'w') # Block print statements
for name, info in self.files.items():
if name.endswith('ncch'):
h = open(name, 'rb')
h.seek(0x100)
if h.read(4) == b'NCCH':
ncch = NCCHReader(name, dev=self.dev)
ncch.decrypt()
g = open('decrypted.ncch', 'rb')
else:
g = open(name, 'rb')
for data in read_chunks(g, info['size']):
f.write(data)
g.close()
h.close()
sys.stdout = sys.__stdout__
f.write(b'\xff' * (os.path.getsize(self.file) - f.tell()))
curr = f.tell()
padding_size = os.path.getsize(self.file) - curr
g = open(self.file, 'rb')
g.seek(curr)
for data in read_chunks(g, padding_size):
f.write(data)
f.close()
g.close()
for name, info in self.files.items():
os.remove(name)
if os.path.isfile('decrypted.ncch'):
os.remove('decrypted.ncch')
print(f'Decrypted to decrypted.3ds')
@ -269,6 +284,9 @@ class CCIReader:
sys.stdout = open(os.devnull, 'w') # Block print statements
for name, info in self.files.items():
if name.endswith('ncch'):
h = open(name, 'rb')
h.seek(0x100)
if h.read(4) == b'NCCH':
ncch = NCCHReader(name, dev=self.dev)
ncch.extract()
ncch_header = 'ncch_header.bin'
@ -301,17 +319,29 @@ class CCIReader:
NCCHBuilder(ncch_header=ncch_header, exheader=exheader, logo=logo, plain=plain, exefs=exefs, romfs=romfs, crypto='Secure1', dev=self.dev)
g = open('new.ncch', 'rb')
else:
g = open(name, 'rb')
for data in read_chunks(g, info['size']):
f.write(data)
g.close()
h.close()
for i in os.listdir('.'):
if i in ['ncch_header.bin', 'exheader.bin', 'logo.bin', 'plain.bin', 'exefs.bin', 'romfs.bin']:
os.remove(i)
sys.stdout = sys.__stdout__
f.write(b'\xff' * (os.path.getsize(self.file) - f.tell()))
curr = f.tell()
padding_size = os.path.getsize(self.file) - curr
g = open(self.file, 'rb')
g.seek(curr)
for data in read_chunks(g, padding_size):
f.write(data)
f.close()
g.close()
for name, info in self.files.items():
os.remove(name)
if os.path.isfile('new.ncch'):
os.remove('new.ncch')
print(f'Encrypted to encrypted.3ds')