Rooter le SMEG+?

Discussion dans 'SMEG+' démarrée par pixx, 2 Mars 2018.

  1. pixx

    pixx Membre

    Inscrit depuis le :
    28 Février 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Salut à tous!

    Je tenais à partager mes recherches concernant le SMEG+ et ses possibles failles de sécurité.

    J'ai une 308 en finition Business, et une chose qui me manque est la clim auto.
    Mais vu que le contrôle de la clim se fait depuis l'écran, ça se pourrait que le hardware de contrôle de la clim soit identique, et que l'option soit juste logicielle.

    En gros, la meilleure voie que j'ai trouvée avec le SMEG+, c'est d'éditer les fichiers de l'archive de mise à jour, puis de la flasher avec la méthode habituelle.
    L'archive contient pas mal de fichiers intéressants, et notamment des bases de données avec des paramètres éditables.
    Je soupçonne que l'un des paramètres règle l'activation/désactivation de la clim auto.
    Je ne l'ai pas sous les yeux, mais je me souviens au moins avoir vu passer un paramètre concernant le "bi-zone".

    Certains ont déjà changé avec succès certains paramètres, mais pas pour la clim, et uniquement sur SMEG+IV2 (voir plus bas).

    Voilà donc un peu pêle-mêle les infos que j'ai trouvées. Je les partage en espérant que ça serve et qu'on puisse trouver une solution.
    J'éditerai ce post avec de nouvelles infos si j'ai le temps.


    Informations matérielles
    Le SMEG+ est fabriqué par Magneti Marelli pour PSA.

    Informations logicielles
    Système d'exploitation : VxWorks
    Plus particulièrement, ça serait AltiVec VxWorks 5.5
    Altivec a l'air d'être une palteforme matérielle basée sur PowerPC. Une " extension SMID ". À creuser.
    Le dev est fait en C++ (source : un ingé de chez Magneti Marelli).

    Fichiers .xxx.inf
    C'est les fichiers de checksum.
    Voir plus bas pour calculer la checksum après modif.

    Upgplugin.out
    À la racine.
    On dirait un binaire.
    Strings upgplugin.out sort des choses intéressantes.
    On voit tout le process d'upgrade : checksum, chemins…

    Fichiers en _ctrl.bin
    À la racine.
    Je pense qu'ils sont lus par le binaire d'upgrade et contiennent des instructions pour l'upgrade.
    Avec un coup de strings, on voit des chemins de fichiers et pas grand-chose d'autre.

    Bases de données SQLite
    SMEG_PLUS_UPG > NAV > system.bin > data_base > sqlite
    Ce repertoire contient toutes les bases de données, vraisemblablement tous les paramètres.

    Db_manager.sqlite
    Memory ?
    • Backup: Rôle probable : si à 1, le SMEG fait un backup de la base existante avant de wiper la NVRAM pour flasher un nouveau firmware, puis la restaure après.
    Note : probablement une fonction implémentée récemment, car je crois avoir lu que les premières mises à jour effaçaient tous les paramètres.
    Clé très intéressante pour permettre d'écraser, via un futur flash USB, des valeurs qui ne sont pas accessibles par l'interface. Pour cela, la passer à 0 pour l'entrée concernée.
    Exemples à 1 : up_common, up_config, up_user, up_user_hmi, config_options
    Exemples à 0 : tuner, cheatcodes, config, keyboardhistory, radiologo.
    Note : apparemment, les backups sont sauvegardés dans /USER_DATA_BACKUP.
    • ResetAble: Rôle probable : si à 1, peut être réinitialisé dans le cadre d'une remise aux réglages d'usine par l'utilisateur.
    Up_user_hmi.sqlite
    Apparemment, ne concerne que tout ce qui touche à l'audio/radio/bluetooth/affichage/mp3/ipod.

    Bases de données vides
    " Upgrade.sqlite
    " diag_zi.sqlite
    " diagnosis.sqlite


    Repackager les fichiers avec le CRC
    Il faut télécharger http://mira308sw.altervista.org/software/RTXcrc%20(v01.00).zip
    After I changed all my parameters of interest, I squeezed the halyards back using gzip. Backup Options for those who will say:
    gzip -n -6 up_config.sqlite
    Then it is necessary to calculate the checksum for the file using applets RTXcrc:
    RTXcrc.exe -v up_config.sqlite
    And record the value in the file up_config.sqlite.inf opposite words CRC_UNCOMPRESSED
    Then it is necessary to calculate the checksum again. But this time, along with the .inf file:
    RTXcrc.exe -v -i up_config.sqlite
    The output will turn number of 4 characters, appends them after four noughts and the resulting value is written to the first line inf-file.


    Idée pour déclencher une commande sans accès root
    L'interface donne accès à des " cheat codes "
    Les " cheat codes " sont probablement liés à une commande interne.
    Peut-être que la commande interne associé au cheat code est définie dans une base de données ou un fichier de configuration modifiable. Au pire, un binaire éditable.
    Dans ce cas, on pourrait associer un cheatcode existant (ou en créer un nouveau, pourquoi pas) qui lance une commande qui copie les fichiers de conf depuis la clé USB vers / USER_DATA / user_data / SQLITE.

    Fichiers libcheatcode_XXXX.out
    Ces fichiers ont l'air d'être des binaires. On en trouve un peu partout.
    Un petit coup de strings dessus donne des résultats intéressants.
    Il y aurait peut-être moyen de les remplacer par un autre exécutable pour faire les opérations de notre choix.
    Il faudrait:
    • Recompiler pour l'architecture AltiVec VxWorks, ce qui pourrait être difficile sans le SDK
    Idée pour choper l'IP de la voiture, et peut-être avoir un accès root en telnet
    Le SMEG+IV2 offre un accès telnet via son point d'accès Wi-Fi.
    Le SMEG+ n'a pas de Wi-Fi, mais il supporte le Bluetooth PAN (précédemment DUN, PAN depuis MàJ en 2016)
    Peut-être qu'on peut accéder à ses ports par ce biais, mais j'en doute vu la nature de PAN.
    Pour voir l'IP du SMEG, on peut taper le cheat code :
    NETINFO
    Shows information about the internet connection from the car (when available)
    Toutefois après avoir établi une connexion avec le téléphone, NETINFO affiche une IP de DNS mais pas d'IP locale. C'est un échec.

    Accès root via JTAG
    Peut-être que le SMEG expose des ports de debug sur la carte mère.
    Ils donneraient peut-être un accès telnet en root.

    Un cheatcode intéressant: Spytake

    SPYTAKE
    This allows certain system files to be read from the USB stick to the SMEG (+) system.

    Autres cheatcodes
    MIRE
    Vraisemblablement, c'est… une mire. Un strings donne des références à PNG, vertices, TextIMage2D, GPUFreeRAM. Donc probablement un truc graphique.
    Autre point intéressant, c'est de loin le binaire le plus lourd de tous les cheatcodes (162kb)

    Comment décompresser certains fichiers indécompressibles (décompression à l'infini)
    Une piste ici : https://www.clubpeugeot.es/foro/topic/23502-cambiar-temas-de-la-pantalla-multimedia/?page=2
    NOTE : peut-être pas si compliqué. Certains y arrivent direct avec tar xvf ou 7-zip.
    And finally the beast. The file number 3 that of course, brings its crumb. with extension .bin.gz it seems that it is a binary file compressed with gzip but if we try to unzip it with any tool it does not shoot and error goes out. For these cases there is a magnificent tool called binwalk that searches within binary files to see if it recognizes strings and file formats within another file (said very badly and very fast).

    After passing it through the binwalk it tells us:
    File Name Offset Description HARMONY.bin.gz 4 Zlib compressed data, default compression, uncompressed size> = 524288

    So really there is compressed data but not in the form of a file and on top of the first 4 bytes we have left (offset 4 according to binwalk). We edit the file in a hexadecimal editor, we eliminate by hand the first 4 bytes. If we only do that we are left with compressed data but as we also want to open and look at what there is we add a header file gzip, specifically I have added 1f 8b 08 00 00 00 00 00 at the beginning. With these modifications we can decompress the file for example with winrar, gzip or as you prefer. Although it will give us an error, the file can be extracted.

    Well, when it is extracted, the result is another binary file so again to pass binwalk and finally we find more things like png files, many data zones compressed with LZMA, zlib, a parity file and little else. And here I have stood for the moment.


    Idée pour flasher des fichiers sélectivement en utilisant le flasher d'usine
    Le flasher d'usine lit la liste des choses à flasher dans des fichiers à la racine de la clé USB, ou des répertoires du niveau en dessous.
    En changeant cette liste de fichiers, on peut peut-être faire flasher un peu ce qu'on veut au flasher.

    La voie diagbox
    Diagbox est le logiciel de diagnostic de Peugeot. Ou sa copie, je n'ai pas bien compris.
    Apparemment, il serait possible de faire certaines choses avec diagbox.
    Diagbox peut fonctionner avec des interfaces ODB2 chinoises.
    Mais si j'ai bien compris, ça impose un télécodage du véhicule, ou un truc avec un VIN, et ça demande des identifiants peugeot. À ma connaissance c'est incontournable.
    Dispo ici : http://www.c4picasseros.com/t46-d14gb0x-7-y-5-c0mplet0s

    Références
    Hacking SMEG + iv2 and telekodirovanie without DiagBox:
    https://www.drive2.com/l/453828648118518250/

    La même chose en step-by-step:
    http://www.c4-sedan.ru/forum/viewtopic.php?f=61&t=3349

    Collection d'utilitaires peut-être utiles :
    http://mira308sw.altervista.org/fr/

    Infos intéressantes :
    http://twistedminds.ru/2015/06/smeg-radar-dangerz/

    SMEG cheat codes :
    https://www.jvd-projects.nl/peugeot-smeg-cheat-codes/
     
  2. zoc

    zoc Lion Hors catégorie

    Inscrit depuis le :
    16 Octobre 2003
    Messages :
    5 613
    "J'aime" reçus :
    581
    Non.

    Enfin du point de vue utilisateur oui. Du point de vue technique, le SMEG+ n'est qu'un intermédiaire d'affichage, la climatisation étant gérée par un calculateur spécifique qui est différent selon que l'on a la clim simple (refs 16 124 674 80 ou 16 131 533 80) ou clim auto (16 124 675 80 ou 16 131 535 80)

    Accessoirement, avec la clim auto, il y a des capteurs en plus (capteur d'ensoleillement par exemple)...
     
  3. VLud

    VLud Lion de Bronze

    Inscrit depuis le :
    19 Janvier 2018
    Messages :
    1 519
    "J'aime" reçus :
    616
    On peut activer Carplay ou télécoder un peu ce qu'on veut sans Diagbox en modifiant la base de données interne mais ce que tu veux faire n'est pas possible sans changer le calculateur de climatisation voire la façade multifonction si il y a différentes versions (peu probable sur 308).

    Le SMEG gère la climatisation en utilisant le réseau CAN Multimédia / Divertissement qui communique lui même avec la façade multifonction et c'est le calculateur de la façade multifonction qui
    contrôle le calculateur de climatisation ;)
    Pas de façade multifonction branchée = Pas de contrôle ventilation / climatisation (ventilateurs à fond)

    Autre information, les boutons de ton écran tactile communiquent avec un réseau LIN vers la façade multifonction, qui envoie l'information sur le réseau CAN et enfin le SMEG reçoit l'info et change de menu ;)
     
  4. keres

    keres Peugeot Addict

    Inscrit depuis le :
    5 Octobre 2004
    Messages :
    800
    "J'aime" reçus :
    54
    Bonjour, intéressant tout ça !
    Est-ce qu'il est possible d'activer le mirrorlink sur le SMEG+ ?
     
  5. zoc

    zoc Lion Hors catégorie

    Inscrit depuis le :
    16 Octobre 2003
    Messages :
    5 613
    "J'aime" reçus :
    581
    Non.

    On peut le faire sur SMEG+IV uniquement.
     
  6. pixx

    pixx Membre

    Inscrit depuis le :
    28 Février 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Merci à tous pour vos réponses. Très informatif !

    @keres: a priori, il n'est pas possible d'activer le mirrorlink sur le SMEG+ car il est matériellement incapable de le supporter. Le SMEG+IV2 le supporte.

    Du coup, à votre avis: hors clim, qu'est-ce qu'on peut changer/ajouter dans le SMEG+:
    1) Sans Diagbox
    2) Hors SMEG+IV2 (donc sans wifi/telnet)

    Si vous avez quoi que ce soit d'autre d'intéressant, n'hésitez pas à partager ;)

    En particulier, je suis intéressé par le changement des thèmes. J'ai beaucoup lu sur le sujet mais les infos sont éparses et contradictoires. J'ai trouvé des ressources dans l'archive d'upgrade qui ressemblent à des fichiers de thèmes, et je me demande s'il ne suffirait pas d'intervertir les noms de fichier. J'ai aussi vu des références à des thèmes dans les bases de données, et là aussi je pense qu'on peut intervertir.
     
  7. horuscurcino

    horuscurcino Peugeot Addict

    Inscrit depuis le :
    20 Août 2018
    Messages :
    48
    "J'aime" reçus :
    13
    De loin, je pensais comme toi. Mais je n'ai pas pu résoudre les hachages CRC32 pour le dossier \ SMEG_IV2_UPG \ NAV.

    Voici un exemple de la mise à jour 6.4.A.R10:

    CRC32: 1592638180
    SIZE: 43249845
    SIZE_1: 43729920
    SIZE_2: 44199936
    SIZE_4: 45191168
    SIZE_8: 47489024
    SIZE_16: 52363264
    SIZE_32: 63045632


    Quels sont les fichiers que le CRC32 et le SIZE envisagent?
    Sur RT6, nous pouvons utiliser RTxCRC en considérant les fichiers BIN et INF. Mais quand je fais la même chose avec SMEG, cela ne correspond pas!

    Le champ "SIZE" concerne la taille des fichiers sur chaque taille de table d'allocation de fichiers (lorsqu'un lecteur flash est formaté avec 4 Ko, 8 Ko, 32 Ko, etc.).
     
  8. DarkSino

    DarkSino Membre

    Inscrit depuis le :
    7 Septembre 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Salut à tous!

    Voilà pour ma part les infos que j'ai pu tirer des fichiers de mise à jour de SMEG+i V1 5.43.A.R2. J'ai écrit mes trouvailles en anglais car j'ai l'habitude de faire de l'informatique en anglais mais je ne pense pas que cela pose de problèmes puisque toute personne qui comprendra et saura que faire de ces informations n'aura, je pense, aucun problème avec l'anglais. Néanmoins si quelqu'un pense très sincèrement qu'il/elle a les compétences requises mais ne comprends pas l'anglais je suis prêt à traduire.

    Restriction sur le nombre caractères oblige, les infos se trouvent dans le fichier texte joint à ce message...
     

    Pièces jointes:

    • infos.txt
      Taille du fichier:
      9.2 Ko
      Affichages:
      82
    #8 DarkSino, 7 Septembre 2018
    Dernière édition: 20 Janvier 2019
  9. bousqi

    bousqi Membre

    Inscrit depuis le :
    13 Janvier 2019
    Messages :
    13
    "J'aime" reçus :
    0
    Salut DarkSino,

    Je viens de découvrir la possibilité de se connecter à un shell sur un SMEG+ au travers d'un partage de connexion Bluetooth.
    Du coup, j'ai moi aussi commencé à me pencher sur les possibilités qu'un tel accès pouvait offrir, mais avec une mega peur latente de transformer mon SMEG en grosse brique inutile :)

    En fouinant sur le net, je suis tombé de manière indirecte sur ton thread, et sur ton fichier info.txt qui liste pas mal de choses.
    As-tu avancé entre temps ?

    Tout cela étant très récent pour ma part, je n'ai pas encore eu le temps de me plonger en profondeur dans le truc. D'autant plus qu'il fait plutot froid dehors et que quand les enfants sont couchés, il fait déjà très très froid dans la voiture :)
    J'ai tout juste essayé d'extraire des fichiers du SMEG en les copiant sur une clé USB.

    Serais-tu intéressé de partager ton info.txt sur un github afin que je puisse contribuer dedans si je trouve des pistes, des tricks ou autre ,
     
  10. xorcdbit

    xorcdbit Nouveau membre

    Inscrit depuis le :
    5 Janvier 2019
    Messages :
    1
    "J'aime" reçus :
    0
    Salut à tous!
    j'utilise depuis quelques semaines les infos du projets psakey de MWyann sur Github,
    il manque des informations pour les API SMEG+, j'ajoute celle que j'ai utilsé et qui ne sont pas encore diffusées.
    tous les Keywords du projet psakey, je les ai repérés dans le fichier SPY\abs_symbols_base.txt obtenu grâce à la commande Cheat Code "Spystore"
    = top.GetSourceRadio.PTY(); //*01 x1 04d3dfc4 T _ZN11SourceRadio3PTYEv
    = top.GetSourceRadio.TAE(); //*02 x1 04d3e2c0 T _ZN11SourceRadio2TAEv
    = top.GetSourceRadio.RDS(); //*03 x1 04d3e5cc T _ZN11SourceRadio3RDSEv
    = top.GetSourceRadio.Text(); //*04 x1 04d3e8d8 T _ZN11SourceRadio4TextEv
    = top.GetSourceRadio.Preset(); //*05 x1 04d3ec6c T _ZN11SourceRadio6PresetEv
    = top.GetSourceRadio.Frequency(); //*06 x1 04d3ef68 T _ZN11SourceRadio9FrequencyEv
    = top.GetSourceRadio.PSName(); //*07 x1 04d3f2a8 T _ZN11SourceRadio6PSNameEv
    = top.GetSourceRadio.Band(); //*08 x1-- 04d3f63c T _ZN11SourceRadio4BandEv
    = top.GetSourceMedia.MediaState(); //*01 x1 04d3fc3c T _ZN11SourceMedia10MediaStateEv
    = top.GetSourceMedia.TypeName(); //*02 x1 04d3ff38 T _ZN11SourceMedia8TypeNameEv
    = top.GetSourceMedia.AlbumName(); //*03 x1 04d40234 T _ZN11SourceMedia9AlbumNameEv
    = top.GetSourceMedia.ArtistName(); //*04 x1 04d405c8 T _ZN11SourceMedia10ArtistNameEv
    = top.GetSourceMedia.FolderName(); //*05 x1 04d4095c T _ZN11SourceMedia10FolderNameEv
    = top.GetSourceMedia.TotalFolder(); //*06 x1 04d40cf0 T _ZN11SourceMedia11TotalFolderEv
    = top.GetSourceMedia.FolderNumber(); //*07 x1 04d40fec T _ZN11SourceMedia12FolderNumberEv
    = top.GetSourceMedia.TrackName(); //*08 x1 04d412e8 T _ZN11SourceMedia9TrackNameEv
    = top.GetSourceMedia.TotalTracks(); //*09 x1 04d4167c T _ZN11SourceMedia11TotalTracksEv
    = top.GetSourceMedia.CurrentTrack(); //*10 x1 04d41978 T _ZN11SourceMedia12CurrentTrackEv
    si vous en connaissez d'autre partagé.
    bonne création !
     
  11. DarkSino

    DarkSino Membre

    Inscrit depuis le :
    7 Septembre 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Salut bousqi,

    Bon déjà rendons à César ce qui appartient à César: en fait ce n'est pas mon thread mais celui de pixx, mais bref on s'en fout :p.

    Malheureusement j'ai complètement arrété de travailler sur le SMEG+ par manque de temps donc je n'ai pas plus d'infos que ce que j'ai noté dans le fichier infos.txt. Je peux toujours le mettre sur GitHub et t'ajouter en collaborateur mais je n'aurai probablement pas le temps de contribuer moi-même.

    En revanche cette histoire de shell m'intéresse quand même. C'est quel type de shell ? On peut faire quoi avec ? Quand tu parles d'extraire des fichiers du SMEG+ c'est à partir de ce shell ?
    Ce serait bien si tu pouvais partager la procédure à suivre pour y accéder !

    Quant à la possibilité de transformer le SMEG+ en brique je pense qu'il serait bon de chercher un moyen de dumper la flash du SMEG+ et de la restaurer. Comme écrit dans le fichier infos.txt, le SMEG+ utilise U-Boot comme bootloader, je pense qu'il faut creuser de ce côté là. Il faudrait savoir si durant le processus de mise à jour U-Boot charge le kernel VxWorks de la flash ou de la clé USB. Dans le second cas cela pourrait être utile pour débriquer un SMEG+ si U-Boot est toujours fonctionnel.
     
  12. bousqi

    bousqi Membre

    Inscrit depuis le :
    13 Janvier 2019
    Messages :
    13
    "J'aime" reçus :
    0
    Pareil, je vais rendre à César ce qui appartient à Poutine, puisque j'ai trouvé cette info sur un forum qui renvoyait vers un site russe
    https://www.drive2.com/l/453828648118518250/

    La procédure explique grossièrement que les SMEG+ et SMEG+ iV2 ont un telnet actif par défaut. Par conséquent, il est possible d'y accéder si on retrouve l'ip du SMEG. C'est là que l'opération ce complique un peu. Soit le véhicule est équipé de wifi, et on peut facilement retrouver l'IP de SMEG et faire un telnet dessus. Soit on n'a pas de wifi comme moi, et là on peut contourner ce manque avec le Bluetooth.
    En effet, il est possible de partager une connexion internet en Bluetooth. En faisant cela, et sous linux pour ma part, un PAN est créé, et je peux donc retrouver l'IP du SMEG et faire un telnet.
    Après soyons honnète, le shell accessible par telnet est déconcertant. Il s'agit d'un VxWorks qui se manipule par des commandes à la syntaxe très très proche de celle du C (mais on s'y fait).

    Du coup, il est facile d'extraire des logs, des fichiers, et même de modifier le contenu (grâce au point de montage de la clé USB). A chaque fois, je lance un Wireshark en arrière et ça me permet de logger toute ma session. Si tu es intéressé je peux te faire suivre ces logs (en txt), tu verras un peu l'envers du décor.
    VxWorks propose aussi des fonctionnalités de debug de tasks, dump de mémoire etc etc mais je ne connais pas tout ça.
    Si la procédure n'est pas assez claire, je peux faire une sorte de tuto.

    Intéressant comme remarque. Comment peux tu affirmer que UBoot est utilisé ?
    L'inconvénient du shell, (over BT ou Wifi) est que si le SMEG est HS, impossible de le manipuler pour s'y connecter.
    Il n'y a pas deux PINs UART qui traînent par là et qui permettrait d'avoir un accès sûr ? ou un JTAG carrement ?
    Idéalement il faudrait désosser un vieux SMEG plus utilisé :) Personne n'a ca a proposer sur ce forum ?
     
  13. bousqi

    bousqi Membre

    Inscrit depuis le :
    13 Janvier 2019
    Messages :
    13
    "J'aime" reçus :
    0
    Wouah.... énorme le taf de MWyann. Est ce que quelqu'un à poussé ce projet plus loin qu'un Hello World ?
    Super idée que d'utiliser un RPI en usb Gadget !
    Je me demande s'il serait possible de faire un Raspberry branché à ma voiture, et qui se connecte automatiquement à un serveur de fichier lorsque je suis chez moi (sous couverture wifi) pour rapatrier la dernier update des ZAR pour ensuite l'installer.
    Ca m'éviterait de faire des aller retour à ma voiture avec une clé USB.

    Et pourquoi pas faire pareil avec les Maps.

    EDIT 1:
    Après vérification le gadget usb est EEM.... donc c'est du Ethernet over USB.
    Cela pourrait etre un autre moyen d'accéder au shell VxWorks plus facilement.
    Je vais regarder si les RPI peuvent faire du USB Gadget en mass storage
     
  14. DarkSino

    DarkSino Membre

    Inscrit depuis le :
    7 Septembre 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Ah ouai donc c'est carrément le shell VxWorks en kernel space :crazy:. Je ne connais pas trop VxWorks mais il est peut-être possible de dumper la flash en entier directement depuis le shell du coup.

    Pour U-Boot il suffit de regarder le processus de mise à jour d'un SMEG+i:

    La version est affichée tout le long de la mise à jour. On trouve également des chaînes de caractères relatives à U-Boot dans le fichier upgrade.out des fichiers de mise à jour du SMEG+i qui montrent que U-Boot peut être mis à jour. En revanche dans toutes les vidéos de mise à jour que j'ai pu trouver, U-Boot n'est jamais mis à jour, mais ce n'est pas illogique puisqu'il n'y a pas de raison de mettre à jour un bootloader s'il n'y en a pas besoin.

    Quant à une hypothétique liaison série, je ne serai pas étonné qu'il y en ai une quelque part mais d'après moi il faudrait démonter le tableau de bord pour y accéder. Maintenant si cette liaison existe, elle risque de simplement donner accès au shell VxWorks, à moins que... elle donne aussi accès au shell U-Boot ?
     
    #14 DarkSino, 23 Janvier 2019
    Dernière édition: 24 Janvier 2019
  15. bousqi

    bousqi Membre

    Inscrit depuis le :
    13 Janvier 2019
    Messages :
    13
    "J'aime" reçus :
    0
    On peut debug un process ou même faire un display de la mémoire (avec le mapping on doit pouvoir afficher RAM et Flash). Sinon il doit être possible de lire directement le device /ram ou autre. Mais encore une fois un Dump c'est bien, mais un moyen de le reinjecter depuis un bootloader c'est plus safe.
    En gros c'est possible, regarde la liste des commandes qui sont dispo :
    Code:
    -> ......help
    
    help                           Print this list
    dbgHelp                        Print debugger help info
    edrHelp                        Print ED&R help info
    ioHelp                         Print I/O utilities help info
    nfsHelp                        Print nfs help info
    netHelp                        Print network help info
    rtpHelp                        Print process help info
    spyHelp                        Print task histogrammer help info
    timexHelp                      Print execution timer help info
    h         [n]                  Print (or set) shell history
    i         [task]               Summary of tasks' TCBs
    ti        task                 Complete info on TCB for task
    sp        adr,args...          Spawn a task, pri=100, opt=0x19, stk=20000
    taskSpawn name,pri,opt,stk,adr,args... Spawn a task
    tip       "dev=device1#tag=tagStr1", "dev=device2#tag=tagStr2", ...
                                   Connect to one or multiple serial lines
    td        task                 Delete a task
    ts        task                 Suspend a task
    tr        task                 Resume a task
    
    Type <CR> to continue, Q<CR> or q<CR> to stop: netHelp..................
    
    tw        task                 Print pending task detailed info
    w         [task]               Print pending task info
    d         [adr[,nunits[,width]]] Display memory
    m         adr[,width]          Modify memory
    mRegs     [reg[,task]]         Modify a task's registers interactively
    pc        [task]               Return task's program counter
    iam       "user"[,"passwd"]    Set user name and passwd
    whoami                         Print user name
    devs                           List devices
    ld        [syms[,noAbort][,"name"]] Load stdin, or file, into memory
                                   (syms = add symbols to table:
                                   -1 = none, 0 = globals, 1 = all)
    lkup      ["substr"]           List symbols in system symbol table
    lkAddr    address              List symbol table entries near address
    checkStack  [task]             List task stack sizes and usage
    printErrno  value              Print the name of a status value
    period    secs,adr,args...     Spawn task to call function periodically
    repeat    n,adr,args...        Spawn task to call function n times (0=forever)
    version                        Print VxWorks version info, and boot line
    shConfig  ["config"]           Display or set shell configuration variables
    
    Type <CR> to continue, Q<CR> or q<CR> to stop:
    strFree   [address]            Free strings allocated within the shell (-1=all)
    
    NOTE:  Arguments specifying 'task' can be either task ID or name.
    
    value = 1 = 0x1
    -> whoami
    
    value = 1 = 0x1
    -> devs
    drv name             
      0 /null             
      1 /tyCo/0           
      1 /tyCo/1           
      1 /tyCo/2           
      1 /tyCo/3           
      7 /romfs           
      4 /S               
      3 /SYSTEM_DATA     
      3 /ram             
     13 /tgtsvr           
     14 /spi/0           
     15 /spi/1           
     16 /i2c1             
     17 /i2s0             
     17 /i2s5             
     17 /i2s1             
     17 /i2s2             
     17 /i2s3             
     17 /i2s4             
     18 /sound/dsp_mp3cd 
     18 /sound/dsp_usb   
     18 /sound/dsp_cda   
     18 /sound/dsp_mic   
     18 /sound/tuner     
     18 /sound/dsp_a2dp   
     18 /sound/ipod       
     18 /sound/wav       
     18 /sound/tts       
     18 /sound/ts         
     18 /sound/bt_wav     
     19 /G               
     22 /dev/tap         
     23 /DevFp           
     24 /DevNet           
     25 /DevDiag         
     26 /DevKbd           
     28 /DevEol           
      3 /sdhc:1           
      3 /sdhc:0           
      3 /bd0             
     11 /usb2Msc0         
      3 /SYSTEM           
      3 /SYSTEM_TMP_DATA 
      3 /USER_DATA       
      3 /USER_DATA_BACKUP 
      3 /EXTENDED_PARTITION
     16 /i2c0             
     30 /kim             
     31 /ts               
      2 /pipe/qt_091bb2b0 
     27 /seri/1           
      3 /PORTAL_RAMDISK_CACHE
      2 /pipe/qt_04bd7288 
      2 /pipe/qt_06c75d40 
      2 /pipe/qt_04a797a0 
      5 stdio_pty_6b47c80.S
      6 stdio_pty_6b47c80.M 

    L'intéret d'observer UBoot serait de voir s'il n'est pas possible de prendre la main et éventuellement voir s'il est possible de faire un boot depuis du reseau, ou loader une image justement. Le truc ultime serait de découvrir que UBoot intègre un fallback en cas de brickage.

    En regardant la datasheet du SMEG, il est mentionné deux mémoires, une NAND Flash de 4Go certainement pour stocker tout le système de fichiers, et une µSD de 16Go pour la cartographie et le Jukebox.

    Il faut que je regarde plus en détail, mais par rapport à la liste des devices plus haut :

    Code:
      7 /romfs             # Bootloader ROMé ?
      3 /SYSTEM_DATA       # NAND Flash ?
      3 /ram               # RAM
      3 /sdhc:1             # SD interne de 16Go ? ou SD externe sur USB ?
      3 /sdhc:0             # SD interne de 16Go ? ou SD externe sur USB ?
      3 /bd0               # USB Mass Storage device
      3 /SYSTEM            # NAND Flash ?
      3 /SYSTEM_TMP_DATA   # NAND Flash ?
      3 /USER_DATA         # NAND Flash ?
      3 /USER_DATA_BACKUP  # NAND Flash ?
      3 /EXTENDED_PARTITION
    
    Si qq'un est intéressé, vous trouverez des logs de mes sessions dans VxWorks sur ce github :
    https://github.com/bousqi/SMEG_PLUS/tree/master/logs
    Soyez indulgents, le backspace ne fonctionne pas par défaut. Donc les premières sessions sont laborieuses :)
     
    #15 bousqi, 23 Janvier 2019
    Dernière édition: 23 Janvier 2019
  16. DarkSino

    DarkSino Membre

    Inscrit depuis le :
    7 Septembre 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Je ne pense pas que le contenu de la mémoire flash soit directement mappé octet par octet dans l'address space mémoire du CPU. Au mieux les registres de commandes de la flash sont mappés, mais si on les utilise direct comme ça, ça va probablement créer une "collision" ou "data race" avec le kernel VxWorks.

    À ce propos, je tiens à corriger ça:
    J'avais lu sur un diaporama trouvé sur le web que dans VxWorks tout était en mode kernel mais d'après la doc de VxWorks c'est carrément faux. Par contre la doc ne parle pas de notion de "privilège" ou de "droit" pour les applications user-mode, du coup je dirais que toutes les applications ont en fait tout les droits mais je suis pas sûr. Donc pour le shell VxWorks, je sais en fait pas trop quel genre de "privilèges" on a ou pas, est-ce qu'on est limité, etc...

    Après concernant /romfs, ce n'est pas une mémoire ROM et ne stocke pas le bootloader. Il s'agit d'un système de fichier read-only stocké dans la RAM. Le système de fichier est en fait stocké dans l'image vxWorks.bin et est chargé au démarrage par le bootloader (U-Boot du coup), cela permet d'embarquer des applications directement avec le kernel VxWorks. Si tu veux plus d'infos va voir dans le chapitre 10.8 de "Application Programmer's Guide" de VxWorks 6.7.
     
  17. DarkSino

    DarkSino Membre

    Inscrit depuis le :
    7 Septembre 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Je viens tout juste de voir ça dans les logs de test sessions shell:

    Après le "=" de Wiko, le "-l" de VxWorks...
    Je crois que c'est les ingés de chez Micro$oft qui ont programmé VxWorks :lol:
    :lol:
     
  18. bousqi

    bousqi Membre

    Inscrit depuis le :
    13 Janvier 2019
    Messages :
    13
    "J'aime" reçus :
    0
    Je découvre tout ca en effet. Je voudrais essayer de déassembler un binaire qui fonctionne sur cette architecture, en commencant par VxWorks. C'est pas très concluant pour le moment, IDA me sort pas mal d'incohérence. Je ne sais pas trop comment configurer cette plateforme pour générer un dissassembly cohérent.
    Tu as l'air de bien connaitre cette environnement. Tu as déjà eu à faire ce VxWorks ?
    As tu un idée, aussi grossière qu'elle puisse être (ou pas), de la séquence de boot du SMEG ?
    U-Boot (certainement stocké en Flash), ... -> .... -> VxWorks ?
     
    #18 bousqi, 24 Janvier 2019
    Dernière édition: 24 Janvier 2019
  19. DarkSino

    DarkSino Membre

    Inscrit depuis le :
    7 Septembre 2018
    Messages :
    6
    "J'aime" reçus :
    0
    Tu veux dire que tu veux désassembler VxWorks ? À moins de savoir très exactement ce que tu fais, je te conseille de laisser tomber. Un binaire de 6.7 MiB ça se désassemble pas comme ça surtout quand c'est un kernel (bon techniquement parlant VxWorks est un OS complet mais bon)... Au mieux si tu connais très bien l'architecture du kernel et la façon dont il est compilé tu peux réussir à extraire et désassembler une partie très spécifique, genre le ROMFS (mais pour le coup ça sert à rien puisqu'on peut y accèder depuis le shell).

    Si tu cherches l'architecture, le SMEG+i utilise le MPC5121e, donc c'est du PowerPC (à ne pas confondre avec l'ISA Power, qui est basée sur PowerPC mais est plus récente), mais je pense que tu le savais déjà. Sinon si tu as essayé de désassembler le fichier vxWorks.bin c'est normal que IDA soit perdu, il ne s'agit pas d'un format standard genre ELF ou PE32, c 'est un format custom de Wind River.

    En fait je connais pas tant que ça, je connaissais de nom avant mais j'avais jamais manipulé VxWorks avant le SMEG+. Je me suis juste renseigné un petit peu dessus lorsque j'ai vu que c'était l'OS du SMEG+, d'abord sur wikipedia (https://en.wikipedia.org/wiki/VxWorks), qui est un bon début, ensuite en feuilletant la documentation que l'on peut trouver sur internet (VxWorks Application Programmer's Guide, Kernel Programmer's Guide, Application API reference, Network Stack for VxWorks 6 Programmer's Guide, Command-Line Tools User's Guide). Je n'ai par contre bizarrement trouvé aucune documentation concernant le shell de VxWorks.

    D'après la doc du MPC5121e, le processeur peut booter au choix depuis une mémoire flash NAND (mode NFC) ou à partir d'une mémoire (ROM, etc...) en utilisant son bus d'adresses et de données (mode LPC). Apparemment il est possible de savoir dans quel mode le MPC5121e a booté en lisant le registre RCWH.
    Dans le cas d'un boot depuis la flash, d'après ce que j'ai compris le processeur charge une et une seule page de la NAND et l'exècute, donc il faut que cette page contienne tout le nécessaire pour initialiser suffisamment le hardware pour continuer le processus de boot. Si c'est le mode utilisée, je suppose que ensuite U-Boot est chargé à partir de cette page. D'après ce que j'ai compris U-Boot est capable de charger VxWorks direct avec la commande bootvx. Après VxWorks doit initialiser et lancer la première tâche user-mode. J'ai cherché s'il y avait un équivalent de /init sur VxWorks mais j'ai rien trouvé donc il est possible que la première tâche à lancer soit paramétrable à la création de l'image VxWorks.
    Pour le mode LPC j'ai pas eu le temps de regarder plus que ça. Après je pense aussi que U-Boot est en flash puisqu'il est apparemment possible de le mettre à jour mais ça ne veut pas dire que le SMEG+ ne commence pas d'abord à booter depuis une mémoire ROM.
     
  20. bousqi

    bousqi Membre

    Inscrit depuis le :
    13 Janvier 2019
    Messages :
    13
    "J'aime" reçus :
    0
    Je confirme que l'analyse de vxWorks semble compliqué, d'autant plus que tu me confirmes son utilité (kernel like) et son format custom... outch.
    Après réflexion, je ne vois pas ce que m'apportera cette analyse, à la base je souhaitais la faire pour voir les commandes disponibles depuis le shell, mais tout est indiqué dans la doc que tu m'as pointé.

    Je suis donc passé sur le process d'upgrade, et là SAUVé !!! j'ai un ELF qui ce parse plutôt bien !
    La mise a jour d'un OS indique beaucoup de choses sur son fonctionnement, et donc j'ai déjà trouvé pas mal d'infos, dont l'existence d'un mode développeur. J'ai mis a jour mon github sur le sujet si tu veux plus de détails.

    Code:
      7 /romfs             # vxWorks itself (in NAND)
      3 /SYSTEM_DATA       # NAND Flash ?
      3 /ram               # RAM
      3 /sdhc:1             # UserGuide
      3 /sdhc:0             # Cartographie GPS
      3 /bd0               # USB Mass Storage device
      3 /SYSTEM            # NAND Flash ?
      3 /SYSTEM_TMP_DATA   # NAND Flash ?
      3 /USER_DATA         # NAND Flash ?
      3 /USER_DATA_BACKUP  # NAND Flash ?
      3 /EXTENDED_PARTITION
     
  21. bousqi

    bousqi Membre

    Inscrit depuis le :
    13 Janvier 2019
    Messages :
    13
    "J'aime" reçus :
    0
    Tu mentionnes le WIFI de la voiture, et le Bluetooth.
    Je vais creuser une nouvelle solution : l'USB.

    Puisque MWYann à mis en place un gadget CDC_EEM à base de raspberry, cela veut dire que par défaut le SMEG acceptera un device CDC_EEM (Ethernet over USB). L'idée que je vais essayer de vérifier (si je trouve le temps), serait partir sur un RPi Zero W configuré en EEM, et faire une redirection du telnet vers le wifi du Raspberry. En fait cela recréé un wifi à la voiture et on devrait pourvoir se connecter par le biais du raspberry.
     
  22. ramhou

    ramhou Membre

    Inscrit depuis le :
    20 Juin 2018
    Messages :
    6
    "J'aime" reçus :
    0
    bonjour , je voudrais savoir si je peux activer l option camera de recul avec cette procédure sans passer par le diag box sur ma 308
    merci
     
  23. lab34

    lab34 Peugeot Addict

    Inscrit depuis le :
    14 Septembre 2007
    Messages :
    373
    "J'aime" reçus :
    1
    Hello,
    ça faisait longtemps que je n'étais pas passé par forum peugeot moi :oups:
    Et donc j'arrive là par hasard en cherchant sous quel OS tourne mon smeg+.
    Pourquoi donc ? parce que je viens de lire une news sur urgent/11 qui sont 11 vulnérabilités dont certaines critiques découvertes dans vxworks.
    https://armis.com/urgent11/
    Bon, pas de panique, c'est dans la pile tcp/ip :) , ça pue nettement plus pour les firewall Sonicwall !
    Je pose juste ça là comme clin d'oeil.
    Bonne continuation dans vos recherches !
     
  24. ianscott87

    ianscott87 Nouveau membre

    Inscrit depuis le :
    18 Juin 2020
    Messages :
    1
    "J'aime" reçus :
    1
    Bonjour à tous,
    Je le permets de poster ici car vous avez l'air hyper calé sur le sujet du SMEG.
    Je viens d'acheter en concession une DS4 de 2016 avec un SMEGIV2 en version 6.4 DR10 j'ai voulu acheter l'option du carplay et du mirrorscreen mais ils m'ont dit que c'était impossible de l'acquérir sur un véhicule d'occasion. Je me suis donc renseigné sur plusieurs forums et apparemment c'est tout à fait possible avec la valise PSA et telecodage manuel. J'ai trouvé un garage Peugeot qui veut bien ce prendre un peu la tête pour essayer de l'activer mais il ne l'a jamais fait donc j'essaie de trouver des infos pour le guider un peu.
    J'aurais voulu savoir si quelqu'un connaissait la procédure (menus etc...) pour activer le Carplay et le Mirrorscreen avec la valise et si c'était possible d'avoir un petit pas à pas rapide pour aider le garagiste. J'ai vu aussi qu'il existait une note PSA pour activer ses options mais impossible de la trouver. Quelqu'un aurait il cette note ou au moins la référence que je puisse la communiquer au garage.
    Je vous remercie par avance pour le temps passé pour me répondre.
    Bonne journée.
     
    Enbois aime votre message.
  25. Enbois

    Enbois Membre régulier

    Inscrit depuis le :
    21 Août 2020
    Messages :
    30
    "J'aime" reçus :
    1
    Ce serait en effet génial ! Tu as pu avancer sur le sujet de ton côté ?
     

Partager cette page

  1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière.
    Rejeter la notification