WSW-Header

Aus open7x0.org

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis


Einleitung

Siemens verteilt die Firmware-Updates in Dateien mit der Endung WSW. Daher werden die Dateien auch als WSW-Dateien bezeichnet. Dieser Artikel befasst sich nun mit dem Aufbau des Kopfes dieser WSW-Dateien.

Aufbau des WSW Headers

Das folgende C-struct beschreibt den Aufbau eines WSW Headers, der für alle bekannten M7x0 immer 1416 Bytes lang ist:

struct wsw_header // big-endian
{
	char	magic[4];	// Magic: 'WSW '

	uint16	md5sum_len_1;	// Länge der MD5-Ausgabe inkl. LF (immer 0x24)
	uint16	rsa_len_1;	// Länge der 1. RSA Prüfsumme (immer 0x2C)
	uchar	rsa_1[0x038];	// 1. RSA Prüfsumme (ab FW 1.12.1)

	uint16	md5sum_len_2;	// ?? Länge der MD5-Ausgabe inkl. LF (immer 0x24)
	uint16	rsa_len_2;	// Länge der 2. RSA Prüfsumme (immer 0x81)
	uchar	rsa_2[0x3bc];	// 2. RSA Prüfsumme (ab FW 1.29.5)

 // MD5SUM wird ab hier bis zum Dateiende berechnet (Adresse 0x400)

	char	box_name[64];	// Name der Box: 'M740AV'
	char	upd_name[60];	// Name des Updates, z.B.: '1.18small'
	char	unknown[4];	// ???
	time_t	timestamp;	// (Erstellungs-) Datum

	uint32	num_of_pages;	// Anzahl der Pages im Update
	uchar	page_map[256];	// die Page-Map
};

RSA Prüfsummen

An Adresse 0x006 befindet sich ein zwei Byte Wort mit der Anzahl der Bytes der RSA-Prüfsumme. Dieser Wert ist bisher immer 44. Daher folgen auch 44 Bytes dieser Prüfsumme. Werden diese 44 Bytes dem Programm rsadecode mit dem Schlüssel /etc/.rsapublic via stdin übergeben, dann erfolgt eine stdout Ausgabe der MD5SUM. Die MD5SUM wird dabei ab Adresse 0x400 berechnet.

Ab FW 1.29.5 wurde offensichtlich eine zweite RSA-Prüfsumme mit wesentlich längeren Schlüssel eingebaut. Diese 2. Prüfsumme befindet sich ab Adresse 0x040. In der FW 1.29.5 selbst wurden beide Schlüsselfelder belegt, so dass die Firmware von den bisherigen und auch von den zukünftigen Firmware-Versionen eingespielt werden kann.

Der Artikel »Firmware-Update« beschäftigt sich detailierter mit dem Thema Update und Prüfsummen.

Flash-RAM mapping

Ab Adresse 0x488 befindet sich ein 256 Byte großes Feld, welches eine Art Mapping der Blöcke beschreibt. Für jede dem WSW-Header folgende Page (64K) gibt es eine Index-Eintrag, in welche Flash-RAM-Page sie geschrieben werden soll.

Der 4-Byte-Wert ab Adresse 0x484 gibt dabei die Anzahl der Pages im Update an.

Gegenüberstellung FW 1.12.1 und FW 1.18

Hier eine Hexdump-Gegenüberstellung der WSW-Header der beiden ersten öffentlichen Firmware-Versionen:

        FW 1.12.1new2.wsw      FW 1.18small.wsw         
----------------------------------------------------------
000:    57 53 57 20  :WSW :    57 53 57 20  :WSW :  WSW-Kennung

004:    00 24        :.$:      00 24        :.$:    ?? Länge der MD5SUM-Ausgabe inkl. LF
006:          00 2c    :.,:          00 2c    :.,:  Länge der RSA Prüfsumme

