Si seulement vous pouviez mettre la main sur le code pour corriger les fonctionnalités cassées de votre widget électronique bien-aimé. Mais attendez, les pirates informatiques ont les compétences nécessaires pour écrire leur propre firmware… tant que nous pouvons obtenir le binaire compilé dans un format dont le matériel a besoin.

Heureusement, nous avons Uri Shaked pour nous guider à travers ce processus. Cet atelier du 2020 Hackaday Remoticon montre comment déchiffrer le schéma de cryptage utilisé sur le binaire du firmware d’une imprimante 3D. En cours de route, nous découvrons les outils et les techniques utiles pour de nombreuses aventures de déchiffrement binaire chiffré.

L’histoire d’origine de cet atelier a commencé quand Uri a décidé de devenir un supporteur d’une imprimante 3D sur Kickstarter qui avait du matériel correct mais un micrologiciel nul. C’était la deuxième fois qu’il en tombait amoureux, mais la première fois, quelqu’un avait sauvé son bacon en écrivant un firmware personnalisé pour que la chose fonctionne bien. Cette fois, la communauté avait besoin d’aide pour effectuer la rétro-ingénierie du nouveau format binaire avant de pouvoir exécuter du code personnalisé, alors Uri est passé à l’action.

Il utilise un cahier CoLab pendant l’atelier pour aider tout le monde à suivre pendant qu’il exécute une combinaison de commandes shell Python et Linux. Vous pouvez trouver les liens pour tout sur le guide de l’atelier, mais pour être honnête, il n’y a pas beaucoup de sauce secrète ici. Le véritable ingrédient est l’ingéniosité en tant que dumper hexadécimal pour visualiser le code, et Python pour le traiter complète l’essentiel du processus.

Puisque le micrologiciel du modèle d’imprimante précédent utilisait un chiffrement de substitution, Uri essaie de compresser le binaire cible. Il semble que l’utilisation d’un cryptage robuste comme AES 256 rendra difficile la compression efficace. Puisque le fichier bin passe de 58 ko à 38 ko, il y a de fortes chances que ce soit juste une substitution.

Ensuite, il exécute un histogramme pour tracer des occurrences répétées de caractères et il devient immédiatement évident quelle valeur binaire représente 0x00, car ce sera la valeur la plus fréquemment utilisée (pensez aux zéros non significatifs sur les nombres 32 bits), ainsi que 0xFF qui remplit généralement les extrémités des binaires. Ceci est confirmé en recherchant la fiche technique du microcontrôleur STM32 pour constater que la table de réinitialisation vectorielle est toujours placée au début de la mémoire du programme. Étant donné que de nombreuses valeurs de ce tableau sont connues et que l’emplacement des valeurs inconnues est spécifié, cela s’avère être une clé essentielle pour démarrer l’effort de déchiffrement.

Le reste est un jeu intéressant de recherche de chaînes obscurcies. Uri a utilisé DotPeek pour décompiler le logiciel informatique .NET qui contrôle l’imprimante et localise quelques chaînes que le logiciel écoute sur la connexion série. Étant donné que l’imprimante les enverra à l’ordinateur, ils doivent exister quelque part dans le binaire.

Le tracé montre la distribution des caractères répétés dans la chaîne «FIRMWARE_VERSION». Utilisé pour visualiser le modèle (pas les valeurs réelles elles-mêmes) qui est ensuite recherché dans le fichier binaire.

Ce diagramme montre une fonction écrite par Uri pour visualiser la répétition dans les chaînes. Il l’utilise pour juger si une chaîne a suffisamment de répétition pour servir de modèle identifiable de manière unique dans le binaire qui révélera alors la substitution pour chacune de ces valeurs. Ici, il a frappé le mur de briques à plusieurs reprises avant qu’un moment eureka révèle que les paires d’octets du binaire sont inversées. À partir de là, il commence rapidement à reconstituer une table de substitution – en utilisant une vue de vidage hexadécimale personnalisée qu’il a écrite en Python pour vérifier le processus au fur et à mesure.

En raison d’un problème avec l’enregistrement Zoom, le segment après la section des laboratoires de l’atelier n’a pas été enregistré, mais tout ce dont vous avez besoin est disponible dans cette vidéo. Suivez l’exemple d’Uri, téléchargez les fichiers qu’il lie et voyez si vous pouvez trouver votre propre chemin à travers le reste des substitutions.

C’est un moyen fantastique de s’améliorer dans ce genre de tâche de désobfuscation. Nous avons à la fois le binaire lui-même et le souvenir de première main d’Uri de l’expérience pour nous guider. Le travail est vraiment un puzzle sans image sur la boîte, mais comme pour la plupart des choses dans la vie, vous vous y familiarisez à mesure que vous en faites plus.