Heuristic scheme #Not enabled by default, see commit note

This is not enabled by default.
If you wish to use it, add following snippet to popup.html.

```
<option value="Heuristic">Heuristic</option>
```
This commit is contained in:
FoxRefire 2024-08-25 12:02:58 +09:00
parent 51d9503645
commit c2dfbd5d2f

View File

@ -0,0 +1,59 @@
import re
def replaceRequest(payload):
challengeB64 = base64.b64encode(challenge).decode()
challengeArr = str(list(challenge))
# Trying decode payload, challenge might be raw bytes if it failed
try:
decodedPayload = payload.decode()
except:
return challenge
# Challenge might be JSON/XML stored B64-encoded string
replaced = decodedPayload.replace(r"(?<=(\"|\'|>))CAES.*?(?=(\"|\'|<))", challengeB64).replace(r"(?<=(\"|\'|>))CAQ=(?=(\"|\'|<))", challengeB64)
if(decodedPayload != replaced):
return replaced
# Challenge might be raw B64-encoded string
replaced = decodedPayload.replace(r"^CAES.*?=$", challengeB64).replace(r"^CAQ=$", challengeB64)
if(decodedPayload != replaced):
return replaced
# Challenge might be Uint8Array
replaced = decodedPayload.replace(r"\[0?8 ?, ?0?1 ?, ?[0-9 ,]*?\]", challengeArr).replace(r"\[0?8 ?, ?0?4]", challengeArr)
if(decodedPayload != replaced):
return replaced
def findLicense(response):
# Trying decode response, license might be raw bytes if it failed
try:
decodedResponse = response.decode()
except:
return response
# License might be JSON/XML stored B64-encoded string
try:
return re.search(r"(?<=(\"|\'|>))CAIS.*?(?=(\"|\'|<))", decodedResponse).group()
except:
pass
# License might be raw B64-encoded string
try:
return re.search(r"^CAIS.*?=$", decodedResponse).group()
except:
pass
# License might be Uint8Array
try:
foundStr = re.search(r"\[0?8 ?, ?0?2 ?, ?[0-9 ,]*?\]", decodedResponse).group()
return bytes(json.loads(foundStr))
except:
pass
payload = loadBody("blob")
payload = replaceRequest(payload)
response = await corsFetch(licUrl, "POST", licHeaders, payload, "blob")
licence = findLicense(response)