mirror of
				https://github.com/NinjaCheetah/WiiPy.git
				synced 2025-11-04 00:16:19 -05:00 
			
		
		
		
	Add argument to set content to non-shared when patching IOS
Also added TMD downloader to the NUS subcommand
This commit is contained in:
		
							parent
							
								
									b183336d95
								
							
						
					
					
						commit
						26b49ddff6
					
				@ -105,6 +105,12 @@ def handle_iospatch(args):
 | 
			
		||||
                         " compatible with this IOS.")
 | 
			
		||||
 | 
			
		||||
    if patch_count > 0 or args.version is not None or args.slot is not None:
 | 
			
		||||
        # Set patched content to non-shared if that argument was passed.
 | 
			
		||||
        if args.no_shared is not None:
 | 
			
		||||
            ios_patcher.title.content.content_records[ios_patcher.es_module_index].content_type = 1
 | 
			
		||||
            if ios_patcher.dip_module_index != -1:
 | 
			
		||||
                ios_patcher.title.content.content_records[ios_patcher.dip_module_index].content_type = 1
 | 
			
		||||
 | 
			
		||||
        ios_patcher.title.fakesign()  # Signature is broken anyway, so fakesign for maximum installation openings
 | 
			
		||||
        if args.output is not None:
 | 
			
		||||
            output_path = pathlib.Path(args.output)
 | 
			
		||||
 | 
			
		||||
@ -112,10 +112,7 @@ def handle_nus_title(args):
 | 
			
		||||
                print(" - Decrypting content " + str(content + 1) + " of " + str(len(title.tmd.content_records)) +
 | 
			
		||||
                      " (Content ID: " + str(title.tmd.content_records[content].content_id) + ")...")
 | 
			
		||||
                dec_content = title.get_content_by_index(content)
 | 
			
		||||
                content_file_name = hex(title.tmd.content_records[content].content_id)[2:]
 | 
			
		||||
                while len(content_file_name) < 8:
 | 
			
		||||
                    content_file_name = "0" + content_file_name
 | 
			
		||||
                content_file_name = content_file_name + ".app"
 | 
			
		||||
                content_file_name = f"{title.tmd.content_records[content].content_id:08X}".lower() + ".app"
 | 
			
		||||
                dec_content_out = open(output_dir.joinpath(content_file_name), "wb")
 | 
			
		||||
                dec_content_out.write(dec_content)
 | 
			
		||||
                dec_content_out.close()
 | 
			
		||||
@ -159,9 +156,7 @@ def handle_nus_content(args):
 | 
			
		||||
 | 
			
		||||
    # Use the supplied output path if one was specified, otherwise generate one using the Content ID.
 | 
			
		||||
    if out is None:
 | 
			
		||||
        content_file_name = hex(content_id)[2:]
 | 
			
		||||
        while len(content_file_name) < 8:
 | 
			
		||||
            content_file_name = "0" + content_file_name
 | 
			
		||||
        content_file_name = f"{content_id:08X}".lower()
 | 
			
		||||
        output_path = pathlib.Path(content_file_name)
 | 
			
		||||
    else:
 | 
			
		||||
        output_path = pathlib.Path(out)
 | 
			
		||||
@ -223,3 +218,37 @@ def handle_nus_content(args):
 | 
			
		||||
        file.close()
 | 
			
		||||
 | 
			
		||||
    print("Downloaded content with Content ID \"" + cid + "\"!")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def handle_nus_tmd(args):
 | 
			
		||||
    tid = args.tid
 | 
			
		||||
    version = args.version
 | 
			
		||||
    out = args.output
 | 
			
		||||
 | 
			
		||||
    # Check if --version was passed, because it'll be None if it wasn't.
 | 
			
		||||
    if args.version is not None:
 | 
			
		||||
        try:
 | 
			
		||||
            title_version = int(args.version)
 | 
			
		||||
        except ValueError:
 | 
			
		||||
            print("Enter a valid integer for the Title Version.")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
    # Use the supplied output path if one was specified, otherwise generate one using the Title ID.
 | 
			
		||||
    if out is None:
 | 
			
		||||
        output_path = pathlib.Path(tid + ".tmd")
 | 
			
		||||
    else:
 | 
			
		||||
        output_path = pathlib.Path(out)
 | 
			
		||||
 | 
			
		||||
    # Try to download the TMD, and catch the ValueError libWiiPy will throw if it can't be found.
 | 
			
		||||
    print("Downloading TMD for title " + tid + "...")
 | 
			
		||||
    try:
 | 
			
		||||
        tmd_data = libWiiPy.title.download_tmd(tid, version)
 | 
			
		||||
    except ValueError:
 | 
			
		||||
        print("The Title ID or version you specified could not be found!")
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    file = open(output_path, "wb")
 | 
			
		||||
    file.write(tmd_data)
 | 
			
		||||
    file.close()
 | 
			
		||||
 | 
			
		||||
    print("Downloaded TMD for title \"" + tid + "\"!")
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								wiipy.py
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								wiipy.py
									
									
									
									
									
								
							@ -76,6 +76,8 @@ if __name__ == "__main__":
 | 
			
		||||
    iospatch_parser.add_argument("-s", "--slot", metavar="SLOT", type=int,
 | 
			
		||||
                                 help="set the slot that this IOS will install to")
 | 
			
		||||
    iospatch_parser.add_argument("-a", "--all", action="store_true", help="apply all patches (overrides other options)")
 | 
			
		||||
    iospatch_parser.add_argument("-ns", "--no-shared", action="store_true",
 | 
			
		||||
                                 help="set all patched content to be non-shared")
 | 
			
		||||
 | 
			
		||||
    # Argument parser for the NUS subcommand.
 | 
			
		||||
    nus_parser = subparsers.add_parser("nus", help="download data from the NUS",
 | 
			
		||||
@ -108,6 +110,14 @@ if __name__ == "__main__":
 | 
			
		||||
    nus_content_parser.add_argument("-o", "--output", metavar="OUT", type=str,
 | 
			
		||||
                                    help="path to download the content to (optional)")
 | 
			
		||||
    nus_content_parser.add_argument("-d", "--decrypt", action="store_true", help="decrypt this content")
 | 
			
		||||
    # TMD NUS subcommand.
 | 
			
		||||
    nus_tmd_parser = nus_subparsers.add_parser("tmd", help="download a tmd from the NUS",
 | 
			
		||||
                                               description="download a tmd from the NUS")
 | 
			
		||||
    nus_tmd_parser.set_defaults(func=handle_nus_tmd)
 | 
			
		||||
    nus_tmd_parser.add_argument("tid", metavar="TID", type=str, help="Title ID the TMD is for")
 | 
			
		||||
    nus_tmd_parser.add_argument("-v", "--version", metavar="VERSION", type=int, help="version of the TMD to download")
 | 
			
		||||
    nus_tmd_parser.add_argument("-o", "--output", metavar="OUT", type=str,
 | 
			
		||||
                                help="path to download the TMD to (optional)")
 | 
			
		||||
 | 
			
		||||
    # Argument parser for the U8 subcommand.
 | 
			
		||||
    u8_parser = subparsers.add_parser("u8", help="pack/unpack a U8 archive",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user