utils: cdn2cia: don't include certchain in tmd/tik

This commit is contained in:
xprism1 2024-02-04 01:23:02 +08:00
parent c190c53a49
commit 7a9928b6e7
2 changed files with 18 additions and 6 deletions

View File

@ -56,7 +56,18 @@ class CDNReader:
if self.titlekey == b'': if self.titlekey == b'':
raise Exception('Could not generate valid titlekey') raise Exception('Could not generate valid titlekey')
def decrypt(self): def extract(self):
with open(self.tmd + '.extracted', 'wb') as f: # Add .extracted to filename to avoid conflict with existing filename
with open(self.tmd, 'rb') as g:
tmd_data = g.read()
f.write(tmd_data[:-1792])
if self.tik != '':
with open(self.tik + '.extracted', 'wb') as f:
with open(self.tik, 'rb') as g:
tik_data = g.read()
f.write(tik_data[:-1792])
for i in self.content_files: for i in self.content_files:
for name, info in self.tmd_read.files.items(): for name, info in self.tmd_read.files.items():
if name.split('.')[1] == i: # CDN files are named as contentID if name.split('.')[1] == i: # CDN files are named as contentID

View File

@ -612,22 +612,23 @@ def cdn2cia(path, out='', title_ver='', cdn_dev=0, cia_dev=0):
if out == '': if out == '':
out = f'{name}.{t.hdr.title_ver}.cia' out = f'{name}.{t.hdr.title_ver}.cia'
cdn = CDNReader(content_files=content_files, tmd=tmd, dev=cdn_dev) cdn = CDNReader(content_files=content_files, tmd=tmd, tik=tik, dev=cdn_dev)
cdn.decrypt() cdn.extract()
cf = [i for i in os.listdir('.') if i.endswith('.ncch') or i.endswith('.nds')] cf = [i for i in os.listdir('.') if i.endswith('.ncch') or i.endswith('.nds')]
tmd += '.extracted'
if tik == '': if tik == '':
tikBuilder(titleID=t.titleID, title_ver=t.hdr.title_ver, titlekey=hex(readbe(cdn.titlekey))[2:].zfill(32), regen_sig=regen_sig, out='tik') tikBuilder(titleID=t.titleID, title_ver=t.hdr.title_ver, titlekey=hex(readbe(cdn.titlekey))[2:].zfill(32), regen_sig=regen_sig, out='tik')
tik = 'tik' tik = 'tik'
else:
tik += '.extracted'
meta = 1 meta = 1
if t.titleID[3:5] == '48': if t.titleID[3:5] == '48':
meta = 0 meta = 0
CIABuilder(content_files=cf, tik=tik, tmd=tmd, meta=meta, dev=cia_dev, out='tmp.cia') CIABuilder(content_files=cf, tik=tik, tmd=tmd, meta=meta, dev=cia_dev, out='tmp.cia')
for i in cf: for i in cf + [tmd, tik]:
os.remove(i) os.remove(i)
if os.path.isfile('tik'):
os.remove('tik')
shutil.move('tmp.cia', '../tmp.cia') shutil.move('tmp.cia', '../tmp.cia')
os.chdir('..') os.chdir('..')