Reformat spoofbuz.py

This commit is contained in:
nathom 2021-04-15 13:52:51 -07:00
parent 3f758e9442
commit 02eb2cdc9a

View file

@ -9,10 +9,20 @@ import requests
class Spoofer: class Spoofer:
def __init__(self): def __init__(self):
self.seed_timezone_regex = r'[a-z]\.initialSeed\("(?P<seed>[\w=]+)",window\.utimezone\.(?P<timezone>[a-z]+)\)' self.seed_timezone_regex = (
r'[a-z]\.initialSeed\("(?P<seed>[\w=]+)",window\.ut'
r"imezone\.(?P<timezone>[a-z]+)\)"
)
# note: {timezones} should be replaced with every capitalized timezone joined by a | # note: {timezones} should be replaced with every capitalized timezone joined by a |
self.info_extras_regex = r'name:"\w+/(?P<timezone>{timezones})",info:"(?P<info>[\w=]+)",extras:"(?P<extras>[\w=]+)"' self.info_extras_regex = (
self.app_id_regex = r'{app_id:"(?P<app_id>\d{9})",app_secret:"\w{32}",base_port:"80",base_url:"https://www\.qobuz\.com",base_method:"/api\.json/0\.2/"},n\.base_url="https://play\.qobuz\.com"' r'name:"\w+/(?P<timezone>{timezones})",info:"'
r'(?P<info>[\w=]+)",extras:"(?P<extras>[\w=]+)"'
)
self.app_id_regex = (
r'{app_id:"(?P<app_id>\d{9})",app_secret:"\w{32}",base_port:"80"'
r',base_url:"https://www\.qobuz\.com",base_method:"/api\.js'
r'on/0\.2/"},n\.base_url="https://play\.qobuz\.com"'
)
login_page_request = requests.get("https://play.qobuz.com/login") login_page_request = requests.get("https://play.qobuz.com/login")
login_page = login_page_request.text login_page = login_page_request.text
bundle_url_match = re.search( bundle_url_match = re.search(
@ -33,24 +43,30 @@ class Spoofer:
for match in seed_matches: for match in seed_matches:
seed, timezone = match.group("seed", "timezone") seed, timezone = match.group("seed", "timezone")
secrets[timezone] = [seed] secrets[timezone] = [seed]
"""The code that follows switches around the first and second timezone. Why? Read on: """
Qobuz uses two ternary (a shortened if statement) conditions that should always return false. The code that follows switches around the first and second timezone.
The way Javascript's ternary syntax works, the second option listed is what runs if the condition returns false. Qobuz uses two ternary (a shortened if statement) conditions that
Because of this, we must prioritize the *second* seed/timezone pair captured, not the first. should always return false. The way Javascript's ternary syntax
works, the second option listed is what runs if the condition returns
false. Because of this, we must prioritize the *second* seed/timezone
pair captured, not the first.
""" """
keypairs = list(secrets.items()) keypairs = list(secrets.items())
secrets.move_to_end(keypairs[1][0], last=False) secrets.move_to_end(keypairs[1][0], last=False)
info_extras_regex = self.info_extras_regex.format( info_extras_regex = self.info_extras_regex.format(
timezones="|".join([timezone.capitalize() for timezone in secrets]) timezones="|".join(timezone.capitalize() for timezone in secrets)
) )
info_extras_matches = re.finditer(info_extras_regex, self.bundle) info_extras_matches = re.finditer(info_extras_regex, self.bundle)
for match in info_extras_matches: for match in info_extras_matches:
timezone, info, extras = match.group("timezone", "info", "extras") timezone, info, extras = match.group("timezone", "info", "extras")
secrets[timezone.lower()] += [info, extras] secrets[timezone.lower()] += [info, extras]
for secret_pair in secrets: for secret_pair in secrets:
secrets[secret_pair] = base64.standard_b64decode( secrets[secret_pair] = base64.standard_b64decode(
"".join(secrets[secret_pair])[:-44] "".join(secrets[secret_pair])[:-44]
).decode("utf-8") ).decode("utf-8")
vals = list(secrets.values()) vals = list(secrets.values())
vals.remove("") vals.remove("")
return vals return vals