WSW-Header
Aus open7x0.org
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«
- Allgemeine Infos:
- Hintergrundwissen:

