Rooter le SMEG+?

pixx

Membre
28 Février 2018
12
3
3
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/
 

Salut à tous!
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.
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)...
 

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 ;)
 
  • J'aime
Reactions: bobrockrs

Bonjour, intéressant tout ça !
Est-ce qu'il est possible d'activer le mirrorlink sur le SMEG+ ?
 

Non.

On peut le faire sur SMEG+IV uniquement.
 

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.
 

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

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
    9.2 Ko · Affichages: 122
Dernière édition:

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 ,
 

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 !
 

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.
 

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

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

Salut à tous!
j'utilise depuis quelques semaines les infos du projets psakey de MWyann sur Github,
bonne création !

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
 

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 ?
 
Dernière édition:

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.

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


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 ?
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 :)
 
Dernière édition:

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.
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:
Ah ouai donc c'est carrément le shell VxWorks en kernel space :crazy:.
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.
 

Je viens tout juste de voir ça dans les logs de test sessions shell:

-> ls -l

data access
Exception current instruction address: 0x002cbbec
Machine Status Register: 0x0000b032
Data Access Register: 0xffd4af5c
Condition Register: 0x48000288
Data storage interrupt Register: 0x40000000
.
0x002acecc vxTaskEntry +0x48 : 0x004c839c ()
0x004c839c shellTask +0x4f8: shellExec ()
0x004c7e00 shellExec +0x180: 0x004be6b4 ()
0x004be8e8 shellInterpCparse+0xfc0: shellInterpCparse ()
0x004be3a8 shellInterpCparse+0xa80: 0x004bac68 ()
0x004bac90 shellInterpCInit+0x1370: 0x004ba968 ()
0x004ba9a0 shellInterpCInit+0x1080: 0x004ba7f0 ()
0x004ba8ac shellInterpCInit+0xf8c: shellInternalFunctionCall ()
0x004b6450 shellInternalFunctionCall+0xa4 : 0x004d6970 ()
0x004d6a18 dirList +0xac : strncpy ()

Shell task 'tShellRem309383048' restarted...

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:
 

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.

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 ?
 
Dernière édition:

Je voudrais essayer de déassembler un binaire qui fonctionne sur cette architecture, en commencant par VxWorks.
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).

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

Tu as l'air de bien connaitre cette environnement. Tu as déjà eu à faire ce VxWorks ?
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.

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

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
 

Idée pour choper l'IP de la voiture, et peut-être avoir un accès root en telnet
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.
 

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
 

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 !
 

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.
 
  • J'aime
Reactions: Enbois

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.
Ce serait en effet génial ! Tu as pu avancer sur le sujet de ton côté ?
 

Je me permet de partager ce lien qui vous permet d'obtenir et de modifier les différentes informations du smeg+ comme activer/desactiver/modifer certaines options ou même activer les différents thèmes etc.
Modifier données du smeg+
Je le partage dans le but de faire avancer la recherche pour que tout le monde arrive à faire ce qu'il à envie avec le smeg+.
Moi j'aimerais modifier la couleur du compteur de vitesse
Activer mes theme mais sur cactus il n'y a pas le bouton pour les choisir
Et plein d'autres choses...
 

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 ;)


Bonjour,

Je me permets de rebondir sur ce message.

J'essayais actuellement (en vain) d'activer le CarPlay sur mon C4 II de 2016, équipé d'un SMEG+IV2 en 6.1.

J'ai diagbox 9.68, le problème étant que lorsque je tente d'activer le CarPlay dans le télécodage --> échec télécodage.

J'ai fait le tour de touttttt le forums qui parle de carplay sur smeg+iv2 mais impossible de trouver une réelle solution.

Je suis entouré de concessionnaire Citroën complètement zinzin donc c'est pour moi quasi impossible d'aller en concession pour le faire activer.

Quelles sont les raisons possibles (autres que le mode éco) pour que le télécodage échoue ?

Et quels sont les autre solutions, puisqu'il d'après le message que j'ai cité, il en existe d'autres, pour activer le CarPlay ?
 

@OpiumCity : Il faut le faire avec un Diagbox officiel et en ligne, faisable soi-même en payant un token à 42€

--

Extrait de la documentation officielle "D5AM0103P0 - Procédure de mise à jour & activation APPLE CarPlay™ sur système de radionavigation SMEG+i V2"

2.4. Procédure de mise à jour de la calibration du système radionavigation SMEG+i V2

ATTENTION : L’outil de diagnostic doit être à la dernière télémise à jour disponible sur le serveur de télémise à jour.
ATTENTION : Si cette mise à jour de la calibration du système radionavigation SMEG+i V2 n’est pas effectuée, la qualité audio en communication téléphonique sera très fortement dégradée.

NOTA : Une mise à jour de la calibration du système de radionavigation SMEG+i V2 est nécessaire en cas de version logiciel inférieure à 6.1.D.R8 avant mise à jour du logiciel.

Mettre à jour la calibration du système de radionavigation SMEG+i V2, effectuer la procédure suivante ; À l’aide de l’outil de diagnostic connecté à Internet.

Dans l’outil de diagnostic :
Sélectionner le menu "Réparation"
Sélectionner le calculateur SMEG_PLUS. Valider
Sélectionner le menu "Téléchargement" puis "Téléchargement d’une nouvelle version de calibration"

2.5. Procédure de télécodage automatique de la radionavigation SMEG+i V2

Effectuer un télécodage automatique de la radionavigation SMEG+i V2 ; À l’aide de l’outil de diagnostic connecté à Internet.

3. Vérification de la présence du logiciel APPLE CarPlay™

Appuyer sur la touche tactile Internet (voir notice de bord) pour contrôler que l’icône APPLE CarPlay™ est présente (en "b").
 

excusez-moi pour l'interprète. existe-t-il un moyen d'obtenir des autorisations d'écriture sur la partition /SYSTEM? Je veux mettre à jour la base de radiologo, mais je ne peux rien écrire dans la partition. Cela étant dit, la commande llr (ls -l -r) dit que tout est autorisé.

excuse me for the translator. is there a way to get write permissions to the /SYSTEM partition? I want to update the radiologo database, but I can't write anything to the section. At the same time, the llr(ls -l -r) command says that everything is allowed.