FoxRefire / wvg

Chrome/Firefox extension for pen-testing to retrieve encryption keys of Widevine protected content !DON'T DECRYPT CONTENT UNLESS YOU HAVE THE RIGHT TO DO IT!
GNU Affero General Public License v3.0
233 stars 54 forks source link

NosTV #35

Closed wunerrah closed 2 months ago

wunerrah commented 3 months ago

Loading certifi, charset_normalizer, construct, idna, packaging, protobuf, pycryptodome, pymp4, pyodide_http, pywidevine, requests, urllib3 pyodide.asm.js:9 Loaded certifi, charset_normalizer, construct, idna, packaging, protobuf, pycryptodome, pymp4, pyodide_http, pywidevine, requests, urllib3 pyodide.asm.js:9 POST https://nos71zv1.anycast.nagra.com/NOS71ZV1/wvls/contentlicenseservice/v1/licenses 400 (Bad Request) pyodide.asm.js:9 Uncaught (in promise) PythonError: Traceback (most recent call last): File "/lib/python311.zip/_pyodide/_base.py", line 573, in eval_code_async await CodeRunner( File "/lib/python311.zip/_pyodide/_base.py", line 395, in run_async await coroutine File "", line 100, in KeyError: 'license'

at new_error (pyodide.asm.js:9:10014)
at pyodide.asm.wasm:0x158e62
at pyodide.asm.wasm:0x15ff9e
at _PyEM_TrampolineCall_JS (pyodide.asm.js:9:120223)
at pyodide.asm.wasm:0x1a3494
at pyodide.asm.wasm:0x28a2bd
at pyodide.asm.wasm:0x1e431e
at pyodide.asm.wasm:0x1a397d
at pyodide.asm.wasm:0x1a3c3e
at pyodide.asm.wasm:0x1a3ce0
at pyodide.asm.wasm:0x2689a4
at pyodide.asm.wasm:0x26e800
at pyodide.asm.wasm:0x1a3e08
at pyodide.asm.wasm:0x1a3a98
at pyodide.asm.wasm:0x15f76b
at Module.callPyObjectKwargs (pyodide.asm.js:9:64297)
at Module.callPyObject (pyodide.asm.js:9:65365)
at wrapper (pyodide.asm.js:9:32855)
wunerrah commented 3 months ago

Already try with license blocking and not work

FoxRefire commented 3 months ago

Try replacing python/schemes/NosTV.py with following script:

b64challenge = base64.b64encode(challenge).decode()
payload = json.dumps({"challenge": b64challenge})
res = await corsFetch(licUrl, "POST", licHeaders, payload, "json")
licence = res["license"][0]

Please report back if this works. If this does not work, check the response from the licence server and reply.

wunerrah commented 3 months ago

pyodide.asm.js:9 Uncaught (in promise) PythonError: Traceback (most recent call last): File "/lib/python311.zip/_pyodide/_base.py", line 573, in eval_code_async await CodeRunner( File "/lib/python311.zip/_pyodide/_base.py", line 395, in run_async await coroutine File "", line 97, in KeyError: 'license'

at new_error (pyodide.asm.js:9:10014)
at pyodide.asm.wasm:0x158e62
at pyodide.asm.wasm:0x15ff9e
at _PyEM_TrampolineCall_JS (pyodide.asm.js:9:120223)
at pyodide.asm.wasm:0x1a3494
at pyodide.asm.wasm:0x28a2bd
at pyodide.asm.wasm:0x1e431e
at pyodide.asm.wasm:0x1a397d
at pyodide.asm.wasm:0x1a3c3e
at pyodide.asm.wasm:0x1a3ce0
at pyodide.asm.wasm:0x2689a4
at pyodide.asm.wasm:0x26e800
at pyodide.asm.wasm:0x1a3e08
at pyodide.asm.wasm:0x1a3a98
at pyodide.asm.wasm:0x15f76b
at Module.callPyObjectKwargs (pyodide.asm.js:9:64297)
at Module.callPyObject (pyodide.asm.js:9:65365)
at wrapper (pyodide.asm.js:9:32855)
FoxRefire commented 3 months ago

Go to network tab of DevTools, and then write response from license server

wunerrah commented 3 months ago

{"status":"OK","errorCode":0,"license":["CAUSvAUKtgIIAxIQlHMbzg/jViKoUnPVnnAH9RiR1eClBSKOAjCCAQoCggEBALq+Un2VSjxIN7fL/542zZUssJY5b1k5T3s1RvA4lw30ctsv1yVS/O9WiiXhw9To0UO/NZ+NwgvdW9Sa1DshBg1gwr2mzolow036kfI+SOxzQIufaZf3mDF5ZaRm6Xo8CKkxlVVM5ZLuBWjgQDJ1l9rbAftRlUm5OiEUjwytJlC54t6XYVM7f7D5NQWWeoJGqsSLPm1QGoiJRyc7RVIMPHWQNZmS3Q5g01Noa8Z7H1os5wEWaOVA7CqJMz5MN0momk0Q71Kbo+4oRtnUr947EaJO5DJCBZ8lp3Wic/eDnNg+57NQCAQZF/oERQNQC4wAnJTC2urowfS2OGnGG8g2lpsCAwEAAToJY29uYXguY29tEoADbY+gJXyU2mTZvbo8atbmqJf6b1DsNhFblJF9hcKl8EzpWw3lY+ixSh7bpMsleMHO8QElGEsH6E3qsq/0pYOrKhAL6M+Ih925wKRmeCNSHi909M4ON48T0LkPHWsNRFpkb4jskPrPSUAqmMrIjUnIUaR+hfLLAWnyXl1lvG4H4onHDUh3Q9cNQRA6trJe/3FVVZhcpQUa/iPwUqkVglH27QkSSSIxvXKVMENL6yFDOdfdqNhRyuslwHY4uV9Vad4kbv/VOBfKksZUUC7+BVwl204Mr5M5PnOZTguKfSACk47UV/uynsrLNB8qlUQDKK+XUZi0QiS0Rdf3BY9M2lfPTnE0SLrwVTDDFooKJPRR2NbJ3KtX6sX2tRctfiJZ/4WpH2hnwxXtL/iCbeMIua2ECUKyfr/JkDEuhNMIOoLk0760Q68ZFIyoxzUIe0P8/LTeVwJyg5ju3cYRcGXAppw80FF999i454OHAf4VcCjNAdSR5KNkab4cxSFQ42THbSoS"]}

wunerrah commented 3 months ago

Array ( [status] => OK [errorCode] => 0 [license] => Array ( [0] => CAUSvAUKtgIIAxIQlHMbzg/jViKoUnPVnnAH9RiR1eClBSKOAjCCAQoCggEBALq+Un2VSjxIN7fL/542zZUssJY5b1k5T3s1RvA4lw30ctsv1yVS/O9WiiXhw9To0UO/NZ+NwgvdW9Sa1DshBg1gwr2mzolow036kfI+SOxzQIufaZf3mDF5ZaRm6Xo8CKkxlVVM5ZLuBWjgQDJ1l9rbAftRlUm5OiEUjwytJlC54t6XYVM7f7D5NQWWeoJGqsSLPm1QGoiJRyc7RVIMPHWQNZmS3Q5g01Noa8Z7H1os5wEWaOVA7CqJMz5MN0momk0Q71Kbo+4oRtnUr947EaJO5DJCBZ8lp3Wic/eDnNg+57NQCAQZF/oERQNQC4wAnJTC2urowfS2OGnGG8g2lpsCAwEAAToJY29uYXguY29tEoADbY+gJXyU2mTZvbo8atbmqJf6b1DsNhFblJF9hcKl8EzpWw3lY+ixSh7bpMsleMHO8QElGEsH6E3qsq/0pYOrKhAL6M+Ih925wKRmeCNSHi909M4ON48T0LkPHWsNRFpkb4jskPrPSUAqmMrIjUnIUaR+hfLLAWnyXl1lvG4H4onHDUh3Q9cNQRA6trJe/3FVVZhcpQUa/iPwUqkVglH27QkSSSIxvXKVMENL6yFDOdfdqNhRyuslwHY4uV9Vad4kbv/VOBfKksZUUC7+BVwl204Mr5M5PnOZTguKfSACk47UV/uynsrLNB8qlUQDKK+XUZi0QiS0Rdf3BY9M2lfPTnE0SLrwVTDDFooKJPRR2NbJ3KtX6sX2tRctfiJZ/4WpH2hnwxXtL/iCbeMIua2ECUKyfr/JkDEuhNMIOoLk0760Q68ZFIyoxzUIe0P8/LTeVwJyg5ju3cYRcGXAppw80FF999i454OHAf4VcCjNAdSR5KNkab4cxSFQ42THbSoS ) )

TPD94 commented 2 months ago

Array ( [status] => OK [errorCode] => 0 [license] => Array ( [0] => CAUSvAUKtgIIAxIQlHMbzg/jViKoUnPVnnAH9RiR1eClBSKOAjCCAQoCggEBALq+Un2VSjxIN7fL/542zZUssJY5b1k5T3s1RvA4lw30ctsv1yVS/O9WiiXhw9To0UO/NZ+NwgvdW9Sa1DshBg1gwr2mzolow036kfI+SOxzQIufaZf3mDF5ZaRm6Xo8CKkxlVVM5ZLuBWjgQDJ1l9rbAftRlUm5OiEUjwytJlC54t6XYVM7f7D5NQWWeoJGqsSLPm1QGoiJRyc7RVIMPHWQNZmS3Q5g01Noa8Z7H1os5wEWaOVA7CqJMz5MN0momk0Q71Kbo+4oRtnUr947EaJO5DJCBZ8lp3Wic/eDnNg+57NQCAQZF/oERQNQC4wAnJTC2urowfS2OGnGG8g2lpsCAwEAAToJY29uYXguY29tEoADbY+gJXyU2mTZvbo8atbmqJf6b1DsNhFblJF9hcKl8EzpWw3lY+ixSh7bpMsleMHO8QElGEsH6E3qsq/0pYOrKhAL6M+Ih925wKRmeCNSHi909M4ON48T0LkPHWsNRFpkb4jskPrPSUAqmMrIjUnIUaR+hfLLAWnyXl1lvG4H4onHDUh3Q9cNQRA6trJe/3FVVZhcpQUa/iPwUqkVglH27QkSSSIxvXKVMENL6yFDOdfdqNhRyuslwHY4uV9Vad4kbv/VOBfKksZUUC7+BVwl204Mr5M5PnOZTguKfSACk47UV/uynsrLNB8qlUQDKK+XUZi0QiS0Rdf3BY9M2lfPTnE0SLrwVTDDFooKJPRR2NbJ3KtX6sX2tRctfiJZ/4WpH2hnwxXtL/iCbeMIua2ECUKyfr/JkDEuhNMIOoLk0760Q68ZFIyoxzUIe0P8/LTeVwJyg5ju3cYRcGXAppw80FF999i454OHAf4VcCjNAdSR5KNkab4cxSFQ42THbSoS ) )

Replying to this just so it may help someone in the future --

The reason it's not parsing keys is the response your getting is for a service certificate, not a license response -- you can remedy this in the extension by choosing the other license server with the same url in the select menu, that way the challenge is correctly included in the scheme.

FoxRefire commented 2 months ago

Unify duplicate topics with #33