Prerequisite: Any code listed herein is for educational reference only. Content and code mirrored from Louis Rossmann's Right to Repair wiki; neither I nor Veracious Network take any credit for creating this content.
This is part of the Bambu Lab Authorization Control System article.
Bambu Connect is an Electron App with Security through Obscurity principles, hence it is inherently insecure.
To read the main.js for further analysis or extracting the private key stored by Bambu in the app:
npx asarfix app.asar -k B0AE6995063C191D2B404637FBC193AE10DAB86A6BC1B1DE67B5AEE6E03018A2 -o fixed.asar
npx asar extract fixed.asar src
The private key and certs are further obfuscated, to get cleartext you need to do: Encrypted string from cy() -> ure(string, key) -> RC4 decryption -> decodeURIComponent() -> final string.
Example Python reimplementation to extract the secrets, easy to run. Copy the content of t from function cy() in main.js and paste it here. After running, you have a private key from Bambu Lab.
```python import urllib.parse
def cy(): t = [ # copy from main.js ] return t
def ure(t, e): # RC4 implementation r = list(range(256)) n = 0 s = ""
# Key-scheduling algorithm (KSA)
for o in range(256):
n = (n + r[o] + ord(e[o % len(e)])) % 256
r[o], r[n] = r[n], r[o]
# Pseudo-random generation algorithm (PRGA)
o = n = 0
for byte in t:
o = (o + 1) % 256
n = (n + r[o]) % 256
r[o], r[n] = r[n], r[o]
k = r[(r[o] + r[n]) % 256]
s += chr(byte ^ k)
return s
def lt(t, e): r = cy() n = t - 106 s = r[n] s = ure(s, e) return urllib.parse.unquote(s)
def extract_certs_and_key(): try: result = {} result["Are"] = lt(106, "1o9B") result["fre"] = lt(107, "FT2A") result["private_key"] = lt(108, "Tlj0") result["cert"] = lt(109, "NPub") result["crl"] = lt(110, "x077") except Exception as e: print(f"Error extracting certs/key: {e}")
for key, value in result.items():
print(f"{key}:\n{value}\n")
if name == "main": extract_certs_and_key() ```