Skip to main content

pyplayready

All of this is already public. Almost 100% of this code has been derived from the mspr_toolkit.

Installation

pip install pyplayready

Run pyplayready --help to view available cli functions

Devices

Run the command below to create a Playready Device (.prd) from a bgroupcert.dat and zgpriv.dat:

pyplayready create-device -c bgroupcert.dat -k zgpriv.dat

Test a playready device:

pyplayready test DEVICE.prd

Export a provisioned device to its raw .dat files

pyplayready export-device DEVICE.prd

Usage

An example code snippet:

from pyplayready.cdm import Cdm
from pyplayready.device import Device
from pyplayready.system.pssh import PSSH
from pyplayready.misc.revocation_list import RevocationList

import requests

device = Device.load("C:/Path/To/A/Device.prd")
cdm = Cdm.from_device(device)
session_id = cdm.open()

pssh = PSSH(
    "AAADfHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA1xcAwAAAQABAFIDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AH"
    "QAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABh"
    "AHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUg"
    "BPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQA"
    "UgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA0AFIAcABsAGIAKwBUAGIATgBFAFMAOAB0AE"
    "cAawBOAEYAVwBUAEUASABBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AEsATABqADMAUQB6AFEAUAAvAE4AQQA9ADwALwBD"
    "AEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAHAAcgBvAGYAZgBpAGMAaQBhAGwAcwBpAHQAZQAuAGsAZQ"
    "B5AGQAZQBsAGkAdgBlAHIAeQAuAG0AZQBkAGkAYQBzAGUAcgB2AGkAYwBlAHMALgB3AGkAbgBkAG8AdwBzAC4AbgBlAHQALwBQAGwAYQB5AFIA"
    "ZQBhAGQAeQAvADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwASQBJAFMAXwBEAFIATQBfAF"
    "YARQBSAFMASQBPAE4APgA4AC4AMQAuADIAMwAwADQALgAzADEAPAAvAEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4APAAvAEMAVQBT"
    "AFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA=="
)

request = cdm.get_license_challenge(session_id, pssh.wrm_headers[0], rev_lists=RevocationList.SupportedListIds)

response = requests.post(
    url="https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(persist:false,sl:2000)",
    headers={
        'Content-Type': 'text/xml; charset=UTF-8',
    },
    data=request,
)

cdm.parse_license(session_id, response.text)

for key in cdm.get_keys(session_id):
    print(f"{key.key_id.hex}:{key.key.hex()}")

cdm.close(session_id)

Disclaimer

  1. This project requires a valid Microsoft Certificate and Group Key, which are not provided by this project.
  2. Public test provisions are available and provided by Microsoft to use for testing projects such as this one.
  3. This project does not condone piracy or any action against the terms of the DRM systems.
  4. All efforts in this project have been the result of Reverse-Engineering, Publicly available research, and Trial & Error.
  5. Do not use this program to decrypt or access any content for which you do not have the legal rights or explicit permission.
  6. Unauthorized decryption or distribution of copyrighted materials is a violation of applicable laws and intellectual property rights.
  7. This tool must not be used for any illegal activities, including but not limited to piracy, circumventing digital rights management (DRM), or unauthorized access to protected content.
  8. The developers, contributors, and maintainers of this program are not responsible for any misuse or illegal activities performed using this software.
  9. By using this program, you agree to comply with all applicable laws and regulations governing digital rights and copyright protections.

Credits

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyplayready-0.8.5.tar.gz (67.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyplayready-0.8.5-py3-none-any.whl (78.0 kB view details)

Uploaded Python 3

File details

Details for the file pyplayready-0.8.5.tar.gz.

File metadata

  • Download URL: pyplayready-0.8.5.tar.gz
  • Upload date:
  • Size: 67.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for pyplayready-0.8.5.tar.gz
Algorithm Hash digest
SHA256 138bc6271e52ab664ae6f47cb3cbdf7ab5b26a0440a3ab5d1a5cb3f06019b6f9
MD5 9d234bbbded23e829f9a87e387995fa8
BLAKE2b-256 cd5a8e3edc616f4342350526299ff00dd99dc914978c871efce77f0e73f846e1

See more details on using hashes here.

File details

Details for the file pyplayready-0.8.5-py3-none-any.whl.

File metadata

  • Download URL: pyplayready-0.8.5-py3-none-any.whl
  • Upload date:
  • Size: 78.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for pyplayready-0.8.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f9437e6711d35d68799f086f1b33909177c635d4a036976d464dfebe6008c7ab
MD5 cbe5440ab8957a921ce0137264666799
BLAKE2b-256 62b79cd1ba51df6e77ee5cb775aee63d44ee36aaaf6ebe524bf67831725742e6

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.8.5 This release

2 files

0.8.4

2 files

0.8.3

2 files

0.8.2

2 files

0.8.1

2 files

0.6.3

2 files

0.6.0

2 files

0.5.0

2 files

0.4.5

2 files

0.4.4

2 files

0.4.2

2 files

0.4.1

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.3

2 files

0.3.1

2 files

0.1.0

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page