Observations
Si on charge l’un de ces fichiers dans un éditeur comme Notepad++ on constate que le fichier commence par quelques dizaines de lignes de texte qui ressemble a du json, suivit de beaucoup de binaire.
Le début de la première ligne "070702" devrait faire lever un sourcil aux barbus d’Unix. Les fichiers commençant par le texte 070707 ou 070701 ou 070702 sont des fichiers d’archive au format CPIO. Ce qui est confirmé par le fait que le fichier se termine par « TRAILER!!! ».
La commande cpio n’étant plus vraiment utilisée on devra taper « man cpio » pour se rafraîchir la mémoire… et peut être même l’installer !
Pour lister le contenu d'un fichier .swu on utilisera :
$ cpio –itv < Origin-x.y.zzzz.swu
et on obtiendra une liste qui ressemble a celle ci :
-rw-r--r-- 1 root root 1308 Dec 18 2024 sw-description
-rw-r--r-- 1 root root 1580 Dec 18 2024 sw-description.sig
-rw-r--r-- 1 root root 1488 Dec 18 2024 select_rootfs0.sh.enc
-rw-r--r-- 1 root root 1488 Dec 18 2024 select_rootfs1.sh.enc
-rw-r--r-- 1 root root 202883456 Dec 18 2024 rootfs.ext4.zst.enc
396270 blocks
Pour extraire ces 5 fichiers on tapera la commande ci-dessous et les fichiers listés ci-dessus seront extraits dans le répertoire courant.
$ cpio –i Origin-x.y.zzzz
Le fichier sw-description contient un json qui décrit les propriétés, et comment utiliser, les divers fichiers qui l'accompagnent. Notez que la description les fichiers avec l’extension .enc contient "encrypted": true et qu’en plus pour rootfs.ext4 on a "compressed": "zstd" d’où le nom du fichier : rootfs.ext4.zst.enc Il est compressé avec l’algorithme Zstd et ensuite encrypté.
Le fichier sw-description.sig est certainement une signature RSA. On retrouve dedans les info qui ressemble à un certificats au format DER : [California] [Los Angeles] [Celestron Acquisition LLC] répété plusieurs fois ce qui fait penser a une chaîne de certification auto-signée.
Les fichiers select_rootfs0.sh et select_rootfs0.sh sont certainement des scripts Bash a exécuter durant le processus de mise à jour.
rootfs.ext4, vu son nom et sa taille, est une partition Linux au format ext4. La mise à jour ne se fait donc pas au niveau des fichiers mais du file-system.
NOTE: Jusqu’à la version 1.1.4327 la taille de rootfs.ext4.enc était d'environ 406Mo. A la version suivante, la 1.2.4345, rootfs.ext4.enc est passé à 193Mo ! Certainement un shrink de la partitions principales pour faire la place à une partition dédiées aux images de l'utilisateur qui seront accessibles via FTP ?...
UPDATE : voir le post sur les partitions
UPDATES 2025, 2026 :
Dans la version 1.2.5100 il y avait en plus le script "initialize_ftp.sh.enc"
Dans la version 1.4.6084 il y avait en plus le script "fixup_home.sh.enc"
Déductions
Si on regroupe ce que l’on vient d'observer : swu, cpio, json, zstd, sig, on trouve rapidement que tout cela est géré par le framework open source SWUpdate.
- L’encryptage pourrait donc être fait en utilisant AES en mode CBS (par exemple aes-256-cbs). Cette méthode de cryptage nécessite une clé AES et un vecteur initial (IV).
- La signature du fichier sw-description serait au format CMS avec un certificat auto-signé
On récapitule
- sw-description, qui est au format json n'est pas encrypté. Il contient, entre autres, le SHA256 de chaque fichier.
- sw-description.sig, est la signature qui valide le fichier
- Les fichiers sont encrypté, et parfois compressés. Leur intégrité est protégée par le cryptage ET le SHA256 qui est lui même protégé par la signature.
