Dumper la flash

De neufbox 4

Avec cat

La commande cat est compilée dans le binaire busybox présent dans le firmware.

Pour sauvegarder le CFE dans CFE.bin :

[root@Lost ~] cat /dev/mtdblock0 > /var/CFE.bin

Pour sauvegarder le firmware principal dans MAIN.bin :

[root@Lost ~] cat /dev/mtdblock1 > /var/MAIN.bin

Attention ! L'entête du firmware principal ne sera pas sauvegardée par cette méthode (cf page Structure de la flash, section Informations au démarrage).

/dev/mtdblock2 correspond à la partition en jffs2 qui est montée sur

  • /usr/local pour les firmwares <2.x.x
  • /etc/config pour les firmwares >2.x.x
[root@Lost ~] mount | grep mtdblock2
/dev/mtdblock2 on /usr/local type jffs2 (rw,noatime)

Pour sauvegarder le firmware de secours dans RESCUE.bin :

[root@Lost ~] cat /dev/mtdblock3 > /var/RESCUE.bin

Attention ! L'entête du firmware de secours ne sera pas sauvegardée par cette méthode (cf page Structure de la flash, section Informations au démarrage).

Pour sauvegarder le driver ADSL dans ADSL.bin :

[root@Lost ~] cat /dev/mtdblock4 > /var/ADSL.bin

Pour sauvegarder la NVRAM dans NVRAM.bin :

[root@Lost ~] cat /dev/mtdblock5 > /var/NVRAM.bin

Avec dumpmem

La commande dumpmem est compilée dans le binaire busybox présent dans le firmware.

[root@Lost ~] dumpmem 
usage: dumpmem <address_in_hex> <length_in_decimal>

Les paramètres à passer sont l'adresse en hexadécimal suivie de la longueur en décimal :

[root@Lost ~] dumpmem 0xbf010100 256
dumpmem 0xbf010100 256

Le résultat est dans le log du kernel :

[root@Lost ~] cat /var/log/kern.log
Sep 19 16:49:41 Lost kernel: bf010100: 73 71 73 68 00 00 02 c9 00 2d f1 0a 00 2d f0 fa    sqsh.....-...-..
Sep 19 16:49:41 Lost kernel: bf010110: 00 2d f1 06 00 2d 92 ee 00 2d d0 7e 00 02 00 00    .-...-...-......
Sep 19 16:49:41 Lost kernel: bf010120: 00 00 00 10 51 03 01 46 07 ee 05 00 00 00 00 20    ....Q..F........
Sep 19 16:49:41 Lost kernel: bf010130: 02 1d 7d 00 01 00 00 00 00 00 00 00 2d f0 fa 5d    ..}.........-..]
Sep 19 16:49:41 Lost kernel: bf010140: 00 00 08 00 00 3f 91 45 84 68 34 8a 09 0a 40 62    .....?.E.h4...@b
Sep 19 16:49:41 Lost kernel: bf010150: ae 9e 29 20 b2 fa 5f 16 bc 2d b8 40 b7 24 fd 45    ..)..._..-.@.$.E
Sep 19 16:49:41 Lost kernel: bf010160: 3e a7 c5 17 90 fa 73 7d d4 3e 5d ea 51 80 56 76    >.....s}.>].Q.Vv
Sep 19 16:49:41 Lost kernel: bf010170: ae 07 1a 83 59 f6 60 e0 62 de 78 3e a6 ec dd d4    ....Y.`.b.x>....
Sep 19 16:49:41 Lost kernel: bf010180: 59 83 27 28 03 1a 49 c9 0f 38 76 64 88 29 3d 4a    Y.'(..I..8vd.)=J
Sep 19 16:49:41 Lost kernel: bf010190: af 6c 60 0e bb 7c f3 17 1b bf 2e e8 1d 4c c9 de    .l`..|.......L..
Sep 19 16:49:41 Lost kernel: bf0101a0: 7b bf 5d 4a 78 e4 98 3b 01 d4 fc c8 53 1d ea 43    {.]Jx..;....S..C
Sep 19 16:49:41 Lost kernel: bf0101b0: ad 28 a3 2e cd f3 49 9c 9b 88 46 e3 1d 37 83 87    .(....I...F..7..
Sep 19 16:49:41 Lost kernel: bf0101c0: 1c a2 91 e8 a1 0b 60 e6 93 f2 50 e0 44 82 3a 95    ......`...P.D.:.
Sep 19 16:49:41 Lost kernel: bf0101d0: e9 b2 e9 f5 e2 92 3f 20 63 ee 31 be 72 3e 96 d0    ......?.c.1.r>..
Sep 19 16:49:41 Lost kernel: bf0101e0: f9 32 83 a0 21 68 7c 8c 16 5a 85 83 51 de c8 1d    .2..!h|..Z..Q...
Sep 19 16:49:41 Lost kernel: bf0101f0: 81 a6 a1 5a 5a 26 42 bd 15 06 37 e5 77 84 35 37    ...ZZ&B...7.w.57
Sep 19 16:49:41 Lost kernel: 

On retrouve le contenu du rootfs. On peut le vérifier sur sa machine avec hd :

$ hd -n 256 NB4-R1.2.10-ROOTFS
00000000  73 71 73 68 00 00 02 c9  00 2d f1 0a 00 2d f0 fa  |sqsh.....-...-..|
00000010  00 2d f1 06 00 2d 92 ee  00 2d d0 7e 00 02 00 00  |.-...-...-.~....|
00000020  00 00 00 10 51 03 01 46  07 ee 05 00 00 00 00 20  |....Q..F....... |
00000030  02 1d 7d 00 01 00 00 00  00 00 00 00 2d f0 fa 5d  |..}.........-..]|
00000040  00 00 08 00 00 3f 91 45  84 68 34 8a 09 0a 40 62  |.....?.E.h4...@b|
00000050  ae 9e 29 20 b2 fa 5f 16  bc 2d b8 40 b7 24 fd 45  |..) .._..-.@.$.E|
00000060  3e a7 c5 17 90 fa 73 7d  d4 3e 5d ea 51 80 56 76  |>.....s}.>].Q.Vv|
00000070  ae 07 1a 83 59 f6 60 e0  62 de 78 3e a6 ec dd d4  |....Y.`.b.x>....|
00000080  59 83 27 28 03 1a 49 c9  0f 38 76 64 88 29 3d 4a  |Y.'(..I..8vd.)=J|
00000090  af 6c 60 0e bb 7c f3 17  1b bf 2e e8 1d 4c c9 de  |.l`..|.......L..|
000000a0  7b bf 5d 4a 78 e4 98 3b  01 d4 fc c8 53 1d ea 43  |{.]Jx..;....S..C|
000000b0  ad 28 a3 2e cd f3 49 9c  9b 88 46 e3 1d 37 83 87  |.(....I...F..7..|
000000c0  1c a2 91 e8 a1 0b 60 e6  93 f2 50 e0 44 82 3a 95  |......`...P.D.:.|
000000d0  e9 b2 e9 f5 e2 92 3f 20  63 ee 31 be 72 3e 96 d0  |......? c.1.r>..|
000000e0  f9 32 83 a0 21 68 7c 8c  16 5a 85 83 51 de c8 1d  |.2..!h|..Z..Q...|
000000f0  81 a6 a1 5a 5a 26 42 bd  15 06 37 e5 77 84 35 37  |...ZZ&B...7.w.57|
00000100

C'est bien la même chose.

Voici les adresses et les tailles des différentes sections :

Adresse (hexa) Taille (hexa) Taille (déc) Description
0xbe000000 10000 65536 CFE
0xbe010000 420000 4325376 Firmware principal
0xbe430000 1d0000 1900544 Partition JFFS2
0xbe600000 180000 1572864 Firmware de secours
0xbe780000 70000 458752 Driver ADSL
0xbe7f0000 10000 65536 NVRAM

Donc la taille du firmware principal (entête + fs squashé + kernel compressé) est limitée à 4325376 octets.C'est pas énorme sachant actuellement l'image de la version 1.3.11 fait 3950746 octets...donc il ne reste qu'un peu moins de 375000 octets pour faire des ajouts au firmware original

Avec hexdump

La commande hexdump est compilée dans le binaire busybox présent dans le firmware.

[root@Lost ~] hexdump -n 256 -C /dev/mtdblock1
00000000  73 71 73 68 00 00 02 c9  00 2d f1 0a 00 2d f0 fa  |sqsh.....-...-..|
00000010  00 2d f1 06 00 2d 92 ee  00 2d d0 7e 00 02 00 00  |.-...-...-.~....|
00000020  00 00 00 10 51 03 01 46  07 ee 05 00 00 00 00 20  |....Q..F....... |
00000030  02 1d 7d 00 01 00 00 00  00 00 00 00 2d f0 fa 5d  |..}.........-..]|
00000040  00 00 08 00 00 3f 91 45  84 68 34 8a 09 0a 40 62  |.....?.E.h4...@b|
00000050  ae 9e 29 20 b2 fa 5f 16  bc 2d b8 40 b7 24 fd 45  |..) .._..-.@.$.E|
00000060  3e a7 c5 17 90 fa 73 7d  d4 3e 5d ea 51 80 56 76  |>.....s}.>].Q.Vv|
00000070  ae 07 1a 83 59 f6 60 e0  62 de 78 3e a6 ec dd d4  |....Y.`.b.x>....|
00000080  59 83 27 28 03 1a 49 c9  0f 38 76 64 88 29 3d 4a  |Y.'(..I..8vd.)=J|
00000090  af 6c 60 0e bb 7c f3 17  1b bf 2e e8 1d 4c c9 de  |.l`..|.......L..|
000000a0  7b bf 5d 4a 78 e4 98 3b  01 d4 fc c8 53 1d ea 43  |{.]Jx..;....S..C|
000000b0  ad 28 a3 2e cd f3 49 9c  9b 88 46 e3 1d 37 83 87  |.(....I...F..7..|
000000c0  1c a2 91 e8 a1 0b 60 e6  93 f2 50 e0 44 82 3a 95  |......`...P.D.:.|
000000d0  e9 b2 e9 f5 e2 92 3f 20  63 ee 31 be 72 3e 96 d0  |......? c.1.r>..|
000000e0  f9 32 83 a0 21 68 7c 8c  16 5a 85 83 51 de c8 1d  |.2..!h|..Z..Q...|
000000f0  81 a6 a1 5a 5a 26 42 bd  15 06 37 e5 77 84 35 37  |...ZZ&B...7.w.57|
00000100

Avec memshow

memshow est une commande de CFE qui permet d'afficher le contenu de la mémoire.

Les paramètres à passer sont l'adresse en hexadécimal suivie de la longueur en hexadécimal.

Pour voir les 256 premiers octets du firmware principal :

CFE> memshow 0xbe010000 100
----------+-------------------------------------------------+-----------------
ADDRESS   : 0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  :      ASCII      
----------+-------------------------------------------------+-----------------
BE010000h : 36 00 00 00 42 72 6F 61 64 63 6F 6D 20 43 6F 72 : 6...Broadcom Cor
BE010010h : 70 6F 72 61 74 69 6F 00 76 65 72 2E 20 32 2E 30 : poratio.ver. 2.0
BE010020h : 00 00 00 00 00 00 36 33 35 38 00 00 39 36 33 35 : ......6358..9635
BE010030h : 38 56 57 00 00 00 00 00 00 00 00 00 31 00 33 39 : 8VW.........1.39
BE010040h : 39 31 34 35 33 00 00 00 00 00 00 00 00 00 00 00 : 91453...........
BE010050h : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 33 32 : ..............32
BE010060h : 31 37 30 39 36 39 36 30 00 00 33 30 31 34 36 35 : 17096960..301465
BE010070h : 36 00 00 00 33 32 32 30 31 31 31 36 31 36 00 00 : 6...3220111616..
BE010080h : 39 37 36 37 39 37 00 00 00 00 00 00 00 00 4E 42 : 976797........NB
BE010090h : 34 2D 52 31 2E 32 2E 31 30 2D 4D 41 49 4E 00 00 : 4-R1.2.10-MAIN..
BE0100A0h : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
BE0100B0h : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
BE0100C0h : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
BE0100D0h : 00 00 00 00 00 00 00 00 89 7F 71 0C 5C D0 CA AC : .........q.\...
BE0100E0h : B1 8D 81 9B 00 00 00 00 00 00 00 00 6D 86 09 12 : ............m...
BE0100F0h : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................

*** command status = 0

Voici les adresses et les tailles des différentes sections :

Adresse (hexa) Taille (hexa) Description
0xbe000000 10000 CFE
0xbe010000 420000 Firmware principal
0xbe430000 1d0000 Partition JFFS2
0xbe600000 180000 Firmware de secours
0xbe780000 70000 Driver ADSL
0xbe7f0000 10000 NVRAM

Liens