Imported Upstream version 2.0.1
[packages/binwalk.git] / src / binwalk / magic / binwalk
1 # ----------------------------Archive Formats--------------------------------------
2
3 # POSIX tar archives
4 0       string          ustar\000               POSIX tar archive{offset-adjust:-257}
5 >8      byte            !0
6 >>8     string          x                       \b, owner user name: "%.32s"
7 >40     byte            !0
8 >>40    string          x                       \b, owner group name: "%.32s"
9
10 0       string          ustar\040\040\000       POSIX tar archive (GNU){offset-adjust:-257}
11 >8      byte            !0
12 >>8     string          x                       \b, owner user name: "%.32s"
13 >40     byte            !0
14 >>40    string          x                       \b, owner group name: "%.32s"
15
16 # Incremental snapshot gnu-tar format from:
17 # http://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html
18 0       string          GNU\x20tar-     GNU tar incremental snapshot data,
19 >0      string          x               version: "%s"
20
21 # JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)
22 0       string  \x1aJar\x1b JAR (ARJ Software, Inc.) archive data{offset-adjust:-14}
23 0       string  JARCS JAR (ARJ Software, Inc.) archive data
24
25 # PKZIP multi-volume archive
26 0       string          PK\x07\x08PK\x03\x04    Zip multi-volume archive data, at least PKZIP v2.50 to extract
27
28 # ZIP compression (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
29 0               string          PK\003\004      Zip
30 >6              leshort         &0x01                   encrypted
31 >0              byte            x                               archive data,
32 >4      byte            0x00            v0.0
33 >4      byte            0x09            at least v0.9 to extract,
34 >4      byte            0x0a            at least v1.0 to extract,
35 >4      byte            0x0b            at least v1.1 to extract,
36 >0x161  string          WINZIP          WinZIP self-extracting,
37 >4      byte            0x14
38 >>30    ubelong         !0x6d696d65     at least v2.0 to extract,
39 >18             lelong          !0
40 >>18    lelong          <0                              invalid
41 >>18    lelong          x                               compressed size: %d,
42 >>18    lelong          x                               {jump-to-offset:%d}
43 >22             lelong          !0
44 >>22    lelong          <0                              invalid
45 >>22    lelong          x                               uncompressed size: %d,{extract-delay:End of Zip archive}
46 >30     byte        <0x2D           invalid file name,
47 >30     byte        >0x7A           invalid file name, 
48 >30             string          x                               name: {raw-replace}
49 >26             leshort         x                               {raw-string-length:%d}
50 >30             string          x                               {raw-string:%s
51 >61             string          x                               \b%s
52 >92             string          x                               \b%s
53 >123    string          x                               \b%s
54 >154    string          x                               \b%s}
55
56 # ZIP footer
57 0       string          PK\x05\x06      End of Zip archive
58 #>10    leshort         x               number of records: %d,
59 #>12    leshort         x               size of central directory: %d
60 #>20    leshort         x               {offset-adjust:22+%d}
61 >20     leshort         >0
62 >>20    leshort         x               \b, comment: {raw-replace}
63 >>20    leshort         x               {raw-string-length:%d}
64 >>22    string          x               {raw-string:%s}
65
66 # ARJ archiver (jason@jarthur.Claremont.EDU)
67 0       leshort         0xea60          ARJ archive data,
68 >2      leshort         x               header size: %d,
69 >5      byte            <1              invalid
70 >5      byte            >16             invalid
71 >5      byte            x               version %d,
72 >6      byte            <1              invalid
73 >6      byte            >16             invalid
74 >6      byte            x               minimum version to extract: %d,
75 >8      byte            <0              invalid flags,
76 >8      byte            &0x04           multi-volume,
77 >8      byte            &0x10           slash-switched,
78 >8      byte            &0x20           backup,
79 >9      byte            <0              invalid compression method,
80 >9      byte            >4              invalid compression method,
81 >9      byte            0               compression method: stored,
82 >9      byte            1               compression method: compressed most,
83 >9      byte            2               compression method: compressed,
84 >9      byte            3               compression method: compressed faster,
85 >9      byte            4               compression method: compressed fastest,
86 >10     byte            <0              invalid file type
87 >10     byte            >4              invalid file type
88 >10     byte            0               file type: binary,
89 >10     byte            1               file type: 7-bit text,
90 >10     byte            2               file type: comment header,
91 >10     byte            3               file type: directory,
92 >10     byte            4               file type: volume label,
93 >34     byte            !0
94 >>34    string          x               {file-name:%s}
95 >>34    string          x               original name: "%s",
96 >0xC    ledate          x               original file date: %s,
97 >0x10   lelong          <0              invalid
98 >0x10   lelong          x               compressed file size: %d,
99 >0x14   lelong          <0              invalid
100 >0x14   lelong          x               uncompressed file size: %d,
101 >7      byte            0               os: MS-DOS 
102 >7      byte            1               os: PRIMOS
103 >7      byte            2               os: Unix
104 >7      byte            3               os: Amiga
105 >7      byte            4               os: Macintosh
106 >7      byte            5               os: OS/2
107 >7      byte            6               os: Apple ][ GS
108 >7      byte            7               os: Atari ST
109 >7      byte            8               os: NeXT
110 >7      byte            9               os: VAX/VMS
111 >7      byte            >9              invalid os
112 >7      byte            <0              invalid os
113
114 # RAR archiver (Greg Roelofs, newt@uchicago.edu)
115 0       string          Rar!            RAR archive data
116
117 # HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
118 0       string          HPAK            HPACK archive data
119
120 # JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
121 0       string          \351,\001JAM    JAM archive
122
123 # LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
124 0       string          -lzs-           LHa 2.x? archive data [lzs] [NSRL|LHA2]{offset-adjust:-2}
125 0       string          -lh\40-         LHa 2.x? archive data [lh ] [NSRL|LHA2]{offset-adjust:-2}
126 0       string          -lhd-           LHa 2.x? archive data [lhd] [NSRL|LHA2]{offset-adjust:-2}
127 0       string          -lh2-           LHa 2.x? archive data [lh2] [NSRL|LHA2]{offset-adjust:-2}
128 0       string          -lh3-           LHa 2.x? archive data [lh3] [NSRL|LHA2]{offset-adjust:-2}
129 0       string          -lh4-           LHa (2.x) archive data [lh4] [NSRL|LHA2]{offset-adjust:-2}
130 0       string          -lh5-           LHa (2.x) archive data [lh5] [NSRL|LHA2]{offset-adjust:-2}
131 0       string          -lh6-           LHa (2.x) archive data [lh6] [NSRL|LHA2]{offset-adjust:-2}
132 0       string          -lh7-           LHa (2.x) archive data [lh7] [NSRL|LHA2]{offset-adjust:-2}
133
134
135 # cpio archives
136 #
137 # The SVR4 "cpio(4)" hints that there are additional formats, but they
138 # are defined as "short"s; I think all the new formats are
139 # character-header formats and thus are strings, not numbers.
140 #0       string          070707          ASCII cpio archive (pre-SVR4 or odc)
141
142 # WARNING: The jump-to-offset value in the ASCII cpio signatures below is a terrible hack.
143 #          This keyword is not intended to be passed a string (%s), and doing so can open
144 #          up the possibility of keyword injection by a malicious file. This works here though, because:
145 #
146 #               1) It would result in an invalid CPIO file (invalid size)
147 #           2) All valid keywords require more than 8 bytes, so a valid one can't be
148 #              injected in the %.8s field.
149
150 0       string      070701  ASCII cpio archive (SVR4 with no CRC),
151 >110    byte            0               invalid
152 #>110   byte            !0x2F
153 #>>110  string          !TRAILER!!!     invalid
154 >94     byte        <0x30   invalid
155 >94     byte        >0x66   invalid
156 >54     byte        <0x30   invalid
157 >54     byte        >0x66   invalid
158 >110    string          x               file name: "%s",
159 >94         string              x               file name length: "0x%.8s",
160 >54         string              x               file size: "0x%.8s"
161 >54         string              x               {jump-to-offset:0x%.8s+110+
162 >94         string              x               \b0x%.8s}
163
164 0       string      070702  ASCII cpio archive (SVR4 with CRC)
165 >110    byte            0               invalid
166 #>110   byte            !0x2F
167 #>>110  string          !TRAILER!!!     invalid
168 >94     byte        <0x30   invalid
169 >94     byte        >0x66   invalid
170 >54     byte        <0x30   invalid
171 >54     byte        >0x66   invalid
172 >110    string          x               file name: "%s",
173 >94         string              x               file name length: "0x%.8s",
174 >54         string              x               file size: "0x%.8s"
175 >54         string              x               {jump-to-offset:0x%.8s+110+
176 >94         string              x               \b0x%.8s}
177
178
179 # HP Printer Job Language
180 # The header found on Win95 HP plot files is the "Silliest Thing possible" 
181 # (TM)
182 # Every driver puts the language at some random position, with random case
183 # (LANGUAGE and Language)
184 # For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
185 # From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
186
187 0       string          \033%-12345X@PJL        HP Printer Job Language data
188 >&0     string          >\0                     "%s"
189 >>&0    string          >\0                     "%s"
190 >>>&0   string          >\0                     "%s"
191 >>>>&0  string          >\0                     "%s"
192
193 #------------------------------------------------------------------------------
194 #
195 # RPM: file(1) magic for Red Hat Packages   Erik Troan (ewt@redhat.com)
196 #
197 0       belong          0xedabeedb      RPM
198 >4      byte            x               v%d
199 >6      beshort         0               bin
200 >6      beshort         1               src
201 >8      beshort         1               i386
202 >8      beshort         2               Alpha
203 >8      beshort         3               Sparc
204 >8      beshort         4               MIPS
205 >8      beshort         5               PowerPC
206 >8      beshort         6               68000
207 >8      beshort         7               SGI
208 >8      beshort         8               RS6000
209 >8      beshort         9               IA64
210 >8      beshort         10              Sparc64
211 >8      beshort         11              MIPSel
212 >8      beshort         12              ARM
213 >10     string          x               "%s"
214
215 # IBM AIX Backup File Format header and entry signatures
216 0       lelong  0xea6b0009      BFF volume header,
217 >4      leshort x               checksum: 0x%.4X,
218 >6      leshort <0              invalid
219 >6      leshort 0               invalid
220 >6      leshort x               volume number: %d,
221 >8      ledate  x               current date: %s,
222 >12     ledate  x               starting date: %s,
223 >20     string  x               disk name: "%s",
224 >36     string  x               file system name: "%s",
225 >52     string  x               user name: "%s"
226
227 0       leshort 0xea6b          BFF volume entry,{offset-adjust:-2}
228 >22     lelong  <0              invalid
229 >22     lelong  0               directory,
230 >22     lelong  >0
231 >>22    lelong  x               file size: %d,
232 >>54    lelong  <0              invalid
233 >>54    lelong  0               invalid
234 >>54    lelong  x               compressed size: %d,
235 >58     lelong  !0              invalid
236 >62     byte    0               invalid
237 >62     byte    !0x2e
238 >>62    byte    !0x2f           invalid
239 >62     string  x               file name: "%s
240 >92     string  x               \b%s"
241
242 0       leshort 0xea6c          BFF volume entry, compressed,{offset-adjust:-2}
243 >22     lelong  <0              invalid
244 >22     lelong  0               directory,
245 >22     lelong  >0
246 >>22    lelong  x               file size: %d,
247 >>54    lelong  <0              invalid
248 >>54    lelong  0               invalid
249 >>54    lelong  x               compressed size: %d,
250 >58     lelong  !0              invalid
251 >62     byte    0               invalid
252 >62     byte    !0x2e
253 >>62    byte    !0x2f           invalid
254 >62     string  x               file name: "%s
255 >92     string  x               \b%s"
256
257 0       leshort 0xea6d          BFF volume entry, AIXv3,{offset-adjust:-2}
258 >22     lelong  <0              invalid
259 >22     lelong  0               directory,
260 >22     lelong  >0
261 >>22    lelong  x               file size: %d,
262 >>54    lelong  <0              invalid
263 >>54    lelong  0               invalid
264 >>54    lelong  x               compressed size: %d,
265 >58     lelong  !0              invalid
266 >62     byte    0               invalid
267 >62     byte    !0x2e
268 >>62    byte    !0x2f           invalid
269 >62     string  x               file name: "%s
270 >92     string  x               \b%s"
271
272 #------------------------------------------------------------------------------
273 # From Stuart Caie <kyzer@4u.net> (developer of cabextract)
274 # Microsoft Cabinet files
275 0       string          MSCF\0\0\0\0    Microsoft Cabinet archive data
276 # According to libmagic comments, CAB version number is always 1.3
277 >25     byte            !1              \b,invalid major version
278 >24     byte            !3              \b,invalid minor version
279 >8      lelong          x               \b, %u bytes
280 >28     leshort         0               \b, 0 files (invalid)
281 >28     leshort         1               \b, 1 file
282 >28     leshort         >1              \b, %u files
283
284 # InstallShield Cabinet files
285 0       string          ISc(            InstallShield Cabinet archive data
286 # TODO: Version number checks should be made more specific for false positive filtering
287 >5      byte&0xf0       =0x60           version 6,
288 >5      byte&0xf0       <0x60           version 4/5,
289 >5      byte&0xf0       >0x60           invalid version,
290 >12     lelong          <0              invalid offset,
291 >12     lelong          >100000         invalid offset,
292 >(12.l+40)      lelong  x               %u files
293
294 # Windows CE package files
295 0       string          MSCE\0\0\0\0    Microsoft WinCE install header
296 >20     lelong          0               \b, architecture-independent
297 >20     lelong          103             \b, Hitachi SH3
298 >20     lelong          104             \b, Hitachi SH4
299 >20     lelong          0xA11           \b, StrongARM
300 >20     lelong          4000            \b, MIPS R4000
301 >20     lelong          10003           \b, Hitachi SH3
302 >20     lelong          10004           \b, Hitachi SH3E
303 >20     lelong          10005           \b, Hitachi SH4
304 >20     lelong          70001           \b, ARM 7TDMI
305 >52     leshort         1               \b, 1 file
306 >52     leshort         >1              \b, %u files
307 >56     leshort         1               \b, 1 registry entry
308 >56     leshort         >1              \b, %u registry entries
309
310 0       string  \0\ \ \ \ \ \ \ \ \ \ \ \0\0    LBR archive data
311
312 # Parity archive reconstruction file, the 'par' file format now used on Usenet.
313 0       string          PAR\0   PARity archive data
314 >48     leshort         =0      - Index file
315 >48     leshort         >0      - file number %d
316
317 # Felix von Leitner <felix-file@fefe.de>
318 0       string  d8:announce     BitTorrent file
319
320 #---------------------------Bootloaders--------------------------------
321
322 # CFE bootloader
323 0       string  CFE1CFE1        CFE boot loader
324 >40     string  CFE1CFE1        invalid
325
326 # U-Boot boot loader
327 0       string  U-Boot\x20  U-Boot version string,
328 >7  byte    <48         invalid,
329 >7  byte    >57         invalid,
330 >8  byte    !0x2E       invalid,
331 >0  string  x           "%s"
332
333 #------------------Compression Formats-----------------------------
334
335 # AFX compressed files (Wolfram Kleff)
336 0       string          -afx-           AFX compressed file data{offset-adjust:-2}
337
338 # bzip2
339 0       string BZh91AY&SY       bzip2 compressed data, block size = 900k
340 0       string BZh81AY&SY       bzip2 compressed data, block size = 800k
341 0       string BZh71AY&SY       bzip2 compressed data, block size = 700k
342 0       string BZh61AY&SY       bzip2 compressed data, block size = 600k
343 0       string BZh51AY&SY       bzip2 compressed data, block size = 500k
344 0       string BZh41AY&SY       bzip2 compressed data, block size = 400k
345 0       string BZh31AY&SY       bzip2 compressed data, block size = 300k
346 0       string BZh21AY&SY       bzip2 compressed data, block size = 200k
347 0       string BZh11AY&SY       bzip2 compressed data, block size = 100k
348
349 # lzop from <markus.oberhumer@jk.uni-linz.ac.at>
350 0       string          \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a    lzop compressed data
351 >9      beshort         <0x0940
352 >>9     byte&0xf0       =0x00           - version 0.
353 >>9     beshort&0x0fff  x               \b%03x,
354 >>13    byte            1               LZO1X-1,
355 >>13    byte            2               LZO1X-1(15),
356 >>13    byte            3               LZO1X-999,
357 ## >>22 bedate          >0              last modified: %s,
358 >>14    byte            =0x00           os: MS-DOS
359 >>14    byte            =0x01           os: Amiga
360 >>14    byte            =0x02           os: VMS
361 >>14    byte            =0x03           os: Unix
362 >>14    byte            =0x05           os: Atari
363 >>14    byte            =0x06           os: OS/2
364 >>14    byte            =0x07           os: MacOS
365 >>14    byte            =0x0A           os: Tops/20
366 >>14    byte            =0x0B           os: WinNT
367 >>14    byte            =0x0E           os: Win32
368 >9      beshort         >0x0939
369 >>9     byte&0xf0       =0x00           - version 0.
370 >>9     byte&0xf0       =0x10           - version 1.
371 >>9     byte&0xf0       =0x20           - version 2.
372 >>9     beshort&0x0fff  x               \b%03x,
373 >>15    byte            1               LZO1X-1,
374 >>15    byte            2               LZO1X-1(15),
375 >>15    byte            3               LZO1X-999,
376 ## >>25 bedate          >0              last modified: %s,
377 >>17    byte            =0x00           os: MS-DOS
378 >>17    byte            =0x01           os: Amiga
379 >>17    byte            =0x02           os: VMS
380 >>17    byte            =0x03           os: Unix
381 >>17    byte            =0x05           os: Atari
382 >>17    byte            =0x06           os: OS/2
383 >>17    byte            =0x07           os: MacOS
384 >>17    byte            =0x0A           os: Tops/20
385 >>17    byte            =0x0B           os: WinNT
386 >>17    byte            =0x0E           os: Win32
387
388 # lzip  
389 0       string          LZIP            lzip compressed data
390 >4      byte            x               \b, version: %d
391
392 # lrzip
393 0       string          LRZI            lrzip compressed data
394
395 # LZO
396 0       string          \211LZO\000\015\012\032\012     LZO compressed data
397
398 # 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)
399 # http://www.7-zip.org or DOC/7zFormat.txt 
400 #
401 0       string          7z\274\257\047\034      7-zip archive data,
402 >6      byte            <0                      invalid
403 >6      byte            0                       
404 >>7     byte            0                       invalid
405 >6      byte            >20                     invalid
406 >6      byte            x                       version %d
407 >7      byte            x                       \b.%d
408
409 # standard unix compress
410 # Implemented in the compress binwalk plugin.
411 #0       string         \x1f\x9d\x90          compress'd data, 16 bits
412
413 # http://tukaani.org/xz/xz-file-format.txt
414 0       string          \xFD\x37\x7a\x58\x5a\x00        xz compressed data
415
416 # gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
417 #   Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
418 #       * Original filename is only at offset 10 if "extra field" absent
419 #       * Produce shorter output - notably, only report compression methods
420 #         other than 8 ("deflate", the only method defined in RFC 1952).
421 #0       string          \037\213\x08    gzip compressed data
422 0       string          \x1f\x8b\x08    gzip compressed data
423 >3      byte            &0x01           \b, ASCII
424 >3      byte&0xE0       !0x00           \b, invalid reserved flag bits
425 >8      byte            2               \b, maximum compression
426 >8      byte            4               \b, fastest compression
427 >8      byte            1               \b, invalid extra flags
428 >8      byte            3               \b, invalid extra flags
429 >8      byte            >4              \b, invalid extra flags
430 >3      byte            &0x02           \b, has header CRC
431 >3      byte&0x04       0x04
432 >>10    leshort         x               \b, has %d bytes of extra data
433 >3      byte&0xC        =0x08           \b, has original file name
434 >>10    string          x               \b{file-name:%s}
435 >>10    string          x               \b: "%s"
436 >3      byte            &0x10           \b, has comment
437 >>3     byte&0xC        0
438 >>>10   string          x               \b: "%s"
439 >9      byte            =0x00           \b, from FAT filesystem (MS-DOS, OS/2, NT)
440 >9      byte            =0x01           \b, from Amiga
441 >9      byte            =0x02           \b, from VMS
442 >9      byte            =0x03           \b, from Unix
443 >9      byte            =0x04           \b, from VM/CMS
444 >9      byte            =0x05           \b, from Atari
445 >9      byte            =0x06           \b, from HPFS filesystem (OS/2, NT)
446 >9      byte            =0x07           \b, from MacOS
447 >9      byte            =0x08           \b, from Z-System
448 >9      byte            =0x09           \b, from CP/M
449 >9      byte            =0x0A           \b, from TOPS/20
450 >9      byte            =0x0B           \b, from NTFS filesystem (NT)
451 >9      byte            =0x0C           \b, from QDOS
452 >9      byte            =0x0D           \b, from Acorn RISCOS
453 #>9     byte            =0xFF           \b, from ZyNOS
454 #>9     byte            >0x0D           \b, invalid
455 #>>9    byte            x               source: 0x%.2X
456 #>9     byte            <0              \b, invalid
457 #>>9    byte            x               source: 0x%.2X
458 >3      byte            &0x20           \b, encrypted (invalid)
459 # Dates before 1992 are invalid, unless of course you're DD-WRT in which
460 # case you don't know how to set a date in your gzip files. Brilliant.
461 >4      lelong          =0              \b, NULL date:
462 >4      lelong          <0              \b, invalid date:
463 >4      lelong          >0              
464 >>4     lelong          <694224000      \b, invalid date:
465 >>4     lelong          =694224000      \b, invalid date:
466 >>4     lelong          >694224000      \b, last modified:
467 >4      ledate          x               %s
468 >4      lelong          x               \b{file-epoch:%d}
469
470 # Zlib signatures
471 # Too short to be useful on their own; see:
472 #
473 #       o src/binwalk/magic/zlib
474 #       o src/binwalk/plugins/zlib.py
475 #
476 #0      beshort         0x789C          zlib compressed data
477 #0      beshort         0x78DA          zlib compressed data
478 #0      beshort         0x7801          zlib compressed data
479
480 # Supplementary magic data for the file(1) command to support
481 # rzip(1).  The format is described in magic(5).
482 #
483 # Copyright (C) 2003 by Andrew Tridgell.  You may do whatever you want with
484 # this file.
485 #
486 0       string          RZIP            rzip compressed data
487 >4      byte            x               - version %d
488 >5      byte            x               \b.%d
489 >6      belong          x               (%d bytes)
490
491 # JAR
492 0       belong          0xcafed00d      JAR compressed with pack200,
493 >5      byte            x               version %d.
494 >4      byte            x               \b%d
495
496 # New LZMA format signature
497 # See lzma file for LZMA signatures
498 0       string          \xFFLZMA\x00    LZMA compressed data (new),
499 >6      byte&0x10       0                               single-block stream
500 >6      byte&0x10       0x10                    multi-block stream
501
502 0       string  \xff\x06\x00\x00\x73\x4e\x61\x50\x70\x59        Snappy compression, stream identifier
503
504 0   string      \x1f\x9d\x90    compress'd data, 16 bits
505
506 #0      beshort         0x7801          Zlib header, no compression
507 0       beshort         0x789c          Zlib compressed data, default compression
508 0       beshort         0x78da          Zlib compressed data, best compression
509 0       beshort         0x785e          Zlib compressed data, compressed
510
511 # Type: OpenSSL certificates/key files
512 # From: Nicolas Collignon <tsointsoin@gmail.com>
513
514 0       string  -----BEGIN\x20CERTIFICATE-----      PEM certificate
515 0       string  -----BEGIN\x20CERTIFICATE\x20REQ    PEM certificate request
516 0       string  -----BEGIN\x20RSA\x20PRIVATE        PEM RSA private key
517 0       string  -----BEGIN\x20DSA\x20PRIVATE        PEM DSA private key
518
519 # Type: OpenSSH key files
520 # From: Nicolas Collignon <tsointsoin@gmail.com>
521
522 0       string  SSH\x20PRIVATE\x20KEY   OpenSSH RSA1 private key,
523 >28     string  >\0                     version "%s"
524
525 0       string  ssh-dss\x20               OpenSSH DSA public key
526 0       string  ssh-rsa\x20               OpenSSH RSA public key
527
528 # Type: Certificates/key files in DER format
529 # From: Gert Hulselmans <hulselmansgert@gmail.com>
530 0       string  \x30\x82                Private key in DER format (PKCS#8),
531 >4      string  !\x02\x01\x00           invalid,
532 >>2     beshort x                       header length: 4, sequence length: %d
533
534 0       string  \x30\x82                Certificate in DER format (x509 v3),
535 >4      string  !\x30\x82               invalid,
536 >>2     beshort x                       header length: 4, sequence length: %d
537
538 # GnuPG
539 # The format is very similar to pgp
540 0       string          \001gpg                 GPG key trust database
541 >4      byte            x                       version %d
542
543 # Not a very useful signature
544 #0       beshort         0x9901                  GPG key public ring
545
546 # This magic is not particularly good, as the keyrings don't have true
547 # magic. Nevertheless, it covers many keyrings.
548
549 #------------------------------------------------------------------------------
550 # Mavroyanopoulos Nikos <nmav@hellug.gr>
551 # mcrypt:   file(1) magic for mcrypt 2.2.x;
552 0       string          \0m\3           mcrypt 2.5 encrypted data,
553 >4      byte            0               invalid
554 >4      string          >\0             algorithm: "%s",
555 >>&1    leshort         <1              invalid
556 >>&1    leshort         >0              keysize: %d bytes,
557 >>>&0   byte            0               invalid
558 >>>&0   string          >\0             mode: "%s",
559
560 0       string          \0m\2           mcrypt 2.2 encrypted data,
561 >3      byte            0               algorithm: blowfish-448,
562 >3      byte            1               algorithm: DES,
563 >3      byte            2               algorithm: 3DES,
564 >3      byte            3               algorithm: 3-WAY,
565 >3      byte            4               algorithm: GOST,
566 >3      byte            6               algorithm: SAFER-SK64,
567 >3      byte            7               algorithm: SAFER-SK128,
568 >3      byte            8               algorithm: CAST-128,
569 >3      byte            9               algorithm: xTEA,
570 >3      byte            10              algorithm: TWOFISH-128,
571 >3      byte            11              algorithm: RC2,
572 >3      byte            12              algorithm: TWOFISH-192,
573 >3      byte            13              algorithm: TWOFISH-256,
574 >3      byte            14              algorithm: blowfish-128,
575 >3      byte            15              algorithm: blowfish-192,
576 >3      byte            16              algorithm: blowfish-256,
577 >3      byte            100             algorithm: RC6,
578 >3      byte            101             algorithm: IDEA,
579 >3      byte            <0              invalid algorithm
580 >3      byte            >101            invalid algorithm,
581 >3      byte            >16
582 >>3     byte            <100            invalid algorithm,
583 >4      byte            0               mode: CBC,
584 >4      byte            1               mode: ECB,
585 >4      byte            2               mode: CFB,
586 >4      byte            3               mode: OFB,
587 >4      byte            4               mode: nOFB,
588 >4      byte            <0              invalid mode,
589 >4      byte            >4              invalid mode,
590 >5      byte            0               keymode: 8bit
591 >5      byte            1               keymode: 4bit
592 >5      byte            2               keymode: SHA-1 hash
593 >5      byte            3               keymode: MD5 hash
594 >5      byte            <0              invalid keymode
595 >5      byte            >3              invalid keymode
596
597 #------------------------------------------------------------------------------
598 # pgp:  file(1) magic for Pretty Good Privacy
599 #
600 #0       beshort         0x9900                  PGP key public ring
601 #0       beshort         0x9501                  PGP key security ring
602 #0       beshort         0x9500                  PGP key security ring
603 #0      beshort         0xa600                  PGP encrypted data
604 0       string          -----BEGIN\040PGP       PGP armored data,
605 >15     string          PUBLIC\040KEY\040BLOCK- public key block
606 >15     string          MESSAGE-                message
607 >15     string          SIGNED\040MESSAGE-      signed message
608 >15     string          PGP\040SIGNATURE-       signature
609
610 0       string          Salted__                OpenSSL encryption, salted,
611 >8      belong          x                       salt: 0x%X
612 >12     belong          x                       \b%X
613
614 #------------------Standard file formats------------------------------------
615
616 #------------------------------------------------------------------------------
617 # elf:  file(1) magic for ELF executables
618 #
619 # We have to check the byte order flag to see what byte order all the
620 # other stuff in the header is in.
621 #
622 # What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
623 #
624 # updated by Daniel Quinlan (quinlan@yggdrasil.com)
625 0       string          \177ELF         ELF
626 >4      byte            0               invalid class
627 >4      byte            1               32-bit
628 # only for MIPS - in the future, the ABI field of e_flags should be used.
629 >>18    leshort         8
630 >>>36   lelong          &0x20           N32
631 >>18    leshort         10
632 >>>36   lelong          &0x20           N32
633 >>18    beshort         8
634 >>>36   belong          &0x20           N32
635 >>18    beshort         10
636 >>>36   belong          &0x20           N32
637 >4      byte            2               64-bit
638 >4      byte            >2
639 >>4     byte            x               unknown ELF class: 0x%X
640 >5      byte            !1
641 >>5     byte            !2              invalid byte order
642 >5      byte            1               LSB
643 # The official e_machine number for MIPS is now #8, regardless of endianness.
644 # The second number (#10) will be deprecated later. For now, we still
645 # say something if #10 is encountered, but only gory details for #8.
646 >>18    leshort         8
647 # only for 32-bit
648 >>>4    byte            1
649 >>>>36  lelong&0xf0000000       0x00000000      MIPS-I
650 >>>>36  lelong&0xf0000000       0x10000000      MIPS-II
651 >>>>36  lelong&0xf0000000       0x20000000      MIPS-III
652 >>>>36  lelong&0xf0000000       0x30000000      MIPS-IV
653 >>>>36  lelong&0xf0000000       0x40000000      MIPS-V
654 >>>>36  lelong&0xf0000000       0x60000000      MIPS32
655 >>>>36  lelong&0xf0000000       0x70000000      MIPS64
656 >>>>36  lelong&0xf0000000       0x80000000      MIPS32 rel2
657 >>>>36  lelong&0xf0000000       0x90000000      MIPS64 rel2
658 # only for 64-bit
659 >>>4    byte            2
660 >>>>48  lelong&0xf0000000       0x00000000      MIPS-I
661 >>>>48  lelong&0xf0000000       0x10000000      MIPS-II
662 >>>>48  lelong&0xf0000000       0x20000000      MIPS-III
663 >>>>48  lelong&0xf0000000       0x30000000      MIPS-IV
664 >>>>48  lelong&0xf0000000       0x40000000      MIPS-V
665 >>>>48  lelong&0xf0000000       0x60000000      MIPS32
666 >>>>48  lelong&0xf0000000       0x70000000      MIPS64 
667 >>>>48  lelong&0xf0000000       0x80000000      MIPS32 rel2
668 >>>>48  lelong&0xf0000000       0x90000000      MIPS64 rel2
669 >>16    leshort         0               no file type,
670 >>16    leshort         1               relocatable,
671 >>16    leshort         2               executable,
672 >>16    leshort         3               shared object,
673 # Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
674 # corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
675 >>16    leshort         4               core file
676 # Core file detection is not reliable.
677 #>>>(0x38+0xcc) string  >\0             of '%s'
678 #>>>(0x38+0x10) lelong  >0              (signal %d),
679 >>16    leshort         &0xff00         processor-specific,
680 >>18    leshort         0               no machine,
681 >>18    leshort         1               AT&T WE32100 - invalid byte order,
682 >>18    leshort         2               SPARC - invalid byte order,
683 >>18    leshort         3               Intel 80386,
684 >>18    leshort         4               Motorola
685 >>>36   lelong          &0x01000000     68000 - invalid byte order,
686 >>>36   lelong          &0x00810000     CPU32 - invalid byte order,
687 >>>36   lelong          0               68020 - invalid byte order,
688 >>18    leshort         5               Motorola 88000 - invalid byte order,
689 >>18    leshort         6               Intel 80486,
690 >>18    leshort         7               Intel 80860,
691 >>18    leshort         8               MIPS,
692 >>18    leshort         9               Amdahl - invalid byte order,
693 >>18    leshort         10              MIPS (deprecated),
694 >>18    leshort         11              RS6000 - invalid byte order,
695 >>18    leshort         15              PA-RISC - invalid byte order,
696 >>>50   leshort         0x0214          2.0
697 >>>48   leshort         &0x0008         (LP64),
698 >>18    leshort         16              nCUBE,
699 >>18    leshort         17              Fujitsu VPP500,
700 >>18    leshort         18              SPARC32PLUS,
701 >>18    leshort         20              PowerPC,
702 >>18    leshort         22              IBM S/390,
703 >>18    leshort         36              NEC V800,
704 >>18    leshort         37              Fujitsu FR20,
705 >>18    leshort         38              TRW RH-32,
706 >>18    leshort         39              Motorola RCE,
707 >>18    leshort         40              ARM,
708 >>18    leshort         41              Alpha,
709 >>18    leshort         0xa390          IBM S/390 (obsolete),
710 >>18    leshort         42              Hitachi SH,
711 >>18    leshort         43              SPARC V9 - invalid byte order,
712 >>18    leshort         44              Siemens Tricore Embedded Processor,
713 >>18    leshort         45              Argonaut RISC Core, Argonaut Technologies Inc.,
714 >>18    leshort         46              Hitachi H8/300,
715 >>18    leshort         47              Hitachi H8/300H,
716 >>18    leshort         48              Hitachi H8S,
717 >>18    leshort         49              Hitachi H8/500,
718 >>18    leshort         50              IA-64 (Intel 64 bit architecture)
719 >>18    leshort         51              Stanford MIPS-X,
720 >>18    leshort         52              Motorola Coldfire,
721 >>18    leshort         53              Motorola M68HC12,
722 >>18    leshort         62              AMD x86-64,
723 >>18    leshort         75              Digital VAX,
724 >>18    leshort         97              NatSemi 32k,
725 >>18    leshort         0x9026          Alpha (unofficial),
726 >>20    lelong          0               invalid version
727 >>20    lelong          1               version 1
728 >>36    lelong          1               MathCoPro/FPU/MAU Required
729 >5      byte            2               MSB
730 # only for MIPS - see comment in little-endian section above.
731 >>18    beshort         8
732 # only for 32-bit
733 >>>4    byte            1
734 >>>>36  belong&0xf0000000       0x00000000      MIPS-I
735 >>>>36  belong&0xf0000000       0x10000000      MIPS-II
736 >>>>36  belong&0xf0000000       0x20000000      MIPS-III
737 >>>>36  belong&0xf0000000       0x30000000      MIPS-IV
738 >>>>36  belong&0xf0000000       0x40000000      MIPS-V
739 >>>>36  belong&0xf0000000       0x60000000      MIPS32
740 >>>>36  belong&0xf0000000       0x70000000      MIPS64
741 >>>>36  belong&0xf0000000       0x80000000      MIPS32 rel2
742 >>>>36  belong&0xf0000000       0x90000000      MIPS64 rel2
743 # only for 64-bit
744 >>>4    byte            2
745 >>>>48  belong&0xf0000000       0x00000000      MIPS-I
746 >>>>48  belong&0xf0000000       0x10000000      MIPS-II
747 >>>>48  belong&0xf0000000       0x20000000      MIPS-III
748 >>>>48  belong&0xf0000000       0x30000000      MIPS-IV
749 >>>>48  belong&0xf0000000       0x40000000      MIPS-V
750 >>>>48  belong&0xf0000000       0x60000000      MIPS32
751 >>>>48  belong&0xf0000000       0x70000000      MIPS64 
752 >>>>48  belong&0xf0000000       0x80000000      MIPS32 rel2
753 >>>>48  belong&0xf0000000       0x90000000      MIPS64 rel2
754 >>16    beshort         0               no file type,
755 >>16    beshort         1               relocatable,
756 >>16    beshort         2               executable,
757 >>16    beshort         3               shared object,
758 >>16    beshort         4               core file,
759 #>>>(0x38+0xcc) string  >\0             of '%s'
760 #>>>(0x38+0x10) belong  >0              (signal %d),
761 >>16    beshort         &0xff00         processor-specific,
762 >>18    beshort         0               no machine,
763 >>18    beshort         1               AT&T WE32100,
764 >>18    beshort         2               SPARC,
765 >>18    beshort         3               Intel 80386 - invalid byte order,
766 >>18    beshort         4               Motorola
767 >>>36   belong          &0x01000000     68000,
768 >>>36   belong          &0x00810000     CPU32,
769 >>>36   belong          0               68020,
770 >>18    beshort         5               Motorola 88000,
771 >>18    beshort         6               Intel 80486 - invalid byte order,
772 >>18    beshort         7               Intel 80860,
773 >>18    beshort         8               MIPS,
774 >>18    beshort         9               Amdahl,
775 >>18    beshort         10              MIPS (deprecated),
776 >>18    beshort         11              RS6000,
777 >>18    beshort         15              PA-RISC
778 >>>50   beshort         0x0214          2.0
779 >>>48   beshort         &0x0008         (LP64)
780 >>18    beshort         16              nCUBE,
781 >>18    beshort         17              Fujitsu VPP500,
782 >>18    beshort         18              SPARC32PLUS,
783 >>>36   belong&0xffff00 &0x000100       V8+ Required,
784 >>>36   belong&0xffff00 &0x000200       Sun UltraSPARC1 Extensions Required,
785 >>>36   belong&0xffff00 &0x000400       HaL R1 Extensions Required,
786 >>>36   belong&0xffff00 &0x000800       Sun UltraSPARC3 Extensions Required,
787 >>18    beshort         20              PowerPC or cisco 4500,
788 >>18    beshort         21              cisco 7500,
789 >>18    beshort         22              IBM S/390,
790 >>18    beshort         24              cisco SVIP,
791 >>18    beshort         25              cisco 7200,
792 >>18    beshort         36              NEC V800 or cisco 12000,
793 >>18    beshort         37              Fujitsu FR20,
794 >>18    beshort         38              TRW RH-32,
795 >>18    beshort         39              Motorola RCE,
796 >>18    beshort         40              ARM,
797 >>18    beshort         41              Alpha,
798 >>18    beshort         42              Hitachi SH,
799 >>18    beshort         43              SPARC V9,
800 >>18    beshort         44              Siemens Tricore Embedded Processor,
801 >>18    beshort         45              Argonaut RISC Core, Argonaut Technologies Inc.,
802 >>18    beshort         46              Hitachi H8/300,
803 >>18    beshort         47              Hitachi H8/300H,
804 >>18    beshort         48              Hitachi H8S,
805 >>18    beshort         49              Hitachi H8/500,
806 >>18    beshort         50              Intel Merced Processor,
807 >>18    beshort         51              Stanford MIPS-X,
808 >>18    beshort         52              Motorola Coldfire,
809 >>18    beshort         53              Motorola M68HC12,
810 >>18    beshort         73              Cray NV1,
811 >>18    beshort         75              Digital VAX,
812 >>18    beshort         97              NatSemi 32k,
813 >>18    beshort         0x9026          Alpha (unofficial),
814 >>18    beshort         0xa390          IBM S/390 (obsolete),
815 >>18    beshort         0xde3d          Ubicom32,
816 >>20    belong          0               invalid version
817 >>20    belong          1               version 1
818 >>36    belong          1               MathCoPro/FPU/MAU Required
819 # Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
820 # like proper ELF, but extracting the string had bad results.
821 >4      byte            <0x80
822 >>8     string          >\0             ("%s")
823 >8      string          \0
824 >>7     byte            0               (SYSV)
825 >>7     byte            1               (HP-UX)
826 >>7     byte            2               (NetBSD)
827 >>7     byte            3               (GNU/Linux)
828 >>7     byte            4               (GNU/Hurd)
829 >>7     byte            5               (86Open)
830 >>7     byte            6               (Solaris)
831 >>7     byte            7               (Monterey)
832 >>7     byte            8               (IRIX)
833 >>7     byte            9               (FreeBSD)
834 >>7     byte            10              (Tru64)
835 >>7     byte            11              (Novell Modesto)
836 >>7     byte            12              (OpenBSD)
837 >>7     byte            97              (ARM)
838 >>7     byte            255             (embedded)
839
840 # Some simple Microsoft executable signatures
841 0                   string              MZ\0\0\0\0\0\0          Microsoft
842 >0x3c           lelong          <4                              invalid
843 >(0x3c.l)   string      !PE\0\0                 MS-DOS executable
844 >(0x3c.l)   string      PE\0\0                  portable executable
845
846 0           string      MZ                  Microsoft
847 >0x3c           lelong          <4                              invalid
848 >(0x3c.l)   string      !PE\0\0             invalid
849 >(0x3c.l)   string      PE\0\0              portable executable
850
851
852 #------------------------------------------------------------------------------
853 # bFLT: file(1) magic for BFLT uclinux binary files
854 #
855 # From Philippe De Muyter <phdm@macqel.be>
856
857 # Additional fields added by Craig Heffner
858 #
859 0       string          bFLT            BFLT executable
860 >4      belong          <1              invalid
861 >4      belong          >4              invalid
862 >4      belong          x               version %d, 
863 >4      belong          4
864 >8      belong          x               code offset: 0x%.8X, 
865 >12     belong          x               data segment starts at: 0x%.8X, 
866 >16     belong          x               bss segment starts at: 0x%.8X, 
867 >20     belong          x               bss segment ends at: 0x%.8X, 
868 >24     belong          x               stack size: %d bytes, 
869 >28     belong          x               relocation records start at: 0x%.8X, 
870 >32     belong          x               number of reolcation records: %d, 
871 >>36    belong&0x1      0x1             ram
872 >>36    belong&0x2      0x2             gotpic
873 >>36    belong&0x4      0x4             gzip
874 >>36    belong&0x8      0x8             gzdata
875
876
877 # Windows CE package files
878 0       string          MSCE\0\0\0\0    Microsoft WinCE installer
879 >20     lelong          0               \b, architecture-independent
880 >20     lelong          103             \b, Hitachi SH3
881 >20     lelong          104             \b, Hitachi SH4
882 >20     lelong          0xA11           \b, StrongARM
883 >20     lelong          4000            \b, MIPS R4000
884 >20     lelong          10003           \b, Hitachi SH3
885 >20     lelong          10004           \b, Hitachi SH3E
886 >20     lelong          10005           \b, Hitachi SH4
887 >20     lelong          70001           \b, ARM 7TDMI
888 >52     leshort         1               \b, 1 file
889 >52     leshort         >1              \b, %u files
890 >56     leshort         1               \b, 1 registry entry
891 >56     leshort         >1              \b, %u registry entries
892
893 #------------------------------------------------------------------------------
894 # Microsoft Xbox executables .xbe (Esa Hyytiä <ehyytia@cc.hut.fi>)
895 0       string          XBEH            XBE, Microsoft Xbox executable
896 # probabilistic checks whether signed or not
897 >0x0004 ulelong =0x0
898 >>&2    ulelong !0x0  \b, invalid
899 >>&2    ulelong =0x0
900 >>>&2   ulelong !0x0  \b, invalid
901 >>>&2   ulelong =0x0  \b, not signed
902 >0x0004 ulelong >0
903 >>&2    ulelong =0x0  \b, invalid
904 >>&2    ulelong >0
905 >>>&2   ulelong =0x0  \b, invalid
906 >>>&2   ulelong >0    \b, signed
907 >0x0104 lelong  <0    \b, invalid base address
908 # expect base address of 0x10000
909 >0x0104               ulelong =0x10000
910 >>(0x0118-0x0FF60)    ulelong&0x80000007  0x80000007 \b, all regions
911 >>(0x0118-0x0FF60)    ulelong&0x80000007  !0x80000007
912 >>>(0x0118-0x0FF60)   ulelong >0           (regions:
913 >>>>(0x0118-0x0FF60)  ulelong &0x00000001  NA
914 >>>>(0x0118-0x0FF60)  ulelong &0x00000002  Japan
915 >>>>(0x0118-0x0FF60)  ulelong &0x00000004  Rest_of_World
916 >>>>(0x0118-0x0FF60)  ulelong &0x80000000  Manufacturer
917 >>>(0x0118-0x0FF60)   ulelong >0           \b)
918
919
920 #------------------------------------------------------------------------------
921 # motorola:  file(1) magic for Motorola 68K and 88K binaries
922 #
923 # 68K
924 #
925 # These signatures are useless without further sanity checking. Disable them until 
926 # that can be implemented.
927 #0       beshort         0x0208          mc68k COFF
928 #>18     beshort         ^00000020       object
929 #>18     beshort         &00000020       executable
930 #>12     belong          >0              not stripped
931 #>168    string          .lowmem         Apple toolbox
932 #>20     beshort         0407            (impure)
933 #>20     beshort         0410            (pure)
934 #>20     beshort         0413            (demand paged)
935 #>20     beshort         0421            (standalone)
936 #0       beshort         0x0209          mc68k executable (shared)
937 #>12     belong          >0              not stripped
938 #0       beshort         0x020A          mc68k executable (shared demand paged)
939 #>12     belong          >0              not stripped
940
941
942 #------------------------------------------------------------------------------
943 # Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :
944 0       string  PS-X\x20EXE       Sony Playstation executable
945 #  Area:
946 >113    string  x               ("%s")
947
948 #------------------------------------------------------------------------------
949 # cisco:  file(1) magic for cisco Systems routers
950 #
951 # Most cisco file-formats are covered by the generic elf code
952 0       string                  \x85\x01\x14    Cisco IOS microcode
953 >7      string                  >\0             
954 >>7     string                  x               for "%s"
955 0       string                  \x85\x01\xcb    Cisco IOS experimental microcode
956 >7      string                  >\0             
957 >>7     string                  x               for "%s"
958
959 # EST flat binary format (which isn't, but anyway)
960 # From: Mark Brown <broonie@sirena.org.uk>
961 0       string  ESTFBINR        EST flat binary
962
963 # These are not the binaries themselves, but string references to them
964 # are a strong indication that they exist elsewhere...
965 #0      string  /bin/busybox    Busybox string reference: "%s"{one-of-many}
966 #0      string /bin/sh          Shell string reference: "%s"{one-of-many}
967
968 # Mach-O's
969 0       string \xca\xfe\xba\xbe\x00\x00\x00\x01 Mach-O universal binary with 1 architecture
970 0       string \xca\xfe\xba\xbe\x00\x00\x00\x02 Mach-O universal binary with 2 architectures
971 0       string \xca\xfe\xba\xbe\x00\x00\x00\x03 Mach-O universal binary with 3 architectures
972 0       string \xca\xfe\xba\xbe\x00\x00\x00\x04 Mach-O universal binary with 4 architectures
973 0       string \xca\xfe\xba\xbe\x00\x00\x00\x05 Mach-O universal binary with 5 architectures
974 0       string \xca\xfe\xba\xbe\x00\x00\x00\x06 Mach-O universal binary with 6 architectures
975 0       string \xca\xfe\xba\xbe\x00\x00\x00\x07 Mach-O universal binary with 7 architectures
976 0       string \xca\xfe\xba\xbe\x00\x00\x00\x08 Mach-O universal binary with 8 architectures
977 0       string \xca\xfe\xba\xbe\x00\x00\x00\x0a Mach-O universal binary with 9 architectures
978 0       string \xca\xfe\xba\xbe\x00\x00\x00\x0b Mach-O universal binary with 10 architectures
979 0       string \xca\xfe\xba\xbe\x00\x00\x00\x0c Mach-O universal binary with 11 architectures
980 0       string \xca\xfe\xba\xbe\x00\x00\x00\x0d Mach-O universal binary with 12 architectures
981 0       string \xca\xfe\xba\xbe\x00\x00\x00\x0e Mach-O universal binary with 13 architectures
982 0       string \xca\xfe\xba\xbe\x00\x00\x00\x0f Mach-O universal binary with 14 architectures
983 0       string \xca\xfe\xba\xbe\x00\x00\x00\x10 Mach-O universal binary with 15 architectures
984 0       string \xca\xfe\xba\xbe\x00\x00\x00\x11 Mach-O universal binary with 16 architectures
985 0       string \xca\xfe\xba\xbe\x00\x00\x00\x12 Mach-O universal binary with 17 architectures
986 0       string \xca\xfe\xba\xbe\x00\x00\x00\x13 Mach-O universal binary with 18 architectures
987
988 # The magic bytes for Java .class files is 0xcafebabe, but AFAIK all major version numbers are less than 255
989 # and all minor version numbers are 0. This gives us three more bytes we can signature on.
990 0       string          \xca\xfe\xba\xbe\x00\x00\x00    Compiled Java class data,
991 >6      beshort         x                               version %d.
992 >4      beshort         x                               \b%d
993 # Which is which?
994 >4      belong          0x032d                          (Java 1.0/1.1)
995 #>4     belong          0x032d                          (Java 1.1)
996 >4      belong          0x002e                          (Java 1.2)
997 >4      belong          0x002f                          (Java 1.3)
998 >4      belong          0x0030                          (Java 1.4)
999 >4      belong          0x0031                          (Java 1.5)
1000 >4      belong          0x0032                          (Java 1.6)
1001 >4      belong          >0x0050                         invalid
1002
1003 # Summary: HP-38/39 calculator
1004 0       string          HP38Bin         HP 38 binary
1005 >7      string          A               (Directory List)
1006 >7      string          B               (Zaplet)
1007 >7      string          C               (Note)
1008 >7      string          D               (Program)
1009 >7      string          E               (Variable)
1010 >7      string          F               (List)
1011 >7      string          G               (Matrix)
1012 >7      string          H               (Library)
1013 >7      string          I               (Target List)
1014 >7      string          J               (ASCII Vector specification)
1015 >7      string          K               (wildcard)
1016 >7      byte            <0x41           invalid
1017 >7      byte            >0x4B           invalid
1018
1019 0       string          HP39Bin         HP 39 binary
1020 >7      string          A               (Directory List)
1021 >7      string          B               (Zaplet)
1022 >7      string          C               (Note)
1023 >7      string          D               (Program)
1024 >7      string          E               (Variable)
1025 >7      string          F               (List)
1026 >7      string          G               (Matrix)
1027 >7      string          H               (Library)
1028 >7      string          I               (Target List)
1029 >7      string          J               (ASCII Vector specification)
1030 >7      string          K               (wildcard)
1031 >7      byte            <0x41           invalid
1032 >7      byte            >0x4B           invalid
1033
1034 0       string          HP38Asc         HP 38 ASCII
1035 >7      string          A               (Directory List)
1036 >7      string          B               (Zaplet)
1037 >7      string          C               (Note)
1038 >7      string          D               (Program)
1039 >7      string          E               (Variable)
1040 >7      string          F               (List)
1041 >7      string          G               (Matrix)
1042 >7      string          H               (Library)
1043 >7      string          I               (Target List)
1044 >7      string          J               (ASCII Vector specification)
1045 >7      string          K               (wildcard)
1046 >7      byte            <0x41           invalid
1047 >7      byte            >0x4B           invalid
1048
1049 0       string          HP39Asc         HP 39 ASCII
1050 >7      string          A               (Directory List)
1051 >7      string          B               (Zaplet)
1052 >7      string          C               (Note)
1053 >7      string          D               (Program)
1054 >7      string          E               (Variable)
1055 >7      string          F               (List)
1056 >7      string          G               (Matrix)
1057 >7      string          H               (Library)
1058 >7      string          I               (Target List)
1059 >7      string          J               (ASCII Vector specification)
1060 >7      string          K               (wildcard)
1061 >7      byte            <0x41           invalid
1062 >7      byte            >0x4B           invalid
1063
1064 # Summary: HP-48/49 calculator
1065 0       string          HPHP48          HP 48 binary
1066 >8      leshort         0x2911          (ADR)
1067 >8      leshort         0x2933          (REAL)
1068 >8      leshort         0x2955          (LREAL)
1069 >8      leshort         0x2977          (COMPLX)
1070 >8      leshort         0x299d          (LCOMPLX)
1071 >8      leshort         0x29bf          (CHAR)
1072 >8      leshort         0x29e8          (ARRAY)
1073 >8      leshort         0x2a0a          (LNKARRAY)
1074 >8      leshort         0x2a2c          (STRING)
1075 >8      leshort         0x2a4e          (HXS)
1076 >8      leshort         0x2a74          (LIST)
1077 >8      leshort         0x2a96          (DIR)
1078 >8      leshort         0x2ab8          (ALG)
1079 >8      leshort         0x2ada          (UNIT)
1080 >8      leshort         0x2afc          (TAGGED)
1081 >8      leshort         0x2b1e          (GROB)
1082 >8      leshort         0x2b40          (LIB)
1083 >8      leshort         0x2b62          (BACKUP)
1084 >8      leshort         0x2b88          (LIBDATA)
1085 >8      leshort         0x2d9d          (PROG)
1086 >8      leshort         0x2dcc          (CODE)
1087 >8      leshort         0x2e48          (GNAME)
1088 >8      leshort         0x2e6d          (LNAME)
1089 >8      leshort         0x2e92          (XLIB)
1090 >8      leshort         <0x2911         (invalid)
1091 >8      leshort         >0x2e92         (invalid)
1092
1093 0       string          HPHP49          HP 49 binary
1094 >8      leshort         0x2911          (ADR)
1095 >8      leshort         0x2933          (REAL)
1096 >8      leshort         0x2955          (LREAL)
1097 >8      leshort         0x2977          (COMPLX)
1098 >8      leshort         0x299d          (LCOMPLX)
1099 >8      leshort         0x29bf          (CHAR)
1100 >8      leshort         0x29e8          (ARRAY)
1101 >8      leshort         0x2a0a          (LNKARRAY)
1102 >8      leshort         0x2a2c          (STRING)
1103 >8      leshort         0x2a4e          (HXS)
1104 >8      leshort         0x2a74          (LIST)
1105 >8      leshort         0x2a96          (DIR)
1106 >8      leshort         0x2ab8          (ALG)
1107 >8      leshort         0x2ada          (UNIT)
1108 >8      leshort         0x2afc          (TAGGED)
1109 >8      leshort         0x2b1e          (GROB)
1110 >8      leshort         0x2b40          (LIB)
1111 >8      leshort         0x2b62          (BACKUP)
1112 >8      leshort         0x2b88          (LIBDATA)
1113 >8      leshort         0x2d9d          (PROG)
1114 >8      leshort         0x2dcc          (CODE)
1115 >8      leshort         0x2e48          (GNAME)
1116 >8      leshort         0x2e6d          (LNAME)
1117 >8      leshort         0x2e92          (XLIB)
1118 >8      leshort         <0x2911         (invalid)
1119 >8      leshort         >0x2e92         (invalid)
1120
1121 0       string          \x23!/          Executable script,
1122 >6      byte            !0x2F
1123 >>7     byte            !0x2F           invalid
1124 >2      string          x               shebang: "%s"
1125
1126 0       string          \x23!\x20/      Executable script,
1127 >7      byte            !0x2F
1128 >>8     byte            !0x2F           invalid
1129 >3      string          x               shebang: "%s"
1130
1131 #--------------------File Systems---------------------
1132
1133 # Minix filesystems - Juan Cespedes <cespedes@debian.org>
1134 # These signatures are useless until they can be improved.
1135 #0x410   leshort         0x137f          Minix filesystem
1136 #>0x402  beshort         !0              \b, %d zones
1137 #>0x1e   string          minix           \b, bootable
1138 #0x410   leshort         0x138f          Minix filesystem, 30 char names
1139 #0x410   leshort         0x2468          Minix filesystem, version 2
1140 #0x410   leshort         0x2478          Minix filesystem, version 2, 30 char names
1141 #0x410  leshort         0x4d5a          Minix filesystem, version 3
1142 #0x410  leshort         0x4d6a          Minix filesystem, version 3, 30 char names
1143
1144 #0x410   beshort         0x137f          Minix filesystem (big endian)
1145 #>0x402  beshort         !0              \b, %d zones
1146 #>0x1e   string          minix           \b, bootable
1147 #0x410   beshort         0x138f          Minix filesystem (big endian), 30 char names
1148 #0x410   beshort         0x2468          Minix filesystem (big endian), version 2
1149 #0x410   beshort         0x2478          Minix filesystem (big endian), version 2, 30 char names
1150 #0x410  beshort         0x4d5a          Minix filesystem (big endian), version 3
1151 #0x410  beshort         0x4d6a          Minix filesystem (big endian), version 3, 30 char names
1152
1153 # YAFFS
1154 0       string  \x03\x00\x00\x00\x01\x00\x00\x00\xFF\xFF        YAFFS filesystem
1155
1156 # EFS2 file system - jojo@utulsa.edu
1157 0      lelong 0x53000000       EFS2 Qualcomm filesystem super block, little endian,
1158 >8     string !EFSSuper        invalid,
1159 >4     leshort &1              NAND
1160 >4     leshort ^1              NOR
1161 >4     leshort x               version 0x%x,
1162 >24    lelong  x               %d blocks,
1163 >16    lelong  x               0x%x pages per block,
1164 >20    lelong  x               0x%x bytes per page
1165
1166 0      belong 0x53000000       EFS2 Qualcomm filesystem super block, big endian,
1167 >8     string !SSFErepu        invalid,
1168 >4     beshort &1              NAND
1169 >4     beshort ^1              NOR
1170 >4     beshort x               version 0x%x,
1171 >24    belong  x               %d blocks,
1172 >16    belong  x               0x%x pages per block,
1173 >20    belong  x               0x%x bytes per page
1174
1175 # TROC file system
1176 0       string  TROC            TROC filesystem,
1177 >4      lelong  x               %d file entries
1178
1179 # PFS file system
1180 0       string  PFS/            PFS filesystem,
1181 >4      string  x               version "%s",
1182 >14     leshort x               %d files
1183
1184 # MPFS file system
1185 0       string  MPFS            MPFS (Microchip) filesystem,
1186 >4      byte    x               version %d.
1187 >5      byte    x               \b%d,
1188 >6      leshort x               %d file entries
1189
1190 # cramfs filesystem - russell@coker.com.au
1191 0       lelong  0x28cd3d45      CramFS filesystem, little endian
1192 >4      lelong  <0              invalid
1193 >4      lelong  >1073741824     invalid
1194 >4      lelong  x               size %u
1195 >8      lelong  &1              version #2
1196 >8      lelong  &2              sorted_dirs
1197 >8      lelong  &4              hole_support
1198 >32     lelong  x               CRC 0x%x,
1199 >36     lelong  x               edition %u,
1200 >40     lelong  <0              invalid
1201 >40     lelong  x               %u blocks,
1202 >44     lelong  <0              invalid
1203 >44     lelong  x               %u files
1204 >4      lelong  x               {jump-to-offset:%u}
1205 >4      lelong  x               {file-size:%u}
1206
1207 0       belong  0x28cd3d45      CramFS filesystem, big endian
1208 >4      belong  <0              invalid
1209 >4      belong  >1073741824     invalid
1210 >4      belong  x               size %u
1211 >8      belong  &1              version #2
1212 >8      belong  &2              sorted_dirs
1213 >8      belong  &4              hole_support
1214 >32     belong  x               CRC 0x%x,
1215 >36     belong  x               edition %u,
1216 >40     belong  <0              invalid
1217 >40     belong  x               %u blocks,
1218 >44     belong  <0              invalid
1219 >44     belong  x               %u files
1220 >4      belong  x               {jump-to-offset:%u}
1221 >4      belong  x               {file-size:%u}
1222
1223
1224
1225 # JFFS2 file system
1226 # If used with binwalk's smart signature feature (on by default, -S to disable)
1227 # this signature can potentially lead to missing some JFFS2 file systems if there
1228 # are multiple JFFS2 file systems in a target file and there are no other identified
1229 # files in between the JFFS2 file systems. This is an unlikely scenario however, and
1230 # the below signatures are much improved in terms of readability and accuracy in the
1231 # vast majority of real world scenarios.
1232 0               leshort 0x1985  JFFS2 filesystem, little endian
1233 >2              leshort !0xE001
1234 >>2             leshort !0xE002
1235 >>>2            leshort !0x2003
1236 >>>>2           leshort !0x2004
1237 >>>>>2          leshort !0x2006
1238 >>>>>>2         leshort !0xE008
1239 >>>>>>>2        leshort !0xE009 \b, invalid
1240 >(4.l)          leshort !0x1985         
1241 >>(4.l+1)       leshort !0x1985 
1242 >>>(4.l+2)      leshort !0x1985 
1243 >>>>(4.l+3)     leshort !0x1985
1244 >>>>>(4.l)      leshort !0xFFFF
1245 >>>>>>(4.l+1)   leshort !0xFFFF
1246 >>>>>>>(4.l+2)  leshort !0xFFFF
1247 >>>>>>>>(4.l+3) leshort !0xFFFF \b, invalid
1248 >4              lelong  0       invalid
1249 >4              lelong  <0      invalid
1250 >4              lelong  x       {one-of-many}{jump-to-offset:%d}
1251
1252 0               beshort 0x1985  JFFS2 filesystem, big endian
1253 >2              beshort !0xE001
1254 >>2             beshort !0xE002
1255 >>>2            beshort !0x2003
1256 >>>>2           beshort !0x2004
1257 >>>>>2          beshort !0x2006
1258 >>>>>>2         beshort !0xE008
1259 >>>>>>>2        beshort !0xE009 \b, invalid
1260 >(4.L)          beshort !0x1985  
1261 >>(4.L+1)       beshort !0x1985  
1262 >>>(4.L+2)      beshort !0x1985
1263 >>>>(4.L+3)     beshort !0x1985 
1264 >>>>>(4.L)      beshort !0xFFFF
1265 >>>>>>(4.L+1)   beshort !0xFFFF
1266 >>>>>>>(4.L+2)  beshort !0xFFFF
1267 >>>>>>>>(4.L+3) beshort !0xFFFF \b, invalid
1268 >4              belong  0       invalid
1269 >4              belong  <0      invalid
1270 >4              belong  x       {one-of-many}{jump-to-offset:%d}
1271
1272
1273 # Squashfs, big endian
1274 0       string  sqsh    Squashfs filesystem, big endian,
1275 >28     beshort >10     invalid
1276 >28     beshort <1      invalid
1277 >30     beshort >10     invalid
1278 >28     beshort x       version %d.
1279 >30     beshort x       \b%d,
1280 >28     beshort >3      compression:
1281 >>20    beshort 1       \bgzip,
1282 >>20    beshort 2       \blzma,
1283 >>20    beshort 3       \bgzip (non-standard type definition),
1284 >>20    beshort 4       \blzma (non-standard type definition),
1285 >>20    beshort 0       \binvalid,
1286 >>20    beshort >4      \binvalid,
1287 >28     beshort <3
1288 >>8     belong  x       size: %d bytes,
1289 >>8         belong      x       \b{jump-to-offset:%d}
1290 >>8         belong      x       \b{file-size:%d}
1291 >28     beshort 3
1292 >>63    bequad x        size: %lld bytes,
1293 >>63    bequad  x       \b{jump-to-offset:%lld}
1294 >>63    bequad  x       \b{file-size:%lld}
1295 >28     beshort >3
1296 >>40    bequad  x       size: %lld bytes,
1297 >>40    bequad  x       \b{jump-to-offset:%lld}
1298 >>40    bequad  x       \b{file-size:%lld}
1299 >4      belong  x       %d inodes,
1300 >28     beshort >3
1301 >>12    belong          blocksize: %d bytes,
1302 >28     beshort <2
1303 >>32    beshort x       blocksize: %d bytes,
1304 >28     beshort 2
1305 >>51    belong  x       blocksize: %d bytes,
1306 >28     beshort 3
1307 >>51    belong  x       blocksize: %d bytes,
1308 >28     beshort >3
1309 >>12    belong  x       blocksize: %d bytes,
1310 >28     beshort <4
1311 >>39    bedate  x       created: %s
1312 >28     beshort >3
1313 >>8     bedate x        created: %s
1314
1315 # Squashfs, little endian
1316 0       string  hsqs    Squashfs filesystem, little endian,
1317 >28     leshort >10     invalid
1318 >28     leshort <1      invalid
1319 >30     leshort >10     invalid
1320 >28     leshort x       version %d.
1321 >30     leshort x       \b%d,
1322 >28     leshort >3      compression:
1323 >>20    leshort 1       \bgzip,
1324 >>20    leshort 2       \blzma,
1325 >>20    leshort 3       \bgzip (non-standard type definition),
1326 >>20    leshort 4       \blzma (non-standard type definition),
1327 >>20    leshort 0       \binvalid,
1328 >>20    leshort >4      \binvalid,
1329 >28     leshort <3
1330 >>8     lelong  x       size: %d bytes,
1331 >>8     lelong  x       {file-size:%d}
1332 >28     leshort 3
1333 >>63    lequad x        size: %lld bytes,
1334 >>63    lequad x        {file-size:%lld}
1335 >28     leshort >3      
1336 >>40    lequad  x       size: %lld bytes,
1337 >>40    lequad  x       {file-size:%lld}
1338 >4      lelong  x       %d inodes,
1339 >28     leshort >3
1340 >>12    lelong          blocksize: %d bytes,
1341 >28     leshort <2
1342 >>32    leshort x       blocksize: %d bytes,
1343 >28     leshort 2
1344 >>51    lelong  x       blocksize: %d bytes,
1345 >28     leshort 3
1346 >>51    lelong  x       blocksize: %d bytes,
1347 >28     leshort >3      
1348 >>12    lelong  x       blocksize: %d bytes,
1349 >28     leshort <4
1350 >>39    ledate  x       created: %s
1351 >28     leshort >3
1352 >>8     ledate x        created: %s
1353 >28     leshort <3
1354 >>8     lelong  x       {jump-to-offset:%d}
1355 >28     leshort 3
1356 >>63    lequad x        {jump-to-offset:%lld}
1357 >28     leshort >3
1358 >>40    lequad  x       {jump-to-offset:%lld}
1359
1360 # Squashfs with LZMA compression
1361 0       string  sqlz    Squashfs filesystem, big endian, lzma compression, 
1362 >28     beshort >10     invalid
1363 >28     beshort <1      invalid
1364 >30     beshort >10     invalid
1365 >28     beshort x       version %d.
1366 >30     beshort x       \b%d,
1367 >28     beshort >3      compression:
1368 >>20    beshort 1       \bgzip,
1369 >>20    beshort 2       \blzma,
1370 >>20    beshort 3       \bgzip (non-standard type definition),
1371 >>20    beshort 4       \blzma (non-standard type definition),
1372 >>20    beshort 0       \binvalid,
1373 >>20    beshort >4      \binvalid,
1374 >28     beshort <3
1375 >>8     belong  x       size: %d bytes,
1376 >>8     belong  x       {file-size:%d}
1377 >28     beshort 3
1378 >>63    bequad x        size: %lld bytes,
1379 >>63    bequad x        {file-size:%lld}
1380 >28     beshort >3
1381 >>40    bequad  x       size: %lld bytes,
1382 >>40    bequad  x       {file-size:%lld}
1383 >4      belong  x       %d inodes,
1384 >28     beshort >3
1385 >>12    belong          blocksize: %d bytes,
1386 >28     beshort <2
1387 >>32    beshort x       blocksize: %d bytes,
1388 >28     beshort 2
1389 >>51    belong  x       blocksize: %d bytes,
1390 >28     beshort 3
1391 >>51    belong  x       blocksize: %d bytes,
1392 >28     beshort >3
1393 >>12    belong  x       blocksize: %d bytes,
1394 >28     beshort <4
1395 >>39    bedate  x       created: %s
1396 >28     beshort >3
1397 >>8     bedate x        created: %s
1398 >28     beshort <3
1399 >>8     belong  x       {jump-to-offset:%d}
1400 >28     beshort 3
1401 >>63    bequad  x       {jump-to-offset:%lld}
1402 >28     beshort >3
1403 >>40    bequad  x       {jump-to-offset:%lld}
1404
1405 # Squashfs 3.3 LZMA signature
1406 0       string  qshs    Squashfs filesystem, big endian, lzma signature,
1407 >28     beshort >10     invalid
1408 >28     beshort <1      invalid
1409 >30     beshort >10     invalid
1410 >28     beshort x       version %d.
1411 >30     beshort x       \b%d,
1412 >28     beshort >3      compression:
1413 >>20    beshort 1       \bgzip,
1414 >>20    beshort 2       \blzma,
1415 >>20    beshort 3       \bgzip (non-standard type definition),
1416 >>20    beshort 4       \blzma (non-standard type definition),
1417 >>20    beshort 0       \binvalid,
1418 >>20    beshort >4      \binvalid,
1419 >28     beshort <3
1420 >>8     belong  x       size: %d bytes,
1421 >>8     belong  x       {file-size:%d}
1422 >28     beshort 3
1423 >>63    bequad x        size: %lld bytes,
1424 >>63    bequad x        {file-size:%lld}
1425 >28     beshort >3
1426 >>40    bequad  x       size: %lld bytes,
1427 >>40    bequad  x       {file-size:%lld}
1428 >4      belong  x       %d inodes,
1429 >28     beshort >3
1430 >>12    belong          blocksize: %d bytes,
1431 >28     beshort <2
1432 >>32    beshort x       blocksize: %d bytes,
1433 >28     beshort 2
1434 >>51    belong  x       blocksize: %d bytes,
1435 >28     beshort 3
1436 >>51    belong  x       blocksize: %d bytes,
1437 >28     beshort >3
1438 >>12    belong  x       blocksize: %d bytes,
1439 >28     beshort <4
1440 >>39    bedate  x       created: %s
1441 >28     beshort >3
1442 >>8     bedate x        created: %s
1443 >28     beshort <3
1444 >>8     belong  x       {jump-to-offset:%d}
1445 >28     beshort 3
1446 >>63    bequad  x       {jump-to-offset:%lld}
1447 >28     beshort >3
1448 >>40    bequad  x       {jump-to-offset:%lld}
1449
1450 # Squashfs for DD-WRT
1451 0       string  tqsh    Squashfs filesystem, big endian, DD-WRT signature,
1452 >28     beshort >10     invalid
1453 >28     beshort <1      invalid
1454 >30     beshort >10     invalid
1455 >28     beshort x       version %d.
1456 >30     beshort x       \b%d,
1457 >28     beshort >3      compression:
1458 >>20    beshort 1       \bgzip,
1459 >>20    beshort 2       \blzma,
1460 >>20    beshort 3       \bgzip (non-standard type definition),
1461 >>20    beshort 4       \blzma (non-standard type definition),
1462 >>20    beshort 0       \binvalid,
1463 >>20    beshort >4      \binvalid,
1464 >28     beshort <3
1465 >>8     belong  x       size: %d bytes,
1466 >>8     belong  x       {file-size:%d}
1467 >28     beshort 3
1468 >>63    bequad x        size: %lld bytes,
1469 >>63    bequad x        {file-size:%lld}
1470 >28     beshort >3
1471 >>40    bequad  x       size: %lld bytes,
1472 >>40    bequad  x       {file-size:%lld}
1473 >4      belong  x       %d inodes,
1474 >28     beshort >3
1475 >>12    belong          blocksize: %d bytes,
1476 >28     beshort <2
1477 >>32    beshort x       blocksize: %d bytes,
1478 >28     beshort 2
1479 >>51    belong  x       blocksize: %d bytes,
1480 >28     beshort 3
1481 >>51    belong  x       blocksize: %d bytes,
1482 >28     beshort >3
1483 >>12    belong  x       blocksize: %d bytes,
1484 >28     beshort <4
1485 >>39    bedate  x       created: %s
1486 >28     beshort >3
1487 >>8     bedate x        created: %s
1488 >28     beshort <3
1489 >>8     belong  x       {jump-to-offset:%d}
1490 >28     beshort 3
1491 >>63    bequad  x       {jump-to-offset:%lld}
1492 >28     beshort >3
1493 >>40    bequad  x       {jump-to-offset:%lld}
1494
1495 # Squashfs for DD-WRT
1496 0       string  hsqt    Squashfs filesystem, little endian, DD-WRT signature,
1497 >28     leshort >10     invalid
1498 >28     leshort <1      invalid
1499 >30     leshort >10     invalid
1500 >28     leshort x       version %d.
1501 >30     leshort x       \b%d,
1502 >28     leshort >3      compression:
1503 >>20    leshort 1       \bgzip,
1504 >>20    leshort 2       \blzma,
1505 >>20    leshort 3       \bgzip (non-standard type definition),
1506 >>20    leshort 4       \blzma (non-standard type definition),
1507 >>20    leshort 0       \binvalid,
1508 >>20    leshort >4      \binvalid,
1509 >28     leshort <3
1510 >>8     lelong  x       size: %d bytes,
1511 >>8     lelong  x       {file-size:%d}
1512 >28     leshort 3
1513 >>63    lequad x        size: %lld bytes,
1514 >>63    lequad x        {file-size:%lld}
1515 >28     leshort >3
1516 >>40    lequad  x       size: %lld bytes,
1517 >>40    lequad  x       {file-size:%lld}
1518 >4      lelong  x       %d inodes,
1519 >28     leshort >3
1520 >>12    lelong          blocksize: %d bytes,
1521 >28     leshort <2
1522 >>32    leshort x       blocksize: %d bytes,
1523 >28     leshort 2
1524 >>51    lelong  x       blocksize: %d bytes,
1525 >28     leshort 3
1526 >>51    lelong  x       blocksize: %d bytes,
1527 >28     leshort >3
1528 >>12    lelong  x       blocksize: %d bytes,
1529 >28     leshort <4
1530 >>39    ledate  x       created: %s
1531 >28     leshort >3
1532 >>8     ledate x        created: %s
1533 >28     leshort <3
1534 >>8     lelong  x       {jump-to-offset:%d}
1535 >28     leshort 3
1536 >>63    lequad x        {jump-to-offset:%lld}
1537 >28     leshort >3
1538 >>40    lequad  x       {jump-to-offset:%lld}
1539
1540 # Non-standard Squashfs signature found on some D-Link routers
1541 0       string  shsq    Squashfs filesystem, little endian, non-standard signature, 
1542 >28     leshort >10     invalid
1543 >28     leshort <1      invalid
1544 >30     leshort >10     invalid
1545 >28     leshort x       version %d.
1546 >30     leshort x       \b%d,
1547 >28     leshort >3      compression:
1548 >>20    leshort 1       \bgzip,
1549 >>20    leshort 2       \blzma,
1550 >>20    leshort 3       \bgzip (non-standard type definition),
1551 >>20    leshort 4       \blzma (non-standard type definition),
1552 >>20    leshort 0       \binvalid,
1553 >>20    leshort >4      \binvalid,
1554 >28     leshort <3
1555 >>8     lelong  x       size: %d bytes,
1556 >>8     lelong  x       {file-size:%d}
1557 >28     leshort 3
1558 >>63    lequad x        size: %lld bytes,
1559 >>63    lequad x        {file-size:%lld}
1560 >28     leshort >3
1561 >>40    lequad  x       size: %lld bytes,
1562 >>40    lequad  x       {file-size:%lld}
1563 >4      lelong  x       %d inodes,
1564 >28     leshort >3
1565 >>12    lelong          blocksize: %d bytes,
1566 >28     leshort <2
1567 >>32    leshort x       blocksize: %d bytes,
1568 >28     leshort 2
1569 >>51    lelong  x       blocksize: %d bytes,
1570 >28     leshort 3
1571 >>51    lelong  x       blocksize: %d bytes,
1572 >28     leshort >3
1573 >>12    lelong  x       blocksize: %d bytes,
1574 >28     leshort <4
1575 >>39    ledate  x       created: %s
1576 >28     leshort >3
1577 >>8     ledate x        created: %s
1578 >28     leshort <3
1579 >>8     lelong  x       {jump-to-offset:%d}
1580 >28     leshort 3
1581 >>63    lequad x        {jump-to-offset:%lld}
1582 >28     leshort >3
1583 >>40    lequad  x       {jump-to-offset:%lld}
1584
1585 # ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca>
1586 # ext4 filesystem - Eric Sandeen <sandeen@sandeen.net>
1587 # volume label and UUID Russell Coker
1588 # http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/
1589 0   leshort         0xEF53              Linux EXT filesystem,{offset-adjust:-0x438}
1590 >2      leshort         >4              invalid state
1591 >2      leshort         3               invalid state
1592 >2      leshort         <0              invalid state
1593 >4      leshort         >3              invalid error behavior
1594 >4      leshort         <0              invalid error behavior
1595 >4      lelong          >1              invalid major revision
1596 >4  lelong              <0              invalid major revision
1597 >4  lelong          x               rev %d
1598 >6  leshort         x               \b.%d
1599 # No journal?  ext2
1600 >36  lelong          ^0x0000004      ext2 filesystem data
1601 >>2 leshort         ^0x0000001      (mounted or unclean)
1602 # Has a journal?  ext3 or ext4
1603 >36  lelong          &0x0000004
1604 #  and small INCOMPAT?
1605 >>40 lelong          <0x0000040
1606 #   and small RO_COMPAT?
1607 >>>44 lelong         <0x0000008      ext3 filesystem data
1608 #   else large RO_COMPAT?
1609 >>>44 lelong         >0x0000007      ext4 filesystem data
1610 #  else large INCOMPAT?
1611 >>40 lelong          >0x000003f      ext4 filesystem data
1612 >48  belong          x               \b, UUID=%08x
1613 >52  beshort         x               \b-%04x
1614 >54  beshort         x               \b-%04x
1615 >56  beshort         x               \b-%04x
1616 >58  belong          x               \b-%08x
1617 >60  beshort         x               \b%04x
1618 >64  string          >0              \b, volume name "%s"
1619
1620
1621 #romfs filesystems - Juan Cespedes <cespedes@debian.org>
1622 0       string  -rom1fs-\0              romfs filesystem, version 1
1623 >8      belong  >10000000               invalid
1624 >8      belong  x                       size: %d bytes,
1625 >16     string  x                       {file-name:%s}
1626 >16     string  x                       named "%s"
1627 >8      belong  x                       {file-size:%d}
1628 >8      belong  x                       {jump-to-offset:%d}
1629
1630 # Wind River MemFS file system, found in some VxWorks devices
1631 0       string  owowowowowowowowowowowowowowow          Wind River management filesystem,
1632 >30     string  !ow                                     invalid,
1633 >32     belong  1                                       compressed,
1634 >32     belong  2                                       plain text,
1635 >36     belong  x                                       %d files
1636
1637 # netboot image - Juan Cespedes <cespedes@debian.org>
1638 0       lelong                  0x1b031336L     Netboot image,
1639 >4      lelong&0xFFFFFF00       0
1640 >>4     lelong&0x100            0x000           mode 2
1641 >>4     lelong&0x100            0x100           mode 3
1642 >4      lelong&0xFFFFFF00       !0              unknown mode (invalid)
1643
1644 0       string                  WDK\x202.0\x00  WDK file system, version 2.0{offset-adjust:-18}
1645
1646 0       string          CD001                                           ISO{offset-adjust:-32769}
1647 >6144   string          !NSR0                                           9660 CD-ROM filesystem data,
1648 >6144   string          NSR0                                            UDF filesystem data,
1649 >6148   string          1                                               version 1.0,
1650 >6148   string          2                                               version 2.0,
1651 >6148   string          3                                               version 3.0
1652 >6148   byte            >0x33                                           invalid version,
1653 >6148   byte            <0x31                                           invalid version,
1654 >38     string          >\0                                             volume name: "%s",
1655 >2047   string          \000CD001\001EL\x20TORITO\x20SPECIFICATION      bootable
1656
1657 # updated by Joerg Jenderek at Nov 2012
1658 # DOS Emulator image is 128 byte, null right padded header + harddisc image
1659 0               string  DOSEMU\0        DOS Emulator image
1660 >0x27E          leshort !0xAA55         \b, invalid
1661 >0x27E          leshort 0xAA55
1662 #offset is 128
1663 >>19            byte   128
1664 >>>(19.b-1)     byte   0x0
1665 >>>>7           lelong >0              \b, %d heads
1666 >>>>11          lelong >0              \b, %d sectors/track
1667 >>>>15          lelong >0              \b, %d cylinders
1668
1669 # From: Alex Beregszaszi <alex@fsn.hu>
1670 0       string  COWD\x03        VMWare3 disk image,
1671 >32     lelong  x               (%d/
1672 >36     lelong  x               \b%d/
1673 >40     lelong  x               \b%d)
1674
1675 0       string  COWD\x02        VMWare3 undoable disk image,
1676 >32     string  >\0             "%s"
1677
1678 # TODO: Add header validation
1679 0       string        VMDK             VMware4 disk image
1680 0       string        KDMV             VMware4 disk image
1681
1682 #--------------------------------------------------------------------
1683 # Qemu Emulator Image
1684 # Lines written by Friedrich Schwittay (f.schwittay@yousable.de)
1685 # Updated by Adam Buchbinder (adam.buchbinder@gmail.com)
1686 # Made by reading sources, reading documentation, and doing trial and error
1687 # on existing QCOW files
1688 0       string          QFI\xFB QEMU QCOW Image
1689
1690 # BSD 2.x file system image; used in RetroBSD for PIC32.
1691 0               string          FS\x3C\x3C              BSD 2.x filesystem,
1692 >1020   string          !\x3E\x3EFS             invalid (missing FSMAGIC2),
1693 >8              lelong          x                               size: {math:%d*1024} bytes,
1694 >8              lelong          x                               \b{file-size:%d*1024}
1695 >8              lelong          x                               \b{jump-to-offset:%d*1024}
1696 >8              lelong          x                               total blocks: %d,
1697 >972    lelong          x                               free blocks: %d,
1698 >968    ledate          x                               last modified: %s
1699 >980    byte            !0
1700 >>980   string          x                               \b, last mounted on: "%s"
1701
1702 # Simple file system found in Foscam camera firmware
1703 0       beshort 0xbd9a  Foscam WebUI filesystem,
1704 >2      leshort x       checksum: 0x%X,
1705 >16     lelong  <3      invalid first file name length,
1706 >16     lelong  >127    invalid first file name length,
1707 >20     byte    0       invalid first file name,
1708 >20     byte    !0x2E
1709 >>20    byte    !0x2F
1710 >>>20   byte    <65     invalid first file name,
1711 >>>20   byte    >122    invalid first file name,
1712 >20     byte    x       first file name: {raw-replace}
1713 >16     lelong  x       {raw-string-length:%d}
1714 >20     string  x       {raw-string:%s}
1715
1716
1717 #--------------------------Firmware Formats---------------------------
1718
1719 # uImage file     
1720 # From: Craig Heffner, U-Boot image.h header definitions file
1721 0       belong  0x27051956      uImage header, header size: 64 bytes,
1722 >4      belong  x               header CRC: 0x%X,
1723 >8      bedate  x               created: %s,
1724 >12 belong  <1      invalid
1725 >12     belong  x               image size: %d bytes,
1726 >16     belong  x               Data Address: 0x%X,
1727 >20     belong  x               Entry Point: 0x%X,
1728 >24     belong  x               data CRC: 0x%X,
1729 #>28    byte    x               OS type: %d,
1730 >28     byte    0               OS: invalid OS,
1731 >28     byte    1               OS: OpenBSD,
1732 >28     byte    2               OS: NetBSD,
1733 >28     byte    3               OS: FreeBSD,
1734 >28     byte    4               OS: 4.4BSD,
1735 >28     byte    5               OS: Linux,
1736 >28     byte    6               OS: SVR4,
1737 >28     byte    7               OS: Esix,
1738 >28     byte    8               OS: Solaris,
1739 >28     byte    9               OS: Irix,
1740 >28     byte    10              OS: SCO,
1741 >28     byte    11              OS: Dell,
1742 >28     byte    12              OS: NCR,
1743 >28     byte    13              OS: LynxOS,
1744 >28     byte    14              OS: VxWorks,
1745 >28     byte    15              OS: pSOS,
1746 >28     byte    16              OS: QNX,
1747 >28     byte    17              OS: Firmware,
1748 >28     byte    18              OS: RTEMS,
1749 >28     byte    19              OS: ARTOS,
1750 >28     byte    20              OS: Unity OS,
1751 #>29    byte    x               CPU arch: %d,
1752 >29     byte    0               CPU: invalid OS,
1753 >29     byte    1               CPU: Alpha,
1754 >29     byte    2               CPU: ARM,
1755 >29     byte    3               CPU: Intel x86,
1756 >29     byte    4               CPU: IA64,
1757 >29     byte    5               CPU: MIPS,
1758 >29     byte    6               CPU: MIPS 64 bit,
1759 >29     byte    7               CPU: PowerPC,
1760 >29     byte    8               CPU: IBM S390,
1761 >29     byte    9               CPU: SuperH,
1762 >29     byte    10              CPU: Sparc,
1763 >29     byte    11              CPU: Sparc 64 bit,
1764 >29     byte    12              CPU: M68K,
1765 >29     byte    13              CPU: Nios-32,
1766 >29     byte    14              CPU: MicroBlaze,
1767 >29     byte    15              CPU: Nios-II,
1768 >29     byte    16              CPU: Blackfin,
1769 >29     byte    17              CPU: AVR,
1770 >29     byte    18              CPU: STMicroelectronics ST200,
1771 #>30    byte    x               image type: %d,
1772 >30     byte    0               image type: invalid Image,
1773 >30     byte    1               image type: Standalone Program,
1774 >30     byte    2               image type: OS Kernel Image,
1775 >30     byte    3               image type: RAMDisk Image,
1776 >30     byte    4               image type: Multi-File Image,
1777 >30     byte    5               image type: Firmware Image,
1778 >30     byte    6               image type: Script file,
1779 >30     byte    7               image type: Filesystem Image,
1780 >30     byte    8               image type: Binary Flat Device Tree Blob
1781 #>31    byte    x               compression type: %d,
1782 >31     byte    0               compression type: none,
1783 >31     byte    1               compression type: gzip,
1784 >31     byte    2               compression type: bzip2,
1785 >31     byte    3               compression type: lzma,
1786 >32     string  x               image name: "%s"
1787
1788 #IMG0 header, found in VxWorks-based Mercury router firmware
1789 0       string          IMG0    IMG0 (VxWorks) header,
1790 >4      belong          <1              invalid
1791 >4      belong          x               size: %d
1792
1793 #Mediatek bootloader signature
1794 #From xp-dev.com
1795 0       string          BOOTLOADER!     Mediatek bootloader
1796
1797 #CSYS header formats
1798 0       string          CSYS\x00        CSYS header, little endian, 
1799 >8      lelong          x                       size: %d
1800
1801 0       string          CSYS\x80        CSYS header, big endian,
1802 >8      belong          x                       size: %d
1803
1804 # wrgg firmware image
1805 0       string          wrgg02  WRGG firmware header,
1806 >6      string          x               name: "%s",
1807 >48     string          x               root device: "%s"
1808
1809 # trx image file
1810 0       string          HDR0    TRX firmware header, little endian, header size: 28 bytes,
1811 >4      lelong          <1              invalid
1812 >4      lelong          x               image size: %d bytes,
1813 >8      lelong          x               CRC32: 0x%X
1814 >12     leshort         x               flags: 0x%X,
1815 >14     leshort         >5              invalid
1816 >14     leshort         x               version: %d
1817
1818 0       string          0RDH    TRX firmware header, big endian, header size: 28 bytes,
1819 >4      belong          <1              invalid
1820 >4      belong          x               image size: %d bytes,
1821 >8      belong          x               CRC32: 0x%X
1822 >12     beshort         x               flags: 0x%X,
1823 >14     beshort         >5              invalid
1824 >14     beshort         x               version: %d
1825
1826
1827 # Ubicom firmware image
1828 0       belong  0xFA320080      Ubicom firmware header,
1829 >12     belong  x                       checksum: 0x%X,
1830 >24     belong  <0                      invalid
1831 >24     belong  x                       image size: %d
1832
1833 # The ROME bootloader is used by several RealTek-based products.
1834 # Unfortunately, the magic bytes are specific to each product, so
1835 # separate signatures must be created for each one.
1836
1837 # Netgear KWGR614 ROME image
1838 0       string          G614            Realtek firmware header, ROME bootloader,
1839 >4      beshort         0xd92f          image type: KFS,
1840 >4      beshort         0xb162          image type: RDIR,
1841 >4      beshort         0xea43          image type: BOOT,
1842 >4      beshort         0x8dc9          image type: RUN,
1843 >4      beshort         0x2a05          image type: CCFG,
1844 >4      beshort         0x6ce8          image type: DCFG,
1845 >4      beshort         0xc371          image type: LOG,
1846 >6      byte            x               header version: %d,
1847 #month
1848 >10     byte            x               created: %d/
1849 #day    
1850 >12     byte            x               \b%d/
1851 #year
1852 >8      beshort         x               \b%d,
1853 >16     belong          x               image size: %d bytes,
1854 >22     byte            x               body checksum: 0x%X,
1855 >23     byte            x               header checksum: 0x%X
1856
1857 # Linksys WRT54GX ROME image
1858 0               belong                  0x59a0e842              Realtek firmware header, ROME bootloader,
1859 >4      beshort         0xd92f          image type: KFS,
1860 >4      beshort         0xb162          image type: RDIR,
1861 >4      beshort         0xea43          image type: BOOT,
1862 >4      beshort         0x8dc9          image type: RUN,
1863 >4      beshort         0x2a05          image type: CCFG,
1864 >4      beshort         0x6ce8          image type: DCFG,
1865 >4      beshort         0xc371          image type: LOG,
1866 >6      byte            x               header version: %d,
1867 #month
1868 >10     byte            x               created: %d/
1869 #day    
1870 >12     byte            x               \b%d/
1871 #year
1872 >8      beshort         x               \b%d,
1873 >16     belong          x               image size: %d bytes,
1874 >22     byte            x               body checksum: 0x%X,
1875 >23     byte            x               header checksum: 0x%X
1876
1877 # PackImg tag, somtimes used as a delimiter between the kernel and rootfs in firmware images.
1878 0       string          --PaCkImGs--    PackImg section delimiter tag,
1879 # If the size in both big and little endian is greater than 512MB, consider this a false positive
1880 >16     lelong          >0x20000000
1881 >>16    belong          >0x20000000     invalid
1882 >16     lelong          <0
1883 >>16    belong          <0              invalid
1884 >16     lelong          >0
1885 >>16    lelong          x               little endian size: %d bytes;
1886 >16     belong          >0              
1887 >>16    belong          x               big endian size: %d bytes
1888
1889
1890 #------------------------------------------------------------------------------
1891 # Broadcom header format
1892 #
1893 0       string          BCRM            Broadcom header,
1894 >4      lelong          <0              invalid
1895 >4      lelong          x               number of sections: %d,
1896 >>8     lelong          18              first section type: flash
1897 >>8     lelong          19              first section type: disk
1898 >>8     lelong          21              first section type: tag
1899
1900
1901 # Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files
1902 # http://ftg.lbl.gov/checkpoint
1903 0       string  Ck0\0\0R\0\0\0  BLCR
1904 >16     lelong  1       x86
1905 >16     lelong  3       alpha
1906 >16     lelong  5       x86-64
1907 >16     lelong  7       ARM
1908 >8      lelong  x       context data (little endian, version %d)
1909
1910 0       string  \0\0\0C\0\0\0R  BLCR
1911 >16     belong  2       SPARC
1912 >16     belong  4       ppc
1913 >16     belong  6       ppc64
1914 >16     belong  7       ARMEB
1915 >16     belong  8       SPARC64
1916 >8      belong  x       context data (big endian, version %d)
1917
1918 # Aculab VoIP firmware
1919 # From: Mark Brown <broonie@sirena.org.uk>
1920 0       string  VoIP\x20Startup\x20and      Aculab VoIP firmware
1921 >35     string  x       format "%s"
1922
1923 #------------------------------------------------------------------------------
1924 # HP LaserJet 1000 series downloadable firmware file
1925 0       string  \xbe\xefABCDEFGH        HP LaserJet 1000 series downloadable firmware
1926
1927 # From Albert Cahalan <acahalan@gmail.com>
1928 # really le32 operation,destination,payloadsize (but quite predictable)
1929 # 01 00 00 00 00 00 00 c0 00 02 00 00
1930 0       string          \1\0\0\0\0\0\0\300\0\2\0\0      Marvell Libertas firmware
1931
1932 #---------------------------------------------------------------------------
1933 # The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
1934 # lead Sun/Cobalt developer) who agrees that they are good and worthy of
1935 # inclusion.
1936
1937 # Boot ROM images for Sun/Cobalt Linux server appliances
1938 0       string  Cobalt\x20Networks\x20Inc.\nFirmware\x20v     Paged COBALT boot rom
1939 >38     string x        V%.4s
1940
1941 # New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
1942 # at the very end where file(1) can't get it.
1943 0       string CRfs     COBALT boot rom data (Flat boot rom or file system)
1944
1945 #
1946 # Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
1947 # Useless until forther improvements can be made to the signature.
1948 #0   string      S0          Motorola S-Record; binary data in text format
1949
1950 # --------------------------------
1951 # Microsoft Xbox data file formats
1952 0       string          XIP0            XIP, Microsoft Xbox data
1953 0       string          XTF0            XTF, Microsoft Xbox data
1954
1955 #Windows CE Binary Image Data Format aka B000FF
1956 #More information on the format:
1957 #http://msdn.microsoft.com/en-us/library/ms924510.aspx
1958 #http://forum.xda-developers.com/showthread.php?t=801167
1959 0       string  B000FF  B000FF Windows CE image header,
1960 >7      lelong  x       Image start: 0x%X,
1961 >11     lelong  x       Image length: %d
1962
1963
1964 #Windows CE RomImage
1965 0    string    \x00ECEC     Windows CE memory segment header, {offset-adjust:-63}
1966 >4      lelong  x       TOC address: 0x%X
1967
1968
1969 # --------------------------------
1970 # ZynOS ROM header format
1971 # From openwrt zynos.h.
1972 0       string          SIG             ZynOS header, header size: 48 bytes,{offset-adjust:-6}
1973 #>0     belong          x               load address 0x%X,
1974 >3      byte            <0x7F           rom image type:
1975 >>3     byte            <1              invalid,
1976 >>3     byte            >7              invalid,
1977 >>3     byte            1               ROMIMG,
1978 >>3     byte            2               ROMBOOT,
1979 >>3     byte            3               BOOTEXT,
1980 >>3     byte            4               ROMBIN,
1981 >>3     byte            5               ROMDIR,
1982 >>3     byte            6               6,
1983 >>3     byte            7               ROMMAP,
1984 >3      byte            >0x7F           ram image type:
1985 >>3     byte            >0x82           invalid,
1986 >>3     byte            0x80            RAM,
1987 >>3     byte            0x81            RAMCODE,
1988 >>3     byte            0x82            RAMBOOT,
1989 >4      belong          >0x40000000     invalid
1990 >4      belong          <0              invalid
1991 >4      belong          0               invalid
1992 >4      belong          x               uncompressed size: %d,
1993 >8      belong          >0x40000000     invalid
1994 >8      belong          <0              invalid
1995 >8      belong          0               invalid
1996 >8      belong          x               compressed size: %d,
1997 >14     beshort         x               uncompressed checksum: 0x%X,
1998 >16     beshort         x               compressed checksum: 0x%X,
1999 >12     byte            x               flags: 0x%X,
2000 >12     byte            &0x40           uncompressed checksum is valid,
2001 >12     byte            &0x80           the binary is compressed,
2002 >>12    byte            &0x20           compressed checksum is valid,
2003 >35     belong          x               memory map table address: 0x%X
2004
2005 # Firmware header used by some VxWorks-based Cisco products
2006 0       string          CI032.00        Cisco VxWorks firmware header,
2007 >8      lelong          >1024           invalid
2008 >8      lelong          <0              invalid
2009 >8      lelong          x               header size: %d bytes,
2010 >32     lelong          >1024           invalid
2011 >32     lelong          <0              invalid
2012 >32     lelong          x               number of files: %d,
2013 >48     lelong          <0              invalid
2014 >48     lelong          x               image size: %d,
2015 >64     string          x               firmware version: "%s"
2016
2017 # Simple VxWorks reference strings
2018 #0      string          VxWorks         VxWorks string referece:
2019 #>0     string          x                       "%s"
2020 #0      string          vxworks         VxWorks string referece:
2021 #>0     string          x                       "%s"
2022 #0      string          VXWORKS         VxWorks string referece:
2023 #>0     string          x                       "%s"
2024
2025 # Firmware header used by some TV's
2026 0       string          FNIB            ZBOOT firmware header, header size: 32 bytes,
2027 >8      lelong          x               load address: 0x%.8X,
2028 >12     lelong          x               start address: 0x%.8X,
2029 >16     lelong          x               checksum: 0x%.8X,
2030 >20     lelong          x               version: 0x%.8X,
2031 >24     lelong          <1              invalid
2032 >24     lelong          x               image size: %d bytes
2033
2034 # Firmware header used by several D-Link routers (and probably others)
2035 0               string  \x5e\xa3\xa4\x17        DLOB firmware header,
2036 >(7.b+12)       string  !\x5e\xa3\xa4\x17       invalid,
2037 #>>12           string  x                       %s,
2038 >(7.b+40)       string  x                       boot partition: "%s"
2039
2040 # TP-Link firmware header structure; thanks to Jonathan McGowan for reversing and documenting this format
2041 0       string          TP-LINK\x20Technologies         TP-Link firmware header,{offset-adjust:-4}
2042 #>-4    lelong          x                               header version: %d,
2043 >0x94   beshort         x                               firmware version: %d.
2044 >0x96   beshort         x                               \b%d.
2045 >0x98   beshort         x                               \b%d,
2046 >0x18   string          x                               image version: "%s",
2047 #>0x74  belong          x                               image size: %d bytes,
2048 >0x3C   belong          x                               product ID: 0x%X,
2049 >0x40   belong          x                               product version: %d,
2050 >0x70   belong          x                               kernel load address: 0x%X,
2051 >0x74   belong          x                               kernel entry point: 0x%X,
2052 >0x7C   belong          x                               kernel offset: %d,
2053 >0x80   belong          x                               kernel length: %d,
2054 >0x84   belong          x                               rootfs offset: %d,
2055 >0x88   belong          x                               rootfs length: %d,
2056 >0x8C   belong          x                               bootloader offset: %d,
2057 >0x90   belong          x                               bootloader length: %d
2058
2059 # Header format from: http://skaya.enix.org/wiki/FirmwareFormat
2060 0       string          \x36\x00\x00\x00                Broadcom 96345 firmware header, header size: 256,
2061 >4      string          !Broadcom
2062 >>4     string          !\x20\x20\x20\x20               invalid
2063 >41     beshort         !0x2020
2064 >>41    beshort         !0x0000
2065 >>>41   string          x                               firmware version: "%.4s",
2066 >45     beshort         !0x0202
2067 >>45    beshort         !0x0000
2068 >>>45   string          x                               board id: "%s",
2069 >236    belong          x                               ~CRC32 header checksum: 0x%X,
2070 >216    belong          x                               ~CRC32 data checksum: 0x%X
2071
2072 # Xerox MFP DLM signatures
2073 0       string          %%XRXbegin                      Xerox DLM firmware start of header
2074 0       string          %%OID_ATT_DLM_NAME              Xerox DLM firmware name:
2075 >19     string          x                               "%s"
2076 0       string          %%OID_ATT_DLM_VERSION           Xerox DLM firmware version:
2077 >22     string          x                               "%s"
2078 0       string          %%XRXend                        Xerox DLM firmware end of header
2079
2080 # Generic copyright signature
2081 0       string          Copyright                       Copyright string:
2082 >9      byte            0                               invalid
2083 >9      string          x                               "%s
2084 >40     string          x                               \b%s"
2085
2086 # Sercomm firmware header
2087 0       string          sErCoMm                         Sercomm firmware signature,
2088 >7      leshort         x                               version control: %d,
2089 >9      leshort         x                               download control: %d,
2090 >11     string          x                               hardware ID: "%s",
2091 >44     leshort         x                               hardware version: 0x%X,
2092 >58     leshort         x                               firmware version: 0x%X,
2093 >60     leshort         x                               starting code segment: 0x%X,
2094 >62     leshort         x                               code size: 0x%X
2095
2096 # NPK firmware header, used by Mikrotik
2097 0               belong          0x1EF1D0BA              NPK firmware header,
2098 >4              lelong          <0                      invalid
2099 >4              lelong          x                       image size: %d,
2100 >14             string          x                       image name: "%s",
2101 >(48.l+58)      string          x                       description: "%s
2102 >(48.l+121)     string          x                       \b%s"
2103
2104 # Ubiquiti firmware signatures
2105 0       string          UBNT            Ubiquiti firmware header, header size: 264 bytes,
2106 >0x108  belong      !0          invalid,
2107 >0x104  belong          x           ~CRC32: 0x%X,
2108 >4      byte        0           invalid,
2109 >4      string          x           version: "%s"
2110
2111 0       string          GEOS        Ubiquiti firmware header, header size: 264 bytes,
2112 >0x108  belong      !0          invalid,
2113 >0x104  belong          x                   ~CRC32: 0x%X,
2114 >4      byte        0           invalid,
2115 >4          string              x                   version: "%s"
2116
2117 0       string          OPEN            Ubiquiti firmware header, third party,
2118 >0x108  belong      !0          invalid,
2119 >0x104  belong          x                   ~CRC32: 0x%X,
2120 >4      byte        0           invalid,
2121 >4          string              x                   version: "%s"
2122
2123 0   string      \x00\x00\x00\x00PART    Ubiquiti partition header,{offset-adjust:4}
2124 >0  byte        x                       header size: 56 bytes,
2125 >8  byte        0                       invalid
2126 >8  string      x                       name: "%s",
2127 >44 belong      x                       base address: 0x%.8X,
2128 >52 belong      x                       data size: %d bytes
2129 >52 belong      x                       {file-size:%d}
2130
2131 0   string      \x00\x00\x00\x00END\x2e Ubiquiti end header, header size: 12 bytes,{offset-adjust:4}
2132 >12 belong      !0                      invalid,
2133 >8  belong      x                       cumulative ~CRC32: 0x%.8X
2134
2135
2136 # Found in DIR-100 firmware
2137 0       string          AIH0N           AIH0N firmware header, header size: 48,
2138 >12     belong          x               size: %d,
2139 >8      belong          !0              executable code,
2140 >>8     belong          x               load address: 0x%X,
2141 >32     string          x               version: "%s"
2142
2143 0       belong          0x5EA3A417      SEAMA firmware header, big endian,
2144 >6      beshort         x               meta size: %d,
2145 >8  belong      <1      invalid
2146 >8      belong          x               size: %d
2147
2148 0       lelong          0x5EA3A417      SEAMA firmware header, little endian,
2149 >6      leshort         x               meta size: %d,
2150 >8  lelong      <1      invalid
2151 >8      lelong          x               size: %d
2152
2153 0       belong          0x4D544443      NSP firmware header, big endian,
2154 >16 belong      <1      invalid
2155 >16     belong          x               header size: %d,
2156 >20 belong      <1      invalid
2157 >20     belong          x               image size: %d,
2158 >20 belong      x       {file-size:%d}
2159 >4  belong      <1      invalid
2160 >4      belong          x               kernel offset: %d,
2161 >12 belong      <1      invalid
2162 >12     belong          x               header version: %d,
2163
2164 0       lelong          0x4D544443      NSP firmware header, little endian,
2165 >16 lelong      <1      invalid
2166 >16     lelong          x               header size: %d,
2167 >20 lelong      <1      invalid
2168 >20     lelong          x               image size: %d,
2169 >20 lelong      x       {file-size:%d}
2170 >4  lelong      <1      invalid
2171 >4      lelong          x               kernel offset: %d,
2172 >12 lelong      <1      invalid
2173 >12     lelong          x               header version: %d,
2174
2175 # http://www.openwiz.org/wiki/Firmware_Layout#Beyonwiz_.wrp_header_structure
2176 0       string          WizFwPkgl       Beyonwiz firmware header,
2177 >20     string          x                   version: "%s"
2178
2179 0       string          BLI223WJ0       Thompson/Alcatel encoded firmware,
2180 >32     byte            x               version: %d.
2181 >33     byte            x               \b%d.
2182 >34     byte            x               \b%d.
2183 >35     byte            x               \b%d,
2184 >44     belong          x               size: %d,
2185 >48     belong          x               crc: 0x%.8X,
2186 >35     byte            x               try decryption tool from:
2187 >35     byte            x               http://download.modem-help.co.uk/mfcs-A/Alcatel/Modems/Misc/
2188
2189 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}
2190
2191 # http://android.stackexchange.com/questions/23357/\
2192 # is-there-a-way-to-look-inside-and-modify-an-adb-backup-created-file/\
2193 # 23608#23608
2194 0       string  ANDROID\040BACKUP\n     Android Backup
2195 >15     string  1\n                     \b, version 1
2196 >17     string  0\n                     \b, uncompressed
2197 >17     string  1\n                     \b, compressed
2198 >19     string  none\n                  \b, unencrypted
2199 >19     string  AES-256\n               \b, encrypted AES-256
2200
2201 # http://forum.xda-developers.com/showthread.php?p=47818657
2202 0       string  imgARMcC                Roku aimage SB{offset-adjust:-8}
2203
2204 # Boot ROM images for Sun/Cobalt Linux server appliances
2205 0       string  Cobalt\ Networks\ Inc.\nFirmware\ v     Paged Sun/COBALT boot rom,
2206 >38     string  x                                       version: "%.4s"
2207
2208 # Simple eCos string signatures
2209 0               string  ecos                                    eCos RTOS string reference:
2210 >0              string  x                                               "%s"
2211 0               string  eCos                                    eCos RTOS string reference:
2212 >0              string  x                                               "%s"
2213 0               string  ECOS                                    eCos RTOS string reference:
2214 >0              string  x                                               "%s"
2215
2216 # ZyXEL config signatures
2217 0               string  dbgarea                                 ZyXEL rom-0 configuration block, name: "%s",{offset-adjust:-6}
2218 >16             beshort x                                               compressed size: %d,
2219 >14             beshort x                                               uncompressed size: %d,
2220 >18             beshort x                                               data offset from start of block: {math:16+%d}
2221
2222 0               string  spt.dat                                 ZyXEL rom-0 configuration block, name: "%s",{offset-adjust:-6}
2223 >16             beshort x                                               compressed size: %d,
2224 >14             beshort x                                               uncompressed size: %d,
2225 >18             beshort x                                               data offset from start of block: {math:16+%d}
2226
2227 0               string  autoexec.net                    ZyXEL rom-0 configuration block, name: "%s",{offset-adjust:-6}
2228 >16             beshort x                                               compressed size: %d,
2229 >14             beshort x                                               uncompressed size: %d,
2230 >18             beshort x                                               data offset from start of block: {math:16+%d}
2231
2232 # Obfuscated Arcadyan firmware, used on the WRT120N
2233 0       belong  0x04010920              Obfuscated Arcadyan firmware (WRT120N?),
2234 >0x68   belong  !0x00D50800             invalid
2235 >0x68   belong  0x00D50800              see https://github.com/devttys0/wrt120n
2236
2237 # Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
2238 # The second word of TIFF files is the TIFF version number, 42, which has
2239 # never changed.  The TIFF specification recommends testing for it.
2240 0       string          MM\x00\x2a      TIFF image data, big-endian
2241 0       string          II\x2a\x00      TIFF image data, little-endian
2242
2243 # PNG [Portable Network Graphics, or "PNG's Not GIF"] images
2244 # (Greg Roelofs, newt@uchicago.edu)
2245 # (Albert Cahalan, acahalan@cs.uml.edu)
2246 #
2247 # 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
2248 #
2249 0       string          \x89PNG\x0d\x0a\x1a\x0a         PNG image
2250 >16             belong                  <1                              invalid
2251 >16             belong                  >10000                  invalid
2252 >20             belong                  <1                              invalid
2253 >20             belong                  >10000                  invalid
2254 >16     belong          x               \b, %d x
2255 >20     belong          x               %d,
2256 >24     byte            x               %d-bit
2257 >25     byte            0               grayscale,
2258 >25     byte            2               \b/color RGB,
2259 >25     byte            3               colormap,
2260 >25     byte            4               gray+alpha,
2261 >25     byte            6               \b/color RGBA,
2262 #>26    byte            0               deflate/32K,
2263 >28     byte            0               non-interlaced
2264 >28     byte            1               interlaced
2265
2266 # GIF
2267 0       string          GIF8            GIF image data
2268 >4      string          7a              \b, version "8%s",
2269 >4      string          9a              \b, version "8%s",
2270 >6      leshort         >0              %d x
2271 >8      leshort         >0              %d
2272 #>10    byte            &0x80           color mapped,
2273 #>10    byte&0x07       =0x00           2 colors
2274 #>10    byte&0x07       =0x01           4 colors
2275 #>10    byte&0x07       =0x02           8 colors
2276 #>10    byte&0x07       =0x03           16 colors
2277 #>10    byte&0x07       =0x04           32 colors
2278 #>10    byte&0x07       =0x05           64 colors
2279 #>10    byte&0x07       =0x06           128 colors
2280 #>10    byte&0x07       =0x07           256 colors
2281
2282 # PC bitmaps (OS/2, Windows BMP files)  (Greg Roelofs, newt@uchicago.edu)
2283 0       string          BM
2284 >14     leshort         12              PC bitmap, OS/2 1.x format
2285 >>18    lelong          <1              invalid
2286 >>18    lelong          >1000000        invalid
2287 >>18    leshort         x               \b, %d x
2288 >>20    lelong          <1              invalid
2289 >>20    lelong          >1000000        invalid
2290 >>20    leshort         x               %d
2291 >14     leshort         64              PC bitmap, OS/2 2.x format
2292 >>18    lelong          <1              invalid
2293 >>18    lelong          >1000000        invalid
2294 >>18    leshort         x               \b, %d x
2295 >>20    lelong          <1              invalid
2296 >>20    lelong          >1000000        invalid
2297 >>20    leshort         x               %d
2298 >14     leshort         40              PC bitmap, Windows 3.x format
2299 >>18    lelong          <1              invalid
2300 >>18    lelong          >1000000        invalid
2301 >>18    lelong          x               \b, %d x
2302 >>22    lelong          <1              invalid
2303 >>22    lelong          >1000000        invalid
2304 >>22    lelong          x               %d x
2305 >>28    lelong          <1              invalid
2306 >>28    lelong          >1000000        invalid
2307 >>28    leshort         x               %d
2308 >14     leshort         128             PC bitmap, Windows NT/2000 format
2309 >>18    lelong          >1000000        invalid
2310 >>18    lelong          <1              invalid
2311 >>18    lelong          x               \b, %d x
2312 >>22    lelong          <1              invalid
2313 >>22    lelong          >1000000        invalid
2314 >>22    lelong          x               %d x
2315 >>28    lelong          <1              invalid
2316 >>28    lelong          >1000000        invalid
2317 >>28    leshort         x               %d
2318
2319 #------------------------------------------------------------------------------
2320 # JPEG images
2321 # SunOS 5.5.1 had
2322 #
2323 #       0       string          \377\330\377\340        JPEG file
2324 #       0       string          \377\330\377\356        JPG file
2325 #
2326 # both of which turn into "JPEG image data" here.
2327 #
2328 0       belong          0xffd8ffe0      JPEG image data, JFIF standard 
2329 >6      string          !JFIF           invalid
2330 # The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
2331 # in a vain attempt to add image size reporting for JFIF.  Note that these
2332 # tests are not fool-proof since some perfectly valid JPEGs are currently
2333 # impossible to specify in magic(4) format.
2334 # First, a little JFIF version info:
2335 >11    byte            x               \b %d.
2336 >12    byte            x               \b%02d
2337 # Next, the resolution or aspect ratio of the image:
2338 #>>13   byte            0               \b, aspect ratio
2339 #>>13   byte            1               \b, resolution (DPI)
2340 #>>13   byte            2               \b, resolution (DPCM)
2341 #>>4    beshort         x               \b, segment length %d
2342 # Next, show thumbnail info, if it exists:
2343 >18    byte            !0              \b, thumbnail %dx
2344 >>19   byte            x               \b%d
2345
2346
2347 0       belong          0xffd8ffe1      JPEG image data, EXIF standard
2348 # EXIF moved down here to avoid reporting a bogus version number,
2349 # and EXIF version number printing added.
2350 #   - Patrik R=E5dman <patrik+file-magic@iki.fi>
2351 >6      string          !Exif            invalid
2352 # Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.
2353 # All possible combinations of entries have to be enumerated, since no looping
2354 # is possible. And both endians are possible...
2355 # The combinations included below are from real-world JPEGs.
2356 # Little-endian
2357 >12    string          II
2358 # IFD 0 Entry #5:
2359 >>70   leshort         0x8769
2360 # EXIF IFD Entry #1:
2361 >>>(78.l+14)   leshort 0x9000
2362 >>>>(78.l+23)  byte    x               %c
2363 >>>>(78.l+24)  byte    x               \b.%c
2364 >>>>(78.l+25)  byte    !0x30           \b%c
2365 # IFD 0 Entry #9:
2366 >>118  leshort         0x8769
2367 # EXIF IFD Entry #3:
2368 >>>(126.l+38)  leshort 0x9000
2369 >>>>(126.l+47) byte    x               %c
2370 >>>>(126.l+48) byte    x               \b.%c
2371 >>>>(126.l+49) byte    !0x30           \b%c
2372 # IFD 0 Entry #10
2373 >>130  leshort         0x8769
2374 # EXIF IFD Entry #3:
2375 >>>(138.l+38)  leshort 0x9000
2376 >>>>(138.l+47) byte    x               %c
2377 >>>>(138.l+48) byte    x               \b.%c
2378 >>>>(138.l+49) byte    !0x30           \b%c
2379 # EXIF IFD Entry #4:
2380 >>>(138.l+50)  leshort 0x9000
2381 >>>>(138.l+59) byte    x               %c
2382 >>>>(138.l+60) byte    x               \b.%c
2383 >>>>(138.l+61) byte    !0x30           \b%c
2384 # EXIF IFD Entry #5:
2385 >>>(138.l+62)  leshort 0x9000
2386 >>>>(138.l+71) byte    x               %c
2387 >>>>(138.l+72) byte    x               \b.%c
2388 >>>>(138.l+73) byte    !0x30           \b%c
2389 # IFD 0 Entry #11
2390 >>142  leshort         0x8769
2391 # EXIF IFD Entry #3:
2392 >>>(150.l+38)  leshort 0x9000
2393 >>>>(150.l+47) byte    x               %c
2394 >>>>(150.l+48) byte    x               \b.%c
2395 >>>>(150.l+49) byte    !0x30           \b%c
2396 # EXIF IFD Entry #4:
2397 >>>(150.l+50)  leshort 0x9000
2398 >>>>(150.l+59) byte    x               %c
2399 >>>>(150.l+60) byte    x               \b.%c
2400 >>>>(150.l+61) byte    !0x30           \b%c
2401 # EXIF IFD Entry #5:
2402 >>>(150.l+62)  leshort 0x9000
2403 >>>>(150.l+71) byte    x               %c
2404 >>>>(150.l+72) byte    x               \b.%c
2405 >>>>(150.l+73) byte    !0x30           \b%c
2406 # Big-endian
2407 >12    string          MM
2408 # IFD 0 Entry #9:
2409 >>118  beshort         0x8769
2410 # EXIF IFD Entry #1:
2411 >>>(126.L+14)  beshort 0x9000
2412 >>>>(126.L+23) byte    x               %c
2413 >>>>(126.L+24) byte    x               \b.%c
2414 >>>>(126.L+25) byte    !0x30           \b%c
2415 # EXIF IFD Entry #3:
2416 >>>(126.L+38)  beshort 0x9000
2417 >>>>(126.L+47) byte    x               %c
2418 >>>>(126.L+48) byte    x               \b.%c
2419 >>>>(126.L+49) byte    !0x30           \b%c
2420 # IFD 0 Entry #10
2421 >>130  beshort         0x8769
2422 # EXIF IFD Entry #3:
2423 >>>(138.L+38)  beshort 0x9000
2424 >>>>(138.L+47) byte    x               %c
2425 >>>>(138.L+48) byte    x               \b.%c
2426 >>>>(138.L+49) byte    !0x30           \b%c
2427 # EXIF IFD Entry #5:
2428 >>>(138.L+62)  beshort 0x9000
2429 >>>>(138.L+71) byte    x               %c
2430 >>>>(138.L+72) byte    x               \b.%c
2431 >>>>(138.L+73) byte    !0x30           \b%c
2432 # IFD 0 Entry #11
2433 >>142  beshort         0x8769
2434 # EXIF IFD Entry #4:
2435 >>>(150.L+50)  beshort 0x9000
2436 >>>>(150.L+59) byte    x               %c
2437 >>>>(150.L+60) byte    x               \b.%c
2438 >>>>(150.L+61) byte    !0x30           \b%c
2439 # Here things get sticky.  We can do ONE MORE marker segment with
2440 # indirect addressing, and that's all.  It would be great if we could
2441 # do pointer arithemetic like in an assembler language.  Christos?
2442 # And if there was some sort of looping construct to do searches, plus a few
2443 # named accumulators, it would be even more effective...
2444 # At least we can show a comment if no other segments got inserted before:
2445 >(4.S+5)        byte            0xFE
2446 >>(4.S+8)       string          >\0             \b, comment: "%s"
2447 # FIXME: When we can do non-byte counted strings, we can use that to get
2448 # the string's count, and fix Debian bug #283760
2449 #>(4.S+5)       byte            0xFE            \b, comment
2450 #>>(4.S+6)      beshort         x               \b length=%d
2451 #>>(4.S+8)      string          >\0             \b, "%s"
2452 # Or, we can show the encoding type (I've included only the three most common)
2453 # and image dimensions if we are lucky and the SOFn (image segment) is here:
2454 >(4.S+5)        byte            0xC0            \b, baseline
2455 >>(4.S+6)       byte            x               \b, precision %d
2456 >>(4.S+7)       beshort         x               \b, %dx
2457 >>(4.S+9)       beshort         x               \b%d
2458 >(4.S+5)        byte            0xC1            \b, extended sequential
2459 >>(4.S+6)       byte            x               \b, precision %d
2460 >>(4.S+7)       beshort         x               \b, %dx
2461 >>(4.S+9)       beshort         x               \b%d
2462 >(4.S+5)        byte            0xC2            \b, progressive
2463 >>(4.S+6)       byte            x               \b, precision %d
2464 >>(4.S+7)       beshort         x               \b, %dx
2465 >>(4.S+9)       beshort         x               \b%d
2466 # I've commented-out quantisation table reporting.  I doubt anyone cares yet.
2467 #>(4.S+5)       byte            0xDB            \b, quantisation table
2468 #>>(4.S+6)      beshort         x               \b length=%d
2469 #>14    beshort         x               \b, %d x
2470 #>16    beshort         x               \b %d
2471
2472 0       string  M88888888888888888888888888     Binwalk logo, ASCII art (Toph){offset-adjust:-50}
2473 >27     string  !8888888888\n                   invalid
2474
2475
2476 #-------------------------Kernels-------------------------------------
2477
2478 # Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu>
2479 # and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>
2480 # and Nicolás Lichtmaier <nick@debian.org>
2481 # All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
2482 0               string          \xb8\xc0\x07\x8e\xd8\xb8\x00\x90\x8e\xc0\xb9\x00\x01\x29\xf6\x29        Linux kernel boot image
2483 >514    string          !HdrS                                                                   (invalid)
2484
2485 # Finds and prints Linux kernel strings in raw Linux kernels (output like uname -a).
2486 # Commonly found in decompressed embedded kernel binaries.
2487 0       string          Linux\ version\         Linux kernel version
2488 >14     byte            0                       invalid
2489 >14     byte            !0
2490 >>14    string          x                       "%s
2491 >>45    string          x                       \b%s"
2492
2493 # eCos kernel exception handlers
2494 #
2495 # mfc0    $k0, Cause       # Cause of last exception
2496 # nop
2497 # andi    $k0, 0x7F
2498 # li      $k1, 0xXXXXXXXX
2499 # add     $k1, $k0
2500 # lw      $k1, 0($k1)
2501 # jr      $k1
2502 # nop
2503 0       string  \x00\x68\x1A\x40\x00\x00\x00\x00\x7F\x00\x5A\x33        eCos kernel exception handler, architecture: MIPSEL,
2504 >14     leshort !0x3C1B                                                                                         invalid
2505 >18     leshort !0x277B                                                                                         invalid
2506 >12     leshort x                                                                                                       exception vector table base address: 0x%.4X
2507 >16     leshort x                                                                                                       \b%.4X
2508 0       string  \x40\x1A\x68\x00\x00\x00\x00\x00\x33\x5A\x00\x7F        eCos kernel exception handler, architecture: MIPS,
2509 >12     beshort !0x3C1B                                                                                         invalid
2510 >16     beshort !0x277B                                                                                         invalid
2511 >14     beshort x                                                                                                       exception vector table base address: 0x%.4X
2512 >18     beshort x                                                                                                       \b%.4X
2513 #
2514 ## ------------------------------------------------------------------
2515 ## Signature for LZMA compressed data with valid properties byte 0x40
2516 ## ------------------------------------------------------------------
2517 #0              string  \x40\x00\x00    LZMA compressed data, properties: 0x40,
2518 #
2519 ## These are all the valid dictionary sizes supported by LZMA utils.
2520 #>1             lelong  !65536  
2521 #>>1            lelong  !131072 
2522 #>>>1           lelong  !262144 
2523 #>>>>1          lelong  !524288 
2524 #>>>>>1         lelong  !1048576        
2525 #>>>>>>1                lelong  !2097152        
2526 #>>>>>>>1       lelong  !4194304        
2527 #>>>>>>>>1      lelong  !8388608        
2528 #>>>>>>>>>1     lelong  !16777216       
2529 #>>>>>>>>>>1    lelong  !33554432       invalid
2530 #>1             lelong  x               dictionary size: %d bytes,
2531 #
2532 ## Assume that a valid size will be greater than 32 bytes and less than 1GB (a value of -1 IS valid).
2533 ## This could technically be valid, but is unlikely.
2534 #>5             lequad  !-1
2535 #>>5            lequad  <32             invalid
2536 #>>5            lequad  >0x40000000     invalid
2537 #
2538 ## These are not 100%. The uncompressed size could be exactly the same as the dicionary size, but it is unlikely.
2539 ## Since most false positives are the result of repeating sequences of bytes (such as executable instructions),
2540 ## marking matches with the same uncompressed and dictionary sizes as invalid eliminates much of these false positives.
2541 #>1             lelong  65536
2542 #>>5            lequad  65536           invalid
2543 #>1             lelong  131072
2544 #>>5            lequad  131072          invalid
2545 #>1             lelong  262144
2546 #>>5            lequad  262144          invalid
2547 #>1             lelong  524288
2548 #>>5            lequad  524288          invalid
2549 #>1             lelong  1048576
2550 #>>5            lequad  1048576         invalid
2551 #>1             lelong  2097152
2552 #>>5            lequad  2097152         invalid
2553 #>1             lelong  4194304
2554 #>>5            lequad  4194304         invalid
2555 #>1             lelong  8388608
2556 #>>5            lequad  8388608         invalid
2557 #>1             lelong  16777216
2558 #>>5            lequad  16777216        invalid
2559 #>1             lelong  33554432
2560 #>>5            lequad  33554432        invalid
2561 #>5             lequad  x               uncompressed size: %lld bytes
2562 #
2563 #
2564 ## ------------------------------------------------------------------
2565 ## Signature for LZMA compressed data with valid properties byte 0x41
2566 ## ------------------------------------------------------------------
2567 #0              string  \x41\x00\x00    LZMA compressed data, properties: 0x41,
2568 #
2569 ## These are all the valid dictionary sizes supported by LZMA utils.
2570 #>1             lelong  !65536  
2571 #>>1            lelong  !131072 
2572 #>>>1           lelong  !262144 
2573 #>>>>1          lelong  !524288 
2574 #>>>>>1         lelong  !1048576        
2575 #>>>>>>1                lelong  !2097152        
2576 #>>>>>>>1       lelong  !4194304        
2577 #>>>>>>>>1      lelong  !8388608        
2578 #>>>>>>>>>1     lelong  !16777216       
2579 #>>>>>>>>>>1    lelong  !33554432       invalid
2580 #>1             lelong  x               dictionary size: %d bytes,
2581 #
2582 ## Assume that a valid size will be greater than 32 bytes and less than 1GB (a value of -1 IS valid).
2583 ## This could technically be valid, but is unlikely.
2584 #>5             lequad  !-1
2585 #>>5            lequad  <32             invalid
2586 #>>5            lequad  >0x40000000     invalid
2587 #
2588 ## These are not 100%. The uncompressed size could be exactly the same as the dicionary size, but it is unlikely.
2589 ## Since most false positives are the result of repeating sequences of bytes (such as executable instructions),
2590 ## marking matches with the same uncompressed and dictionary sizes as invalid eliminates much of these false positives.
2591 #>1             lelong  65536
2592 #>>5            lequad  65536           invalid
2593 #>1             lelong  131072
2594 #>>5            lequad  131072          invalid
2595 #>1             lelong  262144
2596 #>>5            lequad  262144          invalid
2597 #>1             lelong  524288
2598 #>>5            lequad  524288          invalid
2599 #>1             lelong  1048576
2600 #>>5            lequad  1048576         invalid
2601 #>1             lelong  2097152
2602 #>>5            lequad  2097152         invalid
2603 #>1             lelong  4194304
2604 #>>5            lequad  4194304         invalid
2605 #>1             lelong  8388608
2606 #>>5            lequad  8388608         invalid
2607 #>1             lelong  16777216
2608 #>>5            lequad  16777216        invalid
2609 #>1             lelong  33554432
2610 #>>5            lequad  33554432        invalid
2611 #>5             lequad  x               uncompressed size: %lld bytes
2612 #
2613 #
2614 ## ------------------------------------------------------------------
2615 ## Signature for LZMA compressed data with valid properties byte 0x48
2616 ## ------------------------------------------------------------------
2617 #0              string  \x48\x00\x00    LZMA compressed data, properties: 0x48,
2618 #
2619 ## These are all the valid dictionary sizes supported by LZMA utils.
2620 #>1             lelong  !65536  
2621 #>>1            lelong  !131072 
2622 #>>>1           lelong  !262144 
2623 #>>>>1          lelong  !524288 
2624 #>>>>>1         lelong  !1048576        
2625 #>>>>>>1                lelong  !2097152        
2626 #>>>>>>>1       lelong  !4194304        
2627 #>>>>>>>>1      lelong  !8388608        
2628 #>>>>>>>>>1     lelong  !16777216       
2629 #>>>>>>>>>>1    lelong  !33554432       invalid
2630 #>1             lelong  x               dictionary size: %d bytes,
2631 #
2632 ## Assume that a valid size will be greater than 32 bytes and less than 1GB (a value of -1 IS valid).
2633 ## This could technically be valid, but is unlikely.
2634 #>5             lequad  !-1
2635 #>>5            lequad  <32             invalid
2636 #>>5            lequad  >0x40000000     invalid
2637 #
2638 ## These are not 100%. The uncompressed size could be exactly the same as the dicionary size, but it is unlikely.
2639 ## Since most false positives are the result of repeating sequences of bytes (such as executable instructions),
2640 ## marking matches with the same uncompressed and dictionary sizes as invalid eliminates much of these false positives.
2641 #>1             lelong  65536
2642 #>>5            lequad  65536           invalid
2643 #>1             lelong  131072
2644 #>>5            lequad  131072          invalid
2645 #>1             lelong  262144
2646 #>>5            lequad  262144          invalid
2647 #>1             lelong  524288
2648 #>>5            lequad  524288          invalid
2649 #>1             lelong  1048576
2650 #>>5            lequad  1048576         invalid
2651 #>1             lelong  2097152
2652 #>>5            lequad  2097152         invalid
2653 #>1             lelong  4194304
2654 #>>5            lequad  4194304         invalid
2655 #>1             lelong  8388608
2656 #>>5            lequad  8388608         invalid
2657 #>1             lelong  16777216
2658 #>>5            lequad  16777216        invalid
2659 #>1             lelong  33554432
2660 #>>5            lequad  33554432        invalid
2661 #>5             lequad  x               uncompressed size: %lld bytes
2662 #
2663 #
2664 ## ------------------------------------------------------------------
2665 ## Signature for LZMA compressed data with valid properties byte 0x49
2666 ## ------------------------------------------------------------------
2667 #0              string  \x49\x00\x00    LZMA compressed data, properties: 0x49,
2668 #
2669 ## These are all the valid dictionary sizes supported by LZMA utils.
2670 #>1             lelong  !65536  
2671 #>>1            lelong  !131072 
2672 #>>>1           lelong  !262144 
2673 #>>>>1          lelong  !524288 
2674 #>>>>>1         lelong  !1048576        
2675 #>>>>>>1                lelong  !2097152        
2676 #>>>>>>>1       lelong  !4194304        
2677 #>>>>>>>>1      lelong  !8388608        
2678 #>>>>>>>>>1     lelong  !16777216       
2679 #>>>>>>>>>>1    lelong  !33554432       invalid
2680 #>1             lelong  x               dictionary size: %d bytes,
2681 #
2682 ## Assume that a valid size will be greater than 32 bytes and less than 1GB (a value of -1 IS valid).
2683 ## This could technically be valid, but is unlikely.
2684 #>5             lequad  !-1
2685 #>>5            lequad  <32             invalid
2686 #>>5            lequad  >0x40000000     invalid
2687 #
2688 ## These are not 100%. The uncompressed size could be exactly the same as the dicionary size, but it is unlikely.
2689 ## Since most false positives are the result of repeating sequences of bytes (such as executable instructions),
2690 ## marking matches with the same uncompressed and dictionary sizes as invalid eliminates much of these false positives.
2691 #>1             lelong  65536
2692 #>>5            lequad  65536           invalid
2693 #>1             lelong  131072
2694 #>>5            lequad  131072          invalid
2695 #>1             lelong  262144
2696 #>>5            lequad  262144          invalid
2697 #>1             lelong  524288
2698 #>>5            lequad  524288          invalid
2699 #>1             lelong  1048576
2700 #>>5            lequad  1048576         invalid
2701 #>1             lelong  2097152
2702 #>>5            lequad  2097152         invalid
2703 #>1             lelong  4194304
2704 #>>5            lequad  4194304         invalid
2705 #>1             lelong  8388608
2706 #>>5            lequad  8388608         invalid
2707 #>1             lelong  16777216
2708 #>>5            lequad  16777216        invalid
2709 #>1             lelong  33554432
2710 #>>5            lequad  33554432        invalid
2711 #>5             lequad  x               uncompressed size: %lld bytes
2712
2713
2714 # ------------------------------------------------------------------
2715 # Signature for LZMA compressed data with valid properties byte 0x51
2716 # ------------------------------------------------------------------
2717 0               string  \x51\x00\x00    LZMA compressed data, properties: 0x51,
2718
2719 # These are all the valid dictionary sizes supported by LZMA utils.
2720 >1              lelong  !65536  
2721 >>1             lelong  !131072 
2722 >>>1            lelong  !262144 
2723 >>>>1           lelong  !524288 
2724 >>>>>1          lelong  !1048576        
2725 >>>>>>1         lelong  !2097152        
2726 >>>>>>>1        lelong  !4194304        
2727 >>>>>>>>1       lelong  !8388608        
2728 >>>>>>>>>1      lelong  !16777216       
2729 >>>>>>>>>>1     lelong  !33554432       invalid
2730 >1              lelong  x               dictionary size: %d bytes,
2731
2732 # Assume that a valid size will be greater than 32 bytes and less than 1GB (a value of -1 IS valid).
2733 # This could technically be valid, but is unlikely.
2734 >5              lequad  !-1
2735 >>5             lequad  <32             invalid
2736 >>5             lequad  >0x40000000     invalid
2737
2738 # These are not 100%. The uncompressed size could be exactly the same as the dicionary size, but it is unlikely.
2739 # Since most false positives are the result of repeating sequences of bytes (such as executable instructions),
2740 # marking matches with the same uncompressed and dictionary sizes as invalid eliminates much of these false positives.
2741 >1              lelong  65536
2742 >>5             lequad  65536           invalid
2743 >1              lelong  131072
2744 >>5             lequad  131072          invalid
2745 >1              lelong  262144
2746 >>5             lequad  262144          invalid
2747 >1              lelong  524288
2748 >>5             lequad  524288          invalid
2749 >1              lelong  1048576
2750 >>5             lequad  1048576         invalid
2751 >1              lelong  2097152
2752 >>5             lequad  2097152         invalid
2753 >1              lelong  4194304
2754 >>5             lequad  4194304         invalid
2755 >1              lelong  8388608
2756 >>5             lequad  8388608         invalid
2757 >1              lelong  16777216
2758 >>5             lequad  16777216        invalid
2759 >1              lelong  33554432
2760 >>5             lequad  33554432        invalid