mirror of
https://github.com/qwerfd2/Groove_Coaster_2_Server.git
synced 2025-12-22 11:40:19 +00:00
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from Crypto.Cipher import AES
|
|
import re
|
|
import urllib.parse
|
|
from starlette.requests import Request
|
|
|
|
# Found in: aesManager::initialize()
|
|
# Used for: Crypting parameter bytes sent by client
|
|
# Credit: https://github.com/Walter-o/gcm-downloader
|
|
AES_CBC_KEY = b"oLxvgCJjMzYijWIldgKLpUx5qhUhguP1"
|
|
|
|
# Found in: aesManager::decryptCBC() and aesManager::encryptCBC()
|
|
# Used for: Crypting parameter bytes sent by client
|
|
# Credit: https://github.com/Walter-o/gcm-downloader
|
|
AES_CBC_IV = b"6NrjyFU04IO9j9Yo"
|
|
|
|
# Decrypt AES encrypted data, takes in a hex string
|
|
# Credit: https://github.com/Walter-o/gcm-downloader
|
|
def decryptAES(data, key=AES_CBC_KEY, iv=AES_CBC_IV):
|
|
return AES.new(key, AES.MODE_CBC, iv).decrypt(bytes.fromhex(data))
|
|
|
|
# Encrypt data with AES, takes in a bytes object
|
|
# Credit: https://github.com/Walter-o/gcm-downloader
|
|
def encryptAES(data, key=AES_CBC_KEY, iv=AES_CBC_IV):
|
|
while len(data) % 16 != 0:
|
|
data += b"\x00"
|
|
encryptedData = AES.new(key, AES.MODE_CBC, iv).encrypt(data)
|
|
return encryptedData.hex()
|
|
|
|
async def decrypt_fields(request: Request):
|
|
url = str(request.url)
|
|
match = re.search(r'\?(.*)', url)
|
|
if match:
|
|
original_field = match.group(1)
|
|
decrypted_fields = urllib.parse.parse_qs(decryptAES(match.group(1))[:-1])
|
|
|
|
return decrypted_fields, original_field
|
|
else:
|
|
return None, None |