Imported Upstream version 0.4.5
[packages/binwalk.git] / src / magic / magic.firmware
1
2 #--------------------------Firmware Formats---------------------------
3
4 # uImage file     
5 # From: Craig Heffner, U-Boot image.h header definitions file
6 0       belong  0x27051956      uImage header, header size: 64 bytes,
7 >4      belong  x               header CRC: 0x%X,
8 >8      bedate  x               created: %s,
9 >12     belong  x               image size: %d bytes,
10 >16     belong  x               Data Address: 0x%X,
11 >20     belong  x               Entry Point: 0x%X,
12 >24     belong  x               data CRC: 0x%X,
13 #>28    byte    x               OS type: %d,
14 >28     byte    0               OS: Invalid OS,
15 >28     byte    1               OS: OpenBSD,
16 >28     byte    2               OS: NetBSD,
17 >28     byte    3               OS: FreeBSD,
18 >28     byte    4               OS: 4.4BSD,
19 >28     byte    5               OS: Linux,
20 >28     byte    6               OS: SVR4,
21 >28     byte    7               OS: Esix,
22 >28     byte    8               OS: Solaris,
23 >28     byte    9               OS: Irix,
24 >28     byte    10              OS: SCO,
25 >28     byte    11              OS: Dell,
26 >28     byte    12              OS: NCR,
27 >28     byte    13              OS: LynxOS,
28 >28     byte    14              OS: VxWorks,
29 >28     byte    15              OS: pSOS,
30 >28     byte    16              OS: QNX,
31 >28     byte    17              OS: Firmware,
32 >28     byte    18              OS: RTEMS,
33 >28     byte    19              OS: ARTOS,
34 >28     byte    20              OS: Unity OS,
35 #>29    byte    x               CPU arch: %d,
36 >29     byte    0               CPU: Invalid OS,
37 >29     byte    1               CPU: Alpha,
38 >29     byte    2               CPU: ARM,
39 >29     byte    3               CPU: Intel x86,
40 >29     byte    4               CPU: IA64,
41 >29     byte    5               CPU: MIPS,
42 >29     byte    6               CPU: MIPS 64 bit,
43 >29     byte    7               CPU: PowerPC,
44 >29     byte    8               CPU: IBM S390,
45 >29     byte    9               CPU: SuperH,
46 >29     byte    10              CPU: Sparc,
47 >29     byte    11              CPU: Sparc 64 bit,
48 >29     byte    12              CPU: M68K,
49 >29     byte    13              CPU: Nios-32,
50 >29     byte    14              CPU: MicroBlaze,
51 >29     byte    15              CPU: Nios-II,
52 >29     byte    16              CPU: Blackfin,
53 >29     byte    17              CPU: AVR,
54 >29     byte    18              CPU: STMicroelectronics ST200,
55 #>30    byte    x               image type: %d,
56 >30     byte    0               image type: Invalid Image,
57 >30     byte    1               image type: Standalone Program,
58 >30     byte    2               image type: OS Kernel Image,
59 >30     byte    3               image type: RAMDisk Image,
60 >30     byte    4               image type: Multi-File Image,
61 >30     byte    5               image type: Firmware Image,
62 >30     byte    6               image type: Script file,
63 >30     byte    7               image type: Filesystem Image,
64 >30     byte    8               image type: Binary Flat Device Tree Blob
65 #>31    byte    x               compression type: %d,
66 >31     byte    0               compression type: none,
67 >31     byte    1               compression type: gzip,
68 >31     byte    2               compression type: bzip2,
69 >31     byte    3               compression type: lzma,
70 >32     string  x               image name: %s
71
72 #IMG0 header, found in VxWorks-based Mercury router firmware
73 0       string          IMG0            IMG0 (VxWorks) header,
74 >4      belong          x               size: %d
75
76 #Mediatek bootloader signature
77 #From xp-dev.com
78 0       string          BOOTLOADER!     Mediatek bootloader
79
80 #CSYS header formats
81 0       string          CSYS\x00        CSYS header, little endian, 
82 >8      lelong          x               size: %d
83
84 0       string          CSYS\x80        CSYS header, big endian,
85 >8      belong          x               size: %d
86
87 # wrgg firmware image
88 0       string          wrgg02          WRGG firmware header,
89 >6      string          x               name: %s,
90 >48     string          x               root device: %s
91
92 # trx image file
93 0       string          HDR0            TRX firmware header, little endian, header size: 28 bytes, 
94 >4      lelong          x               image size: %d bytes,
95 >8      lelong          x               CRC32: 0x%X
96 >12     lelong          x               flags/version: 0x%X
97
98 0       string          0RDH            TRX firmware header, big endian, header size: 28 bytes,
99 >4      belong          x               image size: %d bytes,
100 >8      belong          x               CRC32: 0x%X
101 >12     belong          x               flags/version: 0x%X
102
103
104 # Ubicom firmware image
105 0       belong  0xFA320080              Ubicom firmware header,
106 >12     belong  x                       checksum: 0x%X,
107 >24     belong  x                       image size: %d
108
109 # The ROME bootloader is used by several RealTek-based products.
110 # Unfortunately, the magic bytes are specific to each product, so
111 # separate signatures must be created for each one.
112
113 # Netgear KWGR614 ROME image
114 0       string          G614            Realtek firmware header (ROME bootloader),
115 >4      beshort         0xd92f          image type: KFS,
116 >4      beshort         0xb162          image type: RDIR,
117 >4      beshort         0xea43          image type: BOOT,
118 >4      beshort         0x8dc9          image type: RUN,
119 >4      beshort         0x2a05          image type: CCFG,
120 >4      beshort         0x6ce8          image type: DCFG,
121 >4      beshort         0xc371          image type: LOG,
122 >6      byte            x               header version: %d,
123 #month
124 >10     byte            x               created: %d/
125 #day    
126 >12     byte            x               \b%d/
127 #year
128 >8      beshort         x               \b%d,
129 >16     belong          x               image size: %d bytes,
130 >22     byte            x               body checksum: 0x%X,
131 >23     byte            x               header checksum: 0x%X
132
133 # Linksys WRT54GX ROME image
134 0       belong          0x59a0e842      Realtek firmware header (ROME bootloader)
135 >4      beshort         0xd92f          image type: KFS,
136 >4      beshort         0xb162          image type: RDIR,
137 >4      beshort         0xea43          image type: BOOT,
138 >4      beshort         0x8dc9          image type: RUN,
139 >4      beshort         0x2a05          image type: CCFG,
140 >4      beshort         0x6ce8          image type: DCFG,
141 >4      beshort         0xc371          image type: LOG,
142 >6      byte            x               header version: %d,
143 #month
144 >10     byte            x               created: %d/
145 #day    
146 >12     byte            x               \b%d/
147 #year
148 >8      beshort         x               \b%d,
149 >16     belong          x               image size: %d bytes,
150 >22     byte            x               body checksum: 0x%X,
151 >23     byte            x               header checksum: 0x%X
152
153 # PackImg tag, somtimes used as a delimiter between the kernel and rootfs in firmware images.
154 0       string          --PaCkImGs--    PackImg Tag,
155 >16     lelong          x               little endian size: %d bytes;
156 >16     belong          x               big endian size: %d bytes
157
158
159 #------------------------------------------------------------------------------
160 # Broadcom header format
161 #
162 0       string          BCRM            Broadcom header,
163 >4      lelong          x               number of sections: %d,
164 >>8     lelong          18              first section type: flash
165 >>8     lelong          19              first section type: disk
166 >>8     lelong          21              first section type: tag
167
168
169 # Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files
170 # http://ftg.lbl.gov/checkpoint
171 0       string  Ck0\0\0R\0\0\0  BLCR
172 >16     lelong  1       x86
173 >16     lelong  3       alpha
174 >16     lelong  5       x86-64
175 >16     lelong  7       ARM
176 >8      lelong  x       context data (little endian, version %d)
177
178 0       string  \0\0\0C\0\0\0R  BLCR
179 >16     belong  2       SPARC
180 >16     belong  4       ppc
181 >16     belong  6       ppc64
182 >16     belong  7       ARMEB
183 >16     belong  8       SPARC64
184 >8      belong  x       context data (big endian, version %d)
185
186 # Aculab VoIP firmware
187 # From: Mark Brown <broonie@sirena.org.uk>
188 0       string  VoIP\x20Startup\x20and      Aculab VoIP firmware
189 >35     string  x       format %s
190
191 #------------------------------------------------------------------------------
192 # HP LaserJet 1000 series downloadable firmware file
193 0       string  \xbe\xefABCDEFGH        HP LaserJet 1000 series downloadable firmware
194
195 # From Albert Cahalan <acahalan@gmail.com>
196 # really le32 operation,destination,payloadsize (but quite predictable)
197 # 01 00 00 00 00 00 00 c0 00 02 00 00
198 0       string          \1\0\0\0\0\0\0\300\0\2\0\0      Marvell Libertas firmware
199
200 #---------------------------------------------------------------------------
201 # The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
202 # lead Sun/Cobalt developer) who agrees that they are good and worthy of
203 # inclusion.
204
205 # Boot ROM images for Sun/Cobalt Linux server appliances
206 0       string  Cobalt\x20Networks\x20Inc.\nFirmware\x20v     Paged COBALT boot rom
207 >38     string x        V%.4s
208
209 # New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
210 # at the very end where file(1) can't get it.
211 0       string CRfs     COBALT boot rom data (Flat boot rom or file system)
212
213 #
214 # Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
215 0   string      S0          Motorola S-Record; binary data in text format
216
217 # --------------------------------
218 # Microsoft Xbox data file formats
219 0       string          XIP0            XIP, Microsoft Xbox data
220 0       string          XTF0            XTF, Microsoft Xbox data
221
222 #Windows CE
223 64      string          CECE            Windows CE RTOS
224
225 # --------------------------------
226 # ZynOS ROM header format
227 # From openwrt zynos.h.
228 6       string          SIG             ZynOS header, header size: 48 bytes,
229 >0      belong          x               load address 0x%X,
230 >9      byte            <0x7F           rom image type:
231 >>9     byte            <1              invalid,
232 >>9     byte            >7              invalid,
233 >>9     byte            1               ROMIMG,
234 >>9     byte            2               ROMBOOT,
235 >>9     byte            3               BOOTEXT,
236 >>9     byte            4               ROMBIN,
237 >>9     byte            5               ROMDIR,
238 >>9     byte            6               6,
239 >>9     byte            7               ROMMAP,
240 >9      byte            >0x7F           ram image type:
241 >>9     byte            >0x82           invalid,
242 >>9     byte            0x80            RAM,
243 >>9     byte            0x81            RAMCODE,
244 >>9     byte            0x82            RAMBOOT,
245 >10     belong          >0x40000000     invalid
246 >10     belong          <0              invalid
247 >10     belong          0               invalid
248 >10     belong          x               uncompressed size: %d,
249 >14     belong          >0x40000000     invalid
250 >14     belong          <0              invalid
251 >14     belong          0               invalid
252 >14     belong          x               compressed size: %d,
253 >20     beshort         x               uncompressed checksum: 0x%X,
254 >22     beshort         x               compressed checksum: 0x%X,
255 >18     byte            x               flags: 0x%X,
256 >18     byte            &0x40           uncompressed checksum is valid,
257 >18     byte            &0x80           the binary is compressed,
258 >>18    byte            &0x20           compressed checksum is valid,
259 >41     belong          x               memory map table address: 0x%X
260
261 # Firmware header used by some VxWorks-based Cisco products
262 0       string          CI032.00        Cisco VxWorks firmware header,
263 >8      lelong          >1024           invalid
264 >8      lelong          <0              invalid
265 >8      lelong          x               header size: %d bytes,
266 >32     lelong          >1024           invalid
267 >32     lelong          <0              invalid
268 >32     lelong          x               number of files: %d,
269 >48     lelong          <0              invalid
270 >48     lelong          x               image size: %d,
271 >64     string          x               firmware version: %s
272
273 # Firmware header used by some TV's
274 0       string          FNIB            ZBOOT firmware header, header size: 32 bytes,
275 >8      lelong          x               load address: 0x%.8X,
276 >12     lelong          x               start address: 0x%.8X,
277 >16     lelong          x               checksum: 0x%.8X,
278 >20     lelong          x               version: 0x%.8X,
279 >24     lelong          <1              invalid
280 >24     lelong          x               image size: %d bytes
281
282 # Firmware header used by several D-Link routers (and probably others)
283 0               string  \x5e\xa3\xa4\x17
284 >(7.b+12)       string  \x5e\xa3\xa4\x17        DLOB firmware header,
285 >>12            string  x                       %s,
286 >>(7.b+40)      string  x                       %s
287
288 # TP-Link firmware header structure; thanks to Jonathan McGowan for reversing and documenting this format
289 4       string          TP-LINK\x20Technologies         TP-Link firmware header,
290 >0      lelong          x                               header version: %d,
291 >0x98   beshort         x                               firmware version: %d.
292 >0x9A   beshort         x                               \b%d.
293 >0x9C   beshort         x                               \b%d,
294 >0x1C   string          x                               image version: %s,
295 >0x7C   belong          x                               image size: %d bytes,
296 >0x40   belong          x                               product ID: 0x%X,
297 >0x44   belong          x                               product version: %d,
298 >0x74   belong          x                               kernel load address: 0x%X,
299 >0x78   belong          x                               kernel entry point: 0x%X,
300 >0x80   belong          x                               kernel offset: %d,
301 >0x84   belong          x                               kernel length: %d,
302 >0x88   belong          x                               rootfs offset: %d,
303 >0x8C   belong          x                               rootfs length: %d,
304 >0x90   belong          x                               bootloader offset: %d,
305 >0x94   belong          x                               bootloader length: %d
306