Reverse engineering AH Soundbox

Hallo hackers,

Ik heb ook mijn audiobox open gekraakt met de bedoeling om een paar audiofragmenten te vervangen voor een origineel cadeautje voor iemands verjaardag aanstaande vrijdag. Ik heb de ROM gedumpt en zoals sommige van jullie en ben ik er achter gekomen hoe de index werkt en waar alle audiofragment staan. Ik zou wel in staat zijn om de audio in te voegen en een nieuwe index te genereren, maar C code ben ik niet bekend mee. Heeft iemand al een manier gevonden om audio bestanden te encoderen naar het F1A format?

Helaas moet ik je teleurstellen dat dit wel een vrij specifiek pittig stukje software engineering is wat niet veel hackers binnen ons clubje beheersen. (Ik ook niet). C code is wel echt een basisvereiste qua kennis dus ik denk dat je deadline van vrijdag erg pittig gaat worden.

Ik heb natuurlijk wel enige programmeer kennis, maar ik hoop dat chatgpt het kan vertalen naar een high level language of er een wrapper voor kan genereren.

Maar om audio te injecteren moet ik wel de bijpassende checksum kunnen genereren. Ik denk dat het misschien gaat om crc-32, maar het is me nog niet gelukt om een match te krijgen met de ruwe f1c bestanden. @shiz volgens mij was jij ook al zo ver gekomen aan je extractor script te zien. Heb je misschien meer kennis hierover?

Hier is nog een foto van de PCB zonder de mcu en de flash.

Ik zie nog geen programmeerlijntjes. Dat zou misschien pin16 (PB9) kunnen zijn, maar die is niet aangesloten.

Wel zie ik pin21 onderlangs lopen en die via een DNP (R17) terugkomt bij S2. Tevens gaat pin21 naar R1 (DNP) naar pin10 van de MCU.

Zou er misschien nog een een mogelijkheid zijn om wat arbitrary code te draaien (overflow ‘bestandssysteem’ in de flash?) :smiley:

thijsnl

3 Likes

Ik heb gisteravond in Kicad even snel een schema gemaakt:

5 Likes

Ik zat trouwens verkeerd. De UARTRX pin is pin 15 en die wordt wel naar buiten gebracht. Markering P1.P.

Daar zie ik nog geen activiteit op met de logic analyzer (0v). Ook met pulling voor opendrain geen succes.

Daarnaast lijkt de CRC32 in het begin ook niet standaard. Logisch is dat hij over de header gaat, maar misschien ook incl. Data of enkel de data.

De standaard polynomen/IVs geven hier nog geen match met de eerste 4 bytes uit de file entry.

Hebben mensen soundboxjes over die nog niet opengesloopt zijn?

Vraag het voor een vriendin van me, bij haar zijn ze allemaal uitverkocht.

@nemo_magneet Ik zal morgen ff kijken. Volgens mij had de AH op de Christiaan Huygensplein (Amsterdam) ze nog. Mocht dat zo zijn dan koop ik er zoizo 1 en dan laat ik het wel weten.

Ik had zojuist een goede ingeving en we denken te moeilijk

door de SDK gespit en zag weinig tot geen CRC32, maar wel veel CRC16.

Conclusie:

De eerste 2 bytes zijn een CRC16 van de 32 bytes header. De CRC gaat dus over 30 bytes.

CRC16 CCIT

Poly: 0x1021
IV: 0
Final Xor: 0

Ik vermoed dat de volgende 2 bytes de CRC16 van de data zijn, ga ik morgen even naar kijken.

UPDATE: ik had het over 20 bytes, maar dat moest dus 0x20 bytes zijn. Heb het bericht aangepast

UPDATE2:

de datachecksum is inderdaad CRC16-XMODEM. Nu kunnen we onze eigen samples/geluidjes in de flash chip zetten!

1 Like

Die soundboxen zijn hier in de buurt ook uitverkocht, maar zoiets is vast ook wel na te bouwen met bijvoorbeeld een Raspberry Pi, camera, speakertje en de geluiden van @shiz

Heb hier een begin gemaakt, met dank aan ChatGPT: GitHub - idserda/ah-dieren-raspi: Albert Heijn - Dieren laten van zich horen - On Raspberry Pi . Deze maakt gebruik van een USB camera. Die custom barcode wordt nog niet goed herkend, maar moet wel te doen zijn. Later even verder als ik m’n handen vrij heb :slightly_smiling_face:

1 Like

Ik heb een python script ‘gemaakt’ (ok, chatgpt heeft hem 100% geschreven) die een flash dump kan extracten en ook kan laten zien of alle CRC’s kloppen. Dit kan handig zijn met eigen flash images.

Kenmerkend is dat de testdir eerder uit dit topic geen valid data CRC heeft (opzet?)

soundbox.py

uitvoeren gaat als volgt: python3 soundbox.py flashimage.bin [-e]

P.s. Directory support is WIP, in principe zitten alle samples in de directory ‘testdata’, vandaar dat de size ongeveer zo groot is als de flash zelf.

In theorie zou je meerdere directories kunnen nesten, maar gezien het target lijkt dit niet nodig.

Binnenkort ook de andere kant op (inpakken/embedden van f1c audio files in een flash binary)

UPDATE:

de CRC mismatch bij de testdir is ook opgelost. Blijkbaar is die header met de hand gemaakt, want de alignment van het datasegment op 16 bytes lijkt niet helemaal goed gegaan te zijn (er zijn 32 te veel 0xFF). Bij aftrek van deze klopt de data CRC wel!

Nu nog de F1C decoder/encoder aan het werk krijgen.

1 Like

tip : vraag bij je lokale Appie of ze toevallig defecte (en geretourneerde) exemplaren hebben liggen. Mijn vrouw werkt bij een filiaal, zo ben ik er aan gekomen. Eentje had een mechanisch defect in de leesunit. Zo gefixt nadat ik m had opengemaakt.

Ze vertelde me al dat iemand zn eigen geluiden had geladen, maar wist helaas niet te vertellen wie en hoe.

2 Likes

Bedankt voor het versturen, je verzending is ontvangen :smiley:

Hier ook geen reader kunnen kopen…

Als eerste stap om het met een app te doen het lezen van de ah barcode toegevoegd aan de zxing library.

De volgende stap is om deze in Android app te gebruiken…

1 Like