008:    ec 4a 6b 75  :lJku:    96 ab b8 20  :.+8 :  RSA Prüfsumme
00c:    ef 58 7d f1  :oX}q:    bd 01 c6 d9  :=.FY:
010:    af 51 40 df  :/Q@_:    2e 3b 40 6e  :.;@n:
014:    e6 13 83 66  :f..f:    b3 12 d3 d5  :3.SU:
018:    66 a0 01 55  :f .U:    60 5d d7 d0  :`]WP:
01c:    13 00 9a 9e  :....:    c6 30 85 c6  :F0.F:
020:    a2 3a 6d 66  :":mf:    92 8f 99 79  :...y:
024:    a8 2f f0 e3  :(/pc:    91 39 4f 5b  :.9O[:
028:    40 a1 ab 10  :@!+.:    40 45 51 d1  :@EQQ:
02c:    df 42 ea 1e  :_Bj.:    80 96 a1 47  :..!G:
030:    0d a6 3c 00  :.&<.:    e9 8f b3 00  :i.3.:

034:    00 00 00 00  :....:    00 00 00 00  :....:
.... (alles 00)
3fc:    00 00 00 00  :....:    00 00 00 00  :....:

                                                   Ab hier wird die [[MD5] berechnet!
400:    4d 37 34 30  :M740:    4d 37 34 30  :M740:  Name der Box
404:    41 56 00 00  :AV..:    41 56 00 00  :AV..:
408:    00 00 00 00  :....:    00 00 00 00  :....:
.... (alles 00)
43c:    00 00 00 00  :....:    00 00 00 00  :....:
440:    31 2e 31 32  :1.12:    31 2e 31 38  :1.18:  Name des Updates
444:    2e 31 6e 65  :.1ne:    73 6d 61 6c  :smal:
448:    77 32 00 00  :w2..:    6c 00 00 00  :l...:
44c:    00 00 00 00  :....:    00 00 00 00  :....:
.... (alles 00)
478:    00 00 00 00  :....:    00 00 00 00  :....:
47c:    38 95 ce 53  :8.NS:    67 00 b6 0f  :g.6.:  ??? Dieser Teil ist mir noch unklar!
480:    41 9d 9b 8e  :A...:    41 bb 31 ad  :A;1-:  (Erstellungs-)Datum (time_t)

484:    00 00 00 fc  :...|:    00 00 00 c8  :...H:  Längenangabe in Pages (64K)

488:    00 01 02 03  :....:    00 01 02 03  :....:  ab hier: Mapping
48c:    04 05 06 07  :....:    04 05 06 07  :....:
490:    08 09 0a 0b  :....:    08 09 0a 0b  :....:
494:    0c 0d 0e 0f  :....:    0c 0d 0e 0f  :....:
498:    10 11 12 13  :....:    10 11 12 13  :....:
49c:    14 15 16 17  :....:    14 15 16 17  :....:
4a0:    18 19 1a 1b  :....:    18 19 1a 1b  :....:
4a4:    1c 1d 1e 1f  :....:    1c 1d 1e 1f  :....:
4a8:    20 21 22 23  : !"#:    20 21 22 23  : !"#:
4ac:    24 25 26 27  :$%&':    24 25 26 27  :$%&':
4b0:    28 29 2a 2b  :()*+:    28 29 2a 2b  :()*+:
4b4:    2c 2d 2e 2f  :,-./:    2c 2d 2e 2f  :,-./:
4b8:    30 31 32 33  :0123:    30 31 32 33  :0123:
4bc:    34 35 36 37  :4567:    34 35 36 37  :4567:
4c0:    38 39 3a 3b  :89:;:    38 39 3a 3b  :89:;:
4c4:    3c 3d 3e 3f  :<=>?:    3c 3d 3e 3f  :<=>?:
4c8:    40 41 42 43  :@ABC:    40 41 42 43  :@ABC:
4cc:    44 45 46 47  :DEFG:    44 45 46 47  :DEFG:
4d0:    48 49 4a 4b  :HIJK:    48 49 4a 4b  :HIJK:
4d4:    4c 4d 4e 4f  :LMNO:    4c 4d 4e 4f  :LMNO:
4d8:    50 51 52 53  :PQRS:    50 51 52 53  :PQRS:
4dc:    54 55 56 57  :TUVW:    54 55 56 57  :TUVW:
4e0:    58 59 5a 5b  :XYZ[:    58 59 5a 5b  :XYZ[:
4e4:    5c 5d 5e 5f  :\]^_:    5c 5d 5e 5f  :\]^_:
4e8:    60 61 62 63  :`abc:    60 61 62 63  :`abc:
4ec:    64 65 66 67  :defg:    64 65 66 67  :defg:
4f0:    68 69 6a 6b  :hijk:    68 69 6a 6b  :hijk:
4f4:    6c 6d 6e 6f  :lmno:    6c 6d 6e 6f  :lmno:
4f8:    70 71 72 73  :pqrs:    70 71 72 73  :pqrs:
4fc:    74 75 76 77  :tuvw:    74 75 76 77  :tuvw:
500:    78 79 7a 7b  :xyz{:    78 79 7a 7b  :xyz{:
504:    7c 7d 7e 7f  :|}~.:    7c 7d 7e 7f  :|}~.:
508:    80 81 82 83  :....:    80 81 82 83  :....:
50c:    84 85 86 87  :....:    84 85 86 87  :....:
510:    88 89 8a 8b  :....:    88 89 8a 8b  :....:
514:    8c 8d 8e 8f  :....:    8c 8d 8e 8f  :....:
518:    90 91 92 93  :....:    90 91 92 93  :....:
51c:    94 95 96 97  :....:    94 95 96 97  :....:
520:    98 99 9a 9b  :....:    98 99 9a 9b  :....:
524:    9c 9d 9e 9f  :....:    9c 9d 9e 9f  :....:
528:    a0 a1 a2 a3  : !"#:    a0 a1 a2 a3  : !"#:
52c:    a4 a5 a6 a7  :$%&':    a4 a5 a6 a7  :$%&':
530:    a8 a9 aa ab  :()*+:    a8 a9 aa ab  :()*+:
534:    ac ad ae af  :,-./:    ac ad ae af  :,-./:
538:    b0 b1 b2 b3  :0123:    b0 b1 b2 b3  :0123:
53c:    b4 b5 b6 b7  :4567:    b4 b5 b6 b7  :4567:
540:    b8 b9 ba bb  :89:;:    b8 b9 ba bb  :89:;:

  Hier fehlt /dev/mdt3 (4x64K). Daher auch der Sprung von 4

544:    c0 c1 c2 c3  :@ABC:    c1 c2 c3 c4  :ABCD:  mit (1.12.1) und ohne (1.18) 
548:    c4 c5 c6 c7  :DEFG:    c5 c6 c7 c8  :EFGH:     boot-sektor.
54c:    c8 c9 ca cb  :HIJK:    c9 ca cb cc  :IJKL:     Daher sind die folgenden
550:    cc cd ce cf  :LMNO:    cd ce cf d0  :MNOP:     Einträge um jeweils 
554:    d0 d1 d2 d3  :PQRS:    d1 d2 d3 d4  :QRST:     1 Byte verschoben.
558:    d4 d5 d6 d7  :TUVW:    d5 d6 d7 d8  :UVWX:
55c:    d8 d9 da db  :XYZ[:    d9 da db dc  :YZ[\:
560:    dc dd de df  :\]^_:    dd de df e0  :]^_`:
564:    e0 e1 e2 e3  :`abc:    e1 e2 e3 e4  :abcd:
568:    e4 e5 e6 e7  :defg:    e5 e6 e7 e8  :efgh:
56c:    e8 e9 ea eb  :hijk:    e9 ea eb ec  :ijkl:
570:    ec ed ee ef  :lmno:    ed ee ef f0  :mnop:
574:    f0 f1 f2 f3  :pqrs:    f1 f2 f3 f4  :qrst:
578:    f4 f5 f6 f7  :tuvw:    f5 f6 f7 f8  :uvwx:
57c:    f8 f9 fa fb  :xyz{:    f9 fa fb fc  :yz{|:
580:    fc fd fe ff  :|}~.:    fd fe ff 00  :}~..:
584:    00 01 02 03  :....:    01 02 03 04  :....:


Gegenüberstellung FW 1.18 und FW 1.29.5

Hier folgt eine Hexdump-Gegenüberstellung der WSW-Header der beiden Firmware-Versionen 1.18 und 1.29.5:

        FW 1.18small.wsw       FW 1.29.5small.wsw       
------------------------------------------------------
000:    57 53 57 20  :WSW :    57 53 57 20  :WSW :

MD5 mit RSA verschlüsselt
0024 Länge der MD5
002c Länge der Verschlüsselung

004:    00 24 00 2c  :.$.,:    00 24 00 2c  :.$.,:
008:    96 ab b8 20  :.+8 :    6d 67 4b 89  :mgK.:  <<<<< 
00c:    bd 01 c6 d9  :=.FY:    3a 3b 5c 31  ::;\1:  <<<<<
010:    2e 3b 40 6e  :.;@n:    ec 91 20 a9  :l. ):  <<<<<
014:    b3 12 d3 d5  :3.SU:    3e ea bd 6a  :>j=j:  <<<<<
018:    60 5d d7 d0  :`]WP:    cc f2 cc 95  :LrL.:  <<<<<
01c:    c6 30 85 c6  :F0.F:    dc 00 f8 8b  :\.x.:  <<<<<
020:    92 8f 99 79  :...y:    58 27 40 d0  :X'@P:  <<<<<
024:    91 39 4f 5b  :.9O[:    74 d1 40 61  :tQ@a:  <<<<<
028:    40 45 51 d1  :@EQQ:    50 ea a1 69  :Pj!i:  <<<<<
02c:    80 96 a1 47  :..!G:    f7 41 56 52  :wAVR:  <<<<<
030:    e9 8f b3 00  :i.3.:    ea 1f 54 20  :j.T :  <<<<<
034:    00 00 00 00  :....:    00 00 00 00  :....:
038:    00 00 00 00  :....:    00 00 00 00  :....:
03c:    00 00 00 00  :....:    00 00 00 00  :....:

Ab hier: Neuer genutzer Datenbereich
0024 Länge der MD5
0081 Länge der Verschlüsselung

040:    00 00 00 00  :....:    00 24 00 81  :.$..:  <<<<< 
044:    00 00 00 00  :....:    f9 40 18 ee  :y@.n:  <<<<<
048:    00 00 00 00  :....:    c1 86 f8 11  :A.x.:  <<<<<
04c:    00 00 00 00  :....:    99 81 bb ec  :..;l:  <<<<<
050:    00 00 00 00  :....:    8a a6 90 67  :.&.g:  <<<<<
054:    00 00 00 00  :....:    6d 61 3e f1  :ma>q:  <<<<<
058:    00 00 00 00  :....:    5e de 46 16  :^^F.:  <<<<<
05c:    00 00 00 00  :....:    a1 27 19 f0  :!'.p:  <<<<<
060:    00 00 00 00  :....:    5d b0 66 89  :]0f.:  <<<<<
064:    00 00 00 00  :....:    d2 93 b0 c1  :R.0A:  <<<<<
068:    00 00 00 00  :....:    fa 05 0d c1  :z..A:  <<<<<
06c:    00 00 00 00  :....:    a5 94 54 7d  :%.T}:  <<<<<
070:    00 00 00 00  :....:    80 47 28 c3  :.G(C:  <<<<<
074:    00 00 00 00  :....:    ea 98 6f f4  :j.ot:  <<<<<
078:    00 00 00 00  :....:    d8 b8 d5 65  :X8Ue:  <<<<<
07c:    00 00 00 00  :....:    07 27 db e4  :.'[d:  <<<<<
080:    00 00 00 00  :....:    8d 42 35 cb  :.B5K:  <<<<<
084:    00 00 00 00  :....:    0d fd 9d ec  :.}.l:  <<<<<
088:    00 00 00 00  :....:    8f 68 ed 97  :.hm.:  <<<<<
08c:    00 00 00 00  :....:    19 5f 9c d8  :._.X:  <<<<<
090:    00 00 00 00  :....:    31 c4 fc a8  :1D|(:  <<<<<
094:    00 00 00 00  :....:    66 7c 49 f7  :f|Iw:  <<<<<
098:    00 00 00 00  :....:    87 5f bd b9  :._=9:  <<<<<
09c:    00 00 00 00  :....:    c6 35 9c 02  :F5..:  <<<<<
0a0:    00 00 00 00  :....:    be 4f 64 2d  :>Od-:  <<<<<
0a4:    00 00 00 00  :....:    e3 a8 25 bd  :c(%=:  <<<<<
0a8:    00 00 00 00  :....:    ee 06 67 e2  :n.gb:  <<<<<
0ac:    00 00 00 00  :....:    04 bd 28 74  :.=(t:  <<<<<
0b0:    00 00 00 00  :....:    01 fe 84 4b  :.~.K:  <<<<<
0b4:    00 00 00 00  :....:    2e 69 21 69  :.i!i:  <<<<<
0b8:    00 00 00 00  :....:    25 bc df 4a  :%<_J:  <<<<<
0bc:    00 00 00 00  :....:    56 b0 fa 74  :V0zt:  <<<<<
0c0:    00 00 00 00  :....:    7a 03 5d d4  :z.]T:  <<<<<
0c4:    00 00 00 00  :....:    91 00 00 00  :....:  <<<<<
0c8:    00 00 00 00  :....:    00 00 00 00  :....:

Lauter Nullen

3fc:    00 00 00 00  :....:    00 00 00 00  :....:

Der Name der Box

400:    4d 37 34 30  :M740:    4d 37 34 30  :M740:
404:    41 56 00 00  :AV..:    41 56 00 00  :AV..:
408:    00 00 00 00  :....:    00 00 00 00  :....:

Lauter Nullen

43c:    00 00 00 00  :....:    00 00 00 00  :....:

Der Name der Firmware

440:    31 2e 31 38  :1.18:    31 2e 32 39  :1.29:  <<<<<
444:    73 6d 61 6c  :smal:    2e 35 73 6d  :.5sm:  <<<<<
448:    6c 00 00 00  :l...:    61 6c 6c 00  :all.:  <<<<<
44c:    00 00 00 00  :....:    00 00 00 00  :....:

Lauter Nullen

478:    00 00 00 00  :....:    00 00 00 00  :....:

unbekannt
47c:    67 00 b6 0f  :g.6.:    ab a2 24 a6  :+"$&:  <<<<<

timestamp:
480:    41 bb 31 ad  :A;1-:    42 10 a3 da  :B.#Z:  <<<<<

Länge der Map
484:    00 00 00 c8  :...H:    00 00 00 c8  :...H:

Map
488:    00 01 02 03  :....:    00 01 02 03  :....:
48c:    04 05 06 07  :....:    04 05 06 07  :....:
490:    08 09 0a 0b  :....:    08 09 0a 0b  :....:
494:    0c 0d 0e 0f  :....:    0c 0d 0e 0f  :....:
498:    10 11 12 13  :....:    10 11 12 13  :....:
49c:    14 15 16 17  :....:    14 15 16 17  :....:
4a0:    18 19 1a 1b  :....:    18 19 1a 1b  :....:
4a4:    1c 1d 1e 1f  :....:    1c 1d 1e 1f  :....:
4a8:    20 21 22 23  : !"#:    20 21 22 23  : !"#:
4ac:    24 25 26 27  :$%&':    24 25 26 27  :$%&':
4b0:    28 29 2a 2b  :()*+:    28 29 2a 2b  :()*+:
4b4:    2c 2d 2e 2f  :,-./:    2c 2d 2e 2f  :,-./:
4b8:    30 31 32 33  :0123:    30 31 32 33  :0123:
4bc:    34 35 36 37  :4567:    34 35 36 37  :4567:
4c0:    38 39 3a 3b  :89:;:    38 39 3a 3b  :89:;:
4c4:    3c 3d 3e 3f  :<=>?:    3c 3d 3e 3f  :<=>?:
4c8:    40 41 42 43  :@ABC:    40 41 42 43  :@ABC:
4cc:    44 45 46 47  :DEFG:    44 45 46 47  :DEFG:
4d0:    48 49 4a 4b  :HIJK:    48 49 4a 4b  :HIJK:
4d4:    4c 4d 4e 4f  :LMNO:    4c 4d 4e 4f  :LMNO:
4d8:    50 51 52 53  :PQRS:    50 51 52 53  :PQRS:
4dc:    54 55 56 57  :TUVW:    54 55 56 57  :TUVW:
4e0:    58 59 5a 5b  :XYZ[:    58 59 5a 5b  :XYZ[:
4e4:    5c 5d 5e 5f  :\]^_:    5c 5d 5e 5f  :\]^_:
4e8:    60 61 62 63  :`abc:    60 61 62 63  :`abc:
4ec:    64 65 66 67  :defg:    64 65 66 67  :defg:
4f0:    68 69 6a 6b  :hijk:    68 69 6a 6b  :hijk:
4f4:    6c 6d 6e 6f  :lmno:    6c 6d 6e 6f  :lmno:
4f8:    70 71 72 73  :pqrs:    70 71 72 73  :pqrs:
4fc:    74 75 76 77  :tuvw:    74 75 76 77  :tuvw:
500:    78 79 7a 7b  :xyz{:    78 79 7a 7b  :xyz{:
504:    7c 7d 7e 7f  :|}~.:    7c 7d 7e 7f  :|}~.:
508:    80 81 82 83  :....:    80 81 82 83  :....:
50c:    84 85 86 87  :....:    84 85 86 87  :....:
510:    88 89 8a 8b  :....:    88 89 8a 8b  :....:
514:    8c 8d 8e 8f  :....:    8c 8d 8e 8f  :....:
518:    90 91 92 93  :....:    90 91 92 93  :....:
51c:    94 95 96 97  :....:    94 95 96 97  :....:
520:    98 99 9a 9b  :....:    98 99 9a 9b  :....:
524:    9c 9d 9e 9f  :....:    9c 9d 9e 9f  :....:
528:    a0 a1 a2 a3  : !"#:    a0 a1 a2 a3  : !"#:
52c:    a4 a5 a6 a7  :$%&':    a4 a5 a6 a7  :$%&':
530:    a8 a9 aa ab  :()*+:    a8 a9 aa ab  :()*+:
534:    ac ad ae af  :,-./:    ac ad ae af  :,-./:
538:    b0 b1 b2 b3  :0123:    b0 b1 b2 b3  :0123:
53c:    b4 b5 b6 b7  :4567:    b4 b5 b6 b7  :4567:
540:    b8 b9 ba bb  :89:;:    b8 b9 ba bb  :89:;:
544:    c1 c2 c3 c4  :ABCD:    c1 c2 c3 c4  :ABCD:
548:    c5 c6 c7 c8  :EFGH:    c5 c6 c7 c8  :EFGH:
54c:    c9 ca cb cc  :IJKL:    c9 ca cb cc  :IJKL:
550:    cd ce cf d0  :MNOP:    cd ce cf d0  :MNOP:
554:    d1 d2 d3 d4  :QRST:    d1 d2 d3 d4  :QRST:
558:    d5 d6 d7 d8  :UVWX:    d5 d6 d7 d8  :UVWX:
55c:    d9 da db dc  :YZ[\:    d9 da db dc  :YZ[\:
560:    dd de df e0  :]^_`:    dd de df e0  :]^_`:
564:    e1 e2 e3 e4  :abcd:    e1 e2 e3 e4  :abcd:
568:    e5 e6 e7 e8  :efgh:    e5 e6 e7 e8  :efgh:
56c:    e9 ea eb ec  :ijkl:    e9 ea eb ec  :ijkl:
570:    ed ee ef f0  :mnop:    ed ee ef f0  :mnop:
574:    f1 f2 f3 f4  :qrst:    f1 f2 f3 f4  :qrst:
578:    f5 f6 f7 f8  :uvwx:    f5 f6 f7 f8  :uvwx:
57c:    f9 fa fb fc  :yz{|:    f9 fa fb fc  :yz{|:
580:    fd fe ff 00  :}~..:    fd fe ff 00  :}~..:
584:    01 02 03 04  :....:    01 02 03 04  :....:

Links zum Thema »Firmware« 

Persönliche Werkzeuge