xref: /freebsd/contrib/file/magic/Magdir/archive (revision d38c30c092828f4882ce13b08d0bd3fd6dc7afb5)
1b6cee71dSXin LI#------------------------------------------------------------------------------
2*d38c30c0SXin LI# $File: archive,v 1.133 2019/11/15 21:03:14 christos Exp $
3b6cee71dSXin LI# archive:  file(1) magic for archive formats (see also "msdos" for self-
4b6cee71dSXin LI#           extracting compressed archives)
5b6cee71dSXin LI#
6b6cee71dSXin LI# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
758a0f0d0SEitan Adler# pre-POSIX "tar" archives are also handled in the C code ../../src/is_tar.c.
8b6cee71dSXin LI
9b6cee71dSXin LI# POSIX tar archives
1058a0f0d0SEitan Adler# URL: https://en.wikipedia.org/wiki/Tar_(computing)
1158a0f0d0SEitan Adler# Reference: https://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5&manpath=FreeBSD+8-current
1258a0f0d0SEitan Adler# header mainly padded with nul bytes
1358a0f0d0SEitan Adler500	quad		0
142dc4dbb9SEitan Adler!:strength /2
1558a0f0d0SEitan Adler# filename or extended attribute printable strings in range space null til umlaut ue
1658a0f0d0SEitan Adler>0	ubeshort	>0x1F00
1758a0f0d0SEitan Adler>>0	ubeshort	<0xFCFD
1858a0f0d0SEitan Adler# last 4 header bytes often null but tar\0 in gtarfail2.tar gtarfail.tar-bad
1958a0f0d0SEitan Adler# at https://sourceforge.net/projects/s-tar/files/testscripts/
2058a0f0d0SEitan Adler>>>508	ubelong&0x8B9E8DFF	0
2158a0f0d0SEitan Adler# nul, space or ascii digit 0-7 at start of mode
2258a0f0d0SEitan Adler>>>>100	ubyte&0xC8	=0
2358a0f0d0SEitan Adler>>>>>101 ubyte&0xC8	=0
2458a0f0d0SEitan Adler# nul, space at end of check sum
2558a0f0d0SEitan Adler>>>>>>155 ubyte&0xDF	=0
2658a0f0d0SEitan Adler# space or ascii digit 0 at start of check sum
2758a0f0d0SEitan Adler>>>>>>>148	ubyte&0xEF	=0x20
2858a0f0d0SEitan Adler>>>>>>>>0	use	tar-file
2958a0f0d0SEitan Adler#	minimal check and then display tar archive information which can also be
3058a0f0d0SEitan Adler#	embedded inside others like Android Backup, Clam AntiVirus database
3158a0f0d0SEitan Adler0	name		tar-file
3258a0f0d0SEitan Adler>257	string		!ustar
3358a0f0d0SEitan Adler# header padded with nuls
3458a0f0d0SEitan Adler>>257	ulong		=0
3558a0f0d0SEitan Adler# GNU tar version 1.29 with non pax format option without refusing
3658a0f0d0SEitan Adler# creates misleading V7 header for Long path, Multi-volume, Volume type
3758a0f0d0SEitan Adler>>>156	ubyte		0x4c		GNU tar archive
3858a0f0d0SEitan Adler!:mime	application/x-gtar
3958a0f0d0SEitan Adler!:ext	tar/gtar
4058a0f0d0SEitan Adler>>>156	ubyte		0x4d		GNU tar archive
4158a0f0d0SEitan Adler!:mime	application/x-gtar
4258a0f0d0SEitan Adler!:ext	tar/gtar
4358a0f0d0SEitan Adler>>>156	ubyte		0x56		GNU tar archive
4458a0f0d0SEitan Adler!:mime	application/x-gtar
4558a0f0d0SEitan Adler!:ext	tar/gtar
4658a0f0d0SEitan Adler>>>156	default		x		tar archive (V7)
4758a0f0d0SEitan Adler!:mime	application/x-tar
4858a0f0d0SEitan Adler!:ext	tar
4958a0f0d0SEitan Adler# other stuff in padding
5058a0f0d0SEitan Adler# some implementations add new fields to the blank area at the end of the header record
5158a0f0d0SEitan Adler# created for example by DOS TAR 3.20g 1994 Tim V.Shapore with -j option
5258a0f0d0SEitan Adler>>257	ulong		!0		tar archive (old)
5358a0f0d0SEitan Adler!:mime	application/x-tar
5458a0f0d0SEitan Adler!:ext	tar
5558a0f0d0SEitan Adler# magic in newer, GNU, posix variants
5658a0f0d0SEitan Adler>257	string		=ustar
5758a0f0d0SEitan Adler# 2 last char of magic and UStar version because string expression does not work
5858a0f0d0SEitan Adler# 2 space characters followed by a null for GNU variant
5958a0f0d0SEitan Adler>>261	ubelong		=0x72202000	POSIX tar archive (GNU)
6058a0f0d0SEitan Adler!:mime	application/x-gtar
6158a0f0d0SEitan Adler!:ext	tar/gtar
6258a0f0d0SEitan Adler# UStar version with ASCII "00"
6358a0f0d0SEitan Adler>>261	ubelong		0x72003030	POSIX
6458a0f0d0SEitan Adler# gLOBAL and ExTENSION type only found in POSIX.1-2001 format
6558a0f0d0SEitan Adler>>>156	ubyte		0x67		\b.1-2001
6658a0f0d0SEitan Adler>>>156	ubyte		0x78		\b.1-2001
6758a0f0d0SEitan Adler>>>156	ubyte		x		tar archive
6858a0f0d0SEitan Adler!:mime	application/x-ustar
6958a0f0d0SEitan Adler!:ext	tar/ustar
7058a0f0d0SEitan Adler# version with 2 binary nuls embedded in Android Backup like com.android.settings.ab
7158a0f0d0SEitan Adler>>261	ubelong		0x72000000	tar archive (ustar)
7258a0f0d0SEitan Adler!:mime	application/x-ustar
7358a0f0d0SEitan Adler!:ext	tar/ustar
7458a0f0d0SEitan Adler# not seen ustar variant with garbish version
7558a0f0d0SEitan Adler>>261	default		x		tar archive (unknown ustar)
7658a0f0d0SEitan Adler!:mime	application/x-ustar
7758a0f0d0SEitan Adler!:ext	tar/ustar
7858a0f0d0SEitan Adler# type flag of 1st tar archive member
7958a0f0d0SEitan Adler#>156	ubyte		x		\b, %c-type
8058a0f0d0SEitan Adler>156	ubyte		x
8158a0f0d0SEitan Adler>>156	ubyte		0		\b, file
8258a0f0d0SEitan Adler>>156	ubyte		0x30		\b, file
8358a0f0d0SEitan Adler>>156	ubyte		0x31		\b, hard link
8458a0f0d0SEitan Adler>>156	ubyte		0x32		\b, symlink
8558a0f0d0SEitan Adler>>156	ubyte		0x33		\b, char device
8658a0f0d0SEitan Adler>>156	ubyte		0x34		\b, block device
8758a0f0d0SEitan Adler>>156	ubyte		0x35		\b, directory
8858a0f0d0SEitan Adler>>156	ubyte		0x36		\b, fifo
8958a0f0d0SEitan Adler>>156	ubyte		0x37		\b, reserved
9058a0f0d0SEitan Adler>>156	ubyte		0x4c		\b, long path
9158a0f0d0SEitan Adler>>156	ubyte		0x4d		\b, multi volume
9258a0f0d0SEitan Adler>>156	ubyte		0x56		\b, volume
9358a0f0d0SEitan Adler>>156	ubyte		0x67		\b, global
9458a0f0d0SEitan Adler>>156	ubyte		0x78		\b, extension
9558a0f0d0SEitan Adler>>156	default		x		\b, type
9658a0f0d0SEitan Adler>>>156	ubyte		x		'%c'
9758a0f0d0SEitan Adler# name[100]
9858a0f0d0SEitan Adler>0	string		>\0		%-.60s
9958a0f0d0SEitan Adler# mode mainly stored as an octal number in ASCII null or space terminated
10058a0f0d0SEitan Adler>100	string		>\0		\b, mode %-.7s
10158a0f0d0SEitan Adler# user id mainly as octal numbers in ASCII null or space terminated
10258a0f0d0SEitan Adler>108	string		>\0		\b, uid %-.7s
10358a0f0d0SEitan Adler# group id mainly as octal numbers in ASCII null or space terminated
10458a0f0d0SEitan Adler>116	string		>\0		\b, gid %-.7s
10558a0f0d0SEitan Adler# size mainly as octal number in ASCII
10658a0f0d0SEitan Adler>124	ubyte		<0x38
10758a0f0d0SEitan Adler>>124	string		>\0		\b, size %-.12s
10858a0f0d0SEitan Adler# coding indicated by setting the high-order bit of the leftmost byte
10958a0f0d0SEitan Adler>124	ubyte		>0xEF		\b, size 0x
11058a0f0d0SEitan Adler>>124	ubyte		!0xff		\b%2.2x
11158a0f0d0SEitan Adler>>125	ubyte		!0xff		\b%2.2x
11258a0f0d0SEitan Adler>>126	ubyte		!0xff		\b%2.2x
11358a0f0d0SEitan Adler>>127	ubyte		!0xff		\b%2.2x
11458a0f0d0SEitan Adler>>128	ubyte		!0xff		\b%2.2x
11558a0f0d0SEitan Adler>>129	ubyte		!0xff		\b%2.2x
11658a0f0d0SEitan Adler>>130	ubyte		!0xff		\b%2.2x
11758a0f0d0SEitan Adler>>131	ubyte		!0xff		\b%2.2x
11858a0f0d0SEitan Adler>>132	ubyte		!0xff		\b%2.2x
11958a0f0d0SEitan Adler>>133	ubyte		!0xff		\b%2.2x
12058a0f0d0SEitan Adler>>134	ubyte		!0xff		\b%2.2x
12158a0f0d0SEitan Adler>>135	ubyte		!0xff		\b%2.2x
12258a0f0d0SEitan Adler# seconds since 0:0:0 1 jan 1970 UTC as octal number mainly in ASCII null or space terminated
12358a0f0d0SEitan Adler>136	string		>\0		\b, seconds %-.11s
12458a0f0d0SEitan Adler# header checksum stored as an octal number in ASCII null or space terminated
12558a0f0d0SEitan Adler#>148	string		x		\b, cksum %.7s
12658a0f0d0SEitan Adler# linkname[100]
12758a0f0d0SEitan Adler>157	string		>\0		\b, linkname %-.40s
12858a0f0d0SEitan Adler# additional fields for ustar
12958a0f0d0SEitan Adler>257	string		=ustar
13058a0f0d0SEitan Adler# owner user name null terminated
13158a0f0d0SEitan Adler>>265	string		>\0		\b, user %-.32s
13258a0f0d0SEitan Adler# group name null terminated
13358a0f0d0SEitan Adler>>297	string		>\0		\b, group %-.32s
13458a0f0d0SEitan Adler# device major minor if not zero
13558a0f0d0SEitan Adler>>329	ubequad&0xCFCFCFCFcFcFcFdf	!0
13658a0f0d0SEitan Adler>>>329	string		x		\b, devmaj %-.7s
13758a0f0d0SEitan Adler>>337	ubequad&0xCFCFCFCFcFcFcFdf	!0
13858a0f0d0SEitan Adler>>>337	string		x		\b, devmin %-.7s
13958a0f0d0SEitan Adler# prefix[155]
14058a0f0d0SEitan Adler>>345	string		>\0		\b, prefix %-.155s
14158a0f0d0SEitan Adler# old non ustar/POSIX tar
14258a0f0d0SEitan Adler>257	string		!ustar
14358a0f0d0SEitan Adler>>508	string		=tar\0
14458a0f0d0SEitan Adler# padding[255] in old star
14558a0f0d0SEitan Adler>>>257	string		>\0		\b, padding: %-.40s
14658a0f0d0SEitan Adler>>508	default		x
14758a0f0d0SEitan Adler# padding[255] in old tar sometimes comment field
14858a0f0d0SEitan Adler>>>257	string		>\0		\b, comment: %-.40s
149b6cee71dSXin LI
150b6cee71dSXin LI# Incremental snapshot gnu-tar format from:
15148c779cdSXin LI# https://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html
152b6cee71dSXin LI0	string		GNU\ tar-	GNU tar incremental snapshot data
153b6cee71dSXin LI>&0	regex		[0-9]\.[0-9]+-[0-9]+	version %s
154b6cee71dSXin LI
155b6cee71dSXin LI# cpio archives
156b6cee71dSXin LI#
157b6cee71dSXin LI# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
158b6cee71dSXin LI# The idea is to indicate archives produced on machines with the same
159b6cee71dSXin LI# byte order as the machine running "file" with "cpio archive", and
160b6cee71dSXin LI# to indicate archives produced on machines with the opposite byte order
161b6cee71dSXin LI# from the machine running "file" with "byte-swapped cpio archive".
162b6cee71dSXin LI#
163b6cee71dSXin LI# The SVR4 "cpio(4)" hints that there are additional formats, but they
164b6cee71dSXin LI# are defined as "short"s; I think all the new formats are
165b6cee71dSXin LI# character-header formats and thus are strings, not numbers.
166b6cee71dSXin LI0	short		070707		cpio archive
167b6cee71dSXin LI!:mime	application/x-cpio
168b6cee71dSXin LI0	short		0143561		byte-swapped cpio archive
169b6cee71dSXin LI!:mime	application/x-cpio # encoding: swapped
170b6cee71dSXin LI0	string		070707		ASCII cpio archive (pre-SVR4 or odc)
171b6cee71dSXin LI0	string		070701		ASCII cpio archive (SVR4 with no CRC)
172b6cee71dSXin LI0	string		070702		ASCII cpio archive (SVR4 with CRC)
173b6cee71dSXin LI
174b6cee71dSXin LI#
175b6cee71dSXin LI# Various archive formats used by various versions of the "ar"
176b6cee71dSXin LI# command.
177b6cee71dSXin LI#
178b6cee71dSXin LI
179b6cee71dSXin LI#
180b6cee71dSXin LI# Original UNIX archive formats.
181b6cee71dSXin LI# They were written with binary values in host byte order, and
182b6cee71dSXin LI# the magic number was a host "int", which might have been 16 bits
183b6cee71dSXin LI# or 32 bits.  We don't say "PDP-11" or "VAX", as there might have
184b6cee71dSXin LI# been ports to little-endian 16-bit-int or 32-bit-int platforms
185b6cee71dSXin LI# (x86?) using some of those formats; if none existed, feel free
186b6cee71dSXin LI# to use "PDP-11" for little-endian 16-bit and "VAX" for little-endian
187b6cee71dSXin LI# 32-bit.  There might have been big-endian ports of that sort as
188b6cee71dSXin LI# well.
189b6cee71dSXin LI#
190b6cee71dSXin LI0	leshort		0177555		very old 16-bit-int little-endian archive
191b6cee71dSXin LI0	beshort		0177555		very old 16-bit-int big-endian archive
192b6cee71dSXin LI0	lelong		0177555		very old 32-bit-int little-endian archive
193b6cee71dSXin LI0	belong		0177555		very old 32-bit-int big-endian archive
194b6cee71dSXin LI
195b6cee71dSXin LI0	leshort		0177545		old 16-bit-int little-endian archive
196b6cee71dSXin LI>2	string		__.SYMDEF	random library
197b6cee71dSXin LI0	beshort		0177545		old 16-bit-int big-endian archive
198b6cee71dSXin LI>2	string		__.SYMDEF	random library
199b6cee71dSXin LI0	lelong		0177545		old 32-bit-int little-endian archive
200b6cee71dSXin LI>4	string		__.SYMDEF	random library
201b6cee71dSXin LI0	belong		0177545		old 32-bit-int big-endian archive
202b6cee71dSXin LI>4	string		__.SYMDEF	random library
203b6cee71dSXin LI
204b6cee71dSXin LI#
205b6cee71dSXin LI# From "pdp" (but why a 4-byte quantity?)
206b6cee71dSXin LI#
207b6cee71dSXin LI0	lelong		0x39bed		PDP-11 old archive
208b6cee71dSXin LI0	lelong		0x39bee		PDP-11 4.0 archive
209b6cee71dSXin LI
210b6cee71dSXin LI#
211b6cee71dSXin LI# XXX - what flavor of APL used this, and was it a variant of
212b6cee71dSXin LI# some ar archive format?  It's similar to, but not the same
213b6cee71dSXin LI# as, the APL workspace magic numbers in pdp.
214b6cee71dSXin LI#
215b6cee71dSXin LI0	long		0100554		apl workspace
216b6cee71dSXin LI
217b6cee71dSXin LI#
218b6cee71dSXin LI# System V Release 1 portable(?) archive format.
219b6cee71dSXin LI#
220b6cee71dSXin LI0	string		=<ar>		System V Release 1 ar archive
221b6cee71dSXin LI!:mime	application/x-archive
222b6cee71dSXin LI
223b6cee71dSXin LI#
224b6cee71dSXin LI# Debian package; it's in the portable archive format, and needs to go
225b6cee71dSXin LI# before the entry for regular portable archives, as it's recognized as
226b6cee71dSXin LI# a portable archive whose first member has a name beginning with
227b6cee71dSXin LI# "debian".
228b6cee71dSXin LI#
22948c779cdSXin LI# Update: Joerg Jenderek
23048c779cdSXin LI# URL: https://en.wikipedia.org/wiki/Deb_(file_format)
231b6cee71dSXin LI0	string		=!<arch>\ndebian
23248c779cdSXin LI# https://manpages.debian.org/testing/dpkg/dpkg-split.1.en.html
23348c779cdSXin LI>14	string		-split	part of multipart Debian package
234b6cee71dSXin LI!:mime	application/vnd.debian.binary-package
23548c779cdSXin LI# udeb is used for stripped down deb file
23648c779cdSXin LI!:ext	deb/udeb
23748c779cdSXin LI>14	string		-binary	Debian binary package
238b6cee71dSXin LI!:mime	application/vnd.debian.binary-package
23948c779cdSXin LI!:ext	deb/udeb
24048c779cdSXin LI# This should not happen
24148c779cdSXin LI>14	default		x	Unknown Debian package
24248c779cdSXin LI# NL terminated version; for most Debian cases this is 2.0 or 2.1 for splitted
243b6cee71dSXin LI>68	string		>\0		(format %s)
24448c779cdSXin LI#>68	string		!2.0\n
24548c779cdSXin LI#>>68	string		x		(format %.3s)
24648c779cdSXin LI>68	string		=2.0\n
24748c779cdSXin LI# 2nd archive name=control archive name like control.tar.gz or control.tar.xz
24848c779cdSXin LI>>72	string		>\0		\b, with %.14s
24948c779cdSXin LI# look for 3rd archive name=data archive name like data.tar.{gz,xz,bz2,lzma}
25048c779cdSXin LI>>0	search/0x93e4f	data.tar.	\b, data compression
25148c779cdSXin LI# the above line only works if FILE_BYTES_MAX in ../../src/file.h is raised
25248c779cdSXin LI# for example like libreoffice-dev-doc_1%3a5.2.7-1+rpi1+deb9u3_all.deb
25348c779cdSXin LI>>>&0	string		x		%.4s
25448c779cdSXin LI# splitted debian package case
25548c779cdSXin LI>68	string		=2.1\n
25648c779cdSXin LI# dpkg-1.18.25/dpkg-split/info.c
25748c779cdSXin LI# NL terminated ASCII package name like ckermit
25848c779cdSXin LI>>&0	string		x		\b, %s
25948c779cdSXin LI# NL terminated package version like 302-5.3
26048c779cdSXin LI>>>&1	string		x		%s
26148c779cdSXin LI# NL terminated MD5 checksum
26248c779cdSXin LI>>>>&1	string		x		\b, MD5 %s
26348c779cdSXin LI# NL terminated original package length
26448c779cdSXin LI>>>>>&1	string		x		\b, unsplitted size %s
26548c779cdSXin LI# NL terminated part length
266*d38c30c0SXin LI>>>>>>&1	string	x		\b, part length %s
26748c779cdSXin LI# NL terminated package part like n/m
26848c779cdSXin LI>>>>>>>&1	string	x		\b, part %s
26948c779cdSXin LI# NL terminated package architecture like armhf since dpkg 1.16.1 or later
27048c779cdSXin LI>>>>>>>>&1	string	x		\b, %s
271b6cee71dSXin LI
272b6cee71dSXin LI#
273b6cee71dSXin LI# MIPS archive; they're in the portable archive format, and need to go
274b6cee71dSXin LI# before the entry for regular portable archives, as it's recognized as
275b6cee71dSXin LI# a portable archive whose first member has a name beginning with
276b6cee71dSXin LI# "__________E".
277b6cee71dSXin LI#
278b6cee71dSXin LI0	string	=!<arch>\n__________E	MIPS archive
279b6cee71dSXin LI!:mime	application/x-archive
280b6cee71dSXin LI>20	string	U			with MIPS Ucode members
281b6cee71dSXin LI>21	string	L			with MIPSEL members
282b6cee71dSXin LI>21	string	B			with MIPSEB members
283b6cee71dSXin LI>19	string	L			and an EL hash table
284b6cee71dSXin LI>19	string	B			and an EB hash table
285b6cee71dSXin LI>22	string	X			-- out of date
286b6cee71dSXin LI
287b6cee71dSXin LI#
288b6cee71dSXin LI# BSD/SVR2-and-later portable archive formats.
289b6cee71dSXin LI#
29048c779cdSXin LI# Update: Joerg Jenderek
29148c779cdSXin LI# URL:		http://fileformats.archiveteam.org/wiki/AR
29248c779cdSXin LI# Reference:	https://www.unix.com/man-page/opensolaris/3HEAD/ar.h/
29348c779cdSXin LI# Note:		Mach-O universal binary in ./cafebabe is dependent
29448c779cdSXin LI# TODO:		unify current ar archive, MIPS archive, Debian package
29548c779cdSXin LI#		distinguish BSD, SVR; 32, 64 bit; HP from other 32-bit SVR;
29648c779cdSXin LI#		*.ar packages from *.a libraries. handle empty archive
2972dc4dbb9SEitan Adler0	string		=!<arch>\n		current ar archive
29848c779cdSXin LI# print first and possibly second ar_name[16] for debugging purpose
29948c779cdSXin LI#>8			string	x	\b, 1st "%.16s"
30048c779cdSXin LI#>68			string	x	\b, 2nd "%.16s"
301b6cee71dSXin LI!:mime	application/x-archive
30248c779cdSXin LI# a in most case for libraries; lib for Microsoft libraries; ar else cases
30348c779cdSXin LI!:ext	a/lib/ar
304b6cee71dSXin LI>8	string		__.SYMDEF	random library
30548c779cdSXin LI# first member with long marked name __.SYMDEF SORTED implies BSD library
306b6cee71dSXin LI>68	string		__.SYMDEF\ SORTED	random library
30748c779cdSXin LI# Reference: https://parisc.wiki.kernel.org/images-parisc/b/b2/Rad_11_0_32.pdf
30848c779cdSXin LI# "archive file" entry moved from ./hp
30948c779cdSXin LI# LST header system_id 0210h~PA-RISC 1.1,... identifies the target architecture
31048c779cdSXin LI# LST header a_magic 0619h~relocatable library
31148c779cdSXin LI>68	belong 		0x020b0619	- PA-RISC1.0 relocatable library
31248c779cdSXin LI>68	belong	 	0x02100619	- PA-RISC1.1 relocatable library
31348c779cdSXin LI>68	belong 		0x02110619	- PA-RISC1.2 relocatable library
31448c779cdSXin LI>68	belong 		0x02140619	- PA-RISC2.0 relocatable library
31548c779cdSXin LI#EOF for common ar archives
316b6cee71dSXin LI
317b6cee71dSXin LI#
318b6cee71dSXin LI# "Thin" archive, as can be produced by GNU ar.
319b6cee71dSXin LI#
320b6cee71dSXin LI0	string		=!<thin>\n	thin archive with
321b6cee71dSXin LI>68	belong		0		no symbol entries
322b6cee71dSXin LI>68	belong		1		%d symbol entry
323b6cee71dSXin LI>68	belong		>1		%d symbol entries
324b6cee71dSXin LI
32548c779cdSXin LI0	search/1	-h-		Software Tools format archive text
32648c779cdSXin LI
327b6cee71dSXin LI# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
328b6cee71dSXin LI#
329b6cee71dSXin LI# The first byte is the magic (0x1a), byte 2 is the compression type for
330b6cee71dSXin LI# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
331b6cee71dSXin LI# filename of the first file (null terminated).  Since some types collide
332b6cee71dSXin LI# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
333b6cee71dSXin LI# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%).  0x01 collides with terminfo.
334b6cee71dSXin LI0	lelong&0x8080ffff	0x0000081a	ARC archive data, dynamic LZW
335b6cee71dSXin LI!:mime	application/x-arc
336b6cee71dSXin LI0	lelong&0x8080ffff	0x0000091a	ARC archive data, squashed
337b6cee71dSXin LI!:mime	application/x-arc
338b6cee71dSXin LI0	lelong&0x8080ffff	0x0000021a	ARC archive data, uncompressed
339b6cee71dSXin LI!:mime	application/x-arc
340b6cee71dSXin LI0	lelong&0x8080ffff	0x0000031a	ARC archive data, packed
341b6cee71dSXin LI!:mime	application/x-arc
342b6cee71dSXin LI0	lelong&0x8080ffff	0x0000041a	ARC archive data, squeezed
343b6cee71dSXin LI!:mime	application/x-arc
344b6cee71dSXin LI0	lelong&0x8080ffff	0x0000061a	ARC archive data, crunched
345b6cee71dSXin LI!:mime	application/x-arc
346b6cee71dSXin LI# [JW] stuff taken from idarc, obviously ARC successors:
347b6cee71dSXin LI0	lelong&0x8080ffff	0x00000a1a	PAK archive data
348b6cee71dSXin LI!:mime	application/x-arc
349b6cee71dSXin LI0	lelong&0x8080ffff	0x0000141a	ARC+ archive data
350b6cee71dSXin LI!:mime	application/x-arc
351b6cee71dSXin LI0	lelong&0x8080ffff	0x0000481a	HYP archive data
352b6cee71dSXin LI!:mime	application/x-arc
353b6cee71dSXin LI
354b6cee71dSXin LI# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)
355b6cee71dSXin LI# I can't create either SPARK or ArcFS archives so I have not tested this stuff
356b6cee71dSXin LI# [GRR:  the original entries collide with ARC, above; replaced with combined
357b6cee71dSXin LI#  version (not tested)]
358b6cee71dSXin LI#0	byte		0x1a		RISC OS archive (spark format)
359b6cee71dSXin LI0	string		\032archive	RISC OS archive (ArcFS format)
360b6cee71dSXin LI0       string          Archive\000     RISC OS archive (ArcFS format)
361b6cee71dSXin LI
362b6cee71dSXin LI# All these were taken from idarc, many could not be verified. Unfortunately,
363b6cee71dSXin LI# there were many low-quality sigs, i.e. easy to trigger false positives.
364b6cee71dSXin LI# Please notify me of any real-world fishy/ambiguous signatures and I'll try
365b6cee71dSXin LI# to get my hands on the actual archiver and see if I find something better. [JW]
366b6cee71dSXin LI# probably many can be enhanced by finding some 0-byte or control char near the start
367b6cee71dSXin LI
368b6cee71dSXin LI# idarc calls this Crush/Uncompressed... *shrug*
369b6cee71dSXin LI0	string	CRUSH Crush archive data
370b6cee71dSXin LI# Squeeze It (.sqz)
371b6cee71dSXin LI0	string	HLSQZ Squeeze It archive data
372b6cee71dSXin LI# SQWEZ
373b6cee71dSXin LI0	string	SQWEZ SQWEZ archive data
374b6cee71dSXin LI# HPack (.hpk)
375b6cee71dSXin LI0	string	HPAK HPack archive data
376b6cee71dSXin LI# HAP
377b6cee71dSXin LI0	string	\x91\x33HF HAP archive data
378b6cee71dSXin LI# MD/MDCD
379b6cee71dSXin LI0	string	MDmd MDCD archive data
380b6cee71dSXin LI# LIM
381b6cee71dSXin LI0	string	LIM\x1a LIM archive data
382b6cee71dSXin LI# SAR
383b6cee71dSXin LI3	string	LH5 SAR archive data
384b6cee71dSXin LI# BSArc/BS2
385b6cee71dSXin LI0	string	\212\3SB\020\0	BSArc/BS2 archive data
386b6cee71dSXin LI# Bethesda Softworks Archive (Oblivion)
387b6cee71dSXin LI0	string	BSA\0 		BSArc archive data
388b6cee71dSXin LI>4	lelong	x		version %d
389b6cee71dSXin LI# MAR
390b6cee71dSXin LI2	string	=-ah MAR archive data
391b6cee71dSXin LI# ACB
392b6cee71dSXin LI#0	belong&0x00f800ff	0x00800000 ACB archive data
393b6cee71dSXin LI# CPZ
394b6cee71dSXin LI# TODO, this is what idarc says: 0	string	\0\0\0 CPZ archive data
395b6cee71dSXin LI# JRC
396b6cee71dSXin LI0	string	JRchive JRC archive data
397b6cee71dSXin LI# Quantum
398b6cee71dSXin LI0	string	DS\0 Quantum archive data
399b6cee71dSXin LI# ReSOF
400b6cee71dSXin LI0	string	PK\3\6 ReSOF archive data
401b6cee71dSXin LI# QuArk
402b6cee71dSXin LI0	string	7\4 QuArk archive data
403b6cee71dSXin LI# YAC
404b6cee71dSXin LI14	string	YC YAC archive data
405b6cee71dSXin LI# X1
406b6cee71dSXin LI0	string	X1 X1 archive data
407b6cee71dSXin LI0	string	XhDr X1 archive data
408b6cee71dSXin LI# CDC Codec (.dqt)
409b6cee71dSXin LI0	belong&0xffffe000	0x76ff2000 CDC Codec archive data
410b6cee71dSXin LI# AMGC
411b6cee71dSXin LI0	string	\xad6" AMGC archive data
412b6cee71dSXin LI# NuLIB
413b6cee71dSXin LI0	string	N\xc3\xb5F\xc3\xa9lx\xc3\xa5 NuLIB archive data
414b6cee71dSXin LI# PakLeo
415b6cee71dSXin LI0	string	LEOLZW PAKLeo archive data
416b6cee71dSXin LI# ChArc
417b6cee71dSXin LI0	string	SChF ChArc archive data
418b6cee71dSXin LI# PSA
419b6cee71dSXin LI0	string	PSA PSA archive data
420b6cee71dSXin LI# CrossePAC
421b6cee71dSXin LI0	string	DSIGDCC CrossePAC archive data
422b6cee71dSXin LI# Freeze
423b6cee71dSXin LI0	string	\x1f\x9f\x4a\x10\x0a Freeze archive data
424b6cee71dSXin LI# KBoom
425b6cee71dSXin LI0	string	\xc2\xa8MP\xc2\xa8 KBoom archive data
426b6cee71dSXin LI# NSQ, must go after CDC Codec
427b6cee71dSXin LI0	string	\x76\xff NSQ archive data
428b6cee71dSXin LI# DPA
429b6cee71dSXin LI0	string	Dirk\ Paehl DPA archive data
430b6cee71dSXin LI# BA
431b6cee71dSXin LI# TODO: idarc says "bytes 0-2 == bytes 3-5"
432b6cee71dSXin LI# TTComp
4333e41d09dSXin LI# URL: http://fileformats.archiveteam.org/wiki/TTComp_archive
4343e41d09dSXin LI# Update: Joerg Jenderek
4353e41d09dSXin LI# GRR: line below is too general as it matches also Panorama database "TCDB 2003-10 demo.pan", others
4363e41d09dSXin LI0	string	\0\6
4373e41d09dSXin LI# look for first keyword of Panorama database *.pan
4383e41d09dSXin LI>12	search/261	DESIGN
4393e41d09dSXin LI# skip keyword with low entropy
4403e41d09dSXin LI>12	default		x	TTComp archive, binary, 4K dictionary
4413e41d09dSXin LI# (version 5.25) labeled the above entry as "TTComp archive data"
442*d38c30c0SXin LI# From:		Joerg Jenderek
443*d38c30c0SXin LI# URL:		https://wiki.68kmla.org/DiskCopy_4.2_format_specification
444*d38c30c0SXin LI# reference:	http://nulib.com/library/FTN.e00005.htm
445*d38c30c0SXin LI0x52	ubeshort	0x0100
446*d38c30c0SXin LI# test for disk size equal or above 400k
447*d38c30c0SXin LI>0x40	ubelong		>409599	Apple DiskCopy 4.2 image
448*d38c30c0SXin LI#!:mime	application/octet-stream
449*d38c30c0SXin LI!:apple	dCpydImg
450*d38c30c0SXin LI!:ext	image/dc42
451*d38c30c0SXin LI# image pascal name padded with NULs like Microsoft Mail
452*d38c30c0SXin LI>>00	pstring/B	x	%s
453*d38c30c0SXin LI# data size in bytes like 409600
454*d38c30c0SXin LI>>0x40	ubelong		x	\b, %u bytes
455*d38c30c0SXin LI# tag size in bytes
456*d38c30c0SXin LI>>0x44	ubelong		>0	\b, 0x%x tag size
457*d38c30c0SXin LI# data checksum
458*d38c30c0SXin LI#>>0x48	ubelong		x	\b, 0x%x checksum
459*d38c30c0SXin LI# tag checksum
460*d38c30c0SXin LI#>>0x4c	ubelong		x	\b, 0x%x tag checksum
461*d38c30c0SXin LI# disk encoding
462*d38c30c0SXin LI>>0x50	ubyte		0	\b, GCR CLV ssdd (400k)
463*d38c30c0SXin LI>>0x50	ubyte		1	\b, GCR CLV dsdd (800k)
464*d38c30c0SXin LI>>0x50	ubyte		2	\b, MFM CAV dsdd (720k)
465*d38c30c0SXin LI>>0x50	ubyte		3	\b, MFM CAV dshd (1440k)
466*d38c30c0SXin LI>>0x50	ubyte		>3	\b, 0x%x encoding
467*d38c30c0SXin LI# format byte
468*d38c30c0SXin LI>>0x51	ubyte		x	\b, 0x%x format
469*d38c30c0SXin LI#>>0x54	ubequad		x	\b, data 0x%16.16llx
470b6cee71dSXin LI# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?
471b6cee71dSXin LI0	string	ESP ESP archive data
472b6cee71dSXin LI# ZPack
473b6cee71dSXin LI0	string	\1ZPK\1 ZPack archive data
474b6cee71dSXin LI# Sky
475b6cee71dSXin LI0	string	\xbc\x40 Sky archive data
476b6cee71dSXin LI# UFA
477b6cee71dSXin LI0	string	UFA UFA archive data
478b6cee71dSXin LI# Dry
479b6cee71dSXin LI0	string	=-H2O DRY archive data
480b6cee71dSXin LI# FoxSQZ
481b6cee71dSXin LI0	string	FOXSQZ FoxSQZ archive data
482b6cee71dSXin LI# AR7
483b6cee71dSXin LI0	string	,AR7 AR7 archive data
484b6cee71dSXin LI# PPMZ
485b6cee71dSXin LI0	string	PPMZ PPMZ archive data
486b6cee71dSXin LI# MS Compress
48758a0f0d0SEitan Adler# Update: Joerg Jenderek
48858a0f0d0SEitan Adler# URL: http://fileformats.archiveteam.org/wiki/MS-DOS_installation_compression
48958a0f0d0SEitan Adler# Reference: https://hwiegman.home.xs4all.nl/fileformats/compress/szdd_kwaj_format.html
49058a0f0d0SEitan Adler# Note: use correct version of extracting tool like EXPAND, UNPACK, DECOMP or 7Z
49158a0f0d0SEitan Adler4	string	\x88\xf0\x27
49258a0f0d0SEitan Adler#		KWAJ variant
49358a0f0d0SEitan Adler>0	string	KWAJ		MS Compress archive data, KWAJ variant
49458a0f0d0SEitan Adler!:mime	application/x-ms-compress-kwaj
49558a0f0d0SEitan Adler# extension not working in version 5.32
49658a0f0d0SEitan Adler# magic/Magdir/archive, 284: Warning: EXTENSION type ` ??_' has bad char '?'
49758a0f0d0SEitan Adler# file: line 284: Bad magic entry '   ??_'
49858a0f0d0SEitan Adler!:ext	??_
49958a0f0d0SEitan Adler# compression method (0-4)
50058a0f0d0SEitan Adler>>8	uleshort	x	\b, %u method
50158a0f0d0SEitan Adler# offset of compressed data
50258a0f0d0SEitan Adler>>10	uleshort	x	\b, 0x%x offset
50358a0f0d0SEitan Adler#>>(10.s)	uleshort	x
50458a0f0d0SEitan Adler#>>>&-6		string	x	\b, TEST extension %-.3s
50558a0f0d0SEitan Adler# header flags to mark header extensions
50658a0f0d0SEitan Adler>>12	uleshort	>0	\b, 0x%x flags
50758a0f0d0SEitan Adler# 4 bytes: decompressed length of file
50858a0f0d0SEitan Adler>>12	uleshort	&0x01
50958a0f0d0SEitan Adler>>>14	ulelong		x	\b, original size: %u bytes
51058a0f0d0SEitan Adler# 2 bytes: unknown purpose
51158a0f0d0SEitan Adler# 2 bytes: length of unknown data + mentioned bytes
51258a0f0d0SEitan Adler# 1-9 bytes: null-terminated file name
51358a0f0d0SEitan Adler# 1-4 bytes: null-terminated file extension
51458a0f0d0SEitan Adler>>12	uleshort	&0x08
51558a0f0d0SEitan Adler>>>12	uleshort				^0x01
51658a0f0d0SEitan Adler>>>>12		uleshort			^0x02
51758a0f0d0SEitan Adler>>>>>12			uleshort		^0x04
51858a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
51958a0f0d0SEitan Adler>>>>>>>14				string	x	\b, %-.8s
52058a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
52158a0f0d0SEitan Adler>>>>>>>14				string	x	\b, %-.8s
52258a0f0d0SEitan Adler>>>>>>>>&1				string	x	\b.%-.3s
52358a0f0d0SEitan Adler>>>>>12			uleshort		&0x04
52458a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
52558a0f0d0SEitan Adler>>>>>>>(14.s)			uleshort	x
52658a0f0d0SEitan Adler>>>>>>>>&14				string	x	\b, %-.8s
52758a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
52858a0f0d0SEitan Adler>>>>>>>(14.s)			uleshort	x
52958a0f0d0SEitan Adler>>>>>>>>&14				string	x	\b, %-.8s
53058a0f0d0SEitan Adler>>>>>>>>>&1				string	x	\b.%-.3s
53158a0f0d0SEitan Adler>>>>12		uleshort			&0x02
53258a0f0d0SEitan Adler>>>>>12			uleshort		^0x04
53358a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
53458a0f0d0SEitan Adler>>>>>>>16				string	x	\b, %-.8s
53558a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
53658a0f0d0SEitan Adler>>>>>>>16				string	x	\b, %-.8s
53758a0f0d0SEitan Adler>>>>>>>>&1				string	x	\b.%-.3s
53858a0f0d0SEitan Adler>>>>>12			uleshort		&0x04
53958a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
54058a0f0d0SEitan Adler>>>>>>>(16.s)			uleshort	x
54158a0f0d0SEitan Adler>>>>>>>>&16				string	x	\b, %-.8s
54258a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
54358a0f0d0SEitan Adler>>>>>>>(16.s)			uleshort	x
54458a0f0d0SEitan Adler>>>>>>>&16				string	x	%-.8s
54558a0f0d0SEitan Adler>>>>>>>>&1				string	x	\b.%-.3s
54658a0f0d0SEitan Adler>>>12	uleshort				&0x01
54758a0f0d0SEitan Adler>>>>12		uleshort			^0x02
54858a0f0d0SEitan Adler>>>>>12			uleshort		^0x04
54958a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
55058a0f0d0SEitan Adler>>>>>>>18				string	x	\b, %-.8s
55158a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
55258a0f0d0SEitan Adler>>>>>>>18				string	x	\b, %-.8s
55358a0f0d0SEitan Adler>>>>>>>>&1				string	x	\b.%-.3s
55458a0f0d0SEitan Adler>>>>>12			uleshort		&0x04
55558a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
55658a0f0d0SEitan Adler>>>>>>>(18.s)			uleshort	x
55758a0f0d0SEitan Adler>>>>>>>>&18				string	x	\b, %-.8s
55858a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
55958a0f0d0SEitan Adler>>>>>>>(18.s)			uleshort	x
56058a0f0d0SEitan Adler>>>>>>>>&18				string	x	\b, %-.8s
56158a0f0d0SEitan Adler>>>>>>>>>&1				string	x	\b.%-.3s
56258a0f0d0SEitan Adler>>>>12		uleshort			&0x02
56358a0f0d0SEitan Adler>>>>>12			uleshort		^0x04
56458a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
56558a0f0d0SEitan Adler>>>>>>>20				string	x	\b, %-.8s
56658a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
56758a0f0d0SEitan Adler>>>>>>>20				string	x	\b, %-.8s
56858a0f0d0SEitan Adler>>>>>>>>&1				string	x	\b.%-.3s
56958a0f0d0SEitan Adler>>>>>12			uleshort		&0x04
57058a0f0d0SEitan Adler>>>>>>12			uleshort	^0x10
57158a0f0d0SEitan Adler>>>>>>>(20.s)			uleshort	x
57258a0f0d0SEitan Adler>>>>>>>>&20				string	x	\b, %-.8s
57358a0f0d0SEitan Adler>>>>>>12			uleshort	&0x10
57458a0f0d0SEitan Adler>>>>>>>(20.s)			uleshort	x
57558a0f0d0SEitan Adler>>>>>>>>&20				string	x	\b, %-.8s
57658a0f0d0SEitan Adler>>>>>>>>>&1				string	x	\b.%-.3s
57758a0f0d0SEitan Adler# 2 bytes: length of data + mentioned bytes
57858a0f0d0SEitan Adler#
57958a0f0d0SEitan Adler#		SZDD variant Haruhiko Okumura's LZSS or 7z type MsLZ
58058a0f0d0SEitan Adler>0	string	SZDD		MS Compress archive data, SZDD variant
58158a0f0d0SEitan Adler!:mime	application/x-ms-compress-szdd
58258a0f0d0SEitan Adler!:ext	??_
58358a0f0d0SEitan Adler# The character missing from the end of the filename (0=unknown)
58458a0f0d0SEitan Adler>>9	string	>\0		\b, %-.1s is last character of original name
58558a0f0d0SEitan Adler# https://www.betaarchive.com/forum/viewtopic.php?t=26161
58658a0f0d0SEitan Adler# Compression mode: "A" (0x41) found but sometimes "B" in Windows 3.1 builds 026 and 034e
58758a0f0d0SEitan Adler>>8	string	!A		\b, %-.1s method
58858a0f0d0SEitan Adler>>10	ulelong	>0		\b, original size: %u bytes
58958a0f0d0SEitan Adler#		QBasic SZDD variant
59058a0f0d0SEitan Adler3	string	\x88\xf0\x27
59158a0f0d0SEitan Adler>0	string	SZ\x20		MS Compress archive data, QBasic variant
59258a0f0d0SEitan Adler!:mime	application/x-ms-compress-sz
59358a0f0d0SEitan Adler!:ext	??$
59458a0f0d0SEitan Adler>>8	ulelong	>0		\b, original size: %u bytes
59558a0f0d0SEitan Adler
596b6cee71dSXin LI# MP3 (archiver, not lossy audio compression)
597b6cee71dSXin LI0	string	MP3\x1a MP3-Archiver archive data
598b6cee71dSXin LI# ZET
599b6cee71dSXin LI0	string	OZ\xc3\x9d ZET archive data
600b6cee71dSXin LI# TSComp
601b6cee71dSXin LI0	string	\x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data
602b6cee71dSXin LI# ARQ
603b6cee71dSXin LI0	string	gW\4\1 ARQ archive data
604b6cee71dSXin LI# Squash
605b6cee71dSXin LI3	string	OctSqu Squash archive data
606b6cee71dSXin LI# Terse
607b6cee71dSXin LI0	string	\5\1\1\0 Terse archive data
608b6cee71dSXin LI# PUCrunch
609b6cee71dSXin LI0	string	\x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data
610b6cee71dSXin LI# UHarc
611b6cee71dSXin LI0	string	UHA UHarc archive data
612b6cee71dSXin LI# ABComp
613b6cee71dSXin LI0	string	\2AB ABComp archive data
614b6cee71dSXin LI0	string	\3AB2 ABComp archive data
615b6cee71dSXin LI# CMP
616b6cee71dSXin LI0	string	CO\0 CMP archive data
617b6cee71dSXin LI# Splint
618b6cee71dSXin LI0	string	\x93\xb9\x06 Splint archive data
619b6cee71dSXin LI# InstallShield
620b6cee71dSXin LI0	string	\x13\x5d\x65\x8c InstallShield Z archive Data
621b6cee71dSXin LI# Gather
622b6cee71dSXin LI1	string	GTH Gather archive data
623b6cee71dSXin LI# BOA
624b6cee71dSXin LI0	string	BOA BOA archive data
625b6cee71dSXin LI# RAX
626b6cee71dSXin LI0	string	ULEB\xa RAX archive data
627b6cee71dSXin LI# Xtreme
628b6cee71dSXin LI0	string	ULEB\0 Xtreme archive data
629b6cee71dSXin LI# Pack Magic
630b6cee71dSXin LI0	string	@\xc3\xa2\1\0 Pack Magic archive data
631b6cee71dSXin LI# BTS
632b6cee71dSXin LI0	belong&0xfeffffff	0x1a034465 BTS archive data
633b6cee71dSXin LI# ELI 5750
634b6cee71dSXin LI0	string	Ora\  ELI 5750 archive data
635b6cee71dSXin LI# QFC
636b6cee71dSXin LI0	string	\x1aFC\x1a QFC archive data
637b6cee71dSXin LI0	string	\x1aQF\x1a QFC archive data
638b6cee71dSXin LI# PRO-PACK
639b6cee71dSXin LI0	string	RNC PRO-PACK archive data
640b6cee71dSXin LI# 777
641b6cee71dSXin LI0	string	777 777 archive data
642b6cee71dSXin LI# LZS221
643b6cee71dSXin LI0	string	sTaC LZS221 archive data
644b6cee71dSXin LI# HPA
645b6cee71dSXin LI0	string	HPA HPA archive data
646b6cee71dSXin LI# Arhangel
647b6cee71dSXin LI0	string	LG Arhangel archive data
648b6cee71dSXin LI# EXP1, uses bzip2
649b6cee71dSXin LI0	string	0123456789012345BZh EXP1 archive data
650b6cee71dSXin LI# IMP
651b6cee71dSXin LI0	string	IMP\xa IMP archive data
652b6cee71dSXin LI# NRV
653b6cee71dSXin LI0	string	\x00\x9E\x6E\x72\x76\xFF NRV archive data
654b6cee71dSXin LI# Squish
655b6cee71dSXin LI0	string	\x73\xb2\x90\xf4 Squish archive data
656b6cee71dSXin LI# Par
657b6cee71dSXin LI0	string	PHILIPP Par archive data
658b6cee71dSXin LI0	string	PAR Par archive data
659b6cee71dSXin LI# HIT
660b6cee71dSXin LI0	string	UB HIT archive data
661b6cee71dSXin LI# SBX
662b6cee71dSXin LI0	belong&0xfffff000	0x53423000 SBX archive data
663b6cee71dSXin LI# NaShrink
664b6cee71dSXin LI0	string	NSK NaShrink archive data
665b6cee71dSXin LI# SAPCAR
666b6cee71dSXin LI0	string	#\ CAR\ archive\ header SAPCAR archive data
667b6cee71dSXin LI0	string	CAR\ 2.00RG SAPCAR archive data
668b6cee71dSXin LI# Disintegrator
669b6cee71dSXin LI0	string	DST Disintegrator archive data
670b6cee71dSXin LI# ASD
671b6cee71dSXin LI0	string	ASD ASD archive data
672b6cee71dSXin LI# InstallShield CAB
673b6cee71dSXin LI0	string	ISc( InstallShield CAB
674b6cee71dSXin LI# TOP4
675b6cee71dSXin LI0	string	T4\x1a TOP4 archive data
676b6cee71dSXin LI# BatComp left out: sig looks like COM executable
677b6cee71dSXin LI# so TODO: get real 4dos batcomp file and find sig
678b6cee71dSXin LI# BlakHole
679b6cee71dSXin LI0	string	BH\5\7 BlakHole archive data
680b6cee71dSXin LI# BIX
681b6cee71dSXin LI0	string	BIX0 BIX archive data
682b6cee71dSXin LI# ChiefLZA
683b6cee71dSXin LI0	string	ChfLZ ChiefLZA archive data
684b6cee71dSXin LI# Blink
685b6cee71dSXin LI0	string	Blink Blink archive data
686b6cee71dSXin LI# Logitech Compress
687b6cee71dSXin LI0	string	\xda\xfa Logitech Compress archive data
688b6cee71dSXin LI# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE)
689b6cee71dSXin LI1	string	(C)\ STEPANYUK ARS-Sfx archive data
690b6cee71dSXin LI# AKT/AKT32
691b6cee71dSXin LI0	string	AKT32 AKT32 archive data
692b6cee71dSXin LI0	string	AKT AKT archive data
693b6cee71dSXin LI# NPack
694b6cee71dSXin LI0	string	MSTSM NPack archive data
695b6cee71dSXin LI# PFT
696b6cee71dSXin LI0	string	\0\x50\0\x14 PFT archive data
697b6cee71dSXin LI# SemOne
698b6cee71dSXin LI0	string	SEM SemOne archive data
699b6cee71dSXin LI# PPMD
700b6cee71dSXin LI0	string	\x8f\xaf\xac\x84 PPMD archive data
701b6cee71dSXin LI# FIZ
702b6cee71dSXin LI0	string	FIZ FIZ archive data
703b6cee71dSXin LI# MSXiE
704b6cee71dSXin LI0	belong&0xfffff0f0	0x4d530000 MSXiE archive data
705b6cee71dSXin LI# DeepFreezer
706b6cee71dSXin LI0	belong&0xfffffff0	0x797a3030 DeepFreezer archive data
707b6cee71dSXin LI# DC
708b6cee71dSXin LI0	string	=<DC- DC archive data
709b6cee71dSXin LI# TPac
710b6cee71dSXin LI0	string	\4TPAC\3 TPac archive data
711b6cee71dSXin LI# Ai
712b6cee71dSXin LI0	string	Ai\1\1\0 Ai archive data
713b6cee71dSXin LI0	string	Ai\1\0\0 Ai archive data
714b6cee71dSXin LI# Ai32
715b6cee71dSXin LI0	string	Ai\2\0 Ai32 archive data
716b6cee71dSXin LI0	string	Ai\2\1 Ai32 archive data
717b6cee71dSXin LI# SBC
718b6cee71dSXin LI0	string	SBC SBC archive data
719b6cee71dSXin LI# Ybs
720b6cee71dSXin LI0	string	YBS Ybs archive data
721b6cee71dSXin LI# DitPack
722b6cee71dSXin LI0	string	\x9e\0\0 DitPack archive data
723b6cee71dSXin LI# DMS
724b6cee71dSXin LI0	string	DMS! DMS archive data
725b6cee71dSXin LI# EPC
726b6cee71dSXin LI0	string	\x8f\xaf\xac\x8c EPC archive data
727b6cee71dSXin LI# VSARC
728b6cee71dSXin LI0	string	VS\x1a VSARC archive data
729b6cee71dSXin LI# PDZ
730b6cee71dSXin LI0	string	PDZ PDZ archive data
731b6cee71dSXin LI# ReDuq
732b6cee71dSXin LI0	string	rdqx ReDuq archive data
733b6cee71dSXin LI# GCA
734b6cee71dSXin LI0	string	GCAX GCA archive data
735b6cee71dSXin LI# PPMN
736b6cee71dSXin LI0	string	pN PPMN archive data
737b6cee71dSXin LI# WinImage
738b6cee71dSXin LI3	string	WINIMAGE WinImage archive data
739b6cee71dSXin LI# Compressia
740b6cee71dSXin LI0	string	CMP0CMP Compressia archive data
741b6cee71dSXin LI# UHBC
742b6cee71dSXin LI0	string	UHB UHBC archive data
743b6cee71dSXin LI# WinHKI
744b6cee71dSXin LI0	string	\x61\x5C\x04\x05 WinHKI archive data
745b6cee71dSXin LI# WWPack data file
746b6cee71dSXin LI0	string	WWP WWPack archive data
747b6cee71dSXin LI# BSN (BSA, PTS-DOS)
748b6cee71dSXin LI0	string	\xffBSG BSN archive data
749b6cee71dSXin LI1	string	\xffBSG BSN archive data
750b6cee71dSXin LI3	string	\xffBSG BSN archive data
751b6cee71dSXin LI1	string	\0\xae\2 BSN archive data
752b6cee71dSXin LI1	string	\0\xae\3 BSN archive data
753b6cee71dSXin LI1	string	\0\xae\7 BSN archive data
754b6cee71dSXin LI# AIN
755b6cee71dSXin LI0	string	\x33\x18 AIN archive data
756b6cee71dSXin LI0	string	\x33\x17 AIN archive data
7579ce06829SXin LI# XPA32 test moved and merged with XPA by Joerg Jenderek at Sep 2015
758b6cee71dSXin LI# SZip (TODO: doesn't catch all versions)
759b6cee71dSXin LI0	string	SZ\x0a\4 SZip archive data
760b6cee71dSXin LI# XPack DiskImage
7619ce06829SXin LI# *.XDI updated by Joerg Jenderek Sep 2015
7629ce06829SXin LI# ftp://ftp.sac.sk/pub/sac/pack/0index.txt
7639ce06829SXin LI# GRR: this test is still too general as it catches also text files starting with jm
7649ce06829SXin LI0	string	jm
7659ce06829SXin LI# only found examples with this additional characteristic 2 bytes
7669ce06829SXin LI>2	string	\x2\x4	Xpack DiskImage archive data
7679ce06829SXin LI#!:ext xdi
768b6cee71dSXin LI# XPack Data
7699ce06829SXin LI# *.xpa updated by Joerg Jenderek Sep 2015
7709ce06829SXin LI# ftp://ftp.elf.stuba.sk/pub/pc/pack/
7719ce06829SXin LI0	string	xpa	XPA
7729ce06829SXin LI!:ext	xpa
7739ce06829SXin LI# XPA32
7749ce06829SXin LI# ftp://ftp.elf.stuba.sk/pub/pc/pack/xpa32.zip
7759ce06829SXin LI# created by XPA32.EXE version 1.0.2 for Windows
7769ce06829SXin LI>0	string	xpa\0\1 \b32 archive data
7779ce06829SXin LI# created by XPACK.COM version 1.67m or 1.67r with short 0x1800
7789ce06829SXin LI>3	ubeshort	!0x0001	\bck archive data
779b6cee71dSXin LI# XPack Single Data
7809ce06829SXin LI# changed by Joerg Jenderek Sep 2015 back to like in version 5.12
7819ce06829SXin LI# letter 'I'+ acute accent is equivalent to \xcd
7829ce06829SXin LI0	string	\xcd\ jm	Xpack single archive data
7839ce06829SXin LI#!:mime	application/x-xpa-compressed
7849ce06829SXin LI!:ext xpa
785b6cee71dSXin LI
786b6cee71dSXin LI# TODO: missing due to unknown magic/magic at end of file:
787b6cee71dSXin LI#DWC
788b6cee71dSXin LI#ARG
789b6cee71dSXin LI#ZAR
790b6cee71dSXin LI#PC/3270
791b6cee71dSXin LI#InstallIt
792b6cee71dSXin LI#RKive
793b6cee71dSXin LI#RK
794b6cee71dSXin LI#XPack Diskimage
795b6cee71dSXin LI
796b6cee71dSXin LI# These were inspired by idarc, but actually verified
797b6cee71dSXin LI# Dzip archiver (.dz)
79858a0f0d0SEitan Adler# Update: Joerg Jenderek
79958a0f0d0SEitan Adler# URL: http://speeddemosarchive.com/dzip/
80058a0f0d0SEitan Adler# reference: http://speeddemosarchive.com/dzip/dz29src.zip/main.c
80158a0f0d0SEitan Adler# GRR: line below is too general as it matches also ASCII texts like Doszip commander help dz.txt
80258a0f0d0SEitan Adler0	string	DZ
80358a0f0d0SEitan Adler# latest version is 2.9 dated 7 may 2003
80458a0f0d0SEitan Adler>2	byte	<4 Dzip archive data
80558a0f0d0SEitan Adler!:mime	application/x-dzip
80658a0f0d0SEitan Adler!:ext	dz
80758a0f0d0SEitan Adler>>2	byte	x \b, version %i
80858a0f0d0SEitan Adler>>3	byte	x \b.%i
80958a0f0d0SEitan Adler>>4	ulelong	x \b, offset 0x%x
81058a0f0d0SEitan Adler>>8	ulelong	x \b, %u files
811b6cee71dSXin LI# ZZip archiver (.zz)
812b6cee71dSXin LI0	string	ZZ\ \0\0 ZZip archive data
813b6cee71dSXin LI0	string	ZZ0 ZZip archive data
814b6cee71dSXin LI# PAQ archiver (.paq)
815b6cee71dSXin LI0	string	\xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data
816b6cee71dSXin LI0	string	PAQ PAQ archive data
817b6cee71dSXin LI>3	byte&0xf0	0x30
818b6cee71dSXin LI>>3	byte	x (v%c)
819b6cee71dSXin LI# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)
820b6cee71dSXin LI0xe	string	\x1aJar\x1b JAR (ARJ Software, Inc.) archive data
821b6cee71dSXin LI0	string	JARCS JAR (ARJ Software, Inc.) archive data
822b6cee71dSXin LI
823b6cee71dSXin LI# ARJ archiver (jason@jarthur.Claremont.EDU)
824b6cee71dSXin LI0	leshort		0xea60		ARJ archive data
825b6cee71dSXin LI!:mime	application/x-arj
826b6cee71dSXin LI>5	byte		x		\b, v%d,
827b6cee71dSXin LI>8	byte		&0x04		multi-volume,
828b6cee71dSXin LI>8	byte		&0x10		slash-switched,
829b6cee71dSXin LI>8	byte		&0x20		backup,
830b6cee71dSXin LI>34	string		x		original name: %s,
831b6cee71dSXin LI>7	byte		0		os: MS-DOS
832b6cee71dSXin LI>7	byte		1		os: PRIMOS
833b6cee71dSXin LI>7	byte		2		os: Unix
834b6cee71dSXin LI>7	byte		3		os: Amiga
835b6cee71dSXin LI>7	byte		4		os: Macintosh
836b6cee71dSXin LI>7	byte		5		os: OS/2
837b6cee71dSXin LI>7	byte		6		os: Apple ][ GS
838b6cee71dSXin LI>7	byte		7		os: Atari ST
839b6cee71dSXin LI>7	byte		8		os: NeXT
840b6cee71dSXin LI>7	byte		9		os: VAX/VMS
841b6cee71dSXin LI>3	byte		>0		%d]
842b6cee71dSXin LI# [JW] idarc says this is also possible
843b6cee71dSXin LI2	leshort		0xea60		ARJ archive data
844b6cee71dSXin LI
845b6cee71dSXin LI# HA archiver (Greg Roelofs, newt@uchicago.edu)
846b6cee71dSXin LI# This is a really bad format. A file containing HAWAII will match this...
847b6cee71dSXin LI#0	string		HA		HA archive data,
848b6cee71dSXin LI#>2	leshort		=1		1 file,
849b6cee71dSXin LI#>2	leshort		>1		%hu files,
850b6cee71dSXin LI#>4	byte&0x0f	=0		first is type CPY
851b6cee71dSXin LI#>4	byte&0x0f	=1		first is type ASC
852b6cee71dSXin LI#>4	byte&0x0f	=2		first is type HSC
853b6cee71dSXin LI#>4	byte&0x0f	=0x0e		first is type DIR
854b6cee71dSXin LI#>4	byte&0x0f	=0x0f		first is type SPECIAL
855b6cee71dSXin LI# suggestion: at least identify small archives (<1024 files)
856b6cee71dSXin LI0  belong&0xffff00fc 0x48410000 HA archive data
857b6cee71dSXin LI>2	leshort		=1		1 file,
858b6cee71dSXin LI>2	leshort		>1		%u files,
859b6cee71dSXin LI>4	byte&0x0f	=0		first is type CPY
860b6cee71dSXin LI>4	byte&0x0f	=1		first is type ASC
861b6cee71dSXin LI>4	byte&0x0f	=2		first is type HSC
862b6cee71dSXin LI>4	byte&0x0f	=0x0e		first is type DIR
863b6cee71dSXin LI>4	byte&0x0f	=0x0f		first is type SPECIAL
864b6cee71dSXin LI
865b6cee71dSXin LI# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
866b6cee71dSXin LI0	string		HPAK		HPACK archive data
867b6cee71dSXin LI
868b6cee71dSXin LI# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
869b6cee71dSXin LI0	string		\351,\001JAM\ 		JAM archive,
870b6cee71dSXin LI>7	string		>\0			version %.4s
871b6cee71dSXin LI>0x26	byte		=0x27			-
872b6cee71dSXin LI>>0x2b	string          >\0			label %.11s,
873b6cee71dSXin LI>>0x27	lelong		x			serial %08x,
874b6cee71dSXin LI>>0x36	string		>\0			fstype %.8s
875b6cee71dSXin LI
876b6cee71dSXin LI# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
8773e41d09dSXin LI# Update: Joerg Jenderek
8783e41d09dSXin LI# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
87948c779cdSXin LI# Reference: https://web.archive.org/web/20021005080911/http://www.osirusoft.com/joejared/lzhformat.html
8803e41d09dSXin LI#
8813e41d09dSXin LI#	check and display information of lharc (LHa,PMarc) file
8823e41d09dSXin LI0	name				lharc-file
8833e41d09dSXin LI# check 1st character of method id like -lz4- -lh5- or -pm2-
8843e41d09dSXin LI>2	string		-
8853e41d09dSXin LI# check 5th character of method id
8863e41d09dSXin LI>>6	string		-
8873e41d09dSXin LI# check header level 0 1 2 3
8883e41d09dSXin LI>>>20	ubyte		<4
8893e41d09dSXin LI# check 2nd, 3th and 4th character of method id
8903e41d09dSXin LI>>>>3	regex		\^(lh[0-9a-ex]|lz[s2-8]|pm[012]|pc1)		\b
8913e41d09dSXin LI!:mime	application/x-lzh-compressed
8923e41d09dSXin LI# creator type "LHA "
8933e41d09dSXin LI!:apple	????LHA
8943e41d09dSXin LI# display archive type name like "LHa/LZS archive data" or "LArc archive"
8953e41d09dSXin LI>>>>>2	string		-lz		\b
8963e41d09dSXin LI!:ext	lzs
8973e41d09dSXin LI# already known  -lzs- -lz4- -lz5- with old names
8983e41d09dSXin LI>>>>>>2	string	-lzs		LHa/LZS archive data
8993e41d09dSXin LI>>>>>>3	regex	\^lz[45]	LHarc 1.x archive data
9003e41d09dSXin LI# missing -lz?- with wikipedia names
9013e41d09dSXin LI>>>>>>3	regex	\^lz[2378]	LArc archive
9023e41d09dSXin LI# display archive type name like "LHa (2.x) archive data"
9033e41d09dSXin LI>>>>>2	string		-lh		\b
9043e41d09dSXin LI# already known -lh0- -lh1- -lh2- -lh3-  -lh4- -lh5- -lh6- -lh7- -lhd- variants with old names
9053e41d09dSXin LI>>>>>>3	regex		\^lh[01]	LHarc 1.x/ARX archive data
9063e41d09dSXin LI# LHice archiver use ".ICE" as name extension instead usual one ".lzh"
9073e41d09dSXin LI# FOOBAR archiver use ".foo" as name extension instead usual one
9083e41d09dSXin LI# "Florain Orjanov's and Olga Bachetska's ARchiver" not found at the moment
9093e41d09dSXin LI>>>>>>>2	string	-lh1		\b
9103e41d09dSXin LI!:ext lha/lzh/ice
9113e41d09dSXin LI>>>>>>3	regex		\^lh[23d]	LHa 2.x? archive data
9123e41d09dSXin LI>>>>>>3	regex		\^lh[7]		LHa (2.x)/LHark archive data
9133e41d09dSXin LI>>>>>>3	regex		\^lh[456]	LHa (2.x) archive data
9143e41d09dSXin LI>>>>>>>2	string	-lh5		\b
9153e41d09dSXin LI# https://en.wikipedia.org/wiki/BIOS
9163e41d09dSXin LI# Some mainboard BIOS like Award use LHa compression. So archives with unusal extension are found like
9173e41d09dSXin LI# bios.rom , kd7_v14.bin, 1010.004, ...
9183e41d09dSXin LI!:ext lha/lzh/rom/bin
9193e41d09dSXin LI# missing -lh?- variants (Joe Jared)
9203e41d09dSXin LI>>>>>>3	regex		\^lh[89a-ce]	LHa (Joe Jared) archive
9213e41d09dSXin LI# UNLHA32 2.67a
9223e41d09dSXin LI>>>>>>2	string		-lhx		LHa (UNLHA32) archive
9233e41d09dSXin LI# lha archives with standard file name extensions ".lha" ".lzh"
9243e41d09dSXin LI>>>>>>3	regex		!\^(lh1|lh5)	\b
9253e41d09dSXin LI!:ext lha/lzh
9263e41d09dSXin LI# this should not happen if all -lh variants are described
9273e41d09dSXin LI>>>>>>2	default		x		LHa (unknown) archive
9283e41d09dSXin LI#!:ext	lha
9293e41d09dSXin LI# PMarc
9303e41d09dSXin LI>>>>>3	regex		\^pm[012]	PMarc archive data
9313e41d09dSXin LI!:ext pma
9323e41d09dSXin LI# append method id without leading and trailing minus character
9333e41d09dSXin LI>>>>>3	string		x		[%3.3s]
9343e41d09dSXin LI>>>>>>0	use	lharc-header
9353e41d09dSXin LI#
9363e41d09dSXin LI#	check and display information of lharc header
9373e41d09dSXin LI0	name				lharc-header
9383e41d09dSXin LI# header size 0x4 , 0x1b-0x61
9393e41d09dSXin LI>0	ubyte		x
9403e41d09dSXin LI# compressed data size != compressed file size
9413e41d09dSXin LI#>7	ulelong		x		\b, data size %d
9423e41d09dSXin LI# attribute: 0x2~?? 0x10~symlink|target 0x20~normal
9433e41d09dSXin LI#>19	ubyte		x		\b, 19_0x%x
9443e41d09dSXin LI# level identifier 0 1 2 3
9453e41d09dSXin LI#>20	ubyte		x		\b, level %d
9463e41d09dSXin LI# time stamp
9473e41d09dSXin LI#>15		ubelong	x		DATE 0x%8.8x
9483e41d09dSXin LI# OS ID for level 1
9493e41d09dSXin LI>20	ubyte		1
9503e41d09dSXin LI# 0x20 types find for *.rom files
9513e41d09dSXin LI>>(21.b+24)	ubyte	<0x21		\b, 0x%x OS
9523e41d09dSXin LI# ascii type like M for MSDOS
9533e41d09dSXin LI>>(21.b+24)	ubyte	>0x20		\b, '%c' OS
9543e41d09dSXin LI# OS ID for level 2
9553e41d09dSXin LI>20	ubyte		2
9563e41d09dSXin LI#>>23	ubyte		x		\b, OS ID 0x%x
9573e41d09dSXin LI>>23	ubyte		<0x21		\b, 0x%x OS
9583e41d09dSXin LI>>23	ubyte		>0x20		\b, '%c' OS
9593e41d09dSXin LI# filename only for level 0 and 1
9603e41d09dSXin LI>20	ubyte		<2
9613e41d09dSXin LI# length of filename
9623e41d09dSXin LI>>21		ubyte	>0		\b, with
9633e41d09dSXin LI# filename
9643e41d09dSXin LI>>>21		pstring	x		"%s"
9653e41d09dSXin LI#
9663e41d09dSXin LI#2	string		-lh0-		LHarc 1.x/ARX archive data [lh0]
9673e41d09dSXin LI#!:mime	application/x-lharc
9683e41d09dSXin LI2	string		-lh0-
9693e41d09dSXin LI>0	use	lharc-file
9703e41d09dSXin LI#2	string		-lh1-		LHarc 1.x/ARX archive data [lh1]
9713e41d09dSXin LI#!:mime	application/x-lharc
9723e41d09dSXin LI2	string		-lh1-
9733e41d09dSXin LI>0	use	lharc-file
9743e41d09dSXin LI# NEW -lz2- ... -lz8-
9753e41d09dSXin LI2	string		-lz2-
9763e41d09dSXin LI>0	use	lharc-file
9773e41d09dSXin LI2	string		-lz3-
9783e41d09dSXin LI>0	use	lharc-file
9793e41d09dSXin LI2	string		-lz4-
9803e41d09dSXin LI>0	use	lharc-file
9813e41d09dSXin LI2	string		-lz5-
9823e41d09dSXin LI>0	use	lharc-file
9833e41d09dSXin LI2	string		-lz7-
9843e41d09dSXin LI>0	use	lharc-file
9853e41d09dSXin LI2	string		-lz8-
9863e41d09dSXin LI>0	use	lharc-file
987b6cee71dSXin LI#	[never seen any but the last; -lh4- reported in comp.compression:]
9883e41d09dSXin LI#2	string		-lzs-		LHa/LZS archive data [lzs]
9893e41d09dSXin LI2	string		-lzs-
9903e41d09dSXin LI>0	use	lharc-file
9913e41d09dSXin LI# According to wikipedia and others such a version does not exist
9923e41d09dSXin LI#2	string		-lh\40-		LHa 2.x? archive data [lh ]
9933e41d09dSXin LI#2	string		-lhd-		LHa 2.x? archive data [lhd]
9943e41d09dSXin LI2	string		-lhd-
9953e41d09dSXin LI>0	use	lharc-file
9963e41d09dSXin LI#2	string		-lh2-		LHa 2.x? archive data [lh2]
9973e41d09dSXin LI2	string		-lh2-
9983e41d09dSXin LI>0	use	lharc-file
9993e41d09dSXin LI#2	string		-lh3-		LHa 2.x? archive data [lh3]
10003e41d09dSXin LI2	string		-lh3-
10013e41d09dSXin LI>0	use	lharc-file
10023e41d09dSXin LI#2	string		-lh4-		LHa (2.x) archive data [lh4]
10033e41d09dSXin LI2	string		-lh4-
10043e41d09dSXin LI>0	use	lharc-file
10053e41d09dSXin LI#2	string		-lh5-		LHa (2.x) archive data [lh5]
10063e41d09dSXin LI2	string		-lh5-
10073e41d09dSXin LI>0	use	lharc-file
10083e41d09dSXin LI#2	string		-lh6-		LHa (2.x) archive data [lh6]
10093e41d09dSXin LI2	string		-lh6-
10103e41d09dSXin LI>0	use	lharc-file
10113e41d09dSXin LI#2	string		-lh7-		LHa (2.x)/LHark archive data [lh7]
10123e41d09dSXin LI2	string		-lh7-
10133e41d09dSXin LI# !:mime	application/x-lha
10143e41d09dSXin LI# >20	byte		x		- header level %d
10153e41d09dSXin LI>0	use	lharc-file
10163e41d09dSXin LI# NEW -lh8- ... -lhe- , -lhx-
10173e41d09dSXin LI2	string		-lh8-
10183e41d09dSXin LI>0	use	lharc-file
10193e41d09dSXin LI2	string		-lh9-
10203e41d09dSXin LI>0	use	lharc-file
10213e41d09dSXin LI2	string		-lha-
10223e41d09dSXin LI>0	use	lharc-file
10233e41d09dSXin LI2	string		-lhb-
10243e41d09dSXin LI>0	use	lharc-file
10253e41d09dSXin LI2	string		-lhc-
10263e41d09dSXin LI>0	use	lharc-file
10273e41d09dSXin LI2	string		-lhe-
10283e41d09dSXin LI>0	use	lharc-file
10293e41d09dSXin LI2	string		-lhx-
10303e41d09dSXin LI>0	use	lharc-file
1031b6cee71dSXin LI# taken from idarc [JW]
1032b6cee71dSXin LI2   string      -lZ         PUT archive data
10333e41d09dSXin LI# already done by LHarc magics
10343e41d09dSXin LI# this should never happen if all sub types of LZS archive are identified
10353e41d09dSXin LI#2   string      -lz         LZS archive data
1036b6cee71dSXin LI2   string      -sw1-       Swag archive data
1037b6cee71dSXin LI
10383e41d09dSXin LI0	name		rar-file-header
10393e41d09dSXin LI>24	byte		15		\b, v1.5
10403e41d09dSXin LI>24	byte		20		\b, v2.0
10413e41d09dSXin LI>24	byte		29		\b, v4
10423e41d09dSXin LI>15	byte		0		\b, os: MS-DOS
10433e41d09dSXin LI>15	byte		1		\b, os: OS/2
10443e41d09dSXin LI>15	byte		2		\b, os: Win32
10453e41d09dSXin LI>15	byte		3		\b, os: Unix
10463e41d09dSXin LI>15	byte		4		\b, os: Mac OS
10473e41d09dSXin LI>15	byte		5		\b, os: BeOS
10483e41d09dSXin LI
10493e41d09dSXin LI0	name		rar-archive-header
10503e41d09dSXin LI>3	leshort&0x1ff	>0		\b, flags:
10513e41d09dSXin LI>>3	leshort		&0x01		ArchiveVolume
10523e41d09dSXin LI>>3	leshort		&0x02		Commented
10533e41d09dSXin LI>>3	leshort		&0x04		Locked
10543e41d09dSXin LI>>3	leshort		&0x10		NewVolumeNaming
10553e41d09dSXin LI>>3	leshort		&0x08		Solid
10563e41d09dSXin LI>>3	leshort		&0x20		Authenticated
10573e41d09dSXin LI>>3	leshort		&0x40		RecoveryRecordPresent
10583e41d09dSXin LI>>3	leshort		&0x80		EncryptedBlockHeader
10593e41d09dSXin LI>>3	leshort		&0x100		FirstVolume
10603e41d09dSXin LI
10613e41d09dSXin LI# RAR (Roshal Archive) archive
10623e41d09dSXin LI0	string		Rar!\x1a\7\0		RAR archive data
1063b6cee71dSXin LI!:mime	application/x-rar
10643e41d09dSXin LI!:ext	rar/cbr
10653e41d09dSXin LI# file header
10663e41d09dSXin LI>(0xc.l+9)	byte	0x74
10673e41d09dSXin LI>>(0xc.l+7)	use	rar-file-header
10683e41d09dSXin LI# subblock seems to share information with file header
10693e41d09dSXin LI>(0xc.l+9)	byte	0x7a
10703e41d09dSXin LI>>(0xc.l+7)	use	rar-file-header
10713e41d09dSXin LI>9		byte	0x73
10723e41d09dSXin LI>>7		use	rar-archive-header
10733e41d09dSXin LI
10743e41d09dSXin LI0	string		Rar!\x1a\7\1\0		RAR archive data, v5
10753e41d09dSXin LI!:mime	application/x-rar
10763e41d09dSXin LI!:ext	rar
10773e41d09dSXin LI
10783e41d09dSXin LI# Very old RAR archive
107948c779cdSXin LI# https://jasonblanks.com/wp-includes/images/papers/KnowyourarchiveRAR.pdf
10803e41d09dSXin LI0	string		RE\x7e\x5e  RAR archive data (<v1.5)
10813e41d09dSXin LI!:mime	application/x-rar
10823e41d09dSXin LI!:ext	rar/cbr
1083b6cee71dSXin LI
1084b6cee71dSXin LI# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)
1085b6cee71dSXin LI0	string		SQSH		squished archive data (Acorn RISCOS)
1086b6cee71dSXin LI
1087b6cee71dSXin LI# UC2 archiver (Greg Roelofs, newt@uchicago.edu)
1088b6cee71dSXin LI# [JW] see exe section for self-extracting version
1089b6cee71dSXin LI0	string		UC2\x1a		UC2 archive data
1090b6cee71dSXin LI
1091b6cee71dSXin LI# PKZIP multi-volume archive
1092b6cee71dSXin LI0	string		PK\x07\x08PK\x03\x04	Zip multi-volume archive data, at least PKZIP v2.50 to extract
1093b6cee71dSXin LI!:mime	application/zip
10943e41d09dSXin LI!:ext zip/cbz
1095b6cee71dSXin LI
1096b6cee71dSXin LI# Zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
1097b6cee71dSXin LI0	string		PK\005\006	Zip archive data (empty)
10983e41d09dSXin LI!:mime application/zip
10993e41d09dSXin LI!:ext zip/cbz
110048c779cdSXin LI!:strength +1
1101b6cee71dSXin LI0	string		PK\003\004
110248c779cdSXin LI!:strength +1
1103b6cee71dSXin LI
1104b6cee71dSXin LI# Specialised zip formats which start with a member named 'mimetype'
1105b6cee71dSXin LI# (stored uncompressed, with no 'extra field') containing the file's MIME type.
1106b6cee71dSXin LI# Check for have 8-byte name, 0-byte extra field, name "mimetype", and
1107b6cee71dSXin LI#  contents starting with "application/":
1108b6cee71dSXin LI>26	string		\x8\0\0\0mimetypeapplication/
1109b6cee71dSXin LI
1110b6cee71dSXin LI#  KOffice / OpenOffice & StarOffice / OpenDocument formats
1111b6cee71dSXin LI#    From: Abel Cheung <abel@oaka.org>
1112b6cee71dSXin LI
1113b6cee71dSXin LI#   KOffice (1.2 or above) formats
1114b6cee71dSXin LI#    (mimetype contains "application/vnd.kde.<SUBTYPE>")
1115b6cee71dSXin LI>>50	string	vnd.kde.		KOffice (>=1.2)
1116b6cee71dSXin LI>>>58	string	karbon			Karbon document
1117b6cee71dSXin LI>>>58	string	kchart			KChart document
1118b6cee71dSXin LI>>>58	string	kformula		KFormula document
1119b6cee71dSXin LI>>>58	string	kivio			Kivio document
1120b6cee71dSXin LI>>>58	string	kontour			Kontour document
1121b6cee71dSXin LI>>>58	string	kpresenter		KPresenter document
1122b6cee71dSXin LI>>>58	string	kspread			KSpread document
1123b6cee71dSXin LI>>>58	string	kword			KWord document
1124b6cee71dSXin LI
1125b6cee71dSXin LI#   OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7)
1126b6cee71dSXin LI#    (mimetype contains "application/vnd.sun.xml.<SUBTYPE>")
1127b6cee71dSXin LI>>50	string	vnd.sun.xml.		OpenOffice.org 1.x
1128b6cee71dSXin LI>>>62	string	writer			Writer
1129b6cee71dSXin LI>>>>68	byte	!0x2e			document
1130b6cee71dSXin LI>>>>68	string	.template		template
1131b6cee71dSXin LI>>>>68	string	.global			global document
1132b6cee71dSXin LI>>>62	string	calc			Calc
1133b6cee71dSXin LI>>>>66	byte	!0x2e			spreadsheet
1134b6cee71dSXin LI>>>>66	string	.template		template
1135b6cee71dSXin LI>>>62	string	draw			Draw
1136b6cee71dSXin LI>>>>66	byte	!0x2e			document
1137b6cee71dSXin LI>>>>66	string	.template		template
1138b6cee71dSXin LI>>>62	string	impress			Impress
1139b6cee71dSXin LI>>>>69	byte	!0x2e			presentation
1140b6cee71dSXin LI>>>>69	string	.template		template
1141b6cee71dSXin LI>>>62	string	math			Math document
1142b6cee71dSXin LI>>>62	string	base			Database file
1143b6cee71dSXin LI
1144b6cee71dSXin LI#   OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8)
114548c779cdSXin LI#    https://lists.oasis-open.org/archives/office/200505/msg00006.html
1146b6cee71dSXin LI#    (mimetype contains "application/vnd.oasis.opendocument.<SUBTYPE>")
1147b6cee71dSXin LI>>50	string	vnd.oasis.opendocument.	OpenDocument
1148b6cee71dSXin LI>>>73	string	text
1149b6cee71dSXin LI>>>>77	byte	!0x2d			Text
1150b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.text
1151b6cee71dSXin LI>>>>77	string	-template		Text Template
1152b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.text-template
1153b6cee71dSXin LI>>>>77	string	-web			HTML Document Template
1154b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.text-web
1155b6cee71dSXin LI>>>>77	string	-master			Master Document
1156b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.text-master
1157b6cee71dSXin LI>>>73	string	graphics
1158b6cee71dSXin LI>>>>81	byte	!0x2d			Drawing
1159b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.graphics
1160b6cee71dSXin LI>>>>81	string	-template		Template
1161b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.graphics-template
1162b6cee71dSXin LI>>>73	string	presentation
1163b6cee71dSXin LI>>>>85	byte	!0x2d			Presentation
1164b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.presentation
1165b6cee71dSXin LI>>>>85	string	-template		Template
1166b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.presentation-template
1167b6cee71dSXin LI>>>73	string	spreadsheet
1168b6cee71dSXin LI>>>>84	byte	!0x2d			Spreadsheet
1169b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.spreadsheet
1170b6cee71dSXin LI>>>>84	string	-template		Template
1171b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.spreadsheet-template
1172b6cee71dSXin LI>>>73	string	chart
1173b6cee71dSXin LI>>>>78	byte	!0x2d			Chart
1174b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.chart
1175b6cee71dSXin LI>>>>78	string	-template		Template
1176b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.chart-template
1177b6cee71dSXin LI>>>73	string	formula
1178b6cee71dSXin LI>>>>80	byte	!0x2d			Formula
1179b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.formula
1180b6cee71dSXin LI>>>>80	string	-template		Template
1181b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.formula-template
1182b6cee71dSXin LI>>>73	string	database		Database
1183b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.database
118458a0f0d0SEitan Adler# Valid for LibreOffice Base 6.0.1.1 at least
118558a0f0d0SEitan Adler>>>73	string	base 			Database
118658a0f0d0SEitan Adler!:mime	application/vnd.oasis.opendocument.base
1187b6cee71dSXin LI>>>73	string	image
1188b6cee71dSXin LI>>>>78	byte	!0x2d			Image
1189b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.image
1190b6cee71dSXin LI>>>>78	string	-template		Template
1191b6cee71dSXin LI!:mime	application/vnd.oasis.opendocument.image-template
1192b6cee71dSXin LI
1193b6cee71dSXin LI#  EPUB (OEBPS) books using OCF (OEBPS Container Format)
119448c779cdSXin LI#    https://www.idpf.org/ocf/ocf1.0/download/ocf10.htm, section 4.
1195b6cee71dSXin LI#    From: Ralf Brown <ralf.brown@gmail.com>
1196b6cee71dSXin LI>>50	string	epub+zip	EPUB document
1197b6cee71dSXin LI!:mime application/epub+zip
1198b6cee71dSXin LI
1199*d38c30c0SXin LI# From:	Joerg Jenderek
1200*d38c30c0SXin LI# URL:	http://en.wikipedia.org/wiki/CorelDRAW
1201*d38c30c0SXin LI# NOTE:	version; til 2 WL-based; from 3 til 13 by ./riff; from 14 zip based
1202*d38c30c0SXin LI>>50	string	x-vnd.corel.	 Corel
1203*d38c30c0SXin LI>>>62	string	draw.document+zip	Draw drawing, version 14-16
1204*d38c30c0SXin LI!:mime	application/x-vnd.corel.draw.document+zip
1205*d38c30c0SXin LI!:ext	cdr
1206*d38c30c0SXin LI>>>62	string	draw.template+zip	Draw template, version 14-16
1207*d38c30c0SXin LI!:mime	application/x-vnd.corel.draw.template+zip
1208*d38c30c0SXin LI!:ext	cdrt
1209*d38c30c0SXin LI>>>62	string	zcf.draw.document+zip	Draw drawing, version 17-21
1210*d38c30c0SXin LI!:mime	application/x-vnd.corel.zcf.draw.document+zip
1211*d38c30c0SXin LI!:ext	cdr
1212*d38c30c0SXin LI>>>62	string	zcf.draw.template+zip	Draw template, version 17-21
1213*d38c30c0SXin LI!:mime	application/x-vnd.corel.zcf.draw.template+zip
1214*d38c30c0SXin LI!:ext	cdt/cdrt
1215*d38c30c0SXin LI
1216b6cee71dSXin LI#  Catch other ZIP-with-mimetype formats
1217b6cee71dSXin LI#	In a ZIP file, the bytes immediately after a member's contents are
1218b6cee71dSXin LI#	always "PK". The 2 regex rules here print the "mimetype" member's
1219b6cee71dSXin LI#	contents up to the first 'P'. Luckily, most MIME types don't contain
1220b6cee71dSXin LI#	any capital 'P's. This is a kludge.
1221b6cee71dSXin LI#    (mimetype contains "application/<OTHER>")
1222*d38c30c0SXin LI>>50		default	x			Zip data
1223*d38c30c0SXin LI>>>38		regex	[!-OQ-~]+		(MIME type "%s"?)
1224b6cee71dSXin LI!:mime	application/zip
1225b6cee71dSXin LI#    (mimetype contents other than "application/*")
1226b6cee71dSXin LI>26		string	\x8\0\0\0mimetype
1227b6cee71dSXin LI>>38		string	!application/
1228b6cee71dSXin LI>>>38		regex	[!-OQ-~]+		Zip data (MIME type "%s"?)
1229b6cee71dSXin LI!:mime	application/zip
1230b6cee71dSXin LI
1231b6cee71dSXin LI# Java Jar files
1232b6cee71dSXin LI>(26.s+30)	leshort	0xcafe		Java archive data (JAR)
1233b6cee71dSXin LI!:mime	application/java-archive
1234b6cee71dSXin LI
123520f8619dSXin LI# iOS App
123620f8619dSXin LI>(26.s+30)	leshort	!0xcafe
123720f8619dSXin LI>>26		string	!\x8\0\0\0mimetype
123820f8619dSXin LI>>>30		string	Payload/
123920f8619dSXin LI>>>>38		search/64       .app/   iOS App
124020f8619dSXin LI!:mime application/x-ios-app
124120f8619dSXin LI
124220f8619dSXin LI
1243b6cee71dSXin LI# Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
1244b6cee71dSXin LI#   Next line excludes specialized formats:
1245b6cee71dSXin LI>(26.s+30)	leshort	!0xcafe
1246b6cee71dSXin LI>>26    string          !\x8\0\0\0mimetype	Zip archive data
1247b6cee71dSXin LI!:mime	application/zip
124858a0f0d0SEitan Adler>>>4	beshort		x			\b, at least
124958a0f0d0SEitan Adler>>>4	use		zipversion
125058a0f0d0SEitan Adler>>>4	beshort		x			to extract
1251b6cee71dSXin LI>>>0x161	string		WINZIP		\b, WinZIP self-extracting
1252b6cee71dSXin LI
1253b6cee71dSXin LI# StarView Metafile
1254b6cee71dSXin LI# From Pierre Ducroquet <pinaraf@pinaraf.info>
1255b6cee71dSXin LI0	string	VCLMTF	StarView MetaFile
1256b6cee71dSXin LI>6	beshort	x	\b, version %d
1257b6cee71dSXin LI>8	belong	x	\b, size %d
1258b6cee71dSXin LI
1259b6cee71dSXin LI# Zoo archiver
1260b6cee71dSXin LI20	lelong		0xfdc4a7dc	Zoo archive data
1261b6cee71dSXin LI!:mime	application/x-zoo
1262b6cee71dSXin LI>4	byte		>48		\b, v%c.
1263b6cee71dSXin LI>>6	byte		>47		\b%c
1264b6cee71dSXin LI>>>7	byte		>47		\b%c
1265b6cee71dSXin LI>32	byte		>0		\b, modify: v%d
1266b6cee71dSXin LI>>33	byte		x		\b.%d+
1267b6cee71dSXin LI>42	lelong		0xfdc4a7dc	\b,
1268b6cee71dSXin LI>>70	byte		>0		extract: v%d
1269b6cee71dSXin LI>>>71	byte		x		\b.%d+
1270b6cee71dSXin LI
1271b6cee71dSXin LI# Shell archives
1272b6cee71dSXin LI10	string		#\ This\ is\ a\ shell\ archive	shell archive text
1273b6cee71dSXin LI!:mime	application/octet-stream
1274b6cee71dSXin LI
1275b6cee71dSXin LI#
1276b6cee71dSXin LI# LBR. NB: May conflict with the questionable
1277b6cee71dSXin LI#          "binary Computer Graphics Metafile" format.
1278b6cee71dSXin LI#
1279b6cee71dSXin LI0       string  \0\ \ \ \ \ \ \ \ \ \ \ \0\0    LBR archive data
1280b6cee71dSXin LI#
1281b6cee71dSXin LI# PMA (CP/M derivative of LHA)
12823e41d09dSXin LI# Update: Joerg Jenderek
12833e41d09dSXin LI# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
1284b6cee71dSXin LI#
12853e41d09dSXin LI#2       string          -pm0-           PMarc archive data [pm0]
12863e41d09dSXin LI2	string		-pm0-
12873e41d09dSXin LI>0	use	lharc-file
12883e41d09dSXin LI#2       string          -pm1-           PMarc archive data [pm1]
12893e41d09dSXin LI2	string		-pm1-
12903e41d09dSXin LI>0	use	lharc-file
12913e41d09dSXin LI#2       string          -pm2-           PMarc archive data [pm2]
12923e41d09dSXin LI2	string		-pm2-
12933e41d09dSXin LI>0	use	lharc-file
1294b6cee71dSXin LI2       string          -pms-           PMarc SFX archive (CP/M, DOS)
12953e41d09dSXin LI#!:mime	application/x-foobar-exec
12963e41d09dSXin LI!:ext com
1297b6cee71dSXin LI5       string          -pc1-           PopCom compressed executable (CP/M)
12983e41d09dSXin LI#!:mime	application/x-
12993e41d09dSXin LI#!:ext com
1300b6cee71dSXin LI
1301b6cee71dSXin LI# From Rafael Laboissiere <rafael@laboissiere.net>
1302b6cee71dSXin LI# The Project Revision Control System (see
1303b6cee71dSXin LI# http://prcs.sourceforge.net) generates a packaged project
1304b6cee71dSXin LI# file which is recognized by the following entry:
1305b6cee71dSXin LI0	leshort		0xeb81	PRCS packaged project
1306b6cee71dSXin LI
1307b6cee71dSXin LI# Microsoft cabinets
1308b6cee71dSXin LI# by David Necas (Yeti) <yeti@physics.muni.cz>
1309b6cee71dSXin LI#0	string	MSCF\0\0\0\0	Microsoft cabinet file data,
1310b6cee71dSXin LI#>25	byte	x		v%d
1311b6cee71dSXin LI#>24	byte	x		\b.%d
1312b6cee71dSXin LI# MPi: All CABs have version 1.3, so this is pointless.
1313b6cee71dSXin LI# Better magic in debian-additions.
1314b6cee71dSXin LI
1315b6cee71dSXin LI# GTKtalog catalogs
1316b6cee71dSXin LI# by David Necas (Yeti) <yeti@physics.muni.cz>
1317b6cee71dSXin LI4	string	gtktalog\ 	GTKtalog catalog data,
1318b6cee71dSXin LI>13	string	3		version 3
1319b6cee71dSXin LI>>14	beshort	0x677a		(gzipped)
1320b6cee71dSXin LI>>14	beshort	!0x677a		(not gzipped)
1321b6cee71dSXin LI>13	string	>3		version %s
1322b6cee71dSXin LI
1323b6cee71dSXin LI############################################################################
1324b6cee71dSXin LI# Parity archive reconstruction file, the 'par' file format now used on Usenet.
1325b6cee71dSXin LI0       string          PAR\0	PARity archive data
1326b6cee71dSXin LI>48	leshort		=0	- Index file
1327b6cee71dSXin LI>48	leshort		>0	- file number %d
1328b6cee71dSXin LI
1329b6cee71dSXin LI# Felix von Leitner <felix-file@fefe.de>
1330b6cee71dSXin LI0	string	d8:announce	BitTorrent file
1331b6cee71dSXin LI!:mime	application/x-bittorrent
13323e41d09dSXin LI# Durval Menezes, <jmgthbfile at durval dot com>
13333e41d09dSXin LI0	string	d13:announce-list	BitTorrent file
13343e41d09dSXin LI!:mime	application/x-bittorrent
1335*d38c30c0SXin LI0	string	d7:comment	BitTorrent file
1336*d38c30c0SXin LI!:mime	application/x-bittorrent
1337*d38c30c0SXin LI0	string	d4:info		BitTorrent file
1338*d38c30c0SXin LI!:mime	application/x-bittorrent
1339b6cee71dSXin LI
1340b6cee71dSXin LI# Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi>
1341b6cee71dSXin LI0	beshort 0x0e0f		Atari MSA archive data
1342b6cee71dSXin LI>2	beshort x		\b, %d sectors per track
1343b6cee71dSXin LI>4	beshort 0		\b, 1 sided
1344b6cee71dSXin LI>4	beshort 1		\b, 2 sided
1345b6cee71dSXin LI>6	beshort x		\b, starting track: %d
1346b6cee71dSXin LI>8	beshort x		\b, ending track: %d
1347b6cee71dSXin LI
1348b6cee71dSXin LI# Alternate ZIP string (amc@arwen.cs.berkeley.edu)
1349b6cee71dSXin LI0	string	PK00PK\003\004	Zip archive data
135058a0f0d0SEitan Adler!:mime	application/zip
135158a0f0d0SEitan Adler!:ext zip/cbz
1352b6cee71dSXin LI
1353b6cee71dSXin LI# ACE archive (from http://www.wotsit.org/download.asp?f=ace)
1354b6cee71dSXin LI# by Stefan `Sec` Zehl <sec@42.org>
1355b6cee71dSXin LI7	string		**ACE**		ACE archive data
1356b6cee71dSXin LI>15	byte	>0		version %d
1357b6cee71dSXin LI>16	byte	=0x00		\b, from MS-DOS
1358b6cee71dSXin LI>16	byte	=0x01		\b, from OS/2
1359b6cee71dSXin LI>16	byte	=0x02		\b, from Win/32
1360b6cee71dSXin LI>16	byte	=0x03		\b, from Unix
1361b6cee71dSXin LI>16	byte	=0x04		\b, from MacOS
1362b6cee71dSXin LI>16	byte	=0x05		\b, from WinNT
1363b6cee71dSXin LI>16	byte	=0x06		\b, from Primos
1364b6cee71dSXin LI>16	byte	=0x07		\b, from AppleGS
1365b6cee71dSXin LI>16	byte	=0x08		\b, from Atari
1366b6cee71dSXin LI>16	byte	=0x09		\b, from Vax/VMS
1367b6cee71dSXin LI>16	byte	=0x0A		\b, from Amiga
1368b6cee71dSXin LI>16	byte	=0x0B		\b, from Next
1369b6cee71dSXin LI>14	byte	x		\b, version %d to extract
1370b6cee71dSXin LI>5	leshort &0x0080		\b, multiple volumes,
1371b6cee71dSXin LI>>17	byte	x		\b (part %d),
1372b6cee71dSXin LI>5	leshort &0x0002		\b, contains comment
1373b6cee71dSXin LI>5	leshort	&0x0200		\b, sfx
1374b6cee71dSXin LI>5	leshort	&0x0400		\b, small dictionary
1375b6cee71dSXin LI>5	leshort	&0x0800		\b, multi-volume
1376b6cee71dSXin LI>5	leshort	&0x1000		\b, contains AV-String
1377b6cee71dSXin LI>>30	string	\x16*UNREGISTERED\x20VERSION*	(unregistered)
1378b6cee71dSXin LI>5	leshort &0x2000		\b, with recovery record
1379b6cee71dSXin LI>5	leshort &0x4000		\b, locked
1380b6cee71dSXin LI>5	leshort &0x8000		\b, solid
1381b6cee71dSXin LI# Date in MS-DOS format (whatever that is)
1382b6cee71dSXin LI#>18	lelong	x		Created on
1383b6cee71dSXin LI
1384b6cee71dSXin LI# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann
1385b6cee71dSXin LI# <doj@cubic.org>
1386b6cee71dSXin LI0x1A	string	sfArk		sfArk compressed Soundfont
1387b6cee71dSXin LI>0x15	string	2
1388b6cee71dSXin LI>>0x1	string	>\0		Version %s
1389b6cee71dSXin LI>>0x2A	string	>\0		: %s
1390b6cee71dSXin LI
1391b6cee71dSXin LI# DR-DOS 7.03 Packed File *.??_
1392b6cee71dSXin LI0	string	Packed\ File\ 	Personal NetWare Packed File
1393b6cee71dSXin LI>12	string	x		\b, was "%.12s"
1394b6cee71dSXin LI
1395b6cee71dSXin LI# EET archive
1396b6cee71dSXin LI# From: Tilman Sauerbeck <tilman@code-monkey.de>
1397b6cee71dSXin LI0	belong	0x1ee7ff00	EET archive
1398b6cee71dSXin LI!:mime	application/x-eet
1399b6cee71dSXin LI
1400b6cee71dSXin LI# rzip archives
1401b6cee71dSXin LI0	string	RZIP		rzip compressed data
1402b6cee71dSXin LI>4	byte	x		- version %d
1403b6cee71dSXin LI>5	byte	x		\b.%d
1404b6cee71dSXin LI>6	belong	x		(%d bytes)
1405b6cee71dSXin LI
140648c779cdSXin LI# From:		Joerg Jenderek
140748c779cdSXin LI# URL:		https://help.foxitsoftware.com/kb/install-fzip-file.php
140848c779cdSXin LI# reference:	http://mark0.net/download/triddefs_xml.7z/
140948c779cdSXin LI#		defs/f/fzip.trid.xml
141048c779cdSXin LI# Note: unknown compression; No "PK" zip magic; normally in directory like
141148c779cdSXin LI#	"%APPDATA%\Foxit Software\Addon\Foxit Reader\Install"
141248c779cdSXin LI0	ubequad	0x2506781901010000	Foxit add-on/update
141348c779cdSXin LI!:mime	application/x-fzip
141448c779cdSXin LI!:ext	fzip
141548c779cdSXin LI
1416b6cee71dSXin LI# From: "Robert Dale" <robdale@gmail.com>
1417b6cee71dSXin LI0	belong	123		dar archive,
1418b6cee71dSXin LI>4	belong	x		label "%.8x
1419b6cee71dSXin LI>>8	belong	x		%.8x
1420b6cee71dSXin LI>>>12	beshort	x		%.4x"
1421b6cee71dSXin LI>14	byte	0x54		end slice
1422b6cee71dSXin LI>14	beshort	0x4e4e		multi-part
1423b6cee71dSXin LI>14	beshort	0x4e53		multi-part, with -S
1424b6cee71dSXin LI
1425b6cee71dSXin LI# Symbian installation files
142648c779cdSXin LI#  https://www.thouky.co.uk/software/psifs/sis.html
1427b6cee71dSXin LI#  http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf
1428b6cee71dSXin LI8	lelong	0x10000419	Symbian installation file
1429b6cee71dSXin LI!:mime	application/vnd.symbian.install
1430b6cee71dSXin LI>4	lelong	0x1000006D	(EPOC release 3/4/5)
1431b6cee71dSXin LI>4	lelong	0x10003A12	(EPOC release 6)
1432b6cee71dSXin LI0	lelong	0x10201A7A	Symbian installation file (Symbian OS 9.x)
1433b6cee71dSXin LI!:mime	x-epoc/x-sisx-app
1434b6cee71dSXin LI
1435b6cee71dSXin LI# From "Nelson A. de Oliveira" <naoliv@gmail.com>
1436b6cee71dSXin LI0	string	MPQ\032		MoPaQ (MPQ) archive
1437b6cee71dSXin LI
1438b6cee71dSXin LI# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
1439b6cee71dSXin LI# .kgb
1440b6cee71dSXin LI0	string KGB_arch		KGB Archiver file
1441b6cee71dSXin LI>10	string x		with compression level %.1s
1442b6cee71dSXin LI
1443b6cee71dSXin LI# xar (eXtensible ARchiver) archive
144448c779cdSXin LI# URL: https://en.wikipedia.org/wiki/Xar_(archiver)
144548c779cdSXin LI# xar archive format: https://code.google.com/p/xar/
1446b6cee71dSXin LI# From: "David Remahl" <dremahl@apple.com>
144748c779cdSXin LI# Update: Joerg Jenderek
144848c779cdSXin LI# TODO: lzma compression; X509Data for pkg and xip
144948c779cdSXin LI# Note: verified by `xar --dump-header -f FullBundleUpdate.xar` or
145048c779cdSXin LI# 7z t -txar Xcode_10.2_beta_4.xip`
1451b6cee71dSXin LI0	string	xar!		xar archive
14523e41d09dSXin LI!:mime	application/x-xar
145348c779cdSXin LI# pkg for Mac OSX installer package like FullBundleUpdate.pkg
145448c779cdSXin LI# xip for signed Apple software like Xcode_10.2_beta_4.xip
145548c779cdSXin LI!:ext	xar/pkg/xip
145648c779cdSXin LI# always 28 in older archives
145748c779cdSXin LI>4	ubeshort >28		\b, header size %u
145848c779cdSXin LI# currently there exit only version 1 since about 2014
145948c779cdSXin LI>6	ubeshort >1		version %u,
146048c779cdSXin LI>8	ubequad	x		compressed TOC: %llu,
146148c779cdSXin LI#>16	ubequad	x		uncompressed TOC: %llu,
146248c779cdSXin LI# cksum_alg 0-2 in older and also 3-4 in newer
1463b6cee71dSXin LI>24	belong	0		no checksum
1464b6cee71dSXin LI>24	belong	1		SHA-1 checksum
1465b6cee71dSXin LI>24	belong	2		MD5 checksum
146648c779cdSXin LI>24	belong	3		SHA-256 checksum
146748c779cdSXin LI>24	belong	4		SHA-512 checksum
146848c779cdSXin LI>24	belong	>4		unknown 0x%x checksum
146948c779cdSXin LI#>24	belong	>4		checksum
147048c779cdSXin LI#			For no compression jump 0 bytes
147148c779cdSXin LI>24	belong	0
147248c779cdSXin LI>>0		ubyte	x
147348c779cdSXin LI# jump more bytes forward by header size
147448c779cdSXin LI>>>&(4.S)	ubyte	x
147548c779cdSXin LI# jump more bytes forward by compressed table of contents size
147648c779cdSXin LI#>>>>&(8.Q)	ubequad	x	\b, heap data 0x%llx
147748c779cdSXin LI>>>>&(8.Q)	ubyte	x
147848c779cdSXin LI# look for data by ./compress after message with 1 space at end
147948c779cdSXin LI>>>>>&-3	indirect x	\b, contains
148048c779cdSXin LI#			For SHA-1 jump 20 minus 2 bytes
148148c779cdSXin LI>24	belong	1
148248c779cdSXin LI>>18		ubyte	x
148348c779cdSXin LI# jump more bytes forward by header size
148448c779cdSXin LI>>>&(4.S)	ubyte	x
148548c779cdSXin LI# jump more bytes forward by compressed table of contents size
148648c779cdSXin LI>>>>&(8.Q)	ubyte	x
148748c779cdSXin LI# data compressed by gzip, bzip, lzma or none
148848c779cdSXin LI>>>>>&-1	indirect x	\b, contains
148948c779cdSXin LI#			For SHA-256 jump 32 minus 2 bytes
149048c779cdSXin LI>24	belong	3
149148c779cdSXin LI>>30		ubyte	x
149248c779cdSXin LI# jump more bytes forward by header size
149348c779cdSXin LI>>>&(4.S)	ubyte	x
149448c779cdSXin LI# jump more bytes forward by compressed table of contents size
149548c779cdSXin LI>>>>&(8.Q)	ubyte	x
149648c779cdSXin LI>>>>>&-1	indirect x	\b, contains
149748c779cdSXin LI#			For SHA-512 jump 64 minus 2 bytes
149848c779cdSXin LI>24	belong	4
149948c779cdSXin LI>>62		ubyte	x
150048c779cdSXin LI# jump more bytes forward by header size
150148c779cdSXin LI>>>&(4.S)	ubyte	x
150248c779cdSXin LI# jump more bytes forward by compressed table of contents size
150348c779cdSXin LI>>>>&(8.Q)	ubyte	x
150448c779cdSXin LI>>>>>&-1	indirect x	\b, contains
1505b6cee71dSXin LI
1506b6cee71dSXin LI# Type: Parity Archive
1507b6cee71dSXin LI# From: Daniel van Eeden <daniel_e@dds.nl>
1508b6cee71dSXin LI0	string	PAR2		Parity Archive Volume Set
1509b6cee71dSXin LI
1510b6cee71dSXin LI# Bacula volume format. (Volumes always start with a block header.)
151148c779cdSXin LI# URL: https://bacula.org/3.0.x-manuals/en/developers/developers/Block_Header.html
1512b6cee71dSXin LI# From: Adam Buchbinder <adam.buchbinder@gmail.com>
1513b6cee71dSXin LI12	string	BB02		Bacula volume
1514b6cee71dSXin LI>20	bedate	x		\b, started %s
1515b6cee71dSXin LI
1516b6cee71dSXin LI# ePub is XHTML + XML inside a ZIP archive.  The first member of the
1517b6cee71dSXin LI#   archive must be an uncompressed file called 'mimetype' with contents
1518b6cee71dSXin LI#   'application/epub+zip'
1519b6cee71dSXin LI
1520b6cee71dSXin LI
1521b6cee71dSXin LI# From: "Michael Gorny" <mgorny@gentoo.org>
1522b6cee71dSXin LI# ZPAQ: http://mattmahoney.net/dc/zpaq.html
1523b6cee71dSXin LI0	string	zPQ	ZPAQ stream
1524b6cee71dSXin LI>3	byte	x	\b, level %d
15255f0216bdSXin LI# From: Barry Carter <carter.barry@gmail.com>
152648c779cdSXin LI# https://encode.ru/threads/456-zpaq-updates/page32
15275f0216bdSXin LI0	string	7kSt	ZPAQ file
1528b6cee71dSXin LI
1529b6cee71dSXin LI# BBeB ebook, unencrypted (LRF format)
153048c779cdSXin LI# URL: https://www.sven.de/librie/Librie/LrfFormat
1531b6cee71dSXin LI# From: Adam Buchbinder <adam.buchbinder@gmail.com>
1532b6cee71dSXin LI0	string	L\0R\0F\0\0\0	BBeB ebook data, unencrypted
1533b6cee71dSXin LI>8	beshort	x		\b, version %d
1534b6cee71dSXin LI>36	byte	1		\b, front-to-back
1535b6cee71dSXin LI>36	byte	16		\b, back-to-front
1536b6cee71dSXin LI>42	beshort	x		\b, (%dx,
1537b6cee71dSXin LI>44	beshort	x		%d)
1538b6cee71dSXin LI
1539b6cee71dSXin LI# Symantec GHOST image by Joerg Jenderek at May 2014
154048c779cdSXin LI# https://us.norton.com/ghost/
154148c779cdSXin LI# https://www.garykessler.net/library/file_sigs.html
1542b6cee71dSXin LI0		ubelong&0xFFFFf7f0	0xFEEF0100	Norton GHost image
1543b6cee71dSXin LI# *.GHO
1544b6cee71dSXin LI>2		ubyte&0x08		0x00		\b, first file
1545b6cee71dSXin LI# *.GHS or *.[0-9] with cns program option
1546b6cee71dSXin LI>2		ubyte&0x08		0x08		\b, split file
1547b6cee71dSXin LI# part of split index interesting for *.ghs
1548b6cee71dSXin LI>>4		ubyte			x		id=0x%x
1549b6cee71dSXin LI# compression tag minus one equals numeric compression command line switch z[1-9]
1550b6cee71dSXin LI>3		ubyte			0		\b, no compression
1551b6cee71dSXin LI>3		ubyte			2		\b, fast compression (Z1)
1552b6cee71dSXin LI>3		ubyte			3		\b, medium compression (Z2)
1553b6cee71dSXin LI>3		ubyte			>3
1554b6cee71dSXin LI>>3		ubyte			<11		\b, compression (Z%d-1)
1555b6cee71dSXin LI>2		ubyte&0x08		0x00
1556b6cee71dSXin LI# ~ 30 byte password field only for *.gho
1557b6cee71dSXin LI>>12		ubequad			!0		\b, password protected
1558b6cee71dSXin LI>>44		ubyte			!1
1559b6cee71dSXin LI# 1~Image All, sector-by-sector only for *.gho
1560b6cee71dSXin LI>>>10		ubyte			1		\b, sector copy
1561b6cee71dSXin LI# 1~Image Boot track only for *.gho
1562b6cee71dSXin LI>>>43		ubyte			1		\b, boot track
1563b6cee71dSXin LI# 1~Image Disc only for *.gho implies Image Boot track and sector copy
1564b6cee71dSXin LI>>44		ubyte			1		\b, disc sector copy
1565b6cee71dSXin LI# optional image description only *.gho
1566b6cee71dSXin LI>>0xff		string			>\0		"%-.254s"
1567b6cee71dSXin LI# look for DOS sector end sequence
1568b6cee71dSXin LI>0xE08	search/7776		\x55\xAA
1569b6cee71dSXin LI>>&-512	indirect		x		\b; contains
1570b6cee71dSXin LI
15713e41d09dSXin LI# Google Chrome extensions
15723e41d09dSXin LI# https://developer.chrome.com/extensions/crx
15733e41d09dSXin LI# https://developer.chrome.com/extensions/hosting
15743e41d09dSXin LI0	string	Cr24	Google Chrome extension
15753e41d09dSXin LI!:mime	application/x-chrome-extension
15763e41d09dSXin LI>4	ulong	x	\b, version %u
157740427ccaSGordon Tetlow
157840427ccaSGordon Tetlow# SeqBox - Sequenced container
157940427ccaSGordon Tetlow# ext: sbx, seqbox
158040427ccaSGordon Tetlow# Marco Pontello marcopon@gmail.com
158140427ccaSGordon Tetlow# reference: https://github.com/MarcoPon/SeqBox
158240427ccaSGordon Tetlow0	string	SBx	SeqBox,
158340427ccaSGordon Tetlow>3	byte	x	version %d
158458a0f0d0SEitan Adler
158558a0f0d0SEitan Adler# LyNX archive
158658a0f0d0SEitan Adler56	string	USE\040LYNX\040TO\040DISSOLVE\040THIS\040FILE	 LyNX archive
158748c779cdSXin LI
158848c779cdSXin LI# From: Joerg Jenderek
158948c779cdSXin LI# URL: https://www.acronis.com/
159048c779cdSXin LI# Reference: https://en.wikipedia.org/wiki/TIB_(file_format)
159148c779cdSXin LI# Note: only tested with True Image 2013 Build 5962 and 2019 Build 14110
159248c779cdSXin LI0	ubequad		0xce24b9a220000000	Acronis True Image backup
159348c779cdSXin LI!:mime	application/x-acronis-tib
159448c779cdSXin LI!:ext	tib
159548c779cdSXin LI# 01000000
159648c779cdSXin LI#>20	ubelong		x			\b, at 20 0x%x
159748c779cdSXin LI# 20000000
159848c779cdSXin LI#>28	ubelong		x			\b, at 28 0x%x
159948c779cdSXin LI# strings like "Generic- SD/MMC 1.00" "Unknown Disk" "Msft Virtual Disk 1.0"
160048c779cdSXin LI# ???
160148c779cdSXin LI# strings like "\Device\0000011e" "\Device\0000015a"
160248c779cdSXin LI#>0	search/0x6852300/cs	\\Device\\
160348c779cdSXin LI#>>&-1	pstring		x			\b, %s
160448c779cdSXin LI# "\Device\HarddiskVolume30" "\Device\HarddiskVolume39"
160548c779cdSXin LI#>>>&1	search/180/cs	\\Device\\
160648c779cdSXin LI#>>>>&-1	pstring		x			\b, %s
160748c779cdSXin LI#>>>>>&0	search/29/cs	\0\0\xc8\0
160848c779cdSXin LI# disk label
160948c779cdSXin LI#>>>>>>&10	lestring16	x		\b, disk label %11.11s
161048c779cdSXin LI#>>>>>>&9	plestring16	x		\b, disk label "%11.11s"
161148c779cdSXin LI#>>>>>>&10	ubequad	x			%16.16llx
161248c779cdSXin LI
161348c779cdSXin LI
161448c779cdSXin LI# Gentoo XPAK binary package
161548c779cdSXin LI# by Michal Gorny <mgorny@gentoo.org>
161648c779cdSXin LI# https://gitweb.gentoo.org/proj/portage.git/tree/man/xpak.5
161748c779cdSXin LI-4	string	STOP
161848c779cdSXin LI>-16	string	XPAKSTOP	Gentoo binary package (XPAK)
161948c779cdSXin LI
162048c779cdSXin LI# From:		Joerg Jenderek
162148c779cdSXin LI# URL:		https://kodi.wiki/view/TexturePacker
162248c779cdSXin LI# Reference:	https://mirrors.kodi.tv/releases/source/17.3-Krypton.tar.gz
162348c779cdSXin LI# /xbmc-Krypton/xbmc/guilib/XBTF.h
162448c779cdSXin LI# /xbmc-Krypton/xbmc/guilib/XBTF.cpp
162548c779cdSXin LI0	string	XBTF
162648c779cdSXin LI# skip ASCII text by looking for terminating \0 of path
162748c779cdSXin LI>264	ubyte	0		XBMC texture package
162848c779cdSXin LI!:mime	application/x-xbmc-xbt
162948c779cdSXin LI!:ext	xbt
163048c779cdSXin LI# XBTF_VERSION 2
163148c779cdSXin LI>>4	string	!2		\b, version %-.1s
163248c779cdSXin LI# nofFiles /xbmc-Krypton/xbmc/guilib/XBTFReader.cpp
163348c779cdSXin LI>>5	ulelong	x		\b, %u file
163448c779cdSXin LI# plural s
163548c779cdSXin LI>>5	ulelong	>1		\bs
163648c779cdSXin LI# path[CXBTFFile[MaximumPathLength=256]
163748c779cdSXin LI>>9	string	x		\b, 1st %s
163848c779cdSXin LI
1639