Imported Upstream version 1.2.2-1
[packages/binwalk.git] / 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          <1              invalid
95 >4      lelong          x               image size: %d bytes,
96 >8      lelong          x               CRC32: 0x%X
97 >12     leshort         x               flags: 0x%X,
98 >14     leshort         x               version: %d
99
100 0       string          0RDH            TRX firmware header, big endian, header size: 28 bytes,
101 >4      belong          <1              invalid
102 >4      belong          x               image size: %d bytes,
103 >8      belong          x               CRC32: 0x%X
104 >12     beshort         x               flags: 0x%X,
105 >14     beshort         x               version: %d
106
107
108 # Ubicom firmware image
109 0       belong  0xFA320080              Ubicom firmware header,
110 >12     belong  x                       checksum: 0x%X,
111 >24     belong  <0                      invalid
112 >24     belong  x                       image size: %d
113
114 # The ROME bootloader is used by several RealTek-based products.
115 # Unfortunately, the magic bytes are specific to each product, so
116 # separate signatures must be created for each one.
117
118 # Netgear KWGR614 ROME image
119 0       string          G614            Realtek firmware header (ROME bootloader),
120 >4      beshort         0xd92f          image type: KFS,
121 >4      beshort         0xb162          image type: RDIR,
122 >4      beshort         0xea43          image type: BOOT,
123 >4      beshort         0x8dc9          image type: RUN,
124 >4      beshort         0x2a05          image type: CCFG,
125 >4      beshort         0x6ce8          image type: DCFG,
126 >4      beshort         0xc371          image type: LOG,
127 >6      byte            x               header version: %d,
128 #month
129 >10     byte            x               created: %d/
130 #day    
131 >12     byte            x               \b%d/
132 #year
133 >8      beshort         x               \b%d,
134 >16     belong          x               image size: %d bytes,
135 >22     byte            x               body checksum: 0x%X,
136 >23     byte            x               header checksum: 0x%X
137
138 # Linksys WRT54GX ROME image
139 0       belong          0x59a0e842      Realtek firmware header (ROME bootloader)
140 >4      beshort         0xd92f          image type: KFS,
141 >4      beshort         0xb162          image type: RDIR,
142 >4      beshort         0xea43          image type: BOOT,
143 >4      beshort         0x8dc9          image type: RUN,
144 >4      beshort         0x2a05          image type: CCFG,
145 >4      beshort         0x6ce8          image type: DCFG,
146 >4      beshort         0xc371          image type: LOG,
147 >6      byte            x               header version: %d,
148 #month
149 >10     byte            x               created: %d/
150 #day    
151 >12     byte            x               \b%d/
152 #year
153 >8      beshort         x               \b%d,
154 >16     belong          x               image size: %d bytes,
155 >22     byte            x               body checksum: 0x%X,
156 >23     byte            x               header checksum: 0x%X
157
158 # PackImg tag, somtimes used as a delimiter between the kernel and rootfs in firmware images.
159 0       string          --PaCkImGs--    PackImg section delimiter tag,
160 # If the size in both big and little endian is greater than 512MB, consider this a false positive
161 >16     lelong          >0x20000000
162 >>16    belong          >0x20000000     invalid
163 >16     lelong          <0
164 >>16    belong          <0              invalid
165 >16     lelong          >0
166 >>16    lelong          x               little endian size: %d bytes;
167 >16     belong          >0              
168 >>16    belong          x               big endian size: %d bytes
169
170
171 #------------------------------------------------------------------------------
172 # Broadcom header format
173 #
174 0       string          BCRM            Broadcom header,
175 >4      lelong          <0              invalid
176 >4      lelong          x               number of sections: %d,
177 >>8     lelong          18              first section type: flash
178 >>8     lelong          19              first section type: disk
179 >>8     lelong          21              first section type: tag
180
181
182 # Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files
183 # http://ftg.lbl.gov/checkpoint
184 0       string  Ck0\0\0R\0\0\0  BLCR
185 >16     lelong  1       x86
186 >16     lelong  3       alpha
187 >16     lelong  5       x86-64
188 >16     lelong  7       ARM
189 >8      lelong  x       context data (little endian, version %d)
190
191 0       string  \0\0\0C\0\0\0R  BLCR
192 >16     belong  2       SPARC
193 >16     belong  4       ppc
194 >16     belong  6       ppc64
195 >16     belong  7       ARMEB
196 >16     belong  8       SPARC64
197 >8      belong  x       context data (big endian, version %d)
198
199 # Aculab VoIP firmware
200 # From: Mark Brown <broonie@sirena.org.uk>
201 0       string  VoIP\x20Startup\x20and      Aculab VoIP firmware
202 >35     string  x       format "%s"
203
204 #------------------------------------------------------------------------------
205 # HP LaserJet 1000 series downloadable firmware file
206 0       string  \xbe\xefABCDEFGH        HP LaserJet 1000 series downloadable firmware
207
208 # From Albert Cahalan <acahalan@gmail.com>
209 # really le32 operation,destination,payloadsize (but quite predictable)
210 # 01 00 00 00 00 00 00 c0 00 02 00 00
211 0       string          \1\0\0\0\0\0\0\300\0\2\0\0      Marvell Libertas firmware
212
213 #---------------------------------------------------------------------------
214 # The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
215 # lead Sun/Cobalt developer) who agrees that they are good and worthy of
216 # inclusion.
217
218 # Boot ROM images for Sun/Cobalt Linux server appliances
219 0       string  Cobalt\x20Networks\x20Inc.\nFirmware\x20v     Paged COBALT boot rom
220 >38     string x        V%.4s
221
222 # New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
223 # at the very end where file(1) can't get it.
224 0       string CRfs     COBALT boot rom data (Flat boot rom or file system)
225
226 #
227 # Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
228 # Useless until forther improvements can be made to the signature.
229 #0   string      S0          Motorola S-Record; binary data in text format
230
231 # --------------------------------
232 # Microsoft Xbox data file formats
233 0       string          XIP0            XIP, Microsoft Xbox data
234 0       string          XTF0            XTF, Microsoft Xbox data
235
236 #Windows CE
237 0       string          CECE            Windows CE RTOS{offset-adjust:-64}
238
239 # --------------------------------
240 # ZynOS ROM header format
241 # From openwrt zynos.h.
242 0       string          SIG             ZynOS header, header size: 48 bytes,{offset-adjust:-6}
243 #>0     belong          x               load address 0x%X,
244 >3      byte            <0x7F           rom image type:
245 >>3     byte            <1              invalid,
246 >>3     byte            >7              invalid,
247 >>3     byte            1               ROMIMG,
248 >>3     byte            2               ROMBOOT,
249 >>3     byte            3               BOOTEXT,
250 >>3     byte            4               ROMBIN,
251 >>3     byte            5               ROMDIR,
252 >>3     byte            6               6,
253 >>3     byte            7               ROMMAP,
254 >3      byte            >0x7F           ram image type:
255 >>3     byte            >0x82           invalid,
256 >>3     byte            0x80            RAM,
257 >>3     byte            0x81            RAMCODE,
258 >>3     byte            0x82            RAMBOOT,
259 >4      belong          >0x40000000     invalid
260 >4      belong          <0              invalid
261 >4      belong          0               invalid
262 >4      belong          x               uncompressed size: %d,
263 >8      belong          >0x40000000     invalid
264 >8      belong          <0              invalid
265 >8      belong          0               invalid
266 >8      belong          x               compressed size: %d,
267 >14     beshort         x               uncompressed checksum: 0x%X,
268 >16     beshort         x               compressed checksum: 0x%X,
269 >12     byte            x               flags: 0x%X,
270 >12     byte            &0x40           uncompressed checksum is valid,
271 >12     byte            &0x80           the binary is compressed,
272 >>12    byte            &0x20           compressed checksum is valid,
273 >35     belong          x               memory map table address: 0x%X
274
275 # Firmware header used by some VxWorks-based Cisco products
276 0       string          CI032.00        Cisco VxWorks firmware header,
277 >8      lelong          >1024           invalid
278 >8      lelong          <0              invalid
279 >8      lelong          x               header size: %d bytes,
280 >32     lelong          >1024           invalid
281 >32     lelong          <0              invalid
282 >32     lelong          x               number of files: %d,
283 >48     lelong          <0              invalid
284 >48     lelong          x               image size: %d,
285 >64     string          x               firmware version: "%s"
286
287 # Firmware header used by some TV's
288 0       string          FNIB            ZBOOT firmware header, header size: 32 bytes,
289 >8      lelong          x               load address: 0x%.8X,
290 >12     lelong          x               start address: 0x%.8X,
291 >16     lelong          x               checksum: 0x%.8X,
292 >20     lelong          x               version: 0x%.8X,
293 >24     lelong          <1              invalid
294 >24     lelong          x               image size: %d bytes
295
296 # Firmware header used by several D-Link routers (and probably others)
297 0               string  \x5e\xa3\xa4\x17        DLOB firmware header,
298 >(7.b+12)       string  !\x5e\xa3\xa4\x17       invalid,
299 #>>12           string  x                       %s,
300 >(7.b+40)       string  x                       boot partition: "%s"
301
302 # TP-Link firmware header structure; thanks to Jonathan McGowan for reversing and documenting this format
303 0       string          TP-LINK\x20Technologies         TP-Link firmware header,{offset-adjust:-4}
304 #>-4    lelong          x                               header version: %d,
305 >0x94   beshort         x                               firmware version: %d.
306 >0x96   beshort         x                               \b%d.
307 >0x98   beshort         x                               \b%d,
308 >0x18   string          x                               image version: "%s",
309 #>0x74  belong          x                               image size: %d bytes,
310 >0x3C   belong          x                               product ID: 0x%X,
311 >0x40   belong          x                               product version: %d,
312 >0x70   belong          x                               kernel load address: 0x%X,
313 >0x74   belong          x                               kernel entry point: 0x%X,
314 >0x7C   belong          x                               kernel offset: %d,
315 >0x80   belong          x                               kernel length: %d,
316 >0x84   belong          x                               rootfs offset: %d,
317 >0x88   belong          x                               rootfs length: %d,
318 >0x8C   belong          x                               bootloader offset: %d,
319 >0x90   belong          x                               bootloader length: %d
320
321 # Header format from: http://skaya.enix.org/wiki/FirmwareFormat
322 0       string          \x36\x00\x00\x00                Broadcom 96345 firmware header, header size: 256,
323 >4      string          !Broadcom
324 >>4     string          !\x20\x20\x20\x20               invalid
325 >41     beshort         !0x2020
326 >>41    beshort         !0x0000
327 >>>41   string          x                               firmware version: "%.4s",
328 >45     beshort         !0x0202
329 >>45    beshort         !0x0000
330 >>>45   string          x                               board id: "%s",
331 >236    belong          x                               ~CRC32 header checksum: 0x%X,
332 >216    belong          x                               ~CRC32 data checksum: 0x%X
333
334 # Xerox MFP DLM signatures
335 0       string          %%XRXbegin                      Xerox DLM firmware start of header
336 0       string          %%OID_ATT_DLM_NAME              Xerox DLM firmware name:
337 >19     string          x                               "%s"
338 0       string          %%OID_ATT_DLM_VERSION           Xerox DLM firmware version:
339 >22     string          x                               "%s"
340 0       string          %%XRXend                        Xerox DLM firmware end of header
341
342 # Generic copyright signature
343 0       string          Copyright                       Copyright string:
344 >9      byte            0                               invalid
345 >9      string          x                               "%s
346 >40     string          x                               \b%s"
347
348 # Sercomm firmware header
349 0       string          sErCoMm                         Sercomm firmware signature,
350 >7      leshort         x                               version control: %d,
351 >9      leshort         x                               download control: %d,
352 >11     string          x                               hardware ID: "%s",
353 >44     leshort         x                               hardware version: 0x%X,
354 >58     leshort         x                               firmware version: 0x%X,
355 >60     leshort         x                               starting code segment: 0x%X,
356 >62     leshort         x                               code size: 0x%X
357
358 # NPK firmware header, used by Mikrotik
359 0               belong          0x1EF1D0BA              NPK firmware header,
360 >4              lelong          <0                      invalid
361 >4              lelong          x                       image size: %d,
362 >14             string          x                       image name: "%s",
363 >(48.l+58)      string          x                       description: "%s
364 >(48.l+121)     string          x                       \b%s"
365
366 # Ubiquiti firmware signatures
367 0       string          UBNT            Ubiquiti firmware header,
368 >0x104  belong          x               ~CRC32: 0x%X,
369 >4      string          x               version: "%s"
370
371 0       string          GEOS            Ubiquiti firmware header,
372 >0x104  belong          x               ~CRC32: 0x%X,
373 >4      string          x               version: "%s"
374
375 # Too many false positives...
376 #0      string          OPEN            Ubiquiti firmware header, third party,
377 #>0x104 belong          x               ~CRC32: 0x%X,
378 #>4     string          x               version: "%s"
379
380 0       string          PARTkernel      Ubiquiti firmware kernel partition
381 0       string          PARTcramfs      Ubiquiti firmware CramFS partition
382 0       string          PARTrootfs      Ubiquiti firmware rootfs partition
383
384 # Found in DIR-100 firmware
385 0       string          AIH0N           AIH0N firmware header, header size: 48,
386 >12     belong          x               size: %d,
387 >8      belong          !0              executable code,
388 >>8     belong          x               load address: 0x%X,
389 >32     string          x               version: "%s"
390
391 0       belong          0x5EA3A417      SEAMA firmware header, big endian,
392 >6      beshort         x               meta size: %d,
393 >8      belong          x               size: %d
394
395 0       lelong          0x5EA3A417      SEAMA firmware header, little endian,
396 >6      leshort         x               meta size: %d,
397 >8      lelong          x               size: %d
398
399 0       belong          0x4D544443      NSP firmware header, big endian,
400 >16     belong          x               header size: %d,
401 >20     belong          x               image size: %d,
402 >4      belong          x               kernel offset: %d,
403 >12     belong          x               header version: %d,
404
405 0       lelong          0x4D544443      NSP firmware header, little endian,
406 >16     lelong          x               header size: %d,
407 >20     lelong          x               image size: %d,
408 >4      lelong          x               kernel offset: %d,
409 >12     lelong          x               header version: %d,
410
411 # http://www.openwiz.org/wiki/Firmware_Layout#Beyonwiz_.wrp_header_structure
412 0       string          WizFwPkgl       Beyonwiz firmware header,
413 >20     string          x               version: "%s"
414
415 0       string          BLI223WJ0       Thompson/Alcatel encoded firmware,
416 >32     byte            x               version: %d.
417 >33     byte            x               \b%d.
418 >34     byte            x               \b%d.
419 >35     byte            x               \b%d,
420 >44     belong          x               size: %d,
421 >48     belong          x               crc: 0x%.8X,
422 >35     byte            x               try decryption tool from:
423 >35     byte            x               http://download.modem-help.co.uk/mfcs-A/Alcatel/Modems/Misc/
424