VideoHelp Forum





Try StreamFab Downloader and download streaming video from Netflix, Amazon!



+ Reply to Thread
Results 1 to 13 of 13
  1. Code:
    ceb1333b11d79085cf30eecd1f254969:50c22b8d1071dc0a667bfb01acd8cc1c
    Quote Quote  
  2. Code:
    ceb1333b11d79085cf30eecd1f254969:50c22b8d1071dc0a667bfb01acd8cc1c
    Thanks!
    Quote Quote  
  3. Code:
    42095c4a98de2d937e8dd9d59a0da424:8a4f2ab708e8af3daf9e5bf071f98d05
    Quote Quote  
  4. Originally Posted by CopyPasteDev View Post
    Code:
    42095c4a98de2d937e8dd9d59a0da424:8a4f2ab708e8af3daf9e5bf071f98d05
    Thanks!
    Quote Quote  
  5. hi,
    can anyone get me the key for this little video, please ?
    (wvg-next gives me an error...)
    Code:
    https://www.tf1.fr/tmc/quotidien-avec-yann-barthes/videos/invite-david-castello-lopes-le-grincheux-le-plus-drole-de-france-nous-raconte-lorigine-de-tout-96445389.html?programSlug=quotidien-avec-yann-barthes
    (french IP, free account)
    Quote Quote  
  6. Member
    Join Date
    Dec 2021
    Location
    england
    Search Comp PM
    Code:
    --key e0cef04afd53536a82b9b6903e656640:8fe9082000ebc3bf4f0be0501da8a157
    Quote Quote  
  7. Originally Posted by iamghost View Post
    Code:
    --key e0cef04afd53536a82b9b6903e656640:8fe9082000ebc3bf4f0be0501da8a157
    thanks a lot !
    Quote Quote  
  8. Originally Posted by CopyPasteDev View Post
    Code:
    ceb1333b11d79085cf30eecd1f254969:50c22b8d1071dc0a667bfb01acd8cc1c
    Which tool do you use to get the information? I have WidevineProxy2, Vineless, and PlayReadyProxy 2, but I can't get the keys from that site.

    https://telegratuita.st/live/golden.php
    Quote Quote  
  9. Originally Posted by aLGUN0 View Post
    Originally Posted by CopyPasteDev View Post
    Code:
    ceb1333b11d79085cf30eecd1f254969:50c22b8d1071dc0a667bfb01acd8cc1c
    Which tool do you use to get the information? I have WidevineProxy2, Vineless, and PlayReadyProxy 2, but I can't get the keys from that site.

    https://telegratuita.st/live/golden.php
    Using a script with the help of AI

    Code:
    MPD URL: https://otte.live.fly.ww.aiv-cdn.net/gru-nitro/live/clients/dash/enc/ox4csgyamg/out/v1/95cf9c4df3d542f6812f382a52771327/cenc.mpd
    KEY: 38dbcf2d094923f94aca4f913045e993:a475a0bcc6f77b04f07ed1487619d626
    if anyone interested in the script (just type the channel name when prompted for channel id)
    Code:
    #!/usr/bin/env python3
    """Fetch msvhub.sbs/drm.php?id=<channel>, decode obfuscation, print mpd + kid:key."""
    
    from __future__ import annotations
    
    import base64
    import re
    import sys
    
    try:
        import requests
    except ImportError:
        print("pip install requests", file=sys.stderr)
        sys.exit(1)
    
    HEADERS = {
        "User-Agent": (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:151.0) "
            "Gecko/20100101 Firefox/151.0"
        ),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Sec-Fetch-Storage-Access": "none",
        "Sec-GPC": "1",
        "Connection": "keep-alive",
        "Referer": "https://telegratuita.st/",
        "Upgrade-Insecure-Requests": "1",
        "Sec-Fetch-Dest": "iframe",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "cross-site",
        "Priority": "u=4",
    }
    URL = "https://msvhub.sbs/drm.php"
    
    
    def decode_obfuscated(text: str) -> str:
        arr = re.search(r"var\s+\w+\s*=\s*\[(.*?)\];", text, re.S)
        off = re.search(r"\)\s*-\s*(\d+)\s*\)", text)
        if not arr or not off:
            raise ValueError("obfuscation array/offset not found")
        offset = int(off.group(1))
        chars = []
        for s in re.findall(r'"([A-Za-z0-9+/=]+)"', arr.group(1)):
            try:
                digits = re.sub(r"\D", "", base64.b64decode(s).decode("utf-8", "replace"))
                if not digits:
                    continue
                cp = int(digits) - offset
                if 0 <= cp < 0x110000:
                    chars.append(chr(cp))
            except Exception:
                continue
        return "".join(chars)
    
    
    def extract_keys(html: str) -> tuple[str, str, str]:
        mpd = re.search(r'var\s+url\s*=\s*"([^"]+)"', html)
        kid = re.search(r'ck_keyid\s*=\s*"([0-9a-fA-F]+)"', html)
        key = re.search(r'ck_key\s*=\s*"([0-9a-fA-F]+)"', html)
        if not mpd or not kid or not key:
            raise ValueError("ck_keyid / ck_key / url not found in decoded page")
        u = mpd.group(1)
        if u.startswith("//"):
            u = "https:" + u
        return u, kid.group(1).lower(), key.group(1).lower()
    
    
    def fetch_channel_keys(channel_id: str) -> tuple[str, str, str]:
        r = requests.get(
            URL,
            params={"id": channel_id.strip()},
            headers=HEADERS,
            timeout=30,
        )
        r.raise_for_status()
        html = decode_obfuscated(r.text)
        return extract_keys(html)
    
    
    def main() -> int:
        channel = input("channel id: ").strip()
        if not channel:
            print("empty id", file=sys.stderr)
            return 1
        try:
            mpd, kid, key = fetch_channel_keys(channel)
        except Exception as e:
            print(f"error: {e}", file=sys.stderr)
            return 2
        print(mpd)
        print(f"{kid}:{key}")
        return 0
    
    
    if __name__ == "__main__":
        sys.exit(main())
    Quote Quote  
  10. Originally Posted by CopyPasteDev View Post
    Using a script with the help of AI

    Code:
    MPD URL: https://otte.live.fly.ww.aiv-cdn.net/gru-nitro/live/clients/dash/enc/ox4csgyamg/out/v1/95cf9c4df3d542f6812f382a52771327/cenc.mpd
    KEY: 38dbcf2d094923f94aca4f913045e993:a475a0bcc6f77b04f07ed1487619d626
    if anyone interested in the script (just type the channel name when prompted for channel id)
    Code:
    #!/usr/bin/env python3
    """Fetch msvhub.sbs/drm.php?id=<channel>, decode obfuscation, print mpd + kid:key."""
    
    from __future__ import annotations
    
    import base64
    import re
    import sys
    
    try:
        import requests
    except ImportError:
        print("pip install requests", file=sys.stderr)
        sys.exit(1)
    
    HEADERS = {
        "User-Agent": (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:151.0) "
            "Gecko/20100101 Firefox/151.0"
        ),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Sec-Fetch-Storage-Access": "none",
        "Sec-GPC": "1",
        "Connection": "keep-alive",
        "Referer": "https://telegratuita.st/",
        "Upgrade-Insecure-Requests": "1",
        "Sec-Fetch-Dest": "iframe",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "cross-site",
        "Priority": "u=4",
    }
    URL = "https://msvhub.sbs/drm.php"
    
    
    def decode_obfuscated(text: str) -> str:
        arr = re.search(r"var\s+\w+\s*=\s*\[(.*?)\];", text, re.S)
        off = re.search(r"\)\s*-\s*(\d+)\s*\)", text)
        if not arr or not off:
            raise ValueError("obfuscation array/offset not found")
        offset = int(off.group(1))
        chars = []
        for s in re.findall(r'"([A-Za-z0-9+/=]+)"', arr.group(1)):
            try:
                digits = re.sub(r"\D", "", base64.b64decode(s).decode("utf-8", "replace"))
                if not digits:
                    continue
                cp = int(digits) - offset
                if 0 <= cp < 0x110000:
                    chars.append(chr(cp))
            except Exception:
                continue
        return "".join(chars)
    
    
    def extract_keys(html: str) -> tuple[str, str, str]:
        mpd = re.search(r'var\s+url\s*=\s*"([^"]+)"', html)
        kid = re.search(r'ck_keyid\s*=\s*"([0-9a-fA-F]+)"', html)
        key = re.search(r'ck_key\s*=\s*"([0-9a-fA-F]+)"', html)
        if not mpd or not kid or not key:
            raise ValueError("ck_keyid / ck_key / url not found in decoded page")
        u = mpd.group(1)
        if u.startswith("//"):
            u = "https:" + u
        return u, kid.group(1).lower(), key.group(1).lower()
    
    
    def fetch_channel_keys(channel_id: str) -> tuple[str, str, str]:
        r = requests.get(
            URL,
            params={"id": channel_id.strip()},
            headers=HEADERS,
            timeout=30,
        )
        r.raise_for_status()
        html = decode_obfuscated(r.text)
        return extract_keys(html)
    
    
    def main() -> int:
        channel = input("channel id: ").strip()
        if not channel:
            print("empty id", file=sys.stderr)
            return 1
        try:
            mpd, kid, key = fetch_channel_keys(channel)
        except Exception as e:
            print(f"error: {e}", file=sys.stderr)
            return 2
        print(mpd)
        print(f"{kid}:{key}")
        return 0
    
    
    if __name__ == "__main__":
        sys.exit(main())
    Thank you so much for the reply and the script; it works perfectly. I learn something new every day thanks to your valuable information.
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!