diff --git a/lib/ctr_cdn.py b/lib/ctr_cdn.py index a7bf4fc..6344e9d 100644 --- a/lib/ctr_cdn.py +++ b/lib/ctr_cdn.py @@ -56,7 +56,18 @@ class CDNReader: if self.titlekey == b'': 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 name, info in self.tmd_read.files.items(): if name.split('.')[1] == i: # CDN files are named as contentID diff --git a/utils.py b/utils.py index e9527db..a2340c4 100644 --- a/utils.py +++ b/utils.py @@ -612,22 +612,23 @@ def cdn2cia(path, out='', title_ver='', cdn_dev=0, cia_dev=0): if out == '': out = f'{name}.{t.hdr.title_ver}.cia' - cdn = CDNReader(content_files=content_files, tmd=tmd, dev=cdn_dev) - cdn.decrypt() + cdn = CDNReader(content_files=content_files, tmd=tmd, tik=tik, dev=cdn_dev) + cdn.extract() cf = [i for i in os.listdir('.') if i.endswith('.ncch') or i.endswith('.nds')] + tmd += '.extracted' 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') tik = 'tik' + else: + tik += '.extracted' meta = 1 if t.titleID[3:5] == '48': meta = 0 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) - if os.path.isfile('tik'): - os.remove('tik') shutil.move('tmp.cia', '../tmp.cia') os.chdir('..')