Skip to content

Commit a2364f1

Browse files
committed
fixes for multicontent shitty xci
1 parent 4c9b084 commit a2364f1

File tree

5 files changed

+23
-12
lines changed

5 files changed

+23
-12
lines changed

py/Fs/Nca.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,18 @@ def open(self, file = None, mode = 'rb', cryptoType = -1, cryptoKey = -1, crypto
122122
key = self.keyBlock[offset:offset+0x10]
123123
#Print.info('dec %d: %s' % (i, hx(key)))
124124
self.keys.append(key)
125+
126+
self.keyStatus = True
125127

126128
if self.hasTitleRights():
127129
titleRightsTitleId = self.rightsId.decode()[0:16].upper()
128130

129131
if titleRightsTitleId in Titles.keys() and Titles.get(titleRightsTitleId).key:
130132
self.titleKeyDec = Keys.decryptTitleKey(uhx(Titles.get(titleRightsTitleId).key), self.masterKey)
131133
else:
132-
Print.info('could not find title key %s!' % titleRightsTitleId)
134+
# Print.info('could not find title key %s!' % titleRightsTitleId)
135+
self.keyStatus = False
136+
133137
else:
134138
self.titleKeyDec = self.key()
135139

@@ -210,14 +214,15 @@ def __getitem__(self, key):
210214

211215
def open(self, file = None, mode = 'rb', cryptoType = -1, cryptoKey = -1, cryptoCounter = -1):
212216
super(Nca, self).open(file, mode, cryptoType, cryptoKey, cryptoCounter)
213-
214217
self.header = NcaHeader()
215218
self.partition(0x0, 0xC00, self.header, Fs.Type.Crypto.XTS, uhx(Keys.get('header_key')))
216219
#Print.info('partition complete, seeking')
217220
self.header.seek(0x400)
218221
#Print.info('reading')
219222
#Hex.dump(self.header.read(0x200))
220223
#sys.exit()
224+
if self.header.keyStatus != True:
225+
return
221226

222227
for i in range(4):
223228
hdr = self.header.read(0x200)

py/lib/Verify.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,16 @@ def verify_decrypt(nspx, vmsg = None):
120120
if nspf._path == 'secure':
121121
temp_hfs = nspf
122122
isCard = True
123-
else:
124-
for file in nspf:
125-
tvmsg = ''
126-
tvmsg += f'\n:0000000000000000 - Content.UNKNOWN'
127-
tvmsg += f'\n> {file._path}\t -> SKIPPED'
128-
tvmsg += f'\n* Partition: {nspf._path}'
129-
print(tvmsg)
130-
vmsg.append(tvmsg)
123+
# elif len(nspf.files) > 0:
124+
# tvmsg = ''
125+
# tvmsg += f'\n:0000000000000000 - Content.UNKNOWN'
126+
# for file in nspf:
127+
# tab = '\t'
128+
# if not file._path.endswith('cnmt.nca'):
129+
# tab += '\t'
130+
# tvmsg += f'\n> {nspf._path}/{file._path}{tab} -> SKIPPED'
131+
# print(tvmsg)
132+
# vmsg.append(tvmsg)
131133

132134
for file in temp_hfs:
133135
if file._path.endswith(('.nca','.ncz','.tik')):

py/ns_extract_hashes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from binascii import hexlify as hx, unhexlify as uhx
2+
13
import os
24
import sys
35

py/ns_extract_meta.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def scan_file():
5151

5252
titleType = FsTools.parse_cnmt_type_n(hx(Cnmt.titleType.to_bytes(byteorder = 'big')))
5353

54-
print(f':: CNMT: {Cnmt._path}\n')
54+
print(f'\n:: CNMT: {Cnmt._path}\n')
5555
print(f'Title ID: {Cnmt.titleId.upper()}')
5656
print(f'Version: {Cnmt.version}')
5757
print(f'Title Type: {titleType}')

py/ns_ticket_info.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ def scan_file():
3232
ipath = os.path.abspath(INCP_PATH)
3333
if not os.path.isfile(ipath):
3434
return
35-
if not ipath.lower().endswith(('.nsp', '.nsz')):
35+
if not ipath.lower().endswith(('.xci', '.xcz', '.nsp', '.nsz')):
3636
return
3737

3838
container = factory(Path(ipath).resolve())
3939
container.open(ipath, 'rb')
40+
if ipath.lower().endswith(('.xci', '.xcz')):
41+
container = container.hfs0['secure']
4042

4143
try:
4244
for nspf in container:

0 commit comments

Comments
 (0)