Skip to main content

DRM Tools | Extensions | CDM

Extract Widevine L3 CDM from Android with Dumper

๐Ÿ”“ How to Dump Widevine L3 CDMs from Android Devices โ€“ Full Tutorial

This guide explains how to extract Widevine L3 CDM (Content Decryption Module) files from Android devices using Dumper, an open-source tool based on Frida.

Extracting your own CDM enables testing of DRM-protected content in environments like Pywidevine, offline decryption, or stream analysis tools.

โš ๏ธ For educational and research purposes only. Do not use this method to violate DRM protections or distribution agreements.

๐Ÿงฐ Requirements & Dependencies

You will need:

  • An Android device (with Widevine L3 support)
  • ADB & USB debugging enabled
  • Frida installed on both PC and Android
  • Python 3 (tested with 3.7+)

Clone the Dumper tool from GitHub:

git clone https://github.com/wvdumper/dumper
cd dumper
pip3 install -r requirements.txt

โš™๏ธ Step-by-Step Guide

1๏ธโƒฃ Enable USB Debugging

On your Android device:

  • Go to Settings > About Phone > Tap Build Number 7x to enable Developer Mode
  • Then go to Developer Options and enable USB Debugging

2๏ธโƒฃ Start Frida-Server on Android

  • Download a compatible frida-server binary for your deviceโ€™s architecture
  • Push it to your phone:
adb push frida-server /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server"
  • Start the server:
adb shell "/data/local/tmp/frida-server &"

3๏ธโƒฃ Launch the Dumper

On your PC, run the script while the device is connected:

python3 dump_keys.py

Keep this terminal open!

4๏ธโƒฃ Start DRM Playback on the Device

Go to a DRM-protected video using a browser like Chrome (e.g. Bitmovin demo page) or a streaming app.

DRM Secure Stream Test using HTML5 Video Player | Bitmovin
Test DRM protected streams with Bitmovinโ€™s Video Player using live code | Including MSE Support โœ… and EME Support โœ…

Once the video starts playing, the Dumper script will extract the required Widevine data.


๐Ÿ” Temporary Disablement of L1 to Force L3

Some brands (like Xiaomi) may default to Widevine L1, which is not accessible after bootloader unlock.

To force L3, install the Magisk module:

  • Module name: liboemcrypto-disabler
  • Install via Magisk Manager
  • Reboot

Now, Widevine will fall back to L3 and Dumper will work.


๐Ÿ“ฆ Output Files You Will Get

Extract Widevine L3 CDM

After Dumper completes, youโ€™ll find a new directory called private-keys containing:

  • client_id.bin โ†’ rename to device_client_id_blob
  • private_key.pem โ†’ rename to device_private_key

These files are essential for:


๐Ÿ” What is a Widevine L3 CDM?

A Content Decryption Module (CDM) is the secure core of any DRM system. It handles:

  • License requests
  • Secure key management
  • On-device decryption of media content

Widevine L3 is a software-based CDM level:

  • Runs entirely in user space
  • Does not require Trusted Execution Environment (TEE)
  • Easier to extract & analyze for testing and automation

Once extracted, an L3 CDM can be used to:

  • Request Widevine licenses programmatically
  • Extract decryption keys from license responses
  • Use tools like Pywidevine, widevine_keys, or WKS-KEYS
  • Build Python scripts for auto-updating keys and tokens
  • Test browser extensions that interact with EME APIs
  • Integrate with o11 OTT Streamer or Xaccel-Codec

CDMs are critical components for any DRM decryption workflow. Having your own L3 CDM gives you full control over testing, automation, and research.


๐Ÿ”— Use Your CDM in Pywidevine

Once you have your CDM files, you can use them with Pywidevine to:

  • Send license requests
  • Parse MPD + PSSH
  • Extract decryption keys
  • Decrypt video segments offline

๐Ÿ” Convert Blobs to WVD Format (or vice versa)

If you want to convert your extracted CDM blobs (device_client_id_blob and device_private_key) into a .wvd file (Widevine Device file), or extract blobs from a .wvd, you can use this browser-based tool:

๐Ÿ”ง Convert CDM - PSSH Box Tool

This tool runs fully in the browser using WebAssembly compiled from Pywidevine. It supports both Widevine and PlayReady formats.

โ–ถ๏ธ Modes Supported:

  • Blobs โ†’ WVD: Combine device_client_id_blob + device_private_key into mycdm.wvd
  • WVD โ†’ Blobs: Extract individual components from a .wvd file

No server-side processing, 100% client-side and safe for local use.

Convert CDM to WVD

๐Ÿ“Œ Final Notes

  • Dumper works only on devices running L3, or where L1 is bypassed
  • This method is ideal for security researchers, DRM engineers, and testers
  • Never share extracted CDMs publicly โ€“ treat them as private credentials

๐Ÿ”— Source Project: https://github.com/wvdumper/dumper

GitHub - wvdumper/dumper: Dump L3 CDM from any Android device
Dump L3 CDM from any Android device. Contribute to wvdumper/dumper development by creating an account on GitHub.

๐Ÿ”— Source Project: https://emarsden.github.io/pssh-box-wasm/convert

Convert CDM
A web-based tool to convert Widevine and Playready CDMs into different formats.

Want to test your CDM with our tools? Visit โ†’ https://iptvtools.io/drm-tools/