Question:
Comment se différencier des différents fichiers hexadécimaux de différentes familles de microcontrôleurs?
Abdul Rehman
2013-03-24 21:25:06 UTC
view on stackexchange narkive permalink

Existe-t-il un moyen de différencier les fichiers hexadécimaux de différents microcontrôleurs? J'ai un fichier hexadécimal et maintenant j'ai oublié de quel micro-contrôleur il appartient. Existe-t-il un outil disponible pour le dire? ou une astuce ou une astuce à savoir?

Modifier: Il y a une question similaire ici, mais cette question appartient spécifiquement à la famille PIC alors que je vais faire si nous devons nous différencier de différentes familles comme AVR, 8051, PIC etc.

Connexes: http://reverseengineering.stackexchange.com/q/233/187
Peut-être pourriez-vous déjà spécifier la marque du microcontrôleur? ARM, PIC, ..?
J'ai modifié ma question pour la clarifier
Peut-être que quelqu'un pourrait contribuer à des modèles d'octets communs que vous êtes susceptible de voir pour différentes architectures? Est-ce la question que vous posez?
Trois réponses:
#1
+6
perror
2013-03-24 22:39:43 UTC
view on stackexchange narkive permalink

Ma première idée serait d'effectuer une analyse de fréquence sur les octets alignés. Pour la plupart des langages d'assemblage, les octets les plus pertinents sont alignés sur les bits les plus significatifs.

Il peut donc être assez facile de créer un séparateur capable de reconnaître le type d'ASM. Mais, étonnamment, après quelques recherches sur Google, je n'ai trouvé aucun outil ou document à ce sujet ...

Il y a peut-être quelque chose à faire ici.

#2
+4
Dougall
2013-03-25 05:51:31 UTC
view on stackexchange narkive permalink

Je ne connais pas d'outils conçus pour cela. En pratique, le charger dans IDA (ou dans tout autre désassembleur) avec des architectures différentes jusqu'à ce qu'il semble correct est probablement le moyen le plus simple de le faire. Vous pourrez peut-être écrire un script pour automatiser cela.

Si vous souhaitez créer votre propre outil, je vous suggère de regarder le discours de Christopher Domas "L'avenir de la visualisation binaire dynamique RE". Il aborde un certain nombre de techniques qui peuvent être utilisées pour analyser des données inconnues. L'idée générale représente la fréquence de chaque groupe de deux ou trois octets dans chaque fichier. Les graphiques sont nettement différents entre les différentes architectures et peuvent être utilisés pour identifier automatiquement les types de données. L'outil réel, et l'ensemble de données dont vous auriez besoin, ne sont pas accessibles au public, mais c'est la voie à suivre si je voulais faire une détection automatique de l'architecture.

Une approche plus simple serait de rechercher le prologue de la fonction modèles dans différentes architectures. Bien que la mise en œuvre soit plus simple, il faudrait plus de temps humain pour préparer l'ensemble de données (car l'identification des prologues de fonction ne peut pas être automatisée). Certains processeurs peuvent ne pas être assez puissants pour exécuter du code C, et si le code n'est pas compilé, il est possible de ne pas avoir de prologues de fonction prévisibles. Vous pourrez peut-être trouver d’autres opérations courantes que vous pourriez rechercher.

Ma première pensée a également été l'outil Cantor Dust de Domas, mais je n'arrive pas à trouver la version de démonstration en ligne nulle part. En l'absence de cela, un simple histogramme de séquences de 2 ou 3 octets dans le fichier peut donner une image rapide du type de données qu'il contient et conduire à des instructions communes. Certains éditeurs hexadécimaux ont une fonctionnalité d'histogramme intégrée si vous ne souhaitez pas écrire votre propre outil.
@nopnopgoose, une version «démo / alpha» de Cantor Dust peut être téléchargée à partir des [archives des médias black hat] (https://media.blackhat.com/bh-us-12/Arsenal/Domas/_cantor.dust_.7z.zip ). Si vous renommez votre binaire en "visual_re.example" sous / resources / vous pouvez jouer un peu avec.
#3
-2
Drew DeVault
2013-03-25 00:28:54 UTC
view on stackexchange narkive permalink

Essayez de vous faire une idée des types de processeurs qu'il pourrait cibler. Vous pouvez probablement aussi deviner la longueur en bits du processeur en regardant ce fichier (file_size% 32 == 0? Probablement 32 bits). Une fois que vous avez une liste simple, exécutez le binaire via des désassembleurs et voyez si le code a du sens. Essayez de l'exécuter dans des processeurs émulés et voyez s'il fait quelque chose.

De plus, gardez à l'esprit que des instructions non valides peuvent ne pas signifier que vous avez le mauvais processeur, il peut s'agir simplement de données ou de quelque chose. Cela vaut probablement la peine de consulter le fichier pour voir si vous ne trouvez pas de chaînes ou quoi que ce soit, juste pour avoir une meilleure idée de l'endroit où se trouvent les choses.

Nous parlons ici de microcontrôleurs, il existe également des microcontrôleurs 8 bits et 16 bits. Il ne s’agit pas d’un ordinateur.
Oh, oups, mal interprété la question. Toutes mes excuses.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...