https://www.futurly.com/s/preview/courses/blender-architecture#6337f80fe4b05a534f0e3d5a
The entire source code has now been modified. Don't suggest another thread because nothing else will work right now.
Now, how do I obtain the key to download videos from the above URL?
Support our site by donate $5 directly to us Thanks!!!
Try StreamFab Downloader and download streaming video from Netflix, Amazon!
Try StreamFab Downloader and download streaming video from Netflix, Amazon!
+ Reply to Thread
Results 1 to 30 of 210
-
-
more we talk about this site (there are already several threads in this forum about this site) and the more the code changes ...
or you are developer of this site ?? ....
i think it's better not to talk about this site anymore. if you want his videos, BUY THEM !! -
good, that shit took long to change lol, but maybe someone will again post solution soon
-
Why not use some downloaders to solve this problem quickly if you want this video?
-
-
-
you know google ?
type tubedigger and search it instead of asking here < how to use it? >
and stop to ask the same question also to other thread ... -
-
-
hello guys. spka no longer exists.
Last edited by DrQaatil; 10th Nov 2024 at 09:10.
-
try use https://chrome.google.com/webstore/detail/stream-recorder-download/iogidnfllpdhagebkblkgbfijkbkjdmm in RecMode
just checked TubeDigger in RecMode works fine -
I've been looking into this as a JS dev and I've sucessfully figured out how to download videos from the Spayee platform - got it working in a custom python script.
First, find the Course ID, which is in this line of script on the page:
Or, run this JS code and it should get you the course ID:Code:coursePlayer.init("6319d189e4b0ce4578316957", "Preview", "", true, false, "normal", "", 0);
Code:document.body.outerHTML.split(`coursePlayer.init("`)[1].split(`"`)[0]
Then, find the ID of the video itself - you can either inspect element the sidebar and find the selected content page, then look at it's data-id, or you can run this line of JS code below to get the selected video's ID, or look for a URL like this in the network tab
Where 6337f80fe4b05a534f0e3d5a is the video ID for this videoCode:https://<whatever.com>/s/preview/courses/<course ID>/videos/6337f80fe4b05a534f0e3d5a/get
Or, run this JS Code on the page to get the current video's ID:
Also, from this course page you will need the apkId, which is like the new version of the spka value. You can find it by running "apkId" in the browser console, or by running this code. This value for apkId will change every time you switch login (this only matters for paid courses where you must be logged in, but this value is linked to the /t/ value below). apkId will look something like this:Code:document.querySelector("div.courseSubItem.enabled-true.selected").getAttribute("data-id")
This is actually hex encoded version of used to be spka value - you'll use this to decrypt the m3u8 key later:Code:62313734323630386634656538646135
Code:Hex decoded: b1742608f4ee8da5
Now you can connect to this endpoint, which is an API that gives you the m3u8 URL (If it is a paid course, you will need to be send a request with your login cookie)
The result will be something like thisCode:https://<whatever.com>/s/preview/courses/<course ID>/videos/<video ID>/get
You can find the (encrypted) m3u8 URL in the JSON path: "spayee:resource" > "spayee:streamUrl"Code:{ "_id": "6337f80fe4b05a534f0e3d5a", "spayee:resource": { "spayee:title": "01 Introduction", "spayee:courseAssetType": "video", "spayee:type": "upload", "spayee:underProcess": false, "spayee:completed": true, "spayee:status": "Completed", "spayee:previewUrl": "assets/videos/6197321b0cf23d7cc6e572e1/2022/10/01/6337f80fe4b05a534f0e3d5a/6337f80fe4b05a534f0e3d5a", "spayee:coverVersion": 3, "isCaption": false, "spayee:allowWatermark": true, "spayee:autoplay": true, "spayee:availability": "always", "spayee:context": "", "spayee:description": "", "spayee:isContextHtml": false, "spayee:isDescriptionHtml": false, "spayee:tags": [ "" ], "spayee:totalTime": 13.14, "spayee:progress": 100, "spayee:streamUrl": "https://d2qny97nu4rj64.cloudfront.net/spees/w/o/6197321b0cf23d7cc6e572e1/v/6337f80fe4b05a534f0e3d5a/u/pu/t/87bb35a36b01e0943ef12fa4e6f5ef7c/p/assets/videos/6197321b0cf23d7cc6e572e1/2022/10/01/6337f80fe4b05a534f0e3d5a/index.m3u8" }, "drmPlayerSupport": false, "response": true }
In this URL, the element after "/t" (87bb35a36b01e0943ef12fa4e6f5ef7c in this case) is the only bit that changes per video, and this is based on your session ID (this only really matters if you are trying to download a paid course, but it means that when you log in on one browser, the old /t/ value will be invalidated and a new one will be generated, along with the apkId - the apkId and the URL have to match - you can no longer use the old one as it will lead you to getting an incorrect /k/timestamp key for m3u8 decryption later on - you must make sure the cookie you send to this endpoint is of your latest login).
Anyway, if you curl/download and look at this m3u8, you will see the AES-128 encryption line, with a URI of "k/timestamp", so replacing index.m3u8 in the URL with "k/timestamp" will give you the decryption key endpoint. URL will look like this:Code:https://d2qny97nu4rj64.cloudfront.net/spees/w/o/6197321b0cf23d7cc6e572e1/v/6337f80fe4b05a534f0e3d5a/u/pu/t/87bb35a36b01e0943ef12fa4e6f5ef7c/p/assets/videos/6197321b0cf23d7cc6e572e1/2022/10/01/6337f80fe4b05a534f0e3d5a/index.m3u8
However, this key itself is also encrypted, using the apkId value. You can decrypt it with this python code, where data is the 48 bytes you get from "k/timestamp" endpoint, and apkid is apkid (like 62313734323630386634656538646135)Code:https://d2qny97nu4rj64.cloudfront.net/spees/w/o/6197321b0cf23d7cc6e572e1/v/6337f80fe4b05a534f0e3d5a/u/pu/t/87bb35a36b01e0943ef12fa4e6f5ef7c/p/assets/videos/6197321b0cf23d7cc6e572e1/2022/10/01/6337f80fe4b05a534f0e3d5a/k/timestamp
This gives you the 16 byte key that's used to encrypt both the video (and audio if it's separate) m3u8 chunks. You can write these bytes to a .bin file or something similar, then replace the URI= in the m3u8 for video (and also audio if it's separate).Code:def _decrypt_key(data, apkid): tmp1 = data[0:16] tmp2 = data[32:48] dec1 = AES.new(bytes.fromhex(apkid),AES.MODE_ECB) tmp3 = dec1.decrypt(tmp1) dec2 = AES.new(tmp3,AES.MODE_ECB) return dec2.decrypt(tmp2)
For my script, I downloaded the key file and then all the chunks (.ts), then replaced each chunk with the full disk path
example:
Then, I used ffmpeg to download the video, and it works great - I made my own small python script to do this, but you could also just incorporate all of this into a script, for something like youtube-dl or streamlink - I'm not going to do that. If anyone has any more questions about this, or how to download the live courses (I've got that working too - some of the sites add an extra layer of AES encryption on the /get endpoint), feel free to ask me.Code:#EXT-X-KEY:METHOD=AES-128,URI="k/timestamp",IV=0x496daa1c6914000e408c65cead91fc29 becomes #EXT-X-KEY:METHOD=AES-128,URI="C:\Users\f1shy\Desktop\dltesting\key.bin",IV=0x496daa1c6914000e408c65cead91fc29 hls_2M_003.ts becomes C:\Users\f1shy\Desktop\dltesting\video\hls_2M_003.ts
-
Wow, this is really great and huge work.
I have to say this is really splendid. Thank you @f1shy-dev -
i am stuck on this, However, this key itself is also encrypted, using the apkId value. You can decrypt it with this python code, where data is the 48 bytes you get from "k/timestamp" endpoint, and apkid is apkid (like 62313734323630386634656538646135)
This gives you the 16 byte key that's used to encrypt both the video (and audio if it's separate) m3u8 chunks. You can write these bytes to a .bin file or something similar, then replace the URI= in the m3u8 for video (and also audio if it's separate).Code:def _decrypt_key(data, apkid): tmp1 = data[0:16] tmp2 = data[32:48] dec1 = AES.new(bytes.fromhex(apkid),AES.MODE_ECB) tmp3 = dec1.decrypt(tmp1) dec2 = AES.new(tmp3,AES.MODE_ECB) return dec2.decrypt(tmp2)
I cant get the data from timestamp value, please help -
@swappyison Use this:
To make this script run, please download the key file timestamp in advance, then put timestamp and this script in the same folder.Code:import binascii from Crypto.Cipher import AES with open("timestamp", "rb") as file: data = file.read() apkid = '62313734323630386634656538646135' def _decrypt_key(data, apkid): tmp1 = data[0:16] tmp2 = data[32:48] dec1 = AES.new(bytes.fromhex(apkid),AES.MODE_ECB) tmp3 = dec1.decrypt(tmp1) dec2 = AES.new(tmp3,AES.MODE_ECB) return dec2.decrypt(tmp2) result = _decrypt_key(data, apkid) hex_result = binascii.hexlify(result) print(hex_result.decode())
Then run this script in the CMD window. In the screenshot below, I renamed it as "apkid.py", the result will be very clean, it's just the key to decrypt the video and the audio.
[Attachment 72888 - Click to enlarge]
Be aware that you can make this line
into this oneCode:apkid = '62313734323630386634656538646135'
if you are trying to download other episodes.Code:apkid = input('\napkid: ') -
Hi thank you so much I got the keys, however i ran into another problem, downloading from ./N_m3u8DL-RE gave me this error.
Code:./N_m3u8DL-RE -M format=mp4 --key "https://d2qny97nu4rj64.cloudfront.net/spees/w/o/6197321b0cf23d7cc6e572e1/v/6337f80fe4b05a534f0e3d5a/u/pu/t/87bb35a36b01e0943ef12fa4e6f5ef7c/p/assets/videos/6197321b0cf23d7cc6e572e1/2022/10/01/6337f80fe4b05a534f0e3d5a/index.m3u8" --save-name ge.mp4 ERROR: Specified key is not a valid size for this algorithm.
-
sorry i had typed this, ./N_m3u8DL-RE -M format=mp4 --key 2aac616013f1877619af8ac01abff0a6 "https://d2qny97nu4rj64.cloudfront.net/spees/w/o/6197321b0cf23d7cc6e572e1/v/6337f80fe4b05a534f0e3d5a/u/pu/t/87bb35a36b01e0943ef12fa4e6f5ef7c/p/assets/videos/6197321b0cf23d7cc6e572e1/2022/10/01/6337f80fe4b05a534f0e3d5a/index.m3u8" --save-name ge.mp4
and the same error -
-
i am so sorry, could you please suggest me the corrected command.
thanks in advance -
Similar Threads
-
howto deal with HLS 128 bit aes encrypted - the hard one
By code47 in forum Video Streaming DownloadingReplies: 63Last Post: 28th Dec 2023, 09:45 -
How do I download AES encrypted video streamed over HLS?
By Videogamer555 in forum Video Streaming DownloadingReplies: 1Last Post: 20th Jul 2022, 09:03 -
Help downloading AES-encrypted HLS video stream
By Woodswolf in forum Video Streaming DownloadingReplies: 26Last Post: 25th May 2019, 15:20 -
Help me with AES encrypted HLS downloading ?
By shraman in forum Video Streaming DownloadingReplies: 0Last Post: 30th Jul 2018, 07:54 -
Help downloading AES-encrypted HLS video stream
By vidder in forum Video Streaming DownloadingReplies: 3Last Post: 4th Jul 2018, 18:24



Quote