csplayready 0.5.5
dotnet add package csplayready --version 0.5.5
NuGet\Install-Package csplayready -Version 0.5.5
<PackageReference Include="csplayready" Version="0.5.5" />
paket add csplayready --version 0.5.5
#r "nuget: csplayready, 0.5.5"
// Install csplayready as a Cake Addin #addin nuget:?package=csplayready&version=0.5.5 // Install csplayready as a Cake Tool #tool nuget:?package=csplayready&version=0.5.5
csplayready
C# implementation of Microsoft's Playready DRM CDM (Content Decryption Module)
Installation
dotnet add package csplayready
Run csplayready --help
to view available cli functions
Devices
Run the command below to create a Playready Device (.prd) from a bgroupcert.dat
and zgpriv.dat
:
csplayready create-device -c bgroupcert.dat -k zgpriv.dat
Test a playready device:
csplayready test DEVICE.prd
[!IMPORTANT]
There currently isn't a proper method of extracting Group Certificates/Keys. They can be found inside older Samsung phones/Smart TVs, Windows DLLs and set-top-boxes in encrypted form.
Export a provisioned device to its raw .dat files
csplayready export-device DEVICE.prd
Usage
An example code snippet:
var device = Device.Load("C:/Path/To/A/Device.prd");
var cdm = Cdm.FromDevice(device);
var sessionId = cdm.Open();
var pssh = new Pssh(
"AAADfHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA1xcAwAAAQABAFIDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4A" +
"cwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAA" +
"NwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIA" +
"PgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4A" +
"PABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQA" +
"PgA0AFIAcABsAGIAKwBUAGIATgBFAFMAOAB0AEcAawBOAEYAVwBUAEUASABBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUA" +
"TQA+AEsATABqADMAUQB6AFEAUAAvAE4AQQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoA" +
"LwAvAHAAcgBvAGYAZgBpAGMAaQBhAGwAcwBpAHQAZQAuAGsAZQB5AGQAZQBsAGkAdgBlAHIAeQAuAG0AZQBkAGkAYQBzAGUAcgB2AGkA" +
"YwBlAHMALgB3AGkAbgBkAG8AdwBzAC4AbgBlAHQALwBQAGwAYQB5AFIAZQBhAGQAeQAvADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMA" +
"VABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA4AC4AMQAuADIAMwAwADQA" +
"LgAzADEAPAAvAEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMA" +
"PgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==");
var challenge = cdm.GetLicenseChallenge(sessionId, pssh.WrmHeaders.First());
using HttpClient client = new HttpClient();
var content = new StringContent(challenge, Encoding.UTF8, "text/xml");
const string server = "https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(persist:false,sl:2000)";
HttpResponseMessage response = client.PostAsync(server, content).Result;
var responseBody = response.Content.ReadAsStringAsync().Result;
cdm.ParseLicense(sessionId, responseBody);
foreach (var key in cdm.GetKeys(sessionId))
Console.WriteLine($"{key.KeyId.ToHex()}:{key.RawKey.ToHex()}");
cdm.Close(sessionId);
Disclaimer
- This project requires a valid Microsoft Certificate and Group Key, which are not provided by this project.
- Public test provisions are available and provided by Microsoft to use for testing projects such as this one.
- This project does not condone piracy or any action against the terms of the DRM systems.
- All efforts in this project have been the result of Reverse-Engineering, Publicly available research, and Trial & Error.
- Do not use this program to decrypt or access any content for which you do not have the legal rights or explicit permission.
- Unauthorized decryption or distribution of copyrighted materials is a violation of applicable laws and intellectual property rights.
- 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.
- The developers, contributors, and maintainers of this program are not responsible for any misuse or illegal activities performed using this software.
- By using this program, you agree to comply with all applicable laws and regulations governing digital rights and copyright protections.
Credits
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net9.0
- BinaryStruct (>= 0.0.1)
- BouncyCastle.Cryptography (>= 2.5.0)
- Microsoft.Extensions.Logging (>= 9.0.0)
- Microsoft.Extensions.Logging.Console (>= 9.0.0)
- System.CommandLine (>= 2.0.0-beta4.22272.1)
- Vecc.YamlDotNet.Analyzers.StaticGenerator (>= 16.3.0)
- Watson (>= 6.3.5)
- YamlDotNet (>= 16.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.