Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save arabcoders/9d2153a2191d0bd9d5475c888b7b8c24 to your computer and use it in GitHub Desktop.
Save arabcoders/9d2153a2191d0bd9d5475c888b7b8c24 to your computer and use it in GitHub Desktop.

Revisions

  1. @frozenpandaman frozenpandaman revised this gist Mar 18, 2025. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion widevine-decryption.md
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@

    **Specifically from Rakuten TV (live.tv.rakuten.co.jp)**

    FMI: https://cdm-project.com/How-To/ & https://old.reddit.com/r/Piracy/comments/y30ffr/
    FMI: [https://cdm-project.com/How-To/](https://web.archive.org/web/20240506045840/https://cdm-project.com/How-To) & [https://old.reddit.com/r/Piracy/comments/y30ffr/](https://web.archive.org/web/20250225090519/https://old.reddit.com/r/Piracy/comments/y30ffr/a_simple_guide_to_downloading_and_decrypting/)

    ## Setup

  2. @frozenpandaman frozenpandaman created this gist Dec 26, 2023.
    59 changes: 59 additions & 0 deletions widevine-decryption.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    # Downloading Widevine content

    **Specifically from Rakuten TV (live.tv.rakuten.co.jp)**

    FMI: https://cdm-project.com/How-To/ & https://old.reddit.com/r/Piracy/comments/y30ffr/

    ## Setup

    1. Install Tampermonkey: https://www.tampermonkey.net/
    2. Install yt-dlp: https://github.com/yt-dlp/yt-dlp#installation
    3. Install ffmpeg: https://ffmpeg.org/download.html
    4. Download Bento4: https://www.bento4.com/downloads/
    5. Have a proxy/VPN if you're not in Japan since stuff is geolocked

    ## Getting your decryption key

    ### Get PSSH
    1. Install this userscript: https://greasyfork.org/en/scripts/373903-eme-logger
    3. Search browser JS Console for `MediaKeySession::generateRequest`, then press play on the video and look under "Init Data"
    4. Get something like `AAAAMnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAXXXXXXXXFtoyTEzFOZDD4T9lmTiI=`

    ### Get License URL
    1. After doing the above, go to your browser developer tools' Network tab and search for `Widevine`
    2. Right click > Copy > Copy link address
    3. Get something like `https://azcp001.keydelivery.japaneast.media.azure.net/Widevine/?kid=e0c5b68c-9313-314e-6430-f8XXXXXXXX22`

    ### Get headers
    1. Left click on the Widevine entry from the above steps, under the "Headers tab" scroll down to "Request Headers"
    2. Copy the following lines & do some manual formatting, get something like:
    ```
    Accept-Encoding: gzip, deflate, br
    Accept-Language: en-US,en;q=0.9,ja-JP;q=0.8,ja;q=0.7
    Authorization: blahblah
    Cache-Control: no-cache
    Content-Length: "blahblah"
    Origin: https://live.tv.rakuten.co.jp
    Pragma: no-cache
    Referer: https://live.tv.rakuten.co.jp/
    User-Agent: blahblah
    ```

    ### Getting the key
    1. Open [https://cdrm-project.com/](https://cdrm-project.com/)
    2. Input the results from the previous steps and press "Send"
    3. Hopefully see the "SUCCESS" message along with a key that looks like `e0c5b68c93133XXXXXXXX84fd9664e22:499047f36b770957XXXXXXXX9dfc4033`

    ## Downloading the encrypted files

    2. In the developer console Network tab, search for `mpd`
    3. Find something that starts with `Manifest`, right click and copy the URL, e.g. `https://azclwds01.akamaized.net/9dc3547a-ede5-4aed-841f-5cXXXXXXXX0f/tXyKyP_tab_hd.ism/Manifest(format=mpd-time-csf,encryption=cenc,filter=pc_hd_001)`
    4. Run the Terminal command: `yt-dlp --allow-unplayable [url]`
    5. Get two files, an .mp4 and an .m4a

    ## Decrypting & merging the files

    1. In Bento4's `bin/` folder, find the `mp4decrypt` command line utility
    3. Navigate to this folder in your Terminal and run `mp4decrypt --key [yourkey] /path/to/corrupted.file /path/to/fixed.file` on both files
    4. Run `ffmpeg -i fixedvideo.mp4 -i fixedaudio.m4a -c:v copy -c:a copy output.mp4`
    5. The end