Setup Guide
Getting this running is easier than convincing your health insurance to pay for the ECS remote.
Ubuntu/Debian
Section titled “Ubuntu/Debian”Install The Stuff
Section titled “Install The Stuff”sudo apt install python3.12-venv python3-bluez bluez
# Make sure these existwhich rfcomm hcitool bluetoothctlPython Setup
Section titled “Python Setup”# Virtual env with system packages (bluez needs this)python3 -m venv .venv --system-site-packages
# Install the rest.venv/bin/pip install -e .
# Activatesource .venv/bin/activate
# Sanity checkpython3 -c "from Crypto.Cipher import AES; print('Crypto: OK')"python3 -c "import bluetooth; print('Bluetooth: OK')"Bluetooth Permissions
Section titled “Bluetooth Permissions”Linux and Bluetooth permissions. A tale as old as time.
# Option 1: Just sudo itsudo python3 m25_bluetooth.py scan
# Option 2: Add yourself to the club (needs re-login)sudo usermod -aG bluetooth $USERFinding Your Wheels
Section titled “Finding Your Wheels”# They show up as "M25V1_..."sudo python3 m25_bluetooth.py scan --m25Write down the MAC addresses. You’ll need both.
Getting Your Keys
Section titled “Getting Your Keys”Each wheel has a QR code sticker. The string it contains is called the “Cyber Security Key”. Very dramatic.
- Scan it with your phone (any QR app works)
- Get a 22-character string that looks like gibberish
- Convert it:
python3 m25_qr_to_key.py "YourQRCodeString"# Outputs: 20a61dd47a91f690d93ca601d113806cDo this for both wheels. Yes, they have different keys.
Connecting
Section titled “Connecting”# Bind the RFCOMM devicesudo python3 m25_bluetooth.py connect AA:BB:CC:DD:EE:FF
# Check it workedpython3 m25_bluetooth.py status
# When you're donepython3 m25_bluetooth.py disconnectTest It
Section titled “Test It”# Dry run (no Bluetooth needed, just generates packets)python3 m25_ecs.py --left-key HEXKEY --right-key HEXKEY --dry-run
# Decrypt a packet you capturedecho "ef0024..." | python3 m25_decrypt.py -k YOUR_HEX_KEYIf you see sensible output, you’re in business.