Auteur Sujet: Besoin d'aide pour modifier un firmware  (Lu 1114 fois)

0 Membres et 1 Invité sur ce sujet

hwti

  • Client Orange Fibre
  • *
  • Messages: 1 590
  • Chambly (60)
Besoin d'aide pour modifier un firmware
« Réponse #12 le: 11 mai 2021 à 03:41:20 »
Il y a donc un shell de configuration spécifique (à voir les nuances entre supgrade, flash, et upgrade), mais qui heureusement semble pouvoir lancer des commandes shell normales (ou un sh complet, le prompt "#ONT/system/shell>" reste étrange).

hwti

  • Client Orange Fibre
  • *
  • Messages: 1 590
  • Chambly (60)
Besoin d'aide pour modifier un firmware
« Réponse #13 le: 11 mai 2021 à 03:42:44 »
#ONT/system/shell>cat cmdline
console=ttyS0,115200 mem=31M root=/dev/mtdblock2 mtdparts=sflash:512K@0x0(Boot),0x180000@0x80000(Config),7M@0x200000(ImageA),7M@0x900000(ImageB) rootfstype=cramfs hasEeprom=0 5srst=0

Il y a des données (de configuration ?) en 0x60000, et répétées en 0x70000.
C'est dans la mtd "Boot" bizarrement.

J'ignore s'il y a des CRC, ce n'est pas forcément modifiable directement, mais ça peut être intéressant.

00060000  31 35 47 2d 30 30 30 31  34 2d 31 31 30 38 31 37  |15G-00014-110817|
00060010  33 30 32 30 35 35 30 38  30 31 57 43 37 31 30 38  |3020550801WC7108|
00060020  46 39 31 33 30 39 4d 00  00 00 9c 50 ee a8 0b fc  |F91309M....P....|
00060030  9c 50 ee a8 0b ff 00 03  10 00 00 00 00 00 00 00  |.P..............|
00060040  00 00 00 00 41 4c 43 4c  46 38 34 44 38 38 33 34  |....ALCLF84D8834|
00060050  00 00 00 00 00 00 00 00  00 a9 01 01 00 00 00 00  |................|
00060060  41 4c 43 4c 41 4c 43 4c  f8 4d 88 34 33 46 45 34  |ALCLALCL.M.43FE4|
00060070  35 34 35 38 41 44 41 41  30 34 5f 5f 5f 5f 5f 5f  |5458ADAA04______|
00060080  5f 5f 5f 5f 47 2d 30 31  30 47 2d 50 5f 5f 6f 6e  |____G-010G-P__on|
00060090  74 2e 7a 00 00 00 00 00  00 00 00 00 c0 a8 64 01  |t.z...........d.|
000600a0  ff ff ff 00 c0 a8 01 fd  00 00 00 00 6f 6e 74 00  |............ont.|
000600b0  00 00 00 00 6f 6e 74 00  00 00 00 00 00 02 00 00  |....ont.........|
000600c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000600d0  00 00 00 00 00 00 00 00  00 00 f2 01 80 08 45 80  |..............E.|
000600e0  34 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |4...............|
000600f0  00 00 00 00 00 00 00 00  00 00 00 00 12 f0 d6 e4  |................|
00060100  30 02 db 00 00 01 00 00  00 00 00 00 00 00 00 00  |0...............|
00060110  00 a9 03 23 00 24 05 19  02 70 00 66 03 fd 00 80  |...#.$...p.f....|
00060120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00060130  00 00 00 00 00 00 17 02  dd 00 00 00 00 00 00 00  |................|
00060140  00 1e 00 31 00 00 00 00  00 00 00 00 01 00 00 00  |...1............|
00060150  00 00 00 00 00 00 00 00  00 00 00 00 00 01 30 00  |..............0.|
00060160  00 00 00 00 00 00 01 9a  04 cc 05 30 00 00 00 00  |...........0....|
00060170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00060190  00 00 00 00 00 00 01 7e  00 2b 67 16 00 0a b5 06  |.......~.+g.....|
000601a0  00 2c 18 9a 36 33 48 12  00 00 00 00 00 00 00 00  |.,..63H.........|
000601b0  64 64 64 64 27 d8 00 be  a5 5a 00 09 fc f2 00 03  |dddd'....Z......|
000601c0  c1 c1 19 c0 bd 9a 05 36  8d 44 10 e8 90 6c 00 00  |.......6.D...l..|
000601d0  00 00 27 d8 00 be a5 5a  00 09 fc f2 00 03 c1 c1  |..'....Z........|
000601e0  19 c0 bd 9a 05 36 8d 44  10 e8 90 6c 00 00 00 00  |.....6.D...l....|
000601f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00060200  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

PhilippeMarques

  • Expert
  • *
  • Messages: 444
Besoin d'aide pour modifier un firmware
« Réponse #14 le: 11 mai 2021 à 03:58:02 »
De ce que je comprends, il y a un pb sur rootfs.img à la demande de faire un supgrade, et c'est sur la taille de rootfs.img.
Fonction de comment cela a été modifié ( je sais pas) il faut recalculer les CRC.
Cela peut être fait par des outils de manipulation des fichiers et de reconstruction du file system.
Mon intervention s'arrête à ce niveau là, pour le reste, je vous laisse poursuivre vos investigations, vous avez une indication de la source du problème c'est déjà pas mal. :)

aljarreau

  • Client Maroc Telecom
  • *
  • Messages: 277
  • Casablanca
Besoin d'aide pour modifier un firmware
« Réponse #15 le: 11 mai 2021 à 03:59:57 »
De ce que je comprends, il y a un pb sur rootfs.img à la demande de faire un supgrade, et c'est sur la taille de rootfs.img.
Fonction de comment cela a été modifié ( je sais pas) il faut recalculer les CRC.
Cela peut être fait par des outils de manipulation des fichiers et de reconstruction du file system.
Mon intervention s'arrête à ce niveau là, pour le reste, je vous laisse poursuivre vos investigations, vous avez une indication de la source du problème c'est déjà pas mal. :)

Merci @PhilippeMarques

hwti

  • Client Orange Fibre
  • *
  • Messages: 1 590
  • Chambly (60)
Besoin d'aide pour modifier un firmware
« Réponse #16 le: 11 mai 2021 à 04:27:08 »
"0x180000@0x80000(Config)" => /dev/mtd1, un JFFS2 qui doit être monté quelque part (avec accès en écriture).
Les versions (HW 3FE45458ADAA04, SW 3FE45655AOCK88 et 3FE45655AOCK31) sont présentes dans le ont.mib qui est dans le JFFS2.
Peut-être que le modifier (soit à la main, soit s'il y a des commandes pour ça) serait suffisant pour que l'OLT soit content.

Il y a saveconfig et loadconfig, ce serait à tester pour voir ce que ça permet de changer.

Dans les deux CramFS, il y a un /bootimg/00a9_01_01 qui correspond au début de la flash (la taille utile de la parition de boot, à part les deux zones en 0x60000 et 0x70000).
Je suppose que ça doit être flashé en deux fois.

binwalk lance cramfsck pour extraire, mais s'il n'est pas lancé en root ça s'arrête en plein milieu, mais binwalk masque l'erreur  >:(
« Modifié: 11 mai 2021 à 04:53:00 par hwti »

hwti

  • Client Orange Fibre
  • *
  • Messages: 1 590
  • Chambly (60)
Besoin d'aide pour modifier un firmware
« Réponse #17 le: 11 mai 2021 à 04:50:47 »
Il est clair que les deux images CramFS ont été régénérées.
Peut-être que la génération n'est pas reproductible, je ne sais pas si c'est gênant en soi.
En revanche, au offsets 0x200030 et 0x900030 on a une ligne de 16 octets qui est différente.
Les images régénérées ont "Compressed", alors que les deux images de départ ont "UCIG" ou "UUAL" et 4 octets de binaire.
Je me demande ce que c'est, https://f.zz.de/posts/201204191137.gpl_-_ach_quatsch_.../ mentionne "actImage[1], PartId[3], custom[UUAL] sys_cfg[/etc/sys.cfg.alu]".

Le bootloader regarde peut-être ces informations.
En tout cas il regarde probablement le contenu du CramFS, puisque le kernel est dedans, dans /uImage !

hwti

  • Client Orange Fibre
  • *
  • Messages: 1 590
  • Chambly (60)
Besoin d'aide pour modifier un firmware
« Réponse #18 le: 11 mai 2021 à 04:58:40 »
Voilà je viens de trouver le fichier ont.mib, il est dans /mnt/rwdir, je vais voir ce que je peux en faire
Il doit être écrit quand on change certaines valeurs.
Peut-être qu'en le modifiant plus ou moins manuellement, on peut effectivement changer des valeurs pour lesquelles il n'y a pas de commande (peut-être tant qu'on ne fait pas quelque chose qui provoque une régénération du fichier).

hwti

  • Client Orange Fibre
  • *
  • Messages: 1 590
  • Chambly (60)
Besoin d'aide pour modifier un firmware
« Réponse #19 le: 11 mai 2021 à 05:08:07 »
Le fichier est en binaire, il ne faut pas utiliser vi.

aljarreau

  • Client Maroc Telecom
  • *
  • Messages: 277
  • Casablanca
Besoin d'aide pour modifier un firmware
« Réponse #20 le: 11 mai 2021 à 05:13:51 »
Le fichier est en binaire, il ne faut pas utiliser vi.
Donc, c'est fichu?

hwti

  • Client Orange Fibre
  • *
  • Messages: 1 590
  • Chambly (60)
Besoin d'aide pour modifier un firmware
« Réponse #21 le: 11 mai 2021 à 05:26:15 »
Le /sbin/setup.sh est très intéressant :
Citer
#for cramfs debug interface, you can do all like this:
#1. copy /sbin/setup.sh to /mnt/rwdir
#then modify /mnt/rwdir/setup.sh
#2. delete flash_erase /dev/mtd1
#3. delete [ -f /mnt/rwdir/setup.sh ] && /mnt/rwdir/setup.sh && exit
[ -f /mnt/rwdir/setup.sh ] && /mnt/rwdir/setup.sh && exit

Ca nous permet donc de remplacer toute la seconde partie du script, ou juste d'insérer quelques commandes  :D

J'ai une idée pour modifier sys.cfg, à condition que "mount --bind" soit supporté.
Ensuite, je ne sais pas si le SWVER qu'il y a dedans sert bien, et si c'est à chaque boot, mais déjà c'est bien mieux que de devoir reflasher.

On peut créer un /mnt/rwdir/setup.sh (qui sera lancé par le /sbin/setup.sh) :
#!/bin/sh

# Allow to replace /etc/sys.cfg
[ -e /mnt/rwdir/sys.cfg ] && mount --bind /mnt/rwdir/sys.cfg /etc/sys.cfg

# make sure /sbin/setup.sh continues, instead of doing "exit"
exit 1
Ne pas oublier de rendre le fichier exécutable : "chmod 0777 /mnt/rwdir/setup.sh"

Ensuite, il suffit de copier /etc/sys.cfg dans /mnt/rwdir/sys.cfg, et le modifier.
Après un reboot, pour tout ce qui est exécuté dans le setup.sh et après, c'est comme si on avait modifié /etc/sys.cfg