"Bodeting" - The Activity of going insane reverse engineering a PSA System
|
|
il y a 6 mois | |
|---|---|---|
| firmware | il y a 6 mois | |
| research | il y a 6 mois | |
| sample-data | il y a 6 mois | |
| README.md | il y a 6 mois |
Important Disclaimer: While the structural fields of the packets are mostly well understood, the checksum calculation remains quiet mysterious. Without correctly reproducing the checksum, generating functional packets yourself remains unreliable unless you copy known working ones, therefore this can only be used for repetitive actions with already learnt and working commands.
Contains valid payloads that get accepted by the system if sent to multicast address 239.192.55.2 stop-payloads.txt
If you want to help out with figuring things out this is where to look I'd say
Please IF YOU KNOW HOW TO MAKE THE CHECKSUMS WORK PROPERLY OR KNOW MORE THAN ME PLEASE HELP ME!!!
Server: MQX HTTP - Freescale Embedded Web Server)RTCS FTP Server Readyd:\JenkinsJobs\workspace\Indus\Harmonys\Harmonys_trio\Metis_appli\Middlewares\Third_Party\LwIP\Based on repeated appearances in both firmware strings :
| Username | Password |
|---|---|
public |
jkl1vi5erjnfh |
public |
aSe2=9Z8gOi37* |
CHK = %04x (%d)
CHK BAD !!! %dAlso of note :
F_traitement_trame_PROTOCOLE
F_traitement_trame_vie_repeteur
REP STREAM !!! ERREUR !!!
RX %d/%d (%d/%d)
Each IP Button Bodet Sound Protocol Payload follows a consistent format:
[MEL HEADER]-[LENGTH]-[START]-[SEQUENCE]-[COMMAND]-[ZONE INFO]-[METADATA]-[CHECKSUM]
4D 45 4C0021 = 33 bytes0100FF, suggesting padding or reserved spaceExamples:
3001 = Melody5001 = Alarm5002 = StopEach zone bit is encoded as:
byte_index = (zone - 1) // 8
bit_index = (zone - 1) % 8
set bit (7 - bit_index) in byte[byte_index]
You can enable multiple zones in a single packet by OR-ing the relevant bits
Examples:
8000 0000 0000 0000 0000 0000 = Zone 8 only0000 8000 0000 0000 0000 0000 = Zone 16 only0000 0000 0000 0000 0020 0000 = Zone 86Note : this is just an assumption not enough testing has been done
After Zone Info:
0001 - Probably Fixed field (sometimes 0002 with certain multizone commands)03 - Volume (1-8)02 - Repeat count (or 00 for infinite)09 - Melody ID (9 in this case)0100 - Possible end-of-command marker, appears to terminate command blocks (expept for stop commands)01 - Fixed(sum of all previous bytes) & 0xFF in most cases, but not always.4d454c 0021 0100 28ff 3001 8000 0000 0000 0000 0000 0000 0001 03 00 01 09 0100 01 d5
8000 ...03, Repeats = 00 (infinite)09D54d454c 001a 0100 24ff 5002 ffff ffff ffff ffff ffff ffff 0f 01 07
FF FF ... (you actually cant choose which zone to turn of system refuses zonemaps here)5002)0F 01 instead of 0100 → supports theory that 0100 indicates only the end of melody/alarm command block07While many packets obey a simple rule:
checksum = sum(packet[:-1]) & 0xFF
... others diverge due to what appears to be a variable offset or conditional logic. Several hypotheses have been explored:
If the checksum is wrong, the Bodet PSA system and its components obviously ignore the packet. Hence generating your own commands reliably is not yet possible unless mimicking an exact known good packet.
This makes full integration with modern systems (for triggering Bodet audio via automation) dependent on further reverse engineering.
If you have firmware dumps, better knowladge of UDP and reverse engeneering checksums or just generally more insights, feel free to contribute