VideoHelp Forum
+ Reply to Thread
Results 1 to 14 of 14
Thread
  1. I've been dependent on this tool as part of the process I learned from generous people in this thread: https://forum.videohelp.com/threads/406950-Bally-Sports-Download-Help

    However, it seems like this has now been recently placed behind a registration portal and is no longer publicly accessible. I tried to register, saying I was an independent developer, but was rejected from access. Does anyone know of a way to access it or of an equivalent tool?

    http://tools.axinom.com/decoders/PsshBox
    Quote Quote  
  2. Same happened to me, I've been rejected twice, they were asking for a "company name" lol.

    For the moment the best way to get the PSSH is the EME logger method, it's a bit tricky but It is worth.
    Quote Quote  
  3. Originally Posted by Stoc View Post
    Same happened to me, I've been rejected twice, they were asking for a "company name" lol.

    For the moment the best way to get the PSSH is the EME logger method, it's a bit tricky but It is worth.
    Thanks. I was trying to get the EME logger working when the Axinom portal was suggested. Guess I have to try to figure it out again.
    Quote Quote  
  4. Search, Learn, Download!
    Join Date
    Oct 2022
    Location
    Belgium
    Search Comp PM
    You could also get the PSSH from the MPD or the init file
    Quote Quote  
  5. Originally Posted by Karoolus View Post
    You could also get the PSSH from the MPD or the init file
    I’ve been getting it from N_m3u8DL-RE output, which gave it in a format I ran through the Axinom tool to convert into the PSSH the CDM reads. I haven’t been able to see it directly in developer tools when I looked. Is there somewhere specific I should be looking?
    Quote Quote  
  6. discord=notaghost9997
    Quote Quote  
  7. Search, Learn, Download!
    Join Date
    Oct 2022
    Location
    Belgium
    Search Comp PM
    Originally Posted by axemanozh View Post
    Originally Posted by Karoolus View Post
    You could also get the PSSH from the MPD or the init file
    I’ve been getting it from N_m3u8DL-RE output, which gave it in a format I ran through the Axinom tool to convert into the PSSH the CDM reads. I haven’t been able to see it directly in developer tools when I looked. Is there somewhere specific I should be looking?
    https://forum.videohelp.com/threads/405001-How-to-get-the-widevine-pssh-from-init-mp4-...pt#post2650501


    Originally Posted by notaghost View Post
    Nice one, did not know about this site
    Quote Quote  
  8. Originally Posted by notaghost View Post
    Wow, thanks I will definitely check this one out.
    Quote Quote  
  9. Originally Posted by Karoolus View Post
    Originally Posted by axemanozh View Post
    Originally Posted by Karoolus View Post
    You could also get the PSSH from the MPD or the init file
    I’ve been getting it from N_m3u8DL-RE output, which gave it in a format I ran through the Axinom tool to convert into the PSSH the CDM reads. I haven’t been able to see it directly in developer tools when I looked. Is there somewhere specific I should be looking?
    https://forum.videohelp.com/threads/405001-How-to-get-the-widevine-pssh-from-init-mp4-...pt#post2650501


    Originally Posted by notaghost View Post
    Nice one, did not know about this site
    Thanks, Karoolus. I always appreciate the willingness to help. It would certainly be best to be able to do everything on your own without being dependent on outside tools, which can go down or see public access get pulled, such as Axinom. I will be giving this one a try this weekend.
    Quote Quote  
  10. Originally Posted by notaghost View Post
    How do we use this exactly? What should I add in content id box?
    Quote Quote  
  11. Using the https://integration.widevine.com/diagnostics site, I get this as the PSSH:

    Code:
    AAAAjnBzc2gBAAAA7e+LqXnWSs6jyCfc1R0h7QAAAAAAAABqImIIARIQkwJhp4HnPpyEaSG1UrNNlyJMZXlKaGMzTmxkRWxrSWpvaVVrVlFURUZaTFdOa1lXSm1NVEJsTFdSbFlUY3ROR1JrWlMxaFpEZGxMVE16TnpFNU5EaGpaV1E0TnlKOUjj3JWbBg==
    Image
    [Attachment 74123 - Click to enlarge]


    Image
    [Attachment 74124 - Click to enlarge]


    Running that through keysdb.net, I get a 412 Precondition failed error, which I believe means it doesn't like my headers.

    Image
    [Attachment 74125 - Click to enlarge]


    Am I doing something wrong here?

    I also tried using the TamperMonkey EME logger script method and get this:

    Image
    [Attachment 74126 - Click to enlarge]


    Code:
    AAADSHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAygoAwAAAQABAB4DPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBwADIARQBDAGsAKwBlAEIAbgBEADYARQBhAFMARwAxAFUAcgBOAE4AbAB3AD0APQA8AC8ASwBJAEQAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAGQAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8AeAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbwBkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAtAHUAaQAuAGUAeABhAG0AcABsAGUALgBjAG8AbQA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4ARgBuAEsAVABVAFAATwAyAHMATgBnAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4AAAAAgnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGIIARIQkwJhp4HnPpyEaSG1UrNNlyJMZXlKaGMzTmxkRWxrSWpvaVVrVlFURUZaTFdOa1lXSm1NVEJsTFdSbFlUY3ROR1JrWlMxaFpEZGxMVE16TnpFNU5EaGpaV1E0TnlKOQ==
    The instructions I am finding for this method say to run it through here: https://base64.guru/converter/decode/hex

    Which I do and get this result:

    Image
    [Attachment 74127 - Click to enlarge]


    Code:
    000000827073736800000000edef8ba979d64acea3c827dcd51d21ed0000006208011210930261a781e73e9c846921b552b34d97224c65794a6863334e6c64456c6b496a6f69556b56515445465a4c574e6b59574a6d4d54426c4c57526c595463744e47526b5a5331685a44646c4c544d7a4e7a45354e44686a5a5751344e794a39
    Running that output back through Hex to Base64, I then get this:

    Image
    [Attachment 74128 - Click to enlarge]


    Code:
    AAAAgnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGIIARIQkwJhp4HnPpyEaSG1UrNNlyJMZXlKaGMzTmxkRWxrSWpvaVVrVlFURUZaTFdOa1lXSm1NVEJsTFdSbFlUY3ROR1JrWlMxaFpEZGxMVE16TnpFNU5EaGpaV1E0TnlKOQ==
    Which also doesn't seem to work running through keysdb.net.

    Image
    [Attachment 74129 - Click to enlarge]


    So clearly I'm doing something wrong in this process, but I'm not sure what. Any pointers would be appreciated!
    Quote Quote  
  12. Member
    Join Date
    Dec 2021
    Location
    england
    Search PM
    geo lock maybe, you will need add proxy
    Code:
    import json
    import random
    import uuid
    import time
    import httpx
    from lxml import html
    
    
    class Settings:
        def __init__(self, userCountry: str = None, randomProxy: bool = False) -> None:
            self.randomProxy = randomProxy
            self.userCountry = userCountry
            self.ccgi_url = "https://client.hola.org/client_cgi/"
            self.ext_ver = self.get_ext_ver()
            self.ext_browser = "chrome"
            self.user_uuid = uuid.uuid4().hex
            self.user_agent = "Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
            self.product = "cws"
            self.port_type_choice: str
            self.zoneAvailable = ["AR", "AT", "AU", "BE", "BG", "BR", "CA", "CH", "CL", "CO", "CZ", "DE", "DK", "ES", "FI",
                                  "FR", "GR", "HK", "HR", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JP", "KR", "MX", "NL",
                                  "NO", "NZ", "PL", "RO", "RU", "SE", "SG", "SK", "TR", "UK", "US", "GB"]
    
        def get_ext_ver(self) -> str:
            about = httpx.get("https://hola.org/access/my/settings#/about").text
            if 'window.pub_config.init({"ver":"' in about:
                version = about.split('window.pub_config.init({"ver":"')[1].split('"')[0]
                return version
    
            # last know working version
            return "1.199.485"
    
    
    class Engine:
        def __init__(self, Settings) -> None:
            self.settings = Settings
    
        def get_proxy(self, tunnels, tls=False) -> str:
            login = f"user-uuid-{self.settings.user_uuid}"
            proxies = dict(tunnels)
            protocol = "https" if tls else "http"
            for k, v in proxies["ip_list"].items():
                return "%s://%s:%s@%s:%d" % (
                    protocol,
                    login,
                    proxies["agent_key"],
                    k if tls else v,
                    proxies["port"][self.settings.port_type_choice],
                )
    
        def generate_session_key(self, timeout: float = 10.0) -> json:
            post_data = {"login": "1", "ver": self.settings.ext_ver}
            return httpx.post(
                f"{self.settings.ccgi_url}background_init?uuid={self.settings.user_uuid}",
                json=post_data,
                headers={"User-Agent": self.settings.user_agent},
                timeout=timeout,
            ).json()["key"]
    
        def zgettunnels(
            self, session_key: str, country: str, timeout: float = 10.0
        ) -> json:
    
            qs = {
                "country": country.lower(),
                "limit": 1,
                "ping_id": random.random(),
                "ext_ver": self.settings.ext_ver,
                "browser": self.settings.ext_browser,
                "uuid": self.settings.user_uuid,
                "session_key": session_key,
            }
    
            #print(qs)
            return httpx.post(
                f"{self.settings.ccgi_url}zgettunnels", params=qs, timeout=timeout
            ).json()
            
        @staticmethod
        def sleep() -> None:
            min_tunnels_pause = 10
            max_tunnels_pause = 25
    
            def rand_range(low: int, hi: int) -> float:
                if low >= hi:
                    raise Exception("RandRange: low boundary is greater or equal to high boundary")
                delta = hi - low
                return low + random.random() * delta
            
            sleep_duration = int(rand_range(min_tunnels_pause, max_tunnels_pause))
            # sleep_duration = 10 # seems 10 is enough
            print("Please wait for "+str(sleep_duration)+" seconds.")
            time.sleep(sleep_duration)
    
    
    class Hola:
        def __init__(self, Settings) -> None:
            self.myipUri: str = "https://hola.org/myip.json"
            self.settings = Settings
    
        def get_country(self) -> str:
    
            if not self.settings.randomProxy and not self.settings.userCountry:
                self.settings.userCountry = httpx.get(self.myipUri).json()["country"]
    
            if (
                not self.settings.userCountry in self.settings.zoneAvailable
                or self.settings.randomProxy
            ):
                self.settings.userCountry = random.choice(self.settings.zoneAvailable)
    
            return self.settings.userCountry
    
    
    def init_proxy(data):
        settings = Settings(
            data["zone"]
        )  # True if you want random proxy each request / "DE" for a proxy with region of your choice (German here) / False if you wish to have a proxy localized to your IP address
        settings.port_type_choice = data[
            "port"
        ]  # direct return datacenter ipinfo, peer "residential" (can fail sometime)
    
        hola = Hola(settings)
        engine = Engine(settings)
    
        userCountry = hola.get_country()
        session_key = engine.generate_session_key()
        #engine.sleep()
        tunnels = engine.zgettunnels(session_key, userCountry)
    
        return engine.get_proxy(tunnels)
    
    
    if __name__ == "__main__":
        CC = input("Input desired country code: ")
        test = init_proxy({"zone": CC, "port": "peer"})
        print(test)
    save as proxy.py
    Quote Quote  
  13. Thanks, iamghost. It looks like you're onto something with the geolock. I refreshed my browser trying to pull the cURL values and noticed it was asking to allow to find my location.

    Image
    [Attachment 74130 - Click to enlarge]


    I allowed that and entered in the newly generated token and that seems to have worked, running through keysdb.net.

    Image
    [Attachment 74131 - Click to enlarge]


    Will that be enough with my local CDM, or would I need to add in your script somewhere into my l3.py workflow if I'm using that method to generate the keys?
    Quote Quote  
  14. Originally Posted by notaghost View Post
    I tried all my best but I swear that this tool always gives the wrong pssh, I also tried to get a correct PSSH knowing it already but I couldn't get any good result. I'm not sure what I'm doing wrong but I really miss the axinom tool that was working flawless.
    Quote Quote  



Similar Threads

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