Question:
Quelles techniques sont utilisées dans le micrologiciel intégré de rétro-ingénierie?
drewbug
2013-04-03 23:49:31 UTC
view on stackexchange narkive permalink

Cette question est liée à une autre question que j'ai postée ici.

Je travaille avec une petite agence de transport en commun sur un site bien ouvert. projet source qui nous aidera à offrir des données en temps réel aux développeurs locaux. Une donnée clé dont nous avons besoin est l'itinéraire de bus actuel sur lequel se trouve un véhicule donné. Actuellement, il n'existe qu'un seul système électronique qui connaît ces informations: l'unité logique du véhicule (VLU) dont chaque véhicule est équipé.

Lorsqu'un conducteur de bus commence un itinéraire, il saisit son numéro d'identification dans le clavier sur l'unité de commande opérateur (OCU). Ce numéro d'identification est envoyé au VLU, qui affiche alors le texte approprié sur les panneaux LED du bus.

Sur l'OCU, il y a deux ports DB9F. Dans le manuel, ils sont décrits comme des "PORTS J1708". L'un d'eux est connecté au VLU et l'autre est à ma disposition. La connexion à celui-ci me permet d'obtenir des données que vous pouvez lire dans mon autre question.

Ce que j'aimerais faire, c'est procéder à une ingénierie inverse du micrologiciel du VLU et voir comment il décide quelles données envoyer ou comment interpréter les données reçues. D'après ce que je peux dire, le firmware utilise RTTarget-32 comme base. Je pense que c'est le cas parce que les chaînes suivantes peuvent être trouvées dans le fichier du firmware:

  RTTarget-32 5.0 16-Bit Boot Code (c) 1996,2006 On Time InformatikOn Time RTOS-32 5.0 Disk Loader (c) 1996,2009 On Time  

Je n'ai pas publié de lien vers le fichier du firmware parce que je sais que les liens vers des fichiers externes sont généralement mal vus sur les sites SE. Si je devais le télécharger, cependant, quel hôte de fichier dois-je utiliser?

Alors, comme l'indique le titre de ma question, quelles techniques dois-je utiliser pour commencer la rétro-ingénierie de ce fichier de firmware?

Deux réponses:
dyasta
2013-04-05 02:29:07 UTC
view on stackexchange narkive permalink

L'inversion du format du firmware peut impliquer de nombreuses choses différentes, selon le niveau de difficulté.

Vous commenceriez par une analyse manuelle avec un éditeur hexadécimal.

Si les données semblent bien structurées, sauf pour les blocs qui semblent compressés (quelques caractères en clair visibles ici et là), alors ce n'est probablement pas obscurci.

Si cela ressemble à du charabia avec peu ou pas de structure (par exemple, quelques exécutions de 0), vous devrez démonter le chargeur de démarrage (vidé de l'appareil) pour extraire l'algorithme d'obscurcissement, en supposant que vous pouvez Ne devinez pas.

À partir de là, commencez à identifier les champs d'en-tête et les composants de l'image du micrologiciel. La plupart auront un noyau et un système de fichiers compressés. Souvent, il y a des décalages dans l'en-tête, pointant vers les composants du micrologiciel.

Vous voudrez essayer BinWalk, pour voir s'il identifie des composants communs au format de fichier . Il est conçu exactement pour cette tâche. Cela fonctionne généralement mieux sur les firmwares Linux, qui utilisent des systèmes de fichiers open source courants comme squashfs ou jffs2, mais cela vaut la peine d'essayer ici.

vous devriez probablement mentionner aussi le vôtre: https://code.google.com/p/firmware-mod-kit/ ... en fait, il semble que `binwalk` repose en partie sur certains scripts de` firmware-mod- kit ». Et l'inverse est également vrai, votre projet * inclut * `binwalk` :) ... vient d'utiliser` extract-firmware.sh` il y a quelques minutes, donc je n'ai pas pu m'empêcher de commenter. +1
Je me sens toujours bizarre de mentionner des choses dans lesquelles je suis impliqué. Oui, les nouveaux scripts du Firmware Mod Kit s'appuient sur Binwalk pour identifier les segments de firmware, puis agissent sur la base des identifications de Binwalk. En enregistrant le layout, il peut ensuite les reconstruire. Binwalk lui-même peut désormais extraire des systèmes de fichiers intégrés. Craig Heffner travaille sur les deux, donc merci à lui.
cb88
2013-04-04 00:30:29 UTC
view on stackexchange narkive permalink

On Time a un kit d'évaluation ici qui pourrait vous aider à en savoir plus. Il semble qu'il fonctionnerait sur du matériel assez standard. Dans le pire des cas, vous devrez peut-être vider un eeprom et le décompiler avec IDA ou autre.

http://en.wikipedia.org/wiki/J1708

Le protocole de ces ports est ouvert. Vous pouvez même communiquer avec lui à partir de votre propre code. Bizarre que ce soit RS-485 plutôt que RS-232 (c'est une version bus de RS-232 et vous auriez probablement besoin d'une carte différente pour l'utiliser). La page wiki y répertorie les protocoles de niveau supérieur possibles que vous pourriez essayer d'étudier.



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...