66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import argparse
|
||
|
import base64
|
||
|
import json
|
||
|
import os
|
||
|
|
||
|
from vinetrimmer.utils.widevine.device import LocalDevice
|
||
|
|
||
|
"""
|
||
|
Code to convert common folder/file structure to a vinetrimmer WVD.
|
||
|
"""
|
||
|
|
||
|
parser = argparse.ArgumentParser(
|
||
|
"JsonWVDtoStructWVD",
|
||
|
description="Simple script to read cdm data from old wvd json and write it into a new WVD struct file."
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-i", "--input",
|
||
|
help="path to wvd json file",
|
||
|
required=False)
|
||
|
parser.add_argument(
|
||
|
"-d", "--dir",
|
||
|
help="path to MULTIPLE wvd json files",
|
||
|
required=False)
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
files = []
|
||
|
if args.dir:
|
||
|
files.extend(os.listdir(args.dir))
|
||
|
elif args.input:
|
||
|
files.append(args.input)
|
||
|
|
||
|
for file in files:
|
||
|
if not file.lower().endswith(".wvd") or os.path.splitext(file)[0].endswith(".struct"):
|
||
|
continue
|
||
|
|
||
|
if not os.path.isfile(file):
|
||
|
raise ValueError("Not a file or doesn't exist...")
|
||
|
|
||
|
print(f"Generating wvd struct file for {file}...")
|
||
|
|
||
|
with open(file, encoding="utf-8") as fd:
|
||
|
wvd_json = json.load(fd)
|
||
|
|
||
|
device = LocalDevice(
|
||
|
type=LocalDevice.Types[wvd_json["device_type"].upper()],
|
||
|
security_level=wvd_json["security_level"],
|
||
|
flags={
|
||
|
"send_key_control_nonce": wvd_json["send_key_control_nonce"]
|
||
|
},
|
||
|
private_key=base64.b64decode(wvd_json["device_private_key"]),
|
||
|
client_id=base64.b64decode(wvd_json["device_client_id_blob"]),
|
||
|
vmp=base64.b64decode(wvd_json["device_vmp_blob"]) if wvd_json.get("device_vmp_blob") else None
|
||
|
)
|
||
|
|
||
|
out = os.path.join(os.path.dirname(file), "structs", os.path.basename(file))
|
||
|
os.makedirs(os.path.dirname(out), exist_ok=True)
|
||
|
|
||
|
device.dump(out)
|
||
|
|
||
|
print(device)
|
||
|
print(f"Done: {file}")
|
||
|
|
||
|
print("Done")
|