Untitled
unknown
plain_text
8 days ago
4.4 kB
4
Indexable
import os import sys import json import requests from argparse import ArgumentParser try: from utils import crypto, data from utils.logger import Logger from utils.request import Request except ImportError: from realme_ota.utils import crypto, data from realme_ota.utils.request import Request from realme_ota.utils.logger import Logger def main(): parser = ArgumentParser() # Verbosity verbosity = parser.add_mutually_exclusive_group() verbosity.add_argument("-v", "--verbosity", type=int, choices=range(0, 6), default=4, help="Set the verbosity level (0-5). Default: 4.") verbosity.add_argument("-s", "--silent", action='store_true', help="Enable silent output.") # Positional arguments parser.add_argument("product_model", type=str, help="Product Model (ro.product.name).") parser.add_argument("ota_version", help="OTA Version (ro.build.version.ota).") parser.add_argument("rui_version", type=int, choices=[1, 2, 3, 4, 5], help="RealmeUI Version (ro.build.version.realmeui).") parser.add_argument("nv_identifier", type=str, nargs='?', help="NV identifier (ro.build.oplus_nv_id) (if none, provide 0 or omit).") # Request attributes req_opts = parser.add_argument_group("request options") req_opts.add_argument("-r", "--region", type=int, choices=[0, 1, 2, 3], default=0, help="Custom region (GL=0, CN=1, IN=2, EU=3).") req_opts.add_argument("-i", "--imei", type=str, nargs='+', help="Specify one or two IMEIs for the request.") req_opts.add_argument("-b", "--beta", action='store_true', help="Try to get a test version.") # Output settings out_opts = parser.add_argument_group("output options") out_opts.add_argument("-d", "--dump", type=str, help="Save request response into a file.") args = parser.parse_args() logger = Logger(level=0 if args.silent else args.verbosity) request = Request( req_version=1 if args.rui_version == 1 else 2, model=args.product_model, ota_version=args.ota_version, rui_version=args.rui_version, nv_identifier=args.nv_identifier, region=args.region, imei0=args.imei[0] if args.imei else None, imei1=args.imei[1] if args.imei and len(args.imei) > 1 else None, beta=args.beta ) logger.log(f"Loading payload for {args.product_model} (RealmeUI V{args.rui_version})") try: request.set_vars() req_body, req_hdrs, plain_body = request.set_body_headers() except Exception as e: logger.die(f"Error setting request variables: {e}", 2) logger.log(f"Request headers: {json.dumps(req_hdrs, indent=4)}", 5) logger.log(f"Request body: {json.dumps(plain_body, indent=4)}", 5) logger.log("Waiting for the endpoint response...") try: response = requests.post(request.url, data=request.body, headers=request.headers, timeout=30) except Exception as e: logger.die(f"Request error: {e}", 1) try: request.validate_response(response) except Exception as e: logger.die(f"Response validation error: {e}", 1) logger.log("Processing response data...") try: json_response = json.loads(response.content) content = json.loads(request.decrypt(json_response[request.resp_key])) except Exception as e: logger.die(f"Response parsing error: {e}", 2) # Save processed data into a variable server_data = { "model": content.get("aid", "Unknown"), "version": content.get("versionName", "Unknown"), "description_url": content.get("description", {}).get("url", "Unknown"), "update_url": content.get("components", [{}])[0].get("componentPackets", {}).get("url", "Unknown") } # Save to file if requested if args.dump: try: with open(args.dump, "w", encoding="utf-8") as file: json.dump(server_data, file, indent=4, ensure_ascii=False) logger.log(f"Response saved to {args.dump}") except Exception as e: logger.die(f"File writing error: {e}", 1) print(json.dumps(server_data, indent=4, ensure_ascii=False)) if __name__ == "__main__": main()
Editor is loading...
Leave a Comment