Ik probeer wat reverse engineering uit te voeren op een Devolo dlan wifi 500-apparaat (mips-architectuur). Mijn doel is om wat firmware te plaatsen die door mij is gewijzigd.
Dit is waar ik tot nu toe ben gekomen:
- Een firmware-update gedownload van http: // update .devolo.com / linux2 / apt / pool / main / d / devolo-firmware-dlan500-wifi /
- Geëxtraheerde firmware-image uit debian-pakket
- Geanalyseerde afbeelding met binwalk
- Geëxtraheerde inhoud met firmwaremod-kit (aanwezig op Google-code).
- Gewijzigde afbeelding
- Opnieuw opgebouwd met fmk
- Gebruikte webinterface van het apparaat om nieuwe firmware te uploaden
Het is mislukt in stap 7. Ik krijg een bericht met de melding "dit bestand bevat geen geldige gegevens". Dus het apparaat voert een soort verificatie uit voordat updates worden geïnstalleerd.
Dus ik bleef het onderzoeken. De devolo-image bevat een devolo-header / footer, een uboot en een uimage. De koptekst / voettekst moet een soort checksum bevatten. Ik heb geprobeerd de geldige (onvervalste) update te kiezen en een bit op de opvulling veranderd, deze naar het apparaat geüpload en kreeg dezelfde foutmelding.
Als ik wist waar de cheksum is of hoe deze wordt verkregen, zou ik dat kunnen verander het na het opnieuw opbouwen van de afbeelding. Ik vond echter geen documentatie over de devolo-formaten. Om de som te vinden vergeleek ik de hexadecimaal van twee devolo-afbeeldingen: wifi en draadloos (de draadloze afbeelding staat op dezelfde site waar ik de wifi-afbeelding heb gedownload; kon deze link en de fmk-link niet plaatsen omdat ik er minder dan 10 reputatie :(). De kopteksten / voetteksten lijken in de meeste velden erg op elkaar, hoewel ik vond dat geen 32byte-veld een som was. Misschien zou iemand die meer ervaring heeft met reverse engineering mij kunnen helpen.
Ik zou kunnen proberen de som forceren. Omdat het een som is, zou ik een botsing kunnen creëren door bits toe te voegen aan de opvulgebieden. Hiervoor heb ik twee ideeën:
- Stuur elke mogelijke combinatie door het netwerk;
- Gebruik de bibliotheken van de gedownloade afbeelding om de som lokaal te testen;
Optie 1 zou waarschijnlijk een paar jaar duren ...
Voor optie 2 heb ik geprobeerd een virtuele qemu-machine te gebruiken en daar te compileren, en cross-compileren, zonder resultaat, vanwege de devolo-libs die een oude libc-versie ( https://stackoverflow.com/questions/29153924/how-to-solve-c-conflicts-between-system-and-library-dependencies).
Mijn laatste idee is om op de een of andere manier de gedownloade firmware op mijn amd64-machine te emuleren, om daar wat code te compileren die de devolo-libs zou gebruiken, en zo de afhankelijkheidsproblemen te omzeilen.
Dus ik wil alle tips / fouten in mijn vorige stappen en eventuele aanwijzingen over hoe de gedownloade afbeelding op mijn pc moet worden uitgevoerd.
Bij voorbaat dank (al was het maar voor het lezen van mijn vrij lange post).