69 lines
2.8 KiB
Python
Executable file
69 lines
2.8 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import sys
|
|
from os import path
|
|
|
|
from adx import adx
|
|
from utage import utage
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Unpack and process XDU data")
|
|
|
|
subparsers = parser.add_subparsers(metavar="<command>", title="subcommands", dest="command")
|
|
|
|
# adx subcommand
|
|
parser_adx = subparsers.add_parser("adx", help="ADX stuff")
|
|
parser_adx_subparsers = parser_adx.add_subparsers(metavar="<command>", title="subcommands", dest="subcommand")
|
|
# adx loop
|
|
parser_adx_loop = parser_adx_subparsers.add_parser("loop", help="Extract loop data")
|
|
parser_adx_loop.add_argument("--output", "-o",
|
|
help="JSON output file for loop data",
|
|
type=str, dest="JSON_OUT")
|
|
parser_adx_loop.add_argument("ADX_DIR",
|
|
help="Input directory containing ADX files",
|
|
type=str)
|
|
|
|
# utage subcommand
|
|
parser_utage = subparsers.add_parser("utage", help="UTAGE stuff")
|
|
parser_utage_subparsers = parser_utage.add_subparsers(metavar="<command>", title="subcommand", dest="subcommand")
|
|
# utage crypt
|
|
parser_utage_crypt = parser_utage_subparsers.add_parser("crypt", help="Encrypt/decrypt utage tsv files")
|
|
parser_utage_crypt.add_argument("--encrypt", "-e",
|
|
help="Encrypt (default: Decrypt)",
|
|
dest="encrypt", action="store_true", default=False)
|
|
parser_utage_crypt.add_argument("--no-compression", "-n",
|
|
help="Do not compress/decompress. Only applies to tsv, png will never be compressed",
|
|
dest="ncomp", action="store_true", default=False)
|
|
parser_utage_crypt.add_argument("--key", "-k",
|
|
help="Encryption key (Default: SampleSecretKey)",
|
|
dest="key", type=str, default="SampleSecretKey")
|
|
parser_utage_crypt.add_argument("--hex", "-x",
|
|
help="KEY is hexadecimal (Default: False)",
|
|
dest="hex", action="store_true", default=False)
|
|
parser_utage_crypt.add_argument("TARGET",
|
|
help="Input", type=str)
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == "adx":
|
|
if args.subcommand == "loop":
|
|
adx.extract_loop_data_from_dir(args.ADX_DIR, args.JSON_OUT)
|
|
elif args.command == "utage":
|
|
if args.subcommand == "crypt":
|
|
if not args.hex:
|
|
key = bytearray(args.key, "utf-8")
|
|
else:
|
|
key = bytearray.fromhex(args.key)
|
|
if path.isfile(args.TARGET):
|
|
utage.crypt_file(args.TARGET, key, args.encrypt, args.ncomp)
|
|
elif path.isdir(args.TARGET):
|
|
utage.crypt_dir(args.TARGET, key, args.encrypt, args.ncomp)
|
|
else:
|
|
raise FileNotFoundError("Could not find {}".format(args.TARGET))
|
|
|
|
return 0
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
sys.exit()
|