Imported Upstream version 2.0.1
[packages/binwalk.git] / src / magic / archives
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