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