Thank you for taking the time to analyze and answerThanks.
The presence of the <ContentProtection> element with the Widevine UUID indicates the use of Widevine DRM, but the lack of additional information suggests that the playback environment is expected to handle the specifics of the license acquisition and decryption process.
The missing references could mean that the actual decryption and playback of the content require external configuration or that the player handling the MPD file already has the necessary information to acquire the license (e.g., pre-configured license server URLs or pre-shared keys).
AllHell3Gui and clan cannot work without one of the missing references - of which there are three; pssh, Default_KID and parsing for pssh in init.m4f (1st video segment)
I asked chatgpt whether the schema follows google Widevine recommendations. It replied:
So since it isn't widevine compliant I disregard this result.No, the <ContentProtection> schema you provided does not fully follow Google Widevine's recommendations. While the schemeIdUri correctly identifies the content as being protected by Widevine, a compliant Widevine MPD typically includes additional elements and data to meet the full requirements of Widevine DRM.
Key Elements Typically Included:
PSSH (Protection System Specific Header):
Widevine DRM generally requires a cencssh element within the <ContentProtection> element. The pssh (Protection System Specific Header) is a Base64-encoded binary blob that contains necessary initialization data for the DRM system. This data is used by the player to request the decryption keys from the license server.
Example:
xml
<ContentProtection
schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
cencssh="Base64 encoded pssh data">
</ContentProtection>
License Acquisition URL (Optional but Recommended):
While not mandatory in the MPD file, it is often helpful to include a widevine:license element or similar, which provides the license acquisition URL. This helps players to know where to send their license requests without needing external configuration.
Content Protection Attributes:
Widevine may also require certain attributes like cenc:default_KID (Key Identifier) to be included in the MPD for more precise control over the DRM process.
Why Full Compliance Matters:
Player Compatibility: Without the pssh data, many players that expect it might not be able to request the necessary license, leading to playback failure.
Security and Efficiency: Widevine's recommended structure ensures that all necessary data for content decryption is provided directly in the MPD, streamlining the process and ensuring a higher level of security.
Conclusion:
The example <ContentProtection> element you provided does indicate Widevine protection, but it does not include the full set of information recommended by Google Widevine for DRM-protected content. For full compliance and optimal playback support, the MPD should include the pssh data and possibly other elements like the license URL or default KID.
Now the tool should be fine. My tool can get the key of another site. This problem is relatively niche and will not be fixed. I will learn how to use the API post request. Thank you.
Try StreamFab Downloader and download from Netflix, Amazon, Youtube! Or Try DVDFab and copy Blu-rays!
Try StreamFab Downloader and download streaming video from Youtube, Netflix, Amazon! Download free trial.
+ Reply to Thread
Results 31 to 60 of 138
Thread
-
-
I have tested that it is possible to convert UUID as Base 64 using such tools: https://emarsden.github.io/pssh-box-wasm/generate/
-
There is none for widevine in that mpd. If you are thinking it is this
Code:<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"></ContentProtection>
Here is how it should look. Note the same scheme id is used
Code:<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" xmlns:cenc="urn:mpeg:cenc:2013" bc:licenseAcquisitionUrl="https://manifest.prod.boltdns.net/license/v1/cenc/widevine/1242911124001/cf79ae24-1886-48bf-a5de-d99d100035fe/776db926-abcf-46aa-ab0c-b596664450f3?fastly_token=NjZkOTVkZWJfZTNkMzhhYzJiYzcyYWM2NDc2ZWM3NzQ5NGMxZWI2MWI3MDI2NGVjZDZkZGViOTkzYTFiZDQwOTYzMzY3MjZhNg%3D%3D" xmlns:bc="urn:brightcove:2015"> <cenc:pssh>AAAAVnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADYIARIQd225JqvPRqqrDLWWZkRQ8xoNd2lkZXZpbmVfdGVzdCIIMTIzNDU2NzgyB2RlZmF1bHQ=</cenc:pssh> </ContentProtection>
Last edited by A_n_g_e_l_a; 14th Aug 2024 at 08:36.
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
Only possible solution in such a case would be to try to extract all necessary information from the PlayReady PSSH and build a Widevine PSSH from there. Devine tries to do so, it has a method
Code:if pssh.system_id == PSSH.SystemId.PlayReady: pssh.to_widevine()
-
Code:
// Refactored conversion functions const fromHexString = hexString => Uint8Array.from(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); const toHexString = bytes => bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), ''); const b64ToHex = b64 => [...atob(b64)].map(c=> c.charCodeAt(0).toString(16).padStart(2,0)).join`` // initData to PSSH function getPssh(buffer) { const bytes = fromHexString(toHexString(new Uint8Array(buffer)).match(/000000..70737368.*/)[0]); return window.btoa(String.fromCharCode(...bytes)); } // Get Clearkey keys function getClearkey(response) { let obj=JSON.parse((new TextDecoder("utf-8")).decode(response)) obj = obj["keys"].map(o => [o["kid"], o["k"]]); obj = obj.map(o => o.map(a => a.replace(/-/g, '+').replace(/_/g, '/')+"==")) return obj.map(o => `${b64ToHex(o[0])}:${b64ToHex(o[1])}`).join("\n") } // Widevine PSSH extraction from init const originalGenerateRequest = MediaKeySession.prototype.generateRequest; MediaKeySession.prototype.generateRequest = function(initDataType, initData) { const result = originalGenerateRequest.call(this, initDataType, initData); //Get PSSH and pass into content.js try { console.log("[PSSH] " + getPssh(initData)) document.dispatchEvent(new CustomEvent('pssh', { detail: getPssh(initData) })); } finally { return result; } }; //Clearkey Support const originalUpdate = MediaKeySession.prototype.update; MediaKeySession.prototype.update = function(response) { const result = originalUpdate.call(this, response); try { console.log("[CLEARKEY] " + getClearkey(response)); document.dispatchEvent(new CustomEvent('clearkey', { detail: getClearkey(response) })); } finally { return result; } };
[Attachment 81451 - Click to enlarge]
This is the content of web debugging -
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
Of course. PSSH is provided to the web-player, by JavaScript probably, BUT PSSH does not appear in the mpd.
Use the PSSH and the license with a normal l3.py to get your keys by all means. Automated routes to get keys are cut off.
And it looks like you have other help from your replies I suggest you go there as this is no longer an allhell3 issue.Last edited by A_n_g_e_l_a; 14th Aug 2024 at 09:51.
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
Hi @Karn, Thanks for answering this. I am using a real CDM only. I am able to get the keys for the requests https://license64.vdocipher.com/auth/wv/:authToken
But there are some requests which are made to https://license.vdocipher.com/auth and passing the base64 encoded body having the otp ,playback info, and licenseRequest : CAQ= and this return some license. Then a request is sent to the same URI and this time license request is something big. I am not able to figure out how this licenseRequest is generated.
It will be helpful if you can guide me on this.
Thanks in Advance! -
Why not get the init file from the manifest? It has to be in there
Bypass HMACs, One-time-tokens and Lic.Wrapping: https://github.com/DevLARLEY/WidevineProxy2 -
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
https://files.videohelp.com/u/301890/HellYes4.zip
Corrected missing init parser in the GUI version and the GUI has had a makeover.
[Attachment 81469 - Click to enlarge]Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
Sorry to bother you again, pssh is hidden in the m4i file. You still cannot read it after updating to HellYes4.zip. The following code is the content of the first fragment m4i.
https://ewcdn03.nowe.com/session/10-0415bd77b353e353b832f7d53c9e8/Content/DASH_VOS3/Li...5item_init.m4i
Code:ftypdashiso2dash�moovxmvhd�U&'�U&'�����������@Qpssh�y�JΣ�'��!�1. 뚯�>��'�9��.� widevine_test" CH332NDash2�pssh��y�@B����[��_�``V<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0"><DATA><PROTECTINFO><KEYLEN>16</KEYLEN><ALGID>AESCTR</ALGID></PROTECTINFO><KID>musgLqOv9T6lJ5w5lIEurQ==</KID><CHECKSUM>tnTAR9epNYo=</CHECKSUM><LA_URL>https://profficialsite.keydelivery.mediaservices.windows.net/PlayReady/</LA_URL><CUSTOMATTRIBUTES><IIS_DRM_VERSION>8.0.1611.1001</IIS_DRM_VERSION></CUSTOMATTRIBUTES></DATA></WRMHEADER> trakhtkhd�U&'�U&'��������@�mdia,mdhd�U&'�U&'����������� &hdlrsounSoundCminfsmhd$dinfdrefurl stblsttscttsstscstszstco�stsd�enca}'esds@����Psinffrmamp4aschmcenc(schi tenc. 뚯�>��'�9��.�(mvex trex
Prepare three inputs.
1. MPD URL
2. cURL of license server request
3. Video name
MPD URL? https://ewcdn03.nowe.com/session/10-0415bd77b353e353b832f7d53c9e8/Content/DASH_VOS3/Li...bc8_1723730304
Extracting PSSH from MPD...
Extracting PSSHs from init file: init.m4f
AAAAUXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADEIARIQLi Drmq+jPvWlJ5w5lIEurRoNd2lkZXZpbmVfdGVzdCIKQ0gzMzJO RGFzaDIA
init.m4f file successfully deleted.
Extracted or generated PSSH: None
Next.
1. Paste your cURL of license request.
2. Press Ctrl-D (Linux) or Ctrl-Z (Windows) to save it.
cURL?
After using allhell3.py, after entering curl, the entire script will freeze.Last edited by shy0o; 15th Aug 2024 at 07:02.
-
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
Sorry, it turns out that the Ctrl function on my computer is broken, and there is often no response when I press it.
I think I'm troubling you. If the program is normal and there's no problem, you can leave me alone. Sorry.
Code:Traceback (most recent call last): File "/Users/shy/Downloads/HellYesGui/allhell3.py", line 424, in <module> key_results = get_key(pssh, lic_url) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/shy/Downloads/HellYesGui/allhell3.py", line 170, in get_key challenge = cdm.get_license_challenge(session_id, PSSH(pssh)) ^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pywidevine/pssh.py", line 67, in __init__ raise ValueError("Data must not be empty.") ValueError: Data must not be empty.
-
Well we now know the script fetches the pssh from the init segment- so that is an advance.
I've updated the The GUI version to include what this geriatric missed when the GUI was first created, so use that now - link is in my signature.
Sorry for misleading you I assumed the init parser was present in the original GUI.Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
It seems that it cannot be obtained, but the terminal will display it.
[Attachment 81481 - Click to enlarge] -
-
Are you using an Apple computer? Never been tested on Macs,
Anyway use the keys and download by hand.... would be my approach.
EDIT:
Alter the code at line 212 and following to look like this highlighted:
[Attachment 81486 - Click to enlarge]
Code:try: pssh = self.get_pssh_from_mpd(self.mpd_url_entry.text()) # init.m4f method if pssh: return pssh else: return None except: return None
Last edited by A_n_g_e_l_a; 15th Aug 2024 at 15:17.
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
There are more than 2000 downloads and the few errors reporting http missing are all USER errors from people who did not know what they were doing. Could that be you?
I see you've just joined. You probably are unsure ... so read the guides in the Starter Kit and try again. First try with a simple site; and don't expect it to work on vdocipher.
I support faults in my code - nothing else.Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
After this modification, there is no problem. You can extract the required content, but such an error occurs? Do you know how to solve it? If it is not important, you don’t need to reply to me. I’m sorry to bother you.
I tried using context.set_ciphers("DEFAULT:@SECLEVEL=1") but it was not successful. Is there any other way? If so.
[SSL: DH_KEY_TOO_SMALL]
dh key too small (_ssl.c:1000) -
The error message [SSL: DH_KEY_TOO_SMALL] indicates that the server you are connecting to is using a Diffie-Hellman (DH) key that is too small, and your system's SSL/TLS library is rejecting it for security reasons.
A solution could be to set up a lower DH default, as you I think have tried, but I am unsure of what you did. So try the script modification below.
[Attachment 81493 - Click to enlarge]
First create a copy of allhell3gui.py and call it something else. We will only use this for the one site in question. Lowering security permanently is never a good idea.
We need to modify one def and add a new one - to match the image above. So find def fetch_mpd_content(mpd_url) and modify it and add the new 'def create_ssl_context():' as in the image. Then add import ssl at the top.
Code:import httpx import ssl def create_ssl_context(): context = ssl.create_default_context() context.set_ciphers("DEFAULT:@SECLEVEL=1") return context def fetch_mpd_content(mpd_url): ssl_context = create_ssl_context() response = httpx.get(mpd_url, verify=ssl_context) response.raise_for_status() return response.text
Let me know how you get on.Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
I have this error when I click on get keys
[Attachment 81520 - Click to enlarge] -
Looks like you have tried to edit allhell3gui.py. Put it back to how it was or re-download.
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
I've added a new file specifically to try to deal with the error @ shy0o was reporting - [SSL: DH_KEY_TOO_SMALL].
This arises when a users system rejects talking to a server as their security keys are small enough to be brute-force cracked. A potential solution is to ask the user's system to temporarily lower the security level. I have patched allhell3gui_lowerDH.py to do this. It is the same as allhell3gui apart from the lowered security level. If you meet a [SSL: DH_KEY_TOO_SMALL] error then use the patched file. I've also cleaned up the collecting of init.m4f to warn of missing yt-dlp - if not installed - rather than trying to download it.
The errors here corrected are for very unusual sites; most users will never meet them.
https://files.videohelp.com/u/301890/hellyes5.zipNoob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
First, thank you so much for this! I got it to work perfectly for a few videos I tested and your instructions were easy to understand. Thank you for all your work on it!
Second, while I got it to work great with one video source the next video source didn't work quite as well. I tried different approaches based on your instructions and some ideas from the forum, but I think I'm out of my depth.
Following your instructions everything went smoothly without any errors, but when I went to play the video all I got was sound; no video. I tried the non-gui approach and got a video, but it looked like a burned film reel. Not matter how many times I try I always get the same keys and for some reason it's only the video that doesn't seem to decrypt/save properly.
I don't want to run afoul of the forums rules so I'm also not sure how to ask for specific help for a specific site. Hence, the vagueness.
Any idea what I might be doing wrong? -
My guess is that you are attempting to go after a site that restricts some/all of its output to Level 1 CDMs such as Netflix or Amazon. Or some sites insist on real-device CDMs for L3.
The software is doing its job and providing keys. Clearly the keys you are given do not work on the resolution you download.
There is potential for mismatch; the browser - Chrome for example - will have negotiated content assuming a Chrome CDM. Then my software takes the agreed licensing arrangement, with its matched mpd, but adds an Android-emulated CDM in place of the Chrome CDM. The license server may baulk at this and provide lower resolution keys in line with the lower CDM status. Only guessing here; I can't speak from experience.... but I believe Amazon do this.
1. Try setting a lower resolution in the download option (480p for Amazon!)
2. Try using Firefox browser - less chance for mismatch
3. Upgrade the included L3 emulator CDM for a real-device CDM
4. Try another site for the same video.Last edited by A_n_g_e_l_a; 21st Aug 2024 at 07:21.
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
I used this program to download from one service. And it worked great. The last time I downloaded it was a week ago, but today I encountered the following problem: when I enter a cURL license, I get: "Client error '403 forbidden' for URL." Does this mean that the video service I download from has changed something in its settings?
-
Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
https://files.videohelp.com/u/301890/hellyes6.zip -
I also think that this a user error but I can't understand what is wrong. Everything is correct: .mpd URL and cURL of license. I grab the fresh data but it still doesn't work. Сould this be due to some kind of ban on the servers or something similar? But the video works fine in the browser. Anyway, thanks for the answer, I'll try to figure out what I'm doing wrong.
-
Try blocking the license URL?
Bypass HMACs, One-time-tokens and Lic.Wrapping: https://github.com/DevLARLEY/WidevineProxy2
Similar Threads
-
[Release] CDRM-Project 2.0
By TPD94 in forum Video Streaming DownloadingReplies: 21Last Post: 14th Oct 2024, 08:44 -
N_m3u8DL-RE pre-release
By stabbedbybrick in forum Video Streaming DownloadingReplies: 10Last Post: 10th May 2024, 16:37 -
Northern Exposure, Fabulous release
By mylarkee in forum Blu-ray RippingReplies: 0Last Post: 6th Mar 2024, 12:42 -
New Release! DVDFab Downloader All-In-One
By DVDFab Staff in forum Video Streaming DownloadingReplies: 0Last Post: 18th Jan 2021, 01:49 -
New Release!!!DVDFab v11.0.8.6 is out!
By DVDFab Staff in forum Latest Video NewsReplies: 0Last Post: 13th May 2020, 23:59