Decoding Parallax payloads
Pipeline
- Base64-decode
payload. - Parse bytes as protobuf (schema depends on
rvm). - Optionally correlate with Legacy
GetVehicleStateJSON for field names and units.
No public .proto files exist. Recover schemas from decompiled generated classes (k70, l70, g70, f70, n70, …).
Quick inspection
echo '<payload-b64>' | base64 -d | protoc --decode_raw
APK decode entry points
| File | Role |
|---|---|
cm/c.smali | RVM enum + parseRvmData() for most topics |
cq/f.smali | Extra decoders (charging.session.status → f70/v, energy.high_voltage.battery_state → l70/p, …) |
cm/b.smali | Enum → handler mapping |
Money submessages
Session cost and similar fields use tk/b:
| Field | Type |
|---|---|
currencyCode | string (e.g. USD) |
units | int64 major units |
nanos | int32 fractional nanos |
Workflow for building .proto files
- Read
FIELD_NUMBERlines from the APK class for that RVM. - Capture samples via subscription script or MITM.
- Validate with
protoc --decode_rawand domain pages under Domains. - Snapshot GetVehicleState at the same time to label enums and floats.
Domain pages document known message types per RVM.