Imported Upstream version 2.0.1+dfsg
[packages/binwalk.git] / src / 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  <1      invalid
10 >12     belong  x               image size: %d bytes,
11 >16     belong  x               Data Address: 0x%X,
12 >20     belong  x               Entry Point: 0x%X,
13 >24     belong  x               data CRC: 0x%X,
14 #>28    byte    x               OS type: %d,
15 >28     byte    0               OS: invalid OS,
16 >28     byte    1               OS: OpenBSD,
17 >28     byte    2               OS: NetBSD,
18 >28     byte    3               OS: FreeBSD,
19 >28     byte    4               OS: 4.4BSD,
20 >28     byte    5               OS: Linux,
21 >28     byte    6               OS: SVR4,
22 >28     byte    7               OS: Esix,
23 >28     byte    8               OS: Solaris,
24 >28     byte    9               OS: Irix,
25 >28     byte    10              OS: SCO,
26 >28     byte    11              OS: Dell,
27 >28     byte    12              OS: NCR,
28 >28     byte    13              OS: LynxOS,
29 >28     byte    14              OS: VxWorks,
30 >28     byte    15              OS: pSOS,
31 >28     byte    16              OS: QNX,
32 >28     byte    17              OS: Firmware,
33 >28     byte    18              OS: RTEMS,
34 >28     byte    19              OS: ARTOS,
35 >28     byte    20              OS: Unity OS,
36 #>29    byte    x               CPU arch: %d,
37 >29     byte    0               CPU: invalid OS,
38 >29     byte    1               CPU: Alpha,
39 >29     byte    2               CPU: ARM,
40 >29     byte    3               CPU: Intel x86,
41 >29     byte    4               CPU: IA64,
42 >29     byte    5               CPU: MIPS,
43 >29     byte    6               CPU: MIPS 64 bit,
44 >29     byte    7               CPU: PowerPC,
45 >29     byte    8               CPU: IBM S390,
46 >29     byte    9               CPU: SuperH,
47 >29     byte    10              CPU: Sparc,
48 >29     byte    11              CPU: Sparc 64 bit,
49 >29     byte    12              CPU: M68K,
50 >29     byte    13              CPU: Nios-32,
51 >29     byte    14              CPU: MicroBlaze,
52 >29     byte    15              CPU: Nios-II,
53 >29     byte    16              CPU: Blackfin,
54 >29     byte    17              CPU: AVR,
55 >29     byte    18              CPU: STMicroelectronics ST200,
56 #>30    byte    x               image type: %d,
57 >30     byte    0               image type: invalid Image,
58 >30     byte    1               image type: Standalone Program,
59 >30     byte    2               image type: OS Kernel Image,
60 >30     byte    3               image type: RAMDisk Image,
61 >30     byte    4               image type: Multi-File Image,
62 >30     byte    5               image type: Firmware Image,
63 >30     byte    6               image type: Script file,
64 >30     byte    7               image type: Filesystem Image,
65 >30     byte    8               image type: Binary Flat Device Tree Blob
66 #>31    byte    x               compression type: %d,
67 >31     byte    0               compression type: none,
68 >31     byte    1               compression type: gzip,
69 >31     byte    2               compression type: bzip2,
70 >31     byte    3               compression type: lzma,
71 >32     string  x               image name: "%s"
72
73 #IMG0 header, found in VxWorks-based Mercury router firmware
74 0       string          IMG0    IMG0 (VxWorks) header,
75 >4      belong          <1              invalid
76 >4      belong          x               size: %d
77
78 #Mediatek bootloader signature
79 #From xp-dev.com
80 0       string          BOOTLOADER!     Mediatek bootloader
81
82 #CSYS header formats
83 0       string          CSYS\x00        CSYS header, little endian, 
84 >8      lelong          x                       size: %d
85
86 0       string          CSYS\x80        CSYS header, big endian,
87 >8      belong          x                       size: %d
88
89 # wrgg firmware image
90 0       string          wrgg02  WRGG firmware header,
91 >6      string          x               name: "%s",
92 >48     string          x               root device: "%s"
93
94 # trx image file
95 0       string          HDR0    TRX firmware header, little endian, header size: 28 bytes,
96 >4      lelong          <1              invalid
97 >4      lelong          x               image size: %d bytes,
98 >8      lelong          x               CRC32: 0x%X
99 >12     leshort         x               flags: 0x%X,
100 >14     leshort         >5              invalid
101 >14     leshort         x               version: %d
102
103 0       string          0RDH    TRX firmware header, big endian, header size: 28 bytes,
104 >4      belong          <1              invalid
105 >4      belong          x               image size: %d bytes,
106 >8      belong          x               CRC32: 0x%X
107 >12     beshort         x               flags: 0x%X,
108 >14     beshort         >5              invalid
109 >14     beshort         x               version: %d
110
111
112 # Ubicom firmware image
113 0       belong  0xFA320080      Ubicom firmware header,
114 >12     belong  x                       checksum: 0x%X,
115 >24     belong  <0                      invalid
116 >24     belong  x                       image size: %d
117
118 # The ROME bootloader is used by several RealTek-based products.
119 # Unfortunately, the magic bytes are specific to each product, so
120 # separate signatures must be created for each one.
121
122 # Netgear KWGR614 ROME image
123 0       string          G614            Realtek firmware header, ROME bootloader,
124 >4      beshort         0xd92f          image type: KFS,
125 >4      beshort         0xb162          image type: RDIR,
126 >4      beshort         0xea43          image type: BOOT,
127 >4      beshort         0x8dc9          image type: RUN,
128 >4      beshort         0x2a05          image type: CCFG,
129 >4      beshort         0x6ce8          image type: DCFG,
130 >4      beshort         0xc371          image type: LOG,
131 >6      byte            x               header version: %d,
132 #month
133 >10     byte            x               created: %d/
134 #day    
135 >12     byte            x               \b%d/
136 #year
137 >8      beshort         x               \b%d,
138 >16     belong          x               image size: %d bytes,
139 >22     byte            x               body checksum: 0x%X,
140 >23     byte            x               header checksum: 0x%X
141
142 # Linksys WRT54GX ROME image
143 0               belong                  0x59a0e842              Realtek firmware header, ROME bootloader,
144 >4      beshort         0xd92f          image type: KFS,
145 >4      beshort         0xb162          image type: RDIR,
146 >4      beshort         0xea43          image type: BOOT,
147 >4      beshort         0x8dc9          image type: RUN,
148 >4      beshort         0x2a05          image type: CCFG,
149 >4      beshort         0x6ce8          image type: DCFG,
150 >4      beshort         0xc371          image type: LOG,
151 >6      byte            x               header version: %d,
152 #month
153 >10     byte            x               created: %d/
154 #day    
155 >12     byte            x               \b%d/
156 #year
157 >8      beshort         x               \b%d,
158 >16     belong          x               image size: %d bytes,
159 >22     byte            x               body checksum: 0x%X,
160 >23     byte            x               header checksum: 0x%X
161
162 # PackImg tag, somtimes used as a delimiter between the kernel and rootfs in firmware images.
163 0       string          --PaCkImGs--    PackImg section delimiter tag,
164 # If the size in both big and little endian is greater than 512MB, consider this a false positive
165 >16     lelong          >0x20000000
166 >>16    belong          >0x20000000     invalid
167 >16     lelong          <0
168 >>16    belong          <0              invalid
169 >16     lelong          >0
170 >>16    lelong          x               little endian size: %d bytes;
171 >16     belong          >0              
172 >>16    belong          x               big endian size: %d bytes
173
174
175 #------------------------------------------------------------------------------
176 # Broadcom header format
177 #
178 0       string          BCRM            Broadcom header,
179 >4      lelong          <0              invalid
180 >4      lelong          x               number of sections: %d,
181 >>8     lelong          18              first section type: flash
182 >>8     lelong          19              first section type: disk
183 >>8     lelong          21              first section type: tag
184
185
186 # Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files
187 # http://ftg.lbl.gov/checkpoint
188 0       string  Ck0\0\0R\0\0\0  BLCR
189 >16     lelong  1       x86
190 >16     lelong  3       alpha
191 >16     lelong  5       x86-64
192 >16     lelong  7       ARM
193 >8      lelong  x       context data (little endian, version %d)
194
195 0       string  \0\0\0C\0\0\0R  BLCR
196 >16     belong  2       SPARC
197 >16     belong  4       ppc
198 >16     belong  6       ppc64
199 >16     belong  7       ARMEB
200 >16     belong  8       SPARC64
201 >8      belong  x       context data (big endian, version %d)
202
203 # Aculab VoIP firmware
204 # From: Mark Brown <broonie@sirena.org.uk>
205 0       string  VoIP\x20Startup\x20and      Aculab VoIP firmware
206 >35     string  x       format "%s"
207
208 #------------------------------------------------------------------------------
209 # HP LaserJet 1000 series downloadable firmware file
210 0       string  \xbe\xefABCDEFGH        HP LaserJet 1000 series downloadable firmware
211
212 # From Albert Cahalan <acahalan@gmail.com>
213 # really le32 operation,destination,payloadsize (but quite predictable)
214 # 01 00 00 00 00 00 00 c0 00 02 00 00
215 0       string          \1\0\0\0\0\0\0\300\0\2\0\0      Marvell Libertas firmware
216
217 #---------------------------------------------------------------------------
218 # The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
219 # lead Sun/Cobalt developer) who agrees that they are good and worthy of
220 # inclusion.
221
222 # Boot ROM images for Sun/Cobalt Linux server appliances
223 0       string  Cobalt\x20Networks\x20Inc.\nFirmware\x20v     Paged COBALT boot rom
224 >38     string x        V%.4s
225
226 # New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
227 # at the very end where file(1) can't get it.
228 0       string CRfs     COBALT boot rom data (Flat boot rom or file system)
229
230 #
231 # Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
232 # Useless until forther improvements can be made to the signature.
233 #0   string      S0          Motorola S-Record; binary data in text format
234
235 # --------------------------------
236 # Microsoft Xbox data file formats
237 0       string          XIP0            XIP, Microsoft Xbox data
238 0       string          XTF0            XTF, Microsoft Xbox data
239
240 #Windows CE Binary Image Data Format aka B000FF
241 #More information on the format:
242 #http://msdn.microsoft.com/en-us/library/ms924510.aspx
243 #http://forum.xda-developers.com/showthread.php?t=801167
244 0       string  B000FF  B000FF Windows CE image header,
245 >7      lelong  x       Image start: 0x%X,
246 >11     lelong  x       Image length: %d
247
248
249 #Windows CE RomImage
250 0    string    \x00ECEC     Windows CE memory segment header, {offset-adjust:-63}
251 >4      lelong  x       TOC address: 0x%X
252
253
254 # --------------------------------
255 # ZynOS ROM header format
256 # From openwrt zynos.h.
257 0       string          SIG             ZynOS header, header size: 48 bytes,{offset-adjust:-6}
258 #>0     belong          x               load address 0x%X,
259 >3      byte            <0x7F           rom image type:
260 >>3     byte            <1              invalid,
261 >>3     byte            >7              invalid,
262 >>3     byte            1               ROMIMG,
263 >>3     byte            2               ROMBOOT,
264 >>3     byte            3               BOOTEXT,
265 >>3     byte            4               ROMBIN,
266 >>3     byte            5               ROMDIR,
267 >>3     byte            6               6,
268 >>3     byte            7               ROMMAP,
269 >3      byte            >0x7F           ram image type:
270 >>3     byte            >0x82           invalid,
271 >>3     byte            0x80            RAM,
272 >>3     byte            0x81            RAMCODE,
273 >>3     byte            0x82            RAMBOOT,
274 >4      belong          >0x40000000     invalid
275 >4      belong          <0              invalid
276 >4      belong          0               invalid
277 >4      belong          x               uncompressed size: %d,
278 >8      belong          >0x40000000     invalid
279 >8      belong          <0              invalid
280 >8      belong          0               invalid
281 >8      belong          x               compressed size: %d,
282 >14     beshort         x               uncompressed checksum: 0x%X,
283 >16     beshort         x               compressed checksum: 0x%X,
284 >12     byte            x               flags: 0x%X,
285 >12     byte            &0x40           uncompressed checksum is valid,
286 >12     byte            &0x80           the binary is compressed,
287 >>12    byte            &0x20           compressed checksum is valid,
288 >35     belong          x               memory map table address: 0x%X
289
290 # Firmware header used by some VxWorks-based Cisco products
291 0       string          CI032.00        Cisco VxWorks firmware header,
292 >8      lelong          >1024           invalid
293 >8      lelong          <0              invalid
294 >8      lelong          x               header size: %d bytes,
295 >32     lelong          >1024           invalid
296 >32     lelong          <0              invalid
297 >32     lelong          x               number of files: %d,
298 >48     lelong          <0              invalid
299 >48     lelong          x               image size: %d,
300 >64     string          x               firmware version: "%s"
301
302 # Simple VxWorks reference strings
303 #0      string          VxWorks         VxWorks string referece:
304 #>0     string          x                       "%s"
305 #0      string          vxworks         VxWorks string referece:
306 #>0     string          x                       "%s"
307 #0      string          VXWORKS         VxWorks string referece:
308 #>0     string          x                       "%s"
309
310 # Firmware header used by some TV's
311 0       string          FNIB            ZBOOT firmware header, header size: 32 bytes,
312 >8      lelong          x               load address: 0x%.8X,
313 >12     lelong          x               start address: 0x%.8X,
314 >16     lelong          x               checksum: 0x%.8X,
315 >20     lelong          x               version: 0x%.8X,
316 >24     lelong          <1              invalid
317 >24     lelong          x               image size: %d bytes
318
319 # Firmware header used by several D-Link routers (and probably others)
320 0               string  \x5e\xa3\xa4\x17        DLOB firmware header,
321 >(7.b+12)       string  !\x5e\xa3\xa4\x17       invalid,
322 #>>12           string  x                       %s,
323 >(7.b+40)       string  x                       boot partition: "%s"
324
325 # TP-Link firmware header structure; thanks to Jonathan McGowan for reversing and documenting this format
326 0       string          TP-LINK\x20Technologies         TP-Link firmware header,{offset-adjust:-4}
327 #>-4    lelong          x                               header version: %d,
328 >0x94   beshort         x                               firmware version: %d.
329 >0x96   beshort         x                               \b%d.
330 >0x98   beshort         x                               \b%d,
331 >0x18   string          x                               image version: "%s",
332 #>0x74  belong          x                               image size: %d bytes,
333 >0x3C   belong          x                               product ID: 0x%X,
334 >0x40   belong          x                               product version: %d,
335 >0x70   belong          x                               kernel load address: 0x%X,
336 >0x74   belong          x                               kernel entry point: 0x%X,
337 >0x7C   belong          x                               kernel offset: %d,
338 >0x80   belong          x                               kernel length: %d,
339 >0x84   belong          x                               rootfs offset: %d,
340 >0x88   belong          x                               rootfs length: %d,
341 >0x8C   belong          x                               bootloader offset: %d,
342 >0x90   belong          x                               bootloader length: %d
343
344 # Header format from: http://skaya.enix.org/wiki/FirmwareFormat
345 0       string          \x36\x00\x00\x00                Broadcom 96345 firmware header, header size: 256,
346 >4      string          !Broadcom
347 >>4     string          !\x20\x20\x20\x20               invalid
348 >41     beshort         !0x2020
349 >>41    beshort         !0x0000
350 >>>41   string          x                               firmware version: "%.4s",
351 >45     beshort         !0x0202
352 >>45    beshort         !0x0000
353 >>>45   string          x                               board id: "%s",
354 >236    belong          x                               ~CRC32 header checksum: 0x%X,
355 >216    belong          x                               ~CRC32 data checksum: 0x%X
356
357 # Xerox MFP DLM signatures
358 0       string          %%XRXbegin                      Xerox DLM firmware start of header
359 0       string          %%OID_ATT_DLM_NAME              Xerox DLM firmware name:
360 >19     string          x                               "%s"
361 0       string          %%OID_ATT_DLM_VERSION           Xerox DLM firmware version:
362 >22     string          x                               "%s"
363 0       string          %%XRXend                        Xerox DLM firmware end of header
364
365 # Generic copyright signature
366 0       string          Copyright                       Copyright string:
367 >9      byte            0                               invalid
368 >9      string          x                               "%s
369 >40     string          x                               \b%s"
370
371 # Sercomm firmware header
372 0       string          sErCoMm                         Sercomm firmware signature,
373 >7      leshort         x                               version control: %d,
374 >9      leshort         x                               download control: %d,
375 >11     string          x                               hardware ID: "%s",
376 >44     leshort         x                               hardware version: 0x%X,
377 >58     leshort         x                               firmware version: 0x%X,
378 >60     leshort         x                               starting code segment: 0x%X,
379 >62     leshort         x                               code size: 0x%X
380
381 # NPK firmware header, used by Mikrotik
382 0               belong          0x1EF1D0BA              NPK firmware header,
383 >4              lelong          <0                      invalid
384 >4              lelong          x                       image size: %d,
385 >14             string          x                       image name: "%s",
386 >(48.l+58)      string          x                       description: "%s
387 >(48.l+121)     string          x                       \b%s"
388
389 # Ubiquiti firmware signatures
390 0       string          UBNT            Ubiquiti firmware header, header size: 264 bytes,
391 >0x108  belong      !0          invalid,
392 >0x104  belong          x           ~CRC32: 0x%X,
393 >4      byte        0           invalid,
394 >4      string          x           version: "%s"
395
396 0       string          GEOS        Ubiquiti firmware header, header size: 264 bytes,
397 >0x108  belong      !0          invalid,
398 >0x104  belong          x                   ~CRC32: 0x%X,
399 >4      byte        0           invalid,
400 >4          string              x                   version: "%s"
401
402 0       string          OPEN            Ubiquiti firmware header, third party,
403 >0x108  belong      !0          invalid,
404 >0x104  belong          x                   ~CRC32: 0x%X,
405 >4      byte        0           invalid,
406 >4          string              x                   version: "%s"
407
408 0   string      \x00\x00\x00\x00PART    Ubiquiti partition header,{offset-adjust:4}
409 >0  byte        x                       header size: 56 bytes,
410 >8  byte        0                       invalid
411 >8  string      x                       name: "%s",
412 >44 belong      x                       base address: 0x%.8X,
413 >52 belong      x                       data size: %d bytes
414 >52 belong      x                       {file-size:%d}
415
416 0   string      \x00\x00\x00\x00END\x2e Ubiquiti end header, header size: 12 bytes,{offset-adjust:4}
417 >12 belong      !0                      invalid,
418 >8  belong      x                       cumulative ~CRC32: 0x%.8X
419
420
421 # Found in DIR-100 firmware
422 0       string          AIH0N           AIH0N firmware header, header size: 48,
423 >12     belong          x               size: %d,
424 >8      belong          !0              executable code,
425 >>8     belong          x               load address: 0x%X,
426 >32     string          x               version: "%s"
427
428 0       belong          0x5EA3A417      SEAMA firmware header, big endian,
429 >6      beshort         x               meta size: %d,
430 >8  belong      <1      invalid
431 >8      belong          x               size: %d
432
433 0       lelong          0x5EA3A417      SEAMA firmware header, little endian,
434 >6      leshort         x               meta size: %d,
435 >8  lelong      <1      invalid
436 >8      lelong          x               size: %d
437
438 0       belong          0x4D544443      NSP firmware header, big endian,
439 >16 belong      <1      invalid
440 >16     belong          x               header size: %d,
441 >20 belong      <1      invalid
442 >20     belong          x               image size: %d,
443 >20 belong      x       {file-size:%d}
444 >4  belong      <1      invalid
445 >4      belong          x               kernel offset: %d,
446 >12 belong      <1      invalid
447 >12     belong          x               header version: %d,
448
449 0       lelong          0x4D544443      NSP firmware header, little endian,
450 >16 lelong      <1      invalid
451 >16     lelong          x               header size: %d,
452 >20 lelong      <1      invalid
453 >20     lelong          x               image size: %d,
454 >20 lelong      x       {file-size:%d}
455 >4  lelong      <1      invalid
456 >4      lelong          x               kernel offset: %d,
457 >12 lelong      <1      invalid
458 >12     lelong          x               header version: %d,
459
460 # http://www.openwiz.org/wiki/Firmware_Layout#Beyonwiz_.wrp_header_structure
461 0       string          WizFwPkgl       Beyonwiz firmware header,
462 >20     string          x                   version: "%s"
463
464 0       string          BLI223WJ0       Thompson/Alcatel encoded firmware,
465 >32     byte            x               version: %d.
466 >33     byte            x               \b%d.
467 >34     byte            x               \b%d.
468 >35     byte            x               \b%d,
469 >44     belong          x               size: %d,
470 >48     belong          x               crc: 0x%.8X,
471 >35     byte            x               try decryption tool from:
472 >35     byte            x               http://download.modem-help.co.uk/mfcs-A/Alcatel/Modems/Misc/
473
474 0       string          \xd9\x54\x93\x7a\x68\x04\x4a\x44\x81\xce\x0b\xf6\x17\xd8\x90\xdf        UEFI PI firmware volume{offset-adjust:-16}
475
476 # http://android.stackexchange.com/questions/23357/\
477 # is-there-a-way-to-look-inside-and-modify-an-adb-backup-created-file/\
478 # 23608#23608
479 0       string  ANDROID\040BACKUP\n     Android Backup
480 >15     string  1\n                     \b, version 1
481 >17     string  0\n                     \b, uncompressed
482 >17     string  1\n                     \b, compressed
483 >19     string  none\n                  \b, unencrypted
484 >19     string  AES-256\n               \b, encrypted AES-256
485
486 # http://forum.xda-developers.com/showthread.php?p=47818657
487 0       string  imgARMcC                Roku aimage SB{offset-adjust:-8}
488
489 # Boot ROM images for Sun/Cobalt Linux server appliances
490 0       string  Cobalt\ Networks\ Inc.\nFirmware\ v     Paged Sun/COBALT boot rom,
491 >38     string  x                                       version: "%.4s"
492
493 # Simple eCos string signatures
494 0               string  ecos                                    eCos RTOS string reference:
495 >0              string  x                                               "%s"
496 0               string  eCos                                    eCos RTOS string reference:
497 >0              string  x                                               "%s"
498 0               string  ECOS                                    eCos RTOS string reference:
499 >0              string  x                                               "%s"
500
501 # ZyXEL config signatures
502 0               string  dbgarea                                 ZyXEL rom-0 configuration block, name: "%s",{offset-adjust:-6}
503 >16             beshort x                                               compressed size: %d,
504 >14             beshort x                                               uncompressed size: %d,
505 >18             beshort x                                               data offset from start of block: {math:16+%d}
506
507 0               string  spt.dat                                 ZyXEL rom-0 configuration block, name: "%s",{offset-adjust:-6}
508 >16             beshort x                                               compressed size: %d,
509 >14             beshort x                                               uncompressed size: %d,
510 >18             beshort x                                               data offset from start of block: {math:16+%d}
511
512 0               string  autoexec.net                    ZyXEL rom-0 configuration block, name: "%s",{offset-adjust:-6}
513 >16             beshort x                                               compressed size: %d,
514 >14             beshort x                                               uncompressed size: %d,
515 >18             beshort x                                               data offset from start of block: {math:16+%d}
516
517 # Obfuscated Arcadyan firmware, used on the WRT120N
518 0       belong  0x04010920              Obfuscated Arcadyan firmware (WRT120N?),
519 >0x68   belong  !0x00D50800             invalid
520 >0x68   belong  0x00D50800              see https://github.com/devttys0/wrt120n
521