widevine

package
v1.53.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 24, 2022 License: OSL-3.0 Imports: 15 Imported by: 3

README

Widevine

Theatricality and deception, powerful agents to the uninitiated.

But we are initiated, aren’t we, Bruce?

The Dark Knight Rises (2012)

L1

  • Amzn needs AndroidCDM L1 for 720P/1080P/4K
  • Disney+ needs Android L1 for 1080P+
  • NetFlix I think needs L1 for Main Profile & UHD

Where did proto file come from?

https://github.com/TDenisM/widevinedump/tree/main/pywidevine/cdm/formats

Where to download L3 CDM?

https://github.com/Jnzzi/4464_L3-CDM

How to dump L3 CDM?

First create Android virtual device:

API Level ABI Target
24 x86 Android 7.0 (Google APIs)

Then download tool:

https://github.com/wvdumper/dumper

Then install:

pip install -r requirements.txt

Download Frida server:

https://github.com/frida/frida/releases

Example file:

frida-server-15.1.22-android-x86.xz

Start Frida server:

adb root
adb push frida-server-15.1.17-android-x86 /data/frida-server
adb shell chmod +x /data/frida-server
adb shell /data/frida-server

Then start Android Chrome and visit this page:

https://bitmovin.com/demos/drm

If you receive this prompt:

bitmovin.com wants to play protected content. Your device’s identity will be verified by Google.

Click ALLOW. Then start dumper:

python dump_keys.py

Once you see "Hooks completed", go back to Chrome, scroll down and click LOAD. Result:

2022-05-21 02:10:52 PM - Helpers.Scanner - 49 - INFO - Key pairs saved at
key_dumps\Android Emulator 5554/private_keys/4464/2770936375

Documentation

Index

Constants

This section is empty.

Variables

View Source
var LogLevel format.LogLevel

Functions

This section is empty.

Types

type Container

type Container struct {
	Key  []byte
	Type uint64
}

func (Container) String

func (c Container) String() string

type Containers

type Containers []Container

func (Containers) Content

func (c Containers) Content() *Container

type Module

type Module struct {
	*rsa.PrivateKey
	// contains filtered or unexported fields
}

func NewModule

func NewModule(privateKey, clientID, kID []byte) (*Module, error)

func (Module) Keys

func (m Module) Keys(body io.Reader) (Containers, error)

func (Module) Post

func (m Module) Post(addr string, head http.Header) (Containers, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL