Advertisement
thongvsgame

zte_f608.py

Apr 23rd, 2022
2,102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.22 KB | None | 0 0
  1. import struct
  2. import sys
  3. import argparse
  4.  
  5. import zcu
  6. from zcu import constants
  7.  
  8. from zcu.xcryptors import T4Xcryptor
  9.  
  10. def main():
  11.     parser = argparse.ArgumentParser(description="Decode config.bin from ZTE Routers",
  12.                                      formatter_class=argparse.RawDescriptionHelpFormatter)
  13.     parser.add_argument("infile", type=argparse.FileType("rb"),
  14.                         help="Encoded configuration file e.g. config.bin")
  15.     parser.add_argument("outfile", type=argparse.FileType("wb"),
  16.                         help="Output file e.g. config.xml")
  17.     parser.add_argument("--key-prefix", type=str, default="",
  18.                         help="Override key prefix for Type 6 devices")
  19.     parser.add_argument("--iv-prefix", type=str, default="",
  20.                         help="Override iv prefix for Type 6 devices")
  21.     args = parser.parse_args()
  22.  
  23.     infile = args.infile
  24.     outfile = args.outfile
  25.    
  26.     header_magic = struct.unpack('>4I', infile.read(16))
  27.     if header_magic == constants.ZTE_MAGIC:
  28.         header = struct.unpack('>28I', infile.read(112))
  29.     else:
  30.         infile.seek(0)
  31.  
  32.     signature = zcu.zte.read_signature(infile).decode()
  33.     print("Signature: %s" % signature)
  34.     payload_type = zcu.zte.read_payload_type(infile)
  35.  
  36.     decryptor = T4Xcryptor("")
  37.     if args.key_prefix:
  38.         decryptor.set_key_prefix(args.key_prefix)
  39.     if args.iv_prefix:
  40.         decryptor.set_iv_prefix(args.iv_prefix)
  41.     decryptor.set_key("")
  42.  
  43.     start_pos = infile.tell()
  44.     if payload_type in (2, 4, 6):
  45.         try:
  46.             infile_dec = decryptor.decrypt(infile)
  47.  
  48.             # try again
  49.             infile_dec.seek(0)
  50.             if zcu.zte.read_payload_type(infile_dec, raise_on_error=False) is None:
  51.                 error("Malformed decrypted payload, likely you used the wrong key!")
  52.                 return
  53.             infile = infile_dec
  54.         except ValueError as ex:
  55.             error("Failed to decrypt payload.")
  56.             return
  57.     else:
  58.         pass
  59.  
  60.     res, _ = zcu.compression.decompress(infile)
  61.     outfile.write(res.read())
  62.     print("Successfully decoded!")
  63.  
  64.  
  65. def error(err):
  66.     print(err, file=sys.stderr)
  67.  
  68.  
  69. if __name__ == "__main__":
  70.     main()
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement