Initial project import
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
import base64
|
||||
import json
|
||||
import random
|
||||
import time
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
class OrderedMap:
|
||||
def __init__(self) -> None:
|
||||
self.keys = []
|
||||
self.values = {}
|
||||
|
||||
def add(self, key: str, value: Any) -> None:
|
||||
if key not in self.values:
|
||||
self.keys.append(key)
|
||||
self.values[key] = value
|
||||
|
||||
|
||||
def _turnstile_to_str(value: Any) -> str:
|
||||
if value is None:
|
||||
return "undefined"
|
||||
if isinstance(value, float):
|
||||
return str(value)
|
||||
if isinstance(value, str):
|
||||
special = {
|
||||
"window.Math": "[object Math]",
|
||||
"window.Reflect": "[object Reflect]",
|
||||
"window.performance": "[object Performance]",
|
||||
"window.localStorage": "[object Storage]",
|
||||
"window.Object": "function Object() { [native code] }",
|
||||
"window.Reflect.set": "function set() { [native code] }",
|
||||
"window.performance.now": "function () { [native code] }",
|
||||
"window.Object.create": "function create() { [native code] }",
|
||||
"window.Object.keys": "function keys() { [native code] }",
|
||||
"window.Math.random": "function random() { [native code] }",
|
||||
}
|
||||
return special.get(value, value)
|
||||
if isinstance(value, list) and all(isinstance(item, str) for item in value):
|
||||
return ",".join(value)
|
||||
return str(value)
|
||||
|
||||
|
||||
def _xor_string(text: str, key: str) -> str:
|
||||
if not key:
|
||||
return text
|
||||
return "".join(chr(ord(ch) ^ ord(key[i % len(key)])) for i, ch in enumerate(text))
|
||||
|
||||
|
||||
def solve_turnstile_token(dx: str, p: str) -> Optional[str]:
|
||||
try:
|
||||
decoded = base64.b64decode(dx).decode()
|
||||
token_list = json.loads(_xor_string(decoded, p))
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
process_map: Dict[Any, Any] = {}
|
||||
start_time = time.time()
|
||||
result = ""
|
||||
|
||||
def func_1(e: float, t: float) -> None:
|
||||
process_map[e] = _xor_string(_turnstile_to_str(process_map[e]), _turnstile_to_str(process_map[t]))
|
||||
|
||||
def func_2(e: float, t: Any) -> None:
|
||||
process_map[e] = t
|
||||
|
||||
def func_3(e: str) -> None:
|
||||
nonlocal result
|
||||
result = base64.b64encode(e.encode()).decode()
|
||||
|
||||
def func_5(e: float, t: float) -> None:
|
||||
current = process_map[e]
|
||||
incoming = process_map[t]
|
||||
if isinstance(current, (list, tuple)):
|
||||
process_map[e] = list(current) + [incoming]
|
||||
return
|
||||
if isinstance(current, (str, float)) or isinstance(incoming, (str, float)):
|
||||
process_map[e] = _turnstile_to_str(current) + _turnstile_to_str(incoming)
|
||||
return
|
||||
process_map[e] = "NaN"
|
||||
|
||||
def func_6(e: float, t: float, n: float) -> None:
|
||||
tv = process_map[t]
|
||||
nv = process_map[n]
|
||||
if isinstance(tv, str) and isinstance(nv, str):
|
||||
value = f"{tv}.{nv}"
|
||||
process_map[e] = "https://chatgpt.com/" if value == "window.document.location" else value
|
||||
|
||||
def func_7(e: float, *args: float) -> None:
|
||||
target = process_map[e]
|
||||
values = [process_map[arg] for arg in args]
|
||||
if isinstance(target, str) and target == "window.Reflect.set":
|
||||
obj, key_name, val = values
|
||||
obj.add(str(key_name), val)
|
||||
elif callable(target):
|
||||
target(*values)
|
||||
|
||||
def func_8(e: float, t: float) -> None:
|
||||
process_map[e] = process_map[t]
|
||||
|
||||
def func_14(e: float, t: float) -> None:
|
||||
process_map[e] = json.loads(process_map[t])
|
||||
|
||||
def func_15(e: float, t: float) -> None:
|
||||
process_map[e] = json.dumps(process_map[t])
|
||||
|
||||
def func_17(e: float, t: float, *args: float) -> None:
|
||||
call_args = [process_map[arg] for arg in args]
|
||||
target = process_map[t]
|
||||
if target == "window.performance.now":
|
||||
elapsed_ns = time.time_ns() - int(start_time * 1e9)
|
||||
process_map[e] = (elapsed_ns + random.random()) / 1e6
|
||||
elif target == "window.Object.create":
|
||||
process_map[e] = OrderedMap()
|
||||
elif target == "window.Object.keys":
|
||||
if call_args and call_args[0] == "window.localStorage":
|
||||
process_map[e] = [
|
||||
"STATSIG_LOCAL_STORAGE_INTERNAL_STORE_V4",
|
||||
"STATSIG_LOCAL_STORAGE_STABLE_ID",
|
||||
"client-correlated-secret",
|
||||
"oai/apps/capExpiresAt",
|
||||
"oai-did",
|
||||
"STATSIG_LOCAL_STORAGE_LOGGING_REQUEST",
|
||||
"UiState.isNavigationCollapsed.1",
|
||||
]
|
||||
elif target == "window.Math.random":
|
||||
process_map[e] = random.random()
|
||||
elif callable(target):
|
||||
process_map[e] = target(*call_args)
|
||||
|
||||
def func_18(e: float) -> None:
|
||||
process_map[e] = base64.b64decode(_turnstile_to_str(process_map[e])).decode()
|
||||
|
||||
def func_19(e: float) -> None:
|
||||
process_map[e] = base64.b64encode(_turnstile_to_str(process_map[e]).encode()).decode()
|
||||
|
||||
def func_20(e: float, t: float, n: float, *args: float) -> None:
|
||||
if process_map[e] == process_map[t]:
|
||||
target = process_map[n]
|
||||
if callable(target):
|
||||
target(*[process_map[arg] for arg in args])
|
||||
|
||||
def func_21(*_: Any) -> None:
|
||||
return
|
||||
|
||||
def func_23(e: float, t: float, *args: float) -> None:
|
||||
if process_map[e] is not None and callable(process_map[t]):
|
||||
process_map[t](*args)
|
||||
|
||||
def func_24(e: float, t: float, n: float) -> None:
|
||||
tv = process_map[t]
|
||||
nv = process_map[n]
|
||||
if isinstance(tv, str) and isinstance(nv, str):
|
||||
process_map[e] = f"{tv}.{nv}"
|
||||
|
||||
process_map.update({
|
||||
1: func_1,
|
||||
2: func_2,
|
||||
3: func_3,
|
||||
5: func_5,
|
||||
6: func_6,
|
||||
7: func_7,
|
||||
8: func_8,
|
||||
9: token_list,
|
||||
10: "window",
|
||||
14: func_14,
|
||||
15: func_15,
|
||||
16: p,
|
||||
17: func_17,
|
||||
18: func_18,
|
||||
19: func_19,
|
||||
20: func_20,
|
||||
21: func_21,
|
||||
23: func_23,
|
||||
24: func_24,
|
||||
})
|
||||
|
||||
for token in token_list:
|
||||
try:
|
||||
fn = process_map.get(token[0])
|
||||
if callable(fn):
|
||||
fn(*token[1:])
|
||||
except Exception:
|
||||
continue
|
||||
return result or None
|
||||
Reference in New Issue
Block a user