A generic L3 downloader for DRM content which comes in two (Edit: no THREE) versions
- allhell3.py
- allhell3gui.py
- allhell3.py modified to use a Chrome browser extension to automatically find needed data - a fork written by MalMen at https://github.com/MalMen/HellYes/tree/main
Allhell3.py is coded for the all browsers (tested on Chrome, Firefox and Edge) and is supplied very nearly ready to download all media protected by widevine. You just need to provide a working Content Decryption Module and call it device.wvd and place it in the top level folder of HellYes
allhell3gui.py is a Graphical User Interface version of allhell3.py.
In use, the style of entering data is a little different. allhell3.py uses a paste without echo to the screen, and uses Ctrl+D (Linux) or Ctrl+Z (Windows) to signal the end of the cURL input.
allhell3gui.py uses a paste with echo to the screen, and uses button clicks to process data.
Use whichever you like best on your system....
In both versions a downloader (N_m3u8DL-RE) may be used to download the media.
But either will need you to download some helper software.
Install the following:
- See the code at https://github.com/nilaoda/N_m3u8DL-RE, download the latest release. Unzip and save to a folder named 'binaries'. It can be anywhere on your system. So long as 'binaries' is in your Path.
- Do the same with ffmpeg and MKVToolNix etc.
- See https://www.videohelp.com/software/ffmpeg for more information about ffmpeg.
- See https://www.videohelp.com/software/MKVToolNix for more information about MKVToolNix.
- See https://www.bento4.com/downloads/ for more information about Bento4.
- Since allhell3.py is a python script you also need python or get it from Microsoft Store if on Windows
You provide three bits of information taken from a web page and allhell3.py does the rest.
You start a python script with 'python allhell3.py' written in a terminal or 'python3 allhell3gui.py'
But python scripts typically use modules that are imported to the script
Usuallly we use 'pip install module-name' But if the script author has provided a requirements.txt file, then we can use 'pip install -r requirements.txt', so use that here.
If the bare pip install does not work, try 'python3 pip install -r requirements.txt', or failing that 'python -m pip install -r requirements.txt'. Google for 'using pip' if stuck.
On Windows, Microsoft Store has a Terminal App, find an install that to use for running python scripts.
On Linux You'll already know how to use xterm or whatever
- MPD URL
- cURL of license server request
- Video name
After you provide the data, it will download the video using N_m3u8DL-RE, should you wish, finding keys in the process.
- MPD URL
Copy and paste the MPD URL from the web page.
For example, open this image in a new tab to see it full size.
The image shows the MPD URL as the first entry. How would we know it was the right one? it has mpd written in it.
How did we open that tool in the browser? Press ctrl+shift+C
How did we hide all the other stuff a web page loads? We used a filter
The filter is a regex or regular expression - it's a way of saying "find all the lines that contain mpd and license"
the regex is "regexp:widevine|acquire|license|mpd" and it means "find all the lines that contain widevine or acquire or license or mpd". However, Chrome does not allow regexp: so use a single word like license or mpd etc.
With expereince you will learn that sites use different words to identify their license url.
And it the filter does not find it search with method:POST filter. POST messages are sent securely, most http traffic isn't. But licenses are.
- cURL of license server request
Copy and paste the cURL of the license server request.
For example, open this image in a new tab to see it full size.
Which 'copy as cURL' to use? Windows - choose 'Copy as cURL (Posix)' if available or 'Copy as cURL (bash)'
If using allhell3.py.py terminate your paste command and tell the script to process the cURL by using Ctrl+Z (Windows) or Ctrl+D (Linux).
Be prepared for the screen to write several blank lines, shifting existing text upwards rapidly.
- Video name
Video name is requested once keys are found and the script is ready to download. The name does not need a file type extension added.
Note carefully: allhell3.py.py uses Ctrl + D to enter the cURL on Linux and Ctrl + Z on Windows. Nothing prints to the screen until Ctrl+D or Z is pressed.
Part of the process of fetching decryption-keys involves the swapping of keys in a Diffie-Helman type process, to validate the authority of a user. Some servers with old hardware use keys that are small enough to crack by brute force. So most systems force the use of larger, more secure, keys.
The system will then reject the connection and complain 'keys are too small'. If that happens use the included script allhell3gui_lowerDH.py which attempts to force the system to accept smaller keys.
Happy allhell3.py!
A_n_g_e_l_a