xref: /freebsd/contrib/file/magic/Magdir/msdos (revision 58a0f0d00c0cc4a90ce584a61470290751bfcac7)
1b6cee71dSXin LI
2b6cee71dSXin LI#------------------------------------------------------------------------------
3*58a0f0d0SEitan Adler# $File: msdos,v 1.121 2017/10/27 21:43:23 christos Exp $
4b6cee71dSXin LI# msdos:  file(1) magic for MS-DOS files
5b6cee71dSXin LI#
6b6cee71dSXin LI
7b6cee71dSXin LI# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
8b6cee71dSXin LI# updated by Joerg Jenderek at Oct 2008,Apr 2011
9b6cee71dSXin LI0	string/t	@
10b6cee71dSXin LI>1	string/cW	\ echo\ off	DOS batch file text
11b6cee71dSXin LI!:mime	text/x-msdos-batch
12b6cee71dSXin LI>1	string/cW	echo\ off	DOS batch file text
13b6cee71dSXin LI!:mime	text/x-msdos-batch
14b6cee71dSXin LI>1	string/cW	rem		DOS batch file text
15b6cee71dSXin LI!:mime	text/x-msdos-batch
16b6cee71dSXin LI>1	string/cW	set\ 		DOS batch file text
17b6cee71dSXin LI!:mime	text/x-msdos-batch
18b6cee71dSXin LI
19b6cee71dSXin LI
20b6cee71dSXin LI# OS/2 batch files are REXX. the second regex is a bit generic, oh well
21b6cee71dSXin LI# the matched commands seem to be common in REXX and uncommon elsewhere
22b6cee71dSXin LI100	search/0xffff   rxfuncadd
23b6cee71dSXin LI>100	regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc	OS/2 REXX batch file text
24b6cee71dSXin LI100	search/0xffff   say
25b6cee71dSXin LI>100	regex/c =^[\ \t]{0,10}say\ ['"]			OS/2 REXX batch file text
26b6cee71dSXin LI
273e41d09dSXin LI# updated by Joerg Jenderek at Oct 2015
283e41d09dSXin LI# https://de.wikipedia.org/wiki/Common_Object_File_Format
293e41d09dSXin LI# http://www.delorie.com/djgpp/doc/coff/filhdr.html
303e41d09dSXin LI# ./intel already labeled COFF type 0x14c=0514 as "80386 COFF executable"
313e41d09dSXin LI#0	leshort		0x14c	MS Windows COFF Intel 80386 object file
32b6cee71dSXin LI#>4	ledate		x	stamp %s
33b6cee71dSXin LI0	leshort		0x166	MS Windows COFF MIPS R4000 object file
34b6cee71dSXin LI#>4	ledate		x	stamp %s
35b6cee71dSXin LI0	leshort		0x184	MS Windows COFF Alpha object file
36b6cee71dSXin LI#>4	ledate		x	stamp %s
37b6cee71dSXin LI0	leshort		0x268	MS Windows COFF Motorola 68000 object file
38b6cee71dSXin LI#>4	ledate		x	stamp %s
39b6cee71dSXin LI0	leshort		0x1f0	MS Windows COFF PowerPC object file
40b6cee71dSXin LI#>4	ledate		x	stamp %s
41b6cee71dSXin LI0	leshort		0x290	MS Windows COFF PA-RISC object file
42b6cee71dSXin LI#>4	ledate		x	stamp %s
43b6cee71dSXin LI
44b6cee71dSXin LI# Tests for various EXE types.
45b6cee71dSXin LI#
46b6cee71dSXin LI# Many of the compressed formats were extraced from IDARC 1.23 source code.
47b6cee71dSXin LI#
48b6cee71dSXin LI0	string/b	MZ
49b6cee71dSXin LI# All non-DOS EXE extensions have the relocation table more than 0x40 bytes into the file.
50b6cee71dSXin LI>0x18	leshort <0x40 MS-DOS executable
51b6cee71dSXin LI!:mime	application/x-dosexec
52b6cee71dSXin LI# These traditional tests usually work but not always.  When test quality support is
53b6cee71dSXin LI# implemented these can be turned on.
54b6cee71dSXin LI#>>0x18	leshort	0x1c	(Borland compiler)
55b6cee71dSXin LI#>>0x18	leshort	0x1e	(MS compiler)
56b6cee71dSXin LI
57b6cee71dSXin LI# If the relocation table is 0x40 or more bytes into the file, it's definitely
58b6cee71dSXin LI# not a DOS EXE.
59b6cee71dSXin LI>0x18  leshort >0x3f
60b6cee71dSXin LI
61b6cee71dSXin LI# Maybe it's a PE?
62b6cee71dSXin LI>>(0x3c.l) string PE\0\0 PE
63b6cee71dSXin LI!:mime	application/x-dosexec
64b6cee71dSXin LI>>>(0x3c.l+24)	leshort		0x010b	\b32 executable
65b6cee71dSXin LI>>>(0x3c.l+24)	leshort		0x020b	\b32+ executable
66b6cee71dSXin LI>>>(0x3c.l+24)	leshort		0x0107	ROM image
67b6cee71dSXin LI>>>(0x3c.l+24)	default		x	Unknown PE signature
68b6cee71dSXin LI>>>>&0 		leshort		x	0x%x
69b6cee71dSXin LI>>>(0x3c.l+22)	leshort&0x2000	>0	(DLL)
70b6cee71dSXin LI>>>(0x3c.l+92)	leshort		1	(native)
71b6cee71dSXin LI>>>(0x3c.l+92)	leshort		2	(GUI)
72b6cee71dSXin LI>>>(0x3c.l+92)	leshort		3	(console)
73b6cee71dSXin LI>>>(0x3c.l+92)	leshort		7	(POSIX)
74b6cee71dSXin LI>>>(0x3c.l+92)	leshort		9	(Windows CE)
75b6cee71dSXin LI>>>(0x3c.l+92)	leshort		10	(EFI application)
76b6cee71dSXin LI>>>(0x3c.l+92)	leshort		11	(EFI boot service driver)
77b6cee71dSXin LI>>>(0x3c.l+92)	leshort		12	(EFI runtime driver)
78b6cee71dSXin LI>>>(0x3c.l+92)	leshort		13	(EFI ROM)
79b6cee71dSXin LI>>>(0x3c.l+92)	leshort		14	(XBOX)
80b6cee71dSXin LI>>>(0x3c.l+92)	leshort		15	(Windows boot application)
81b6cee71dSXin LI>>>(0x3c.l+92)	default		x	(Unknown subsystem
82b6cee71dSXin LI>>>>&0		leshort		x	0x%x)
83b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x14c	Intel 80386
84b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x166	MIPS R4000
85b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x168	MIPS R10000
86b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x184	Alpha
87b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x1a2	Hitachi SH3
88b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x1a6	Hitachi SH4
89b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x1c0	ARM
90b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x1c2	ARM Thumb
91b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x1c4	ARMv7 Thumb
92b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x1f0	PowerPC
93b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x200	Intel Itanium
94b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x266	MIPS16
95b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x268	Motorola 68000
96b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x290	PA-RISC
97b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x366	MIPSIV
98b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x466	MIPS16 with FPU
99b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0xebc	EFI byte code
100b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0x8664	x86-64
101b6cee71dSXin LI>>>(0x3c.l+4)	leshort		0xc0ee	MSIL
102b6cee71dSXin LI>>>(0x3c.l+4)	default		x	Unknown processor type
103b6cee71dSXin LI>>>>&0		leshort		x	0x%x
104b6cee71dSXin LI>>>(0x3c.l+22)	leshort&0x0200	>0	(stripped to external PDB)
105b6cee71dSXin LI>>>(0x3c.l+22)	leshort&0x1000	>0	system file
106b6cee71dSXin LI>>>(0x3c.l+24)	leshort		0x010b
107b6cee71dSXin LI>>>>(0x3c.l+232) lelong	>0	Mono/.Net assembly
108b6cee71dSXin LI>>>(0x3c.l+24)	leshort		0x020b
109b6cee71dSXin LI>>>>(0x3c.l+248) lelong	>0	Mono/.Net assembly
110b6cee71dSXin LI
111b6cee71dSXin LI# hooray, there's a DOS extender using the PE format, with a valid PE
112b6cee71dSXin LI# executable inside (which just prints a message and exits if run in win)
113b6cee71dSXin LI>>>(8.s*16)		string		32STUB	\b, 32rtm DOS extender
114b6cee71dSXin LI>>>(8.s*16)		string		!32STUB	\b, for MS Windows
115b6cee71dSXin LI>>>(0x3c.l+0xf8)	string		UPX0 \b, UPX compressed
116b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	PEC2 \b, PECompact2 compressed
117b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	UPX2
118b6cee71dSXin LI>>>>(&0x10.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
119b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	.idata
120b6cee71dSXin LI>>>>(&0xe.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
121b6cee71dSXin LI>>>>(&0xe.l+(-4))	string		ZZ0 \b, ZZip self-extracting archive
122b6cee71dSXin LI>>>>(&0xe.l+(-4))	string		ZZ1 \b, ZZip self-extracting archive
123b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	.rsrc
124b6cee71dSXin LI>>>>(&0x0f.l+(-4))	string		a\\\4\5 \b, WinHKI self-extracting archive
125b6cee71dSXin LI>>>>(&0x0f.l+(-4))	string		Rar! \b, RAR self-extracting archive
126b6cee71dSXin LI>>>>(&0x0f.l+(-4))	search/0x3000	MSCF \b, InstallShield self-extracting archive
127b6cee71dSXin LI>>>>(&0x0f.l+(-4))	search/32	Nullsoft \b, Nullsoft Installer self-extracting archive
128b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	.data
129b6cee71dSXin LI>>>>(&0x0f.l)		string		WEXTRACT \b, MS CAB-Installer self-extracting archive
130b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	.petite\0 \b, Petite compressed
131b6cee71dSXin LI>>>>(0x3c.l+0xf7)	byte		x
132b6cee71dSXin LI>>>>>(&0x104.l+(-4))	string		=!sfx! \b, ACE self-extracting archive
133b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	.WISE \b, WISE installer self-extracting archive
134b6cee71dSXin LI>>>(0x3c.l+0xf8)	search/0x140	.dz\0\0\0 \b, Dzip self-extracting archive
135b6cee71dSXin LI>>>&(0x3c.l+0xf8)	search/0x100	_winzip_ \b, ZIP self-extracting archive (WinZip)
136b6cee71dSXin LI>>>&(0x3c.l+0xf8)	search/0x100	SharedD \b, Microsoft Installer self-extracting archive
137b6cee71dSXin LI>>>0x30			string		Inno \b, InnoSetup self-extracting archive
138b6cee71dSXin LI
139b6cee71dSXin LI# Hmm, not a PE but the relocation table is too high for a traditional DOS exe,
140b6cee71dSXin LI# must be one of the unusual subformats.
141b6cee71dSXin LI>>(0x3c.l) string !PE\0\0 MS-DOS executable
142b6cee71dSXin LI!:mime	application/x-dosexec
143b6cee71dSXin LI
144b6cee71dSXin LI>>(0x3c.l)		string		NE \b, NE
145b6cee71dSXin LI!:mime	application/x-dosexec
146b6cee71dSXin LI>>>(0x3c.l+0x36)	byte		1 for OS/2 1.x
147b6cee71dSXin LI>>>(0x3c.l+0x36)	byte		2 for MS Windows 3.x
148b6cee71dSXin LI>>>(0x3c.l+0x36)	byte		3 for MS-DOS
149b6cee71dSXin LI>>>(0x3c.l+0x36)	byte		4 for Windows 386
150b6cee71dSXin LI>>>(0x3c.l+0x36)	byte		5 for Borland Operating System Services
151b6cee71dSXin LI>>>(0x3c.l+0x36)	default		x
152b6cee71dSXin LI>>>>(0x3c.l+0x36)	byte		x (unknown OS %x)
153b6cee71dSXin LI>>>(0x3c.l+0x36)	byte		0x81 for MS-DOS, Phar Lap DOS extender
154b6cee71dSXin LI>>>(0x3c.l+0x0c)	leshort&0x8003	0x8002 (DLL)
155b6cee71dSXin LI>>>(0x3c.l+0x0c)	leshort&0x8003	0x8001 (driver)
156b6cee71dSXin LI>>>&(&0x24.s-1)		string		ARJSFX \b, ARJ self-extracting archive
157b6cee71dSXin LI>>>(0x3c.l+0x70)	search/0x80	WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip)
158b6cee71dSXin LI
159b6cee71dSXin LI>>(0x3c.l)		string		LX\0\0 \b, LX
160b6cee71dSXin LI!:mime	application/x-dosexec
161b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		<1 (unknown OS)
162b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		1 for OS/2
163b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
164b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		3 for DOS
165b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		>3 (unknown OS)
166b6cee71dSXin LI>>>(0x3c.l+0x10)	lelong&0x28000	=0x8000 (DLL)
167b6cee71dSXin LI>>>(0x3c.l+0x10)	lelong&0x20000	>0 (device driver)
168b6cee71dSXin LI>>>(0x3c.l+0x10)	lelong&0x300	0x300 (GUI)
169b6cee71dSXin LI>>>(0x3c.l+0x10)	lelong&0x28300	<0x300 (console)
170b6cee71dSXin LI>>>(0x3c.l+0x08)	leshort		1 i80286
171b6cee71dSXin LI>>>(0x3c.l+0x08)	leshort		2 i80386
172b6cee71dSXin LI>>>(0x3c.l+0x08)	leshort		3 i80486
173b6cee71dSXin LI>>>(8.s*16)		string		emx \b, emx
174b6cee71dSXin LI>>>>&1			string		x %s
175b6cee71dSXin LI>>>&(&0x54.l-3)		string		arjsfx \b, ARJ self-extracting archive
176b6cee71dSXin LI
177b6cee71dSXin LI# MS Windows system file, supposedly a collection of LE executables
178b6cee71dSXin LI>>(0x3c.l)		string		W3 \b, W3 for MS Windows
179b6cee71dSXin LI!:mime	application/x-dosexec
180b6cee71dSXin LI
181b6cee71dSXin LI>>(0x3c.l)		string		LE\0\0 \b, LE executable
182b6cee71dSXin LI!:mime	application/x-dosexec
183b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		1
184b6cee71dSXin LI# some DOS extenders use LE files with OS/2 header
185b6cee71dSXin LI>>>>0x240		search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
186b6cee71dSXin LI>>>>0x240		search/0x200	WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender
187b6cee71dSXin LI>>>>0x440		search/0x100	CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender
188b6cee71dSXin LI>>>>0x40		search/0x40	PMODE/W for MS-DOS, PMODE/W DOS extender
189b6cee71dSXin LI>>>>0x40		search/0x40	STUB/32A for MS-DOS, DOS/32A DOS extender (stub)
190b6cee71dSXin LI>>>>0x40		search/0x80	STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)
191b6cee71dSXin LI>>>>0x40		search/0x80	DOS/32A for MS-DOS, DOS/32A DOS extender (embedded)
192b6cee71dSXin LI# this is a wild guess; hopefully it is a specific signature
193b6cee71dSXin LI>>>>&0x24		lelong		<0x50
194b6cee71dSXin LI>>>>>(&0x4c.l)		string		\xfc\xb8WATCOM
195b6cee71dSXin LI>>>>>>&0		search/8	3\xdbf\xb9 \b, 32Lite compressed
196b6cee71dSXin LI# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP
197b6cee71dSXin LI#>>>>(0x3c.l+0x1c)	lelong		>0x10000 for OS/2
198b6cee71dSXin LI# fails with DOS-Extenders.
199b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
200b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		3 for DOS
201b6cee71dSXin LI>>>(0x3c.l+0x0a)	leshort		4 for MS Windows (VxD)
202b6cee71dSXin LI>>>(&0x7c.l+0x26)	string		UPX \b, UPX compressed
203b6cee71dSXin LI>>>&(&0x54.l-3)		string		UNACE \b, ACE self-extracting archive
204b6cee71dSXin LI
205b6cee71dSXin LI# looks like ASCII, probably some embedded copyright message.
206b6cee71dSXin LI# and definitely not NE/LE/LX/PE
207b6cee71dSXin LI>>0x3c		lelong	>0x20000000
208b6cee71dSXin LI>>>(4.s*512)	leshort !0x014c \b, MZ for MS-DOS
209b6cee71dSXin LI!:mime	application/x-dosexec
210b6cee71dSXin LI# header data too small for extended executable
211b6cee71dSXin LI>2		long	!0
212b6cee71dSXin LI>>0x18		leshort <0x40
213b6cee71dSXin LI>>>(4.s*512)	leshort !0x014c
214b6cee71dSXin LI
215b6cee71dSXin LI>>>>&(2.s-514)	string	!LE
216b6cee71dSXin LI>>>>>&-2	string	!BW \b, MZ for MS-DOS
217b6cee71dSXin LI!:mime	application/x-dosexec
218b6cee71dSXin LI>>>>&(2.s-514)	string	LE \b, LE
219b6cee71dSXin LI>>>>>0x240	search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
220b6cee71dSXin LI# educated guess since indirection is still not capable enough for complex offset
221b6cee71dSXin LI# calculations (next embedded executable would be at &(&2*512+&0-2)
222b6cee71dSXin LI# I suspect there are only LE executables in these multi-exe files
223b6cee71dSXin LI>>>>&(2.s-514)	string	BW
224b6cee71dSXin LI>>>>>0x240	search/0x100	DOS/4G	\b, LE for MS-DOS, DOS4GW DOS extender (embedded)
225b6cee71dSXin LI>>>>>0x240	search/0x100	!DOS/4G	\b, BW collection for MS-DOS
226b6cee71dSXin LI
227b6cee71dSXin LI# This sequence skips to the first COFF segment, usually .text
228b6cee71dSXin LI>(4.s*512)	leshort		0x014c \b, COFF
229b6cee71dSXin LI!:mime	application/x-dosexec
230b6cee71dSXin LI>>(8.s*16)	string		go32stub for MS-DOS, DJGPP go32 DOS extender
231b6cee71dSXin LI>>(8.s*16)	string		emx
232b6cee71dSXin LI>>>&1		string		x for DOS, Win or OS/2, emx %s
233b6cee71dSXin LI>>&(&0x42.l-3)	byte		x
234b6cee71dSXin LI>>>&0x26	string		UPX \b, UPX compressed
235b6cee71dSXin LI# and yet another guess: small .text, and after large .data is unusal, could be 32lite
236b6cee71dSXin LI>>&0x2c		search/0xa0	.text
237b6cee71dSXin LI>>>&0x0b	lelong		<0x2000
238b6cee71dSXin LI>>>>&0		lelong		>0x6000 \b, 32lite compressed
239b6cee71dSXin LI
240b6cee71dSXin LI>(8.s*16) string $WdX \b, WDos/X DOS extender
241b6cee71dSXin LI
242b6cee71dSXin LI# By now an executable type should have been printed out.  The executable
243b6cee71dSXin LI# may be a self-uncompressing archive, so look for evidence of that and
244b6cee71dSXin LI# print it out.
245b6cee71dSXin LI#
246b6cee71dSXin LI# Some signatures below from Greg Roelofs, newt@uchicago.edu.
247b6cee71dSXin LI#
248b6cee71dSXin LI>0x35	string	\x8e\xc0\xb9\x08\x00\xf3\xa5\x4a\x75\xeb\x8e\xc3\x8e\xd8\x33\xff\xbe\x30\x00\x05 \b, aPack compressed
249b6cee71dSXin LI>0xe7	string	LH/2\ 	Self-Extract \b, %s
250b6cee71dSXin LI>0x1c	string	UC2X	\b, UCEXE compressed
251b6cee71dSXin LI>0x1c	string	WWP\ 	\b, WWPACK compressed
252b6cee71dSXin LI>0x1c	string	RJSX 	\b, ARJ self-extracting archive
253b6cee71dSXin LI>0x1c	string	diet 	\b, diet compressed
254b6cee71dSXin LI>0x1c	string	LZ09 	\b, LZEXE v0.90 compressed
255b6cee71dSXin LI>0x1c	string	LZ91 	\b, LZEXE v0.91 compressed
256b6cee71dSXin LI>0x1c	string	tz 	\b, TinyProg compressed
257b6cee71dSXin LI>0x1e	string	Copyright\ 1989-1990\ PKWARE\ Inc.	Self-extracting PKZIP archive
258b6cee71dSXin LI!:mime	application/zip
259b6cee71dSXin LI# Yes, this really is "Copr", not "Corp."
260b6cee71dSXin LI>0x1e	string	PKLITE\ Copr.	Self-extracting PKZIP archive
261b6cee71dSXin LI!:mime	application/zip
262b6cee71dSXin LI# winarj stores a message in the stub instead of the sig in the MZ header
263b6cee71dSXin LI>0x20	search/0xe0	aRJsfX \b, ARJ self-extracting archive
264b6cee71dSXin LI>0x20	string AIN
265b6cee71dSXin LI>>0x23	string 2	\b, AIN 2.x compressed
266b6cee71dSXin LI>>0x23	string <2	\b, AIN 1.x compressed
267b6cee71dSXin LI>>0x23	string >2	\b, AIN 1.x compressed
268b6cee71dSXin LI>0x24	string	LHa's\ SFX \b, LHa self-extracting archive
269b6cee71dSXin LI!:mime	application/x-lha
270b6cee71dSXin LI>0x24	string	LHA's\ SFX \b, LHa self-extracting archive
271b6cee71dSXin LI!:mime	application/x-lha
272b6cee71dSXin LI>0x24	string	\ $ARX \b, ARX self-extracting archive
273b6cee71dSXin LI>0x24	string	\ $LHarc \b, LHarc self-extracting archive
274b6cee71dSXin LI>0x20	string	SFX\ by\ LARC \b, LARC self-extracting archive
275b6cee71dSXin LI>0x40	string aPKG \b, aPackage self-extracting archive
276b6cee71dSXin LI>0x64	string	W\ Collis\0\0 \b, Compack compressed
277b6cee71dSXin LI>0x7a	string		Windows\ self-extracting\ ZIP	\b, ZIP self-extracting archive
278b6cee71dSXin LI>>&0xf4 search/0x140 \x0\x40\x1\x0
279b6cee71dSXin LI>>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
280b6cee71dSXin LI>1638	string	-lh5- \b, LHa self-extracting archive v2.13S
281b6cee71dSXin LI>0x17888 string Rar! \b, RAR self-extracting archive
282b6cee71dSXin LI
283b6cee71dSXin LI# Skip to the end of the EXE.  This will usually work fine in the PE case
284b6cee71dSXin LI# because the MZ image is hardcoded into the toolchain and almost certainly
285b6cee71dSXin LI# won't match any of these signatures.
286b6cee71dSXin LI>(4.s*512)	long	x
287b6cee71dSXin LI>>&(2.s-517)	byte	x
288b6cee71dSXin LI>>>&0	string		PK\3\4 \b, ZIP self-extracting archive
289b6cee71dSXin LI>>>&0	string		Rar! \b, RAR self-extracting archive
290b6cee71dSXin LI>>>&0	string		=!\x11 \b, AIN 2.x self-extracting archive
291b6cee71dSXin LI>>>&0	string		=!\x12 \b, AIN 2.x self-extracting archive
292b6cee71dSXin LI>>>&0	string		=!\x17 \b, AIN 1.x self-extracting archive
293b6cee71dSXin LI>>>&0	string		=!\x18 \b, AIN 1.x self-extracting archive
294b6cee71dSXin LI>>>&7	search/400	**ACE** \b, ACE self-extracting archive
295b6cee71dSXin LI>>>&0	search/0x480	UC2SFX\ Header \b, UC2 self-extracting archive
296b6cee71dSXin LI
297b6cee71dSXin LI# a few unknown ZIP sfxes, no idea if they are needed or if they are
298b6cee71dSXin LI# already captured by the generic patterns above
299b6cee71dSXin LI>(8.s*16)	search/0x20	PKSFX \b, ZIP self-extracting archive (PKZIP)
300b6cee71dSXin LI# TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive
301b6cee71dSXin LI#
302b6cee71dSXin LI
303b6cee71dSXin LI# TELVOX Teleinformatica CODEC self-extractor for OS/2:
304b6cee71dSXin LI>49801	string	\x79\xff\x80\xff\x76\xff	\b, CODEC archive v3.21
305b6cee71dSXin LI>>49824 leshort		=1			\b, 1 file
306b6cee71dSXin LI>>49824 leshort		>1			\b, %u files
307b6cee71dSXin LI
308b6cee71dSXin LI# added by Joerg Jenderek of http://www.freedos.org/software/?prog=kc
309b6cee71dSXin LI# and http://www.freedos.org/software/?prog=kpdos
310b6cee71dSXin LI# for FreeDOS files like KEYBOARD.SYS, KEYBRD2.SYS, KEYBRD3.SYS, *.KBD
311b6cee71dSXin LI0	string/b	KCF		FreeDOS KEYBoard Layout collection
312b6cee71dSXin LI# only version=0x100 found
313b6cee71dSXin LI>3	uleshort	x		\b, version 0x%x
314b6cee71dSXin LI# length of string containing author,info and special characters
315b6cee71dSXin LI>6	ubyte		>0
316b6cee71dSXin LI#>>6	pstring		x		\b, name=%s
317b6cee71dSXin LI>>7	string		>\0		\b, author=%-.14s
318b6cee71dSXin LI>>7	search/254	\xff		\b, info=
319b6cee71dSXin LI#>>>&0	string		x		\b%-s
320b6cee71dSXin LI>>>&0	string		x		\b%-.15s
321b6cee71dSXin LI# for FreeDOS *.KL files
322b6cee71dSXin LI0	string/b	KLF		FreeDOS KEYBoard Layout file
323b6cee71dSXin LI# only version=0x100 or 0x101 found
324b6cee71dSXin LI>3	uleshort	x		\b, version 0x%x
325b6cee71dSXin LI# stringlength
326b6cee71dSXin LI>5	ubyte		>0
327b6cee71dSXin LI>>8	string		x		\b, name=%-.2s
328b6cee71dSXin LI0	string	\xffKEYB\ \ \ \0\0\0\0
329b6cee71dSXin LI>12	string	\0\0\0\0`\004\360	MS-DOS KEYBoard Layout file
330b6cee71dSXin LI
33140427ccaSGordon Tetlow# DOS device driver updated by Joerg Jenderek at May 2011,Mar 2017
33240427ccaSGordon Tetlow# https://amaus.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009
33340427ccaSGordon Tetlow0	ulequad&0x07a0ffffffff		0xffffffff
33440427ccaSGordon Tetlow>0	use				msdos-driver
33540427ccaSGordon Tetlow0       name    			msdos-driver		DOS executable (
33640427ccaSGordon Tetlow#!:mime	application/octet-stream
33740427ccaSGordon Tetlow!:mime	application/x-dosdriver
33840427ccaSGordon Tetlow# also found FreeDOS print driver SPOOL.DEV and disc compression driver STACLOAD.BIN
33940427ccaSGordon Tetlow!:ext	sys/dev/bin
340b6cee71dSXin LI>40	search/7			UPX!			\bUPX compressed
341b6cee71dSXin LI# DOS device driver attributes
342b6cee71dSXin LI>4	uleshort&0x8000			0x0000			\bblock device driver
343b6cee71dSXin LI# character device
344b6cee71dSXin LI>4	uleshort&0x8000			0x8000			\b
345b6cee71dSXin LI>>4	uleshort&0x0008			0x0008			\bclock
346b6cee71dSXin LI# fast video output by int 29h
347b6cee71dSXin LI>>4	uleshort&0x0010			0x0010			\bfast
348b6cee71dSXin LI# standard input/output device
349b6cee71dSXin LI>>4	uleshort&0x0003			>0			\bstandard
350b6cee71dSXin LI>>>4	uleshort&0x0001			0x0001			\binput
351b6cee71dSXin LI>>>4	uleshort&0x0003			0x0003			\b/
352b6cee71dSXin LI>>>4	uleshort&0x0002			0x0002			\boutput
353b6cee71dSXin LI>>4	uleshort&0x8000			0x8000			\bcharacter device driver
354b6cee71dSXin LI>0	ubyte				x
355b6cee71dSXin LI# upx compressed device driver has garbage instead of real in name field of header
356b6cee71dSXin LI>>40	search/7			UPX!
357b6cee71dSXin LI>>40	default				x
358b6cee71dSXin LI# leading/trailing nulls, zeros or non ASCII characters in 8-byte name field at offset 10 are skipped
35940427ccaSGordon Tetlow>>>12		ubyte			>0x2E			\b
360b6cee71dSXin LI>>>>10		ubyte			>0x20
361b6cee71dSXin LI>>>>>10		ubyte			!0x2E
362b6cee71dSXin LI>>>>>>10	ubyte			!0x2A			\b%c
363b6cee71dSXin LI>>>>11		ubyte			>0x20
364b6cee71dSXin LI>>>>>11		ubyte			!0x2E			\b%c
365b6cee71dSXin LI>>>>12		ubyte			>0x20
366b6cee71dSXin LI>>>>>12		ubyte			!0x39
367b6cee71dSXin LI>>>>>>12	ubyte			!0x2E			\b%c
368b6cee71dSXin LI>>>13		ubyte			>0x20
369b6cee71dSXin LI>>>>13		ubyte			!0x2E			\b%c
370b6cee71dSXin LI>>>>14		ubyte			>0x20
371b6cee71dSXin LI>>>>>14		ubyte			!0x2E			\b%c
372b6cee71dSXin LI>>>>15		ubyte			>0x20
373b6cee71dSXin LI>>>>>15		ubyte			!0x2E			\b%c
374b6cee71dSXin LI>>>>16		ubyte			>0x20
375b6cee71dSXin LI>>>>>16		ubyte			!0x2E
376b6cee71dSXin LI>>>>>>16	ubyte			<0xCB			\b%c
377b6cee71dSXin LI>>>>17		ubyte			>0x20
378b6cee71dSXin LI>>>>>17		ubyte			!0x2E
379b6cee71dSXin LI>>>>>>17	ubyte			<0x90			\b%c
380b6cee71dSXin LI# some character device drivers like ASPICD.SYS, btcdrom.sys and Cr_atapi.sys contain only spaces or points in name field
38140427ccaSGordon Tetlow>>>12		ubyte			<0x2F
382b6cee71dSXin LI# they have their real name at offset 22
38340427ccaSGordon Tetlow# also block device drivers like DUMBDRV.SYS
38440427ccaSGordon Tetlow>>>>22		string			>\056			%-.6s
385b6cee71dSXin LI>4	uleshort&0x8000			0x0000
386b6cee71dSXin LI# 32 bit sector addressing ( > 32 MB) for block devices
387b6cee71dSXin LI>>4	uleshort&0x0002			0x0002			\b,32-bit sector-
388b6cee71dSXin LI# support by driver functions 13h, 17h, 18h
389b6cee71dSXin LI>4	uleshort&0x0040			0x0040			\b,IOCTL-
390b6cee71dSXin LI# open, close, removable media support by driver functions 0Dh, 0Eh, 0Fh
391b6cee71dSXin LI>4	uleshort&0x0800			0x0800			\b,close media-
392b6cee71dSXin LI# output until busy support by int 10h for character device driver
393b6cee71dSXin LI>4	uleshort&0x8000			0x8000
394b6cee71dSXin LI>>4	uleshort&0x2000			0x2000			\b,until busy-
395b6cee71dSXin LI# direct read/write support by driver functions 03h,0Ch
396b6cee71dSXin LI>4	uleshort&0x4000			0x4000			\b,control strings-
397b6cee71dSXin LI>4	uleshort&0x8000			0x8000
398b6cee71dSXin LI>>4	uleshort&0x6840			>0			\bsupport
399b6cee71dSXin LI>4	uleshort&0x8000			0x0000
400b6cee71dSXin LI>>4	uleshort&0x4842			>0			\bsupport
401b6cee71dSXin LI>0	ubyte				x			\b)
402b6cee71dSXin LI# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header
40340427ccaSGordon Tetlow0	ulequad				0x0513c00000000012
40440427ccaSGordon Tetlow>0	use				msdos-driver
40540427ccaSGordon Tetlow# DOS drivers DC2975.SYS, DUMBDRV.SYS, ECHO.SYS has also none 0xffffffff for pointer field
40640427ccaSGordon Tetlow0	ulequad				0x32f28000ffff0016
40740427ccaSGordon Tetlow>0	use				msdos-driver
40840427ccaSGordon Tetlow0	ulequad				0x007f00000000ffff
40940427ccaSGordon Tetlow>0	use				msdos-driver
41040427ccaSGordon Tetlow0	ulequad				0x001600000000ffff
41140427ccaSGordon Tetlow>0	use				msdos-driver
41240427ccaSGordon Tetlow# DOS drivers LS120.SYS, MKELS120.SYS use reserved bits of attribute field
41340427ccaSGordon Tetlow0	ulequad				0x0bf708c2ffffffff
41440427ccaSGordon Tetlow>0	use				msdos-driver
41540427ccaSGordon Tetlow0	ulequad				0x07bd08c2ffffffff
41640427ccaSGordon Tetlow>0	use				msdos-driver
417b6cee71dSXin LI
4183e41d09dSXin LI# updated by Joerg Jenderek
4193e41d09dSXin LI# GRR: line below too general as it catches also
4203e41d09dSXin LI# rt.lib DYADISKS.PIC and many more
4213e41d09dSXin LI# start with assembler instruction MOV
4223e41d09dSXin LI0	ubyte		0x8c
4233e41d09dSXin LI# skip "AppleWorks word processor data" like ARTICLE.1 ./apple
4243e41d09dSXin LI>4	string			!O====
4253e41d09dSXin LI# skip some unknown basic binaries like RocketRnger.SHR
4263e41d09dSXin LI>>5	string			!MAIN
4273e41d09dSXin LI# skip "GPG symmetrically encrypted data" ./gnu
4283e41d09dSXin LI# skip "PGP symmetric key encrypted data" ./pgp
4293e41d09dSXin LI# openpgpdefs.h: fourth byte < 14 indicate cipher algorithm type
4303e41d09dSXin LI>>>4	ubyte			>13	DOS executable (COM, 0x8C-variant)
4313e41d09dSXin LI# the remaining files should be DOS *.COM executables
4323e41d09dSXin LI# dosshell.COM	8cc0 2ea35f07 e85211 e88a11 b80058 cd
4333e41d09dSXin LI# hmload.COM	8cc8 8ec0 bbc02b 89dc 83c30f c1eb04 b4
4343e41d09dSXin LI# UNDELETE.COM	8cca 2e8916 6503 b430 cd21 8b 2e0200 8b
4353e41d09dSXin LI# BOOTFIX.COM	8cca 2e8916 9603 b430 cd21 8b 2e0200 8b
4363e41d09dSXin LI# RAWRITE3.COM	8cca 2e8916 d602 b430 cd21 8b 2e0200 8b
4373e41d09dSXin LI# SHARE.COM	8cca 2e8916 d602 b430 cd21 8b 2e0200 8b
4383e41d09dSXin LI# validchr.COM	8cca 2e8916 9603 b430 cd21 8b 2e028b1e
4393e41d09dSXin LI# devload.COM	8cca 8916ad01 b430 cd21 8b2e0200 892e
4403e41d09dSXin LI!:mime	application/x-dosexec
4413e41d09dSXin LI!:ext com
4423e41d09dSXin LI
443b6cee71dSXin LI# updated by Joerg Jenderek at Oct 2008
444b6cee71dSXin LI0	ulelong		0xffff10eb	DR-DOS executable (COM)
445b6cee71dSXin LI# byte 0xeb conflicts with "sequent" magic leshort 0xn2eb
446b6cee71dSXin LI0	ubeshort&0xeb8d	>0xeb00
447b6cee71dSXin LI# DR-DOS STACKER.COM SCREATE.SYS missed
448a5d223e6SXin LI
449a5d223e6SXin LI0       name    msdos-com
450a5d223e6SXin LI>0  byte        x               DOS executable (COM)
451a5d223e6SXin LI>6	string		SFX\ of\ LHarc	\b, %s
452a5d223e6SXin LI>0x1FE leshort	0xAA55		    \b, boot code
453a5d223e6SXin LI>85	string		UPX		        \b, UPX compressed
454a5d223e6SXin LI>4	string		\ $ARX		    \b, ARX self-extracting archive
455a5d223e6SXin LI>4	string		\ $LHarc	    \b, LHarc self-extracting archive
456a5d223e6SXin LI>0x20e string	SFX\ by\ LARC	\b, LARC self-extracting archive
457a5d223e6SXin LI
458a5d223e6SXin LI# JMP 8bit
459a5d223e6SXin LI0	        byte	0xeb
460a5d223e6SXin LI# allow forward jumps only
461a5d223e6SXin LI>1          byte    >-1
462a5d223e6SXin LI# that offset must be accessible
463a5d223e6SXin LI>>(1.b+2)   byte    x
464a5d223e6SXin LI>>>0        use msdos-com
465a5d223e6SXin LI
466a5d223e6SXin LI# JMP 16bit
467a5d223e6SXin LI0           byte    0xe9
468a5d223e6SXin LI# forward jumps
469a5d223e6SXin LI>1          short   >-1
470a5d223e6SXin LI# that offset must be accessible
471a5d223e6SXin LI>>(1.s+3)   byte    x
472a5d223e6SXin LI>>>0        use msdos-com
473a5d223e6SXin LI# negative offset, must not lead into PSP
474a5d223e6SXin LI>1          short   <-259
475a5d223e6SXin LI# that offset must be accessible
476a5d223e6SXin LI>>(1,s+65539)   byte    x
477a5d223e6SXin LI>>>0        use msdos-com
478a5d223e6SXin LI
4793e41d09dSXin LI# updated by Joerg Jenderek at Oct 2008,2015
4803e41d09dSXin LI# following line is too general
4813e41d09dSXin LI0	ubyte		0xb8
4823e41d09dSXin LI# skip 2 linux kernels like memtest.bin with "\xb8\xc0\x07\x8e" in ./linux
4833e41d09dSXin LI>0	string		!\xb8\xc0\x07\x8e
484b6cee71dSXin LI# modified by Joerg Jenderek
4853e41d09dSXin LI# syslinux COM32 or COM32R executable
4863e41d09dSXin LI>>1	lelong&0xFFFFFFFe 0x21CD4CFe	COM executable (32-bit COMBOOT
4873e41d09dSXin LI# http://www.syslinux.org/wiki/index.php/Comboot_API
4883e41d09dSXin LI# Since version 5.00 c32 modules switched from the COM32 object format to ELF
4893e41d09dSXin LI!:mime	application/x-c32-comboot-syslinux-exec
4903e41d09dSXin LI!:ext c32
491b6cee71dSXin LI# http://syslinux.zytor.com/comboot.php
4923e41d09dSXin LI# older syslinux version ( <4 )
493b6cee71dSXin LI# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
494b6cee71dSXin LI# start with assembler instructions mov eax,21cd4cffh
4953e41d09dSXin LI>>>1	lelong		0x21CD4CFf	\b)
496b6cee71dSXin LI# syslinux:doc/comboot.txt
497b6cee71dSXin LI# A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov
498b6cee71dSXin LI# eax,21cd4cfeh) as a magic number.
4993e41d09dSXin LI# syslinux version (4.x)
5003e41d09dSXin LI# "COM executable (COM32R)" or "Syslinux COM32 module" by TrID
5013e41d09dSXin LI>>>1	lelong		0x21CD4CFe	\b, relocatable)
5023e41d09dSXin LI# remaining are DOS COM executables starting with assembler instruction MOV
5033e41d09dSXin LI# like FreeDOS BANNER*.COM FINDDISK.COM GIF2RAW.COM WINCHK.COM
5043e41d09dSXin LI# MS-DOS SYS.COM RESTART.COM
5053e41d09dSXin LI# SYSLINUX.COM (version 1.40 - 2.13)
5063e41d09dSXin LI# GFXBOOT.COM (version 3.75)
5073e41d09dSXin LI# COPYBS.COM POWEROFF.COM INT18.COM
5083e41d09dSXin LI>>1	default	x			COM executable for DOS
5093e41d09dSXin LI!:mime	application/x-dosexec
5103e41d09dSXin LI#!:mime	application/x-ms-dos-executable
5113e41d09dSXin LI#!:mime	application/x-msdos-program
5123e41d09dSXin LI!:ext com
5133e41d09dSXin LI
514b6cee71dSXin LI0	string/b	\x81\xfc
515b6cee71dSXin LI>4	string	\x77\x02\xcd\x20\xb9
516b6cee71dSXin LI>>36	string	UPX!			FREE-DOS executable (COM), UPX compressed
517b6cee71dSXin LI252	string Must\ have\ DOS\ version DR-DOS executable (COM)
518b6cee71dSXin LI# added by Joerg Jenderek at Oct 2008
519b6cee71dSXin LI# GRR search is not working
520b6cee71dSXin LI#34	search/2	UPX!		FREE-DOS executable (COM), UPX compressed
521b6cee71dSXin LI34	string	UPX!			FREE-DOS executable (COM), UPX compressed
522b6cee71dSXin LI35	string	UPX!			FREE-DOS executable (COM), UPX compressed
523b6cee71dSXin LI# GRR search is not working
524b6cee71dSXin LI#2	search/28	\xcd\x21	COM executable for MS-DOS
525b6cee71dSXin LI#WHICHFAT.cOM
526b6cee71dSXin LI2	string	\xcd\x21		COM executable for DOS
527b6cee71dSXin LI#DELTREE.cOM DELTREE2.cOM
528b6cee71dSXin LI4	string	\xcd\x21		COM executable for DOS
529b6cee71dSXin LI#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
530b6cee71dSXin LI5	string	\xcd\x21		COM executable for DOS
531b6cee71dSXin LI#DELTMP.COm HASFAT32.cOM
532b6cee71dSXin LI7	string	\xcd\x21
533b6cee71dSXin LI>0	byte	!0xb8			COM executable for DOS
534b6cee71dSXin LI#COMP.cOM MORE.COm
535b6cee71dSXin LI10	string	\xcd\x21
536b6cee71dSXin LI>5	string	!\xcd\x21		COM executable for DOS
537b6cee71dSXin LI#comecho.com
538b6cee71dSXin LI13	string	\xcd\x21		COM executable for DOS
539b6cee71dSXin LI#HELP.COm EDIT.coM
540b6cee71dSXin LI18	string	\xcd\x21		COM executable for MS-DOS
541b6cee71dSXin LI#NWRPLTRM.COm
542b6cee71dSXin LI23	string	\xcd\x21		COM executable for MS-DOS
543b6cee71dSXin LI#LOADFIX.cOm LOADFIX.cOm
544b6cee71dSXin LI30	string	\xcd\x21		COM executable for MS-DOS
545b6cee71dSXin LI#syslinux.com 3.11
546b6cee71dSXin LI70	string	\xcd\x21		COM executable for DOS
547b6cee71dSXin LI# many compressed/converted COMs start with a copy loop instead of a jump
548b6cee71dSXin LI0x6	search/0xa	\xfc\x57\xf3\xa5\xc3	COM executable for MS-DOS
549b6cee71dSXin LI0x6	search/0xa	\xfc\x57\xf3\xa4\xc3	COM executable for DOS
550b6cee71dSXin LI>0x18	search/0x10	\x50\xa4\xff\xd5\x73	\b, aPack compressed
551b6cee71dSXin LI0x3c	string		W\ Collis\0\0		COM executable for MS-DOS, Compack compressed
552b6cee71dSXin LI# FIXME: missing diet .com compression
553b6cee71dSXin LI
554b6cee71dSXin LI# miscellaneous formats
555b6cee71dSXin LI0	string/b	LZ		MS-DOS executable (built-in)
556b6cee71dSXin LI#0	byte		0xf0		MS-DOS program library data
557b6cee71dSXin LI#
558b6cee71dSXin LI
559b6cee71dSXin LI# AAF files:
560b6cee71dSXin LI# <stuartc@rd.bbc.co.uk> Stuart Cunningham
561b6cee71dSXin LI0	string/b	\320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377			AAF legacy file using MS Structured Storage
562b6cee71dSXin LI>30	byte	9		(512B sectors)
563b6cee71dSXin LI>30	byte	12		(4kB sectors)
564b6cee71dSXin LI0	string/b	\320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001			AAF file using MS Structured Storage
565b6cee71dSXin LI>30	byte	9		(512B sectors)
566b6cee71dSXin LI>30	byte	12		(4kB sectors)
567b6cee71dSXin LI
568b6cee71dSXin LI# Popular applications
569b6cee71dSXin LI2080	string	Microsoft\ Word\ 6.0\ Document	%s
570b6cee71dSXin LI!:mime	application/msword
571b6cee71dSXin LI2080	string	Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
572b6cee71dSXin LI!:mime	application/msword
573b6cee71dSXin LI# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)
574b6cee71dSXin LI2112	string	MSWordDoc			Microsoft Word document data
575b6cee71dSXin LI!:mime	application/msword
576b6cee71dSXin LI#
577b6cee71dSXin LI0	belong	0x31be0000			Microsoft Word Document
578b6cee71dSXin LI!:mime	application/msword
579b6cee71dSXin LI#
580b6cee71dSXin LI0	string/b	PO^Q`				Microsoft Word 6.0 Document
581b6cee71dSXin LI!:mime	application/msword
582b6cee71dSXin LI#
58340427ccaSGordon Tetlow4   long        0
58440427ccaSGordon Tetlow>0  belong      0xfe320000      Microsoft Word for Macintosh 1.0
585b6cee71dSXin LI!:mime	application/msword
58640427ccaSGordon Tetlow!:ext   mcw
58740427ccaSGordon Tetlow>0  belong      0xfe340000      Microsoft Word for Macintosh 3.0
588b6cee71dSXin LI!:mime	application/msword
58940427ccaSGordon Tetlow!:ext   mcw
59040427ccaSGordon Tetlow>0  belong      0xfe37001c      Microsoft Word for Macintosh 4.0
59140427ccaSGordon Tetlow!:mime	application/msword
59240427ccaSGordon Tetlow!:ext   mcw
59340427ccaSGordon Tetlow>0  belong      0xfe370023      Microsoft Word for Macintosh 5.0
59440427ccaSGordon Tetlow!:mime	application/msword
59540427ccaSGordon Tetlow!:ext   mcw
59640427ccaSGordon Tetlow
59740427ccaSGordon Tetlow0	string/b	\333\245-\0\0\0			Microsoft Word 2.0 Document
59840427ccaSGordon Tetlow!:mime	application/msword
59940427ccaSGordon Tetlow!:ext   doc
600*58a0f0d0SEitan Adler# Note: seems already recognized as "OLE 2 Compound Document" in ./ole2compounddocs
601*58a0f0d0SEitan Adler#512	string/b	\354\245\301			Microsoft Word Document
602*58a0f0d0SEitan Adler#!:mime	application/msword
603b6cee71dSXin LI
604b6cee71dSXin LI#
605b6cee71dSXin LI0	string/b	\xDB\xA5\x2D\x00		Microsoft WinWord 2.0 Document
606b6cee71dSXin LI!:mime application/msword
607b6cee71dSXin LI#
608b6cee71dSXin LI2080	string	Microsoft\ Excel\ 5.0\ Worksheet	%s
609b6cee71dSXin LI!:mime	application/vnd.ms-excel
610b6cee71dSXin LI#
611b6cee71dSXin LI0	string/b	\xDB\xA5\x2D\x00		Microsoft WinWord 2.0 Document
612b6cee71dSXin LI!:mime application/msword
613b6cee71dSXin LI
614b6cee71dSXin LI2080	string	Foglio\ di\ lavoro\ Microsoft\ Exce	%s
615b6cee71dSXin LI!:mime	application/vnd.ms-excel
616b6cee71dSXin LI#
617b6cee71dSXin LI# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
618b6cee71dSXin LI2114	string	Biff5		Microsoft Excel 5.0 Worksheet
619b6cee71dSXin LI!:mime	application/vnd.ms-excel
620b6cee71dSXin LI# Italian MS-Excel
621b6cee71dSXin LI2121	string	Biff5		Microsoft Excel 5.0 Worksheet
622b6cee71dSXin LI!:mime	application/vnd.ms-excel
623b6cee71dSXin LI0	string/b	\x09\x04\x06\x00\x00\x00\x10\x00	Microsoft Excel Worksheet
624b6cee71dSXin LI!:mime	application/vnd.ms-excel
625b6cee71dSXin LI#
626a5d223e6SXin LI# Update: Joerg Jenderek
627a5d223e6SXin LI# URL: https://en.wikipedia.org/wiki/Lotus_1-2-3
628a5d223e6SXin LI# Reference: http://www.aboutvb.de/bas/formate/pdf/wk3.pdf
629a5d223e6SXin LI# Note: newer Lotus versions >2 use longer BOF record
630a5d223e6SXin LI# record type (BeginningOfFile=0000h) + length (001Ah)
631a5d223e6SXin LI0	belong	0x00001a00
632a5d223e6SXin LI# reserved should be 0h but 8c0dh for TUTMAC.WK3, 5h for SAMPADNS.WK3, 1h for a_readme.wk3, 1eh for K&G86.WK3
633a5d223e6SXin LI#>18	uleshort&0x73E0	0
634a5d223e6SXin LI# Lotus Multi Byte Character Set (LMBCS=1-31)
635a5d223e6SXin LI>20	ubyte		>0
636a5d223e6SXin LI>>20	ubyte		<32	Lotus 1-2-3
637a5d223e6SXin LI#!:mime	application/x-123
638a5d223e6SXin LI!:mime	application/vnd.lotus-1-2-3
639a5d223e6SXin LI!:apple	????L123
640a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 1-2-3 wk3 document data"
641a5d223e6SXin LI>>>4	uleshort	0x1000	WorKsheet, version 3
642a5d223e6SXin LI!:ext	wk3
643a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 1-2-3 wk4 document data"
644a5d223e6SXin LI>>>4	uleshort	0x1002	WorKsheet, version 4
645a5d223e6SXin LI# also worksheet template 4 (.wt4)
646a5d223e6SXin LI!:ext	wk4/wt4
647a5d223e6SXin LI# no example or documentation for wk5
648a5d223e6SXin LI#>>4	uleshort	0x????	WorKsheet, version 4
649a5d223e6SXin LI#!:ext	wk5
650a5d223e6SXin LI# only MacrotoScript.123 example
651a5d223e6SXin LI>>>4	uleshort	0x1003	WorKsheet, version 97
652a5d223e6SXin LI# also worksheet template Smartmaster (.12M)?
653a5d223e6SXin LI!:ext	123
654a5d223e6SXin LI# only Set_Y2K.123 example
655a5d223e6SXin LI>>>4	uleshort	0x1005	WorKsheet, version 9.8 Millennium
656a5d223e6SXin LI!:ext	123
657a5d223e6SXin LI# no example for this version
658a5d223e6SXin LI>>>4	uleshort	0x8001	FoRMatting data
659a5d223e6SXin LI!:ext	frm
660a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 1-2-3 fm3 or fmb document data"
661a5d223e6SXin LI# TrID labeles the entry as "Formatting Data for Lotus 1-2-3 worksheet"
662a5d223e6SXin LI>>>4	uleshort	0x8007	ForMatting data, version 3
663a5d223e6SXin LI!:ext	fm3
664a5d223e6SXin LI>>>4	default		x	unknown
665a5d223e6SXin LI# file revision sub code 0004h for worksheets
666a5d223e6SXin LI>>>>6	uleshort	=0x0004	worksheet
667a5d223e6SXin LI!:ext	wXX
668a5d223e6SXin LI>>>>6	uleshort	!0x0004	formatting data
669a5d223e6SXin LI!:ext	fXX
670a5d223e6SXin LI# main revision number
671a5d223e6SXin LI>>>>4	uleshort	x	\b, revision 0x%x
672a5d223e6SXin LI>>>6	uleshort	=0x0004	\b, cell range
673a5d223e6SXin LI# active cellcoord range (start row, page,column ; end row, page, column)
674a5d223e6SXin LI# start values normally 0~1st sheet A1
675a5d223e6SXin LI>>>>8	ulelong		!0
676a5d223e6SXin LI>>>>>10	ubyte		>0	\b%d*
677a5d223e6SXin LI>>>>>8	uleshort	x	\b%d,
678a5d223e6SXin LI>>>>>11	ubyte		x	\b%d-
679a5d223e6SXin LI# end page mostly 0
680a5d223e6SXin LI>>>>14	ubyte		>0	\b%d*
681a5d223e6SXin LI# end raw, column normally not 0
682a5d223e6SXin LI>>>>12	uleshort	x	\b%d,
683a5d223e6SXin LI>>>>15	ubyte		x	\b%d
684a5d223e6SXin LI# Lotus Multi Byte Character Set (1~cp850,2~cp851,...,16~japan,...,31~??)
685a5d223e6SXin LI>>>>20	ubyte		>1	\b, character set 0x%x
686a5d223e6SXin LI# flags
687a5d223e6SXin LI>>>>21	ubyte		x	\b, flags 0x%x
688a5d223e6SXin LI>>>6	uleshort	!0x0004
689a5d223e6SXin LI# record type (FONTNAME=00AEh)
690a5d223e6SXin LI>>>>30	search/29	\0\xAE
691a5d223e6SXin LI# variable length m (2) + entries (1) + ?? (1) + LCMBS string (n)
692a5d223e6SXin LI>>>>>&4	string		>\0	\b, 1st font "%s"
693b6cee71dSXin LI#
694a5d223e6SXin LI# Update: Joerg Jenderek
695a5d223e6SXin LI# URL: http://fileformats.archiveteam.org/wiki/Lotus_1-2-3
696a5d223e6SXin LI# Reference: http://www.schnarff.com/file-formats/lotus-1-2-3/WSFF2.TXT
697a5d223e6SXin LI# Note: Used by both old Lotus 1-2-3 and Lotus Symphony (DOS) til version 2.x
698a5d223e6SXin LI# record type (BeginningOfFile=0000h) + length (0002h)
699a5d223e6SXin LI0	belong	0x00000200
700a5d223e6SXin LI# GRR: line above is too general as it catches also MS Windows CURsor
701a5d223e6SXin LI# to display MS Windows cursor (strength=70) before Lotus 1-2-3 (strength=70-1)
702a5d223e6SXin LI!:strength -1
703a5d223e6SXin LI# skip Windows cursors with image height <256 and keep Lotus with low opcode 0001-0083h
704a5d223e6SXin LI>7	ubyte		0
705a5d223e6SXin LI# skip Windows cursors with image width 256 and keep Lotus with positiv opcode
706a5d223e6SXin LI>>6	ubyte		>0	Lotus
707a5d223e6SXin LI# !:mime	application/x-123
708a5d223e6SXin LI!:mime	application/vnd.lotus-1-2-3
709a5d223e6SXin LI!:apple	????L123
710a5d223e6SXin LI# revision number (0404h = 123 1A, 0405h = Lotus Symphony , 0406h = 123 2.x wk1 , 8006h = fmt , ...)
711a5d223e6SXin LI# undocumented; (version 5.26) labeled the configurations as "Lotus 1-2-3"
712a5d223e6SXin LI>>>4	uleshort	0x0007	1-2-3 CoNFiguration, version 2.x (PGRAPH.CNF)
713a5d223e6SXin LI!:ext	cnf
714a5d223e6SXin LI>>>4	uleshort	0x0C05	1-2-3 CoNFiguration, version 2.4J
715a5d223e6SXin LI!:ext	cnf
716a5d223e6SXin LI>>>4	uleshort	0x0801	1-2-3 CoNFiguration, version 1-2.1
717a5d223e6SXin LI!:ext	cnf
718a5d223e6SXin LI>>>4	uleshort	0x0802	Symphony CoNFiguration
719a5d223e6SXin LI!:ext	cnf
720a5d223e6SXin LI>>>4	uleshort	0x0804	1-2-3 CoNFiguration, version 2.2
721a5d223e6SXin LI!:ext	cnf
722a5d223e6SXin LI>>>4	uleshort	0x080A	1-2-3 CoNFiguration, version 2.3-2.4
723a5d223e6SXin LI!:ext	cnf
724a5d223e6SXin LI>>>4	uleshort	0x1402	1-2-3 CoNFiguration, version 3.x
725a5d223e6SXin LI!:ext	cnf
726a5d223e6SXin LI>>>4	uleshort	0x1450	1-2-3 CoNFiguration, version 4.x
727a5d223e6SXin LI!:ext	cnf
728a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 123"
729a5d223e6SXin LI# TrID labeles the entry as "Lotus 123 Worksheet (generic)"
730a5d223e6SXin LI>>>4	uleshort	0x0404	1-2-3 WorKSheet, version 1
731a5d223e6SXin LI# extension "wks" also for Microsoft Works document
732a5d223e6SXin LI!:ext	wks
733a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 123"
734a5d223e6SXin LI# TrID labeles the entry as "Lotus 123 Worksheet (generic)"
735a5d223e6SXin LI>>>4	uleshort	0x0405	Symphony WoRksheet, version 1.0
736a5d223e6SXin LI!:ext	wrk/wr1
737a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 1-2-3 wk1 document data"
738a5d223e6SXin LI# TrID labeles the entry as "Lotus 123 Worksheet (V2)"
739a5d223e6SXin LI>>>4	uleshort	0x0406	1-2-3/Symphony worksheet, version 2
740a5d223e6SXin LI# Symphony (.wr1)
741a5d223e6SXin LI!:ext	wk1/wr1
742a5d223e6SXin LI# no example for this japan version
743a5d223e6SXin LI>>>4	uleshort	0x0600	1-2-3 WorKsheet, version 1.xJ
744a5d223e6SXin LI!:ext	wj1
745a5d223e6SXin LI# no example or documentation for wk2
746a5d223e6SXin LI#>>>4	uleshort	0x????	1-2-3 WorKsheet, version 2
747a5d223e6SXin LI#!:ext	wk2
748a5d223e6SXin LI# undocumented japan version
749a5d223e6SXin LI>>>4	uleshort	0x0602	1-2-3 worksheet, version 2.4J
750a5d223e6SXin LI!:ext	wj3
751a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 1-2-3 fmt document data"
752a5d223e6SXin LI>>>4	uleshort	0x8006	1-2-3 ForMaTting data, version 2.x
753a5d223e6SXin LI# japan version 2.4J (fj3)
754a5d223e6SXin LI!:ext	fmt/fj3
755a5d223e6SXin LI# no example for this version
756a5d223e6SXin LI>>>4	uleshort	0x8007	1-2-3 FoRMatting data, version 2.0
757a5d223e6SXin LI!:ext	frm
758a5d223e6SXin LI# (version 5.26) labeled the entry as "Lotus 1-2-3"
759a5d223e6SXin LI>>>4	default		x	unknown worksheet or configuration
760a5d223e6SXin LI!:ext	cnf
761a5d223e6SXin LI>>>>4	uleshort	x	\b, revision 0x%x
762a5d223e6SXin LI# 2nd record for most worksheets describes cells range
763a5d223e6SXin LI>>>6		use	lotus-cells
764a5d223e6SXin LI# 3nd record for most japan worksheets describes cells range
765a5d223e6SXin LI>>>(8.s+10)	use	lotus-cells
766a5d223e6SXin LI#	check and then display Lotus worksheet cells range
767a5d223e6SXin LI0	name		lotus-cells
768a5d223e6SXin LI# look for type (RANGE=0006h) + length (0008h) at record begin
769a5d223e6SXin LI>0	ubelong	0x06000800	\b, cell range
770a5d223e6SXin LI# cell range (start column, row, end column, row) start values normally 0,0~A1 cell
771a5d223e6SXin LI>>4	ulong		!0
772a5d223e6SXin LI>>>4	uleshort	x	\b%d,
773a5d223e6SXin LI>>>6	uleshort	x	\b%d-
774a5d223e6SXin LI# end of cell range
775a5d223e6SXin LI>>8	uleshort	x	\b%d,
776a5d223e6SXin LI>>10	uleshort	x	\b%d
777a5d223e6SXin LI# EndOfLotus123
778b6cee71dSXin LI0	string/b		WordPro\0	Lotus WordPro
779b6cee71dSXin LI!:mime	application/vnd.lotus-wordpro
780b6cee71dSXin LI0	string/b		WordPro\r\373	Lotus WordPro
781b6cee71dSXin LI!:mime	application/vnd.lotus-wordpro
782b6cee71dSXin LI
783b6cee71dSXin LI
784b6cee71dSXin LI# Summary: Script used by InstallScield to uninstall applications
785b6cee71dSXin LI# Extension: .isu
786b6cee71dSXin LI# Submitted by: unknown
787b6cee71dSXin LI# Modified by (1): Abel Cheung <abelcheung@gmail.com> (replace useless entry)
788b6cee71dSXin LI0		string		\x71\xa8\x00\x00\x01\x02
789b6cee71dSXin LI>12		string		Stirling\ Technologies,		InstallShield Uninstall Script
790b6cee71dSXin LI
791b6cee71dSXin LI# Winamp .avs
792b6cee71dSXin LI#0	string	Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
793b6cee71dSXin LI0	string/b	Nullsoft\ AVS\ Preset\ 	Winamp plug in
794b6cee71dSXin LI
795b6cee71dSXin LI# Windows Metafont .WMF
796b6cee71dSXin LI0	string/b	\327\315\306\232	ms-windows metafont .wmf
797b6cee71dSXin LI0	string/b	\002\000\011\000	ms-windows metafont .wmf
798b6cee71dSXin LI0	string/b	\001\000\011\000	ms-windows metafont .wmf
799b6cee71dSXin LI
800b6cee71dSXin LI#tz3 files whatever that is (MS Works files)
801b6cee71dSXin LI0	string/b	\003\001\001\004\070\001\000\000	tz3 ms-works file
802b6cee71dSXin LI0	string/b	\003\002\001\004\070\001\000\000	tz3 ms-works file
803b6cee71dSXin LI0	string/b	\003\003\001\004\070\001\000\000	tz3 ms-works file
804b6cee71dSXin LI
805b6cee71dSXin LI# PGP sig files .sig
806b6cee71dSXin LI#0 string \211\000\077\003\005\000\063\237\127 065 to  \027\266\151\064\005\045\101\233\021\002 PGP sig
807b6cee71dSXin LI0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
808b6cee71dSXin LI0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
809b6cee71dSXin LI0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
810b6cee71dSXin LI0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
811b6cee71dSXin LI0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
812b6cee71dSXin LI0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
813b6cee71dSXin LI
814b6cee71dSXin LI# windows zips files .dmf
815b6cee71dSXin LI0	string/b	MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file
816b6cee71dSXin LI
817b6cee71dSXin LI
818b6cee71dSXin LI#ico files
819b6cee71dSXin LI0	string/b	\102\101\050\000\000\000\056\000\000\000\000\000\000\000	Icon for MS Windows
820b6cee71dSXin LI
821b6cee71dSXin LI# Windows icons
822282e23f0SXin LI# Update: Joerg Jenderek
823282e23f0SXin LI# URL: https://en.wikipedia.org/wiki/CUR_(file_format)
82440427ccaSGordon Tetlow# Note: similar to Windows CURsor. container for BMP (only DIB part) or PNG
825b6cee71dSXin LI0   belong  0x00000100
826b6cee71dSXin LI>9  byte    0
827282e23f0SXin LI>>0 byte    x
828282e23f0SXin LI>>0 use     cur-ico-dir
829b6cee71dSXin LI>9  ubyte   0xff
830282e23f0SXin LI>>0 byte    x
831282e23f0SXin LI>>0 use     cur-ico-dir
832282e23f0SXin LI#	displays number of icons and information for icon or cursor
833282e23f0SXin LI0	name		cur-ico-dir
834282e23f0SXin LI# skip some Lotus 1-2-3 worksheets, CYCLE.PIC and keep Windows cursors with
835282e23f0SXin LI# 1st data offset = dir header size + n * dir entry size = 6 + n * 10h = ?6h
836282e23f0SXin LI>18		ulelong		&0x00000006
837282e23f0SXin LI# skip remaining worksheets, because valid only for DIB image (40) or PNG image (\x89PNG)
838282e23f0SXin LI>>(18.l)	ulelong		x		MS Windows
839282e23f0SXin LI>>>0		ubelong		0x00000100	icon resource
840282e23f0SXin LI#!:mime		image/vnd.microsoft.icon
841b6cee71dSXin LI!:mime		image/x-icon
842282e23f0SXin LI!:ext		ico
843282e23f0SXin LI>>>>4 		uleshort	x		- %d icon
844282e23f0SXin LI# plural s
845282e23f0SXin LI>>>>4 		uleshort	>1		\bs
846282e23f0SXin LI# 1st icon
847282e23f0SXin LI>>>>0x06	use		ico-entry
848282e23f0SXin LI# 2nd icon
849282e23f0SXin LI>>>>4 		uleshort	>1
850282e23f0SXin LI>>>>>0x16	use		ico-entry
851282e23f0SXin LI>>>0		ubelong		0x00000200	cursor resource
852282e23f0SXin LI#!:mime		image/x-cur
853282e23f0SXin LI!:mime		image/x-win-bitmap
854282e23f0SXin LI!:ext		cur
855282e23f0SXin LI>>>>4 		uleshort	x		- %d icon
856282e23f0SXin LI>>>>4 		uleshort	>1		\bs
857282e23f0SXin LI# 1st cursor
858282e23f0SXin LI>>>>0x06	use		cur-entry
859282e23f0SXin LI#>>>>0x16	use		cur-entry
860282e23f0SXin LI#	display information of one cursor entry
861282e23f0SXin LI0	name		cur-entry
862282e23f0SXin LI>0	use		cur-ico-entry
863282e23f0SXin LI>4	uleshort	x	\b, hotspot @%dx
864282e23f0SXin LI>6	uleshort	x	\b%d
865282e23f0SXin LI#	display information of one icon entry
866282e23f0SXin LI0	name		ico-entry
867282e23f0SXin LI>0			use	cur-ico-entry
868282e23f0SXin LI# normally 0 1 but also found 14
869282e23f0SXin LI>4	uleshort	>1	\b, %d planes
870282e23f0SXin LI# normally 0 1 but also found some 3, 4, some 6, 8, 24, many 32, two 256
871282e23f0SXin LI>6	uleshort	>1	\b, %d bits/pixel
872282e23f0SXin LI#	display shared information of cursor or icon entry
873282e23f0SXin LI0		name		cur-ico-entry
874282e23f0SXin LI>0		byte		=0		\b, 256x
875282e23f0SXin LI>0		byte		!0		\b, %dx
876282e23f0SXin LI>1		byte        	=0		\b256
877282e23f0SXin LI>1		byte        	!0		\b%d
878282e23f0SXin LI# number of colors in palette
879282e23f0SXin LI>2		ubyte		!0		\b, %d colors
880282e23f0SXin LI# reserved 0 FFh
881282e23f0SXin LI#>3		ubyte        	x		\b, reserved %x
882282e23f0SXin LI#>8		ulelong		x		\b, image size %d
883282e23f0SXin LI# offset of PNG or DIB image
884282e23f0SXin LI#>12		ulelong		x		\b, offset 0x%x
885282e23f0SXin LI# PNG header (\x89PNG)
886282e23f0SXin LI>(12.l)		ubelong		=0x89504e47
887282e23f0SXin LI>>&-4		indirect	x	\b with
888282e23f0SXin LI# DIB image
889282e23f0SXin LI>(12.l)		ubelong		!0x89504e47
890282e23f0SXin LI#>>&-4		use     	dib-image
891b6cee71dSXin LI
892b6cee71dSXin LI# Windows non-animated cursors
893282e23f0SXin LI# Update: Joerg Jenderek
894282e23f0SXin LI# URL: https://en.wikipedia.org/wiki/CUR_(file_format)
89540427ccaSGordon Tetlow# Note: similar to Windows ICOn. container for BMP ( only DIB part)
896282e23f0SXin LI# GRR: line below is too general as it catches also Lotus 1-2-3 files
897b6cee71dSXin LI0   belong  0x00000200
898b6cee71dSXin LI>9  byte    0
899282e23f0SXin LI>>0 use     cur-ico-dir
900b6cee71dSXin LI>9  ubyte   0xff
901282e23f0SXin LI>>0 use     cur-ico-dir
902b6cee71dSXin LI
903b6cee71dSXin LI# .chr files
904b6cee71dSXin LI0	string/b	PK\010\010BGI	Borland font
905b6cee71dSXin LI>4	string	>\0	%s
906b6cee71dSXin LI# then there is a copyright notice
907b6cee71dSXin LI
908b6cee71dSXin LI
909b6cee71dSXin LI# .bgi files
910b6cee71dSXin LI0	string/b	pk\010\010BGI	Borland device
911b6cee71dSXin LI>4	string	>\0	%s
912b6cee71dSXin LI# then there is a copyright notice
913b6cee71dSXin LI
914b6cee71dSXin LI
915b6cee71dSXin LI# Windows Recycle Bin record file (named INFO2)
916b6cee71dSXin LI# By Abel Cheung (abelcheung AT gmail dot com)
917b6cee71dSXin LI# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes
918b6cee71dSXin LI# Since Vista uses another structure, INFO2 structure probably won't change
919b6cee71dSXin LI# anymore. Detailed analysis in:
920b6cee71dSXin LI# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf
921b6cee71dSXin LI0	lelong		0x00000004
922b6cee71dSXin LI>12	lelong		0x00000118	Windows Recycle Bin INFO2 file (Win98 or below)
923b6cee71dSXin LI
924b6cee71dSXin LI0	lelong		0x00000005
925b6cee71dSXin LI>12	lelong		0x00000320	Windows Recycle Bin INFO2 file (Win2k - WinXP)
926b6cee71dSXin LI
927b6cee71dSXin LI# From Doug Lee via a FreeBSD pr
928b6cee71dSXin LI9	string		GERBILDOC	First Choice document
929b6cee71dSXin LI9	string		GERBILDB	First Choice database
930b6cee71dSXin LI9	string		GERBILCLIP	First Choice database
931b6cee71dSXin LI0	string		GERBIL		First Choice device file
932b6cee71dSXin LI9	string		RABBITGRAPH	RabbitGraph file
933b6cee71dSXin LI0	string		DCU1		Borland Delphi .DCU file
934b6cee71dSXin LI0	string		=!<spell>	MKS Spell hash list (old format)
935b6cee71dSXin LI0	string		=!<spell2>	MKS Spell hash list
936b6cee71dSXin LI# Too simple - MPi
937b6cee71dSXin LI#0	string		AH		Halo(TM) bitmapped font file
938b6cee71dSXin LI0	lelong		0x08086b70	TurboC BGI file
939b6cee71dSXin LI0	lelong		0x08084b50	TurboC Font file
940b6cee71dSXin LI
941b6cee71dSXin LI# Debian#712046: The magic below identifies "Delphi compiled form data".
942b6cee71dSXin LI# An additional source of information is available at:
943b6cee71dSXin LI# http://www.woodmann.com/fravia/dafix_t1.htm
944b6cee71dSXin LI0	string		TPF0
945b6cee71dSXin LI>4	pstring		>\0		Delphi compiled form '%s'
946b6cee71dSXin LI
947b6cee71dSXin LI# tests for DBase files moved, updated and merged to database
948b6cee71dSXin LI
949b6cee71dSXin LI0	string		PMCC		Windows 3.x .GRP file
950b6cee71dSXin LI1	string		RDC-meg		MegaDots
951b6cee71dSXin LI>8	byte		>0x2F		version %c
952b6cee71dSXin LI>9	byte		>0x2F		\b.%c file
953b6cee71dSXin LI0	lelong		0x4C
954b6cee71dSXin LI>4	lelong		0x00021401	Windows shortcut file
955b6cee71dSXin LI
956b6cee71dSXin LI# .PIF files added by Joerg Jenderek from http://smsoft.ru/en/pifdoc.htm
957b6cee71dSXin LI# only for windows versions equal or greater 3.0
958b6cee71dSXin LI0x171	string	MICROSOFT\ PIFEX\0	Windows Program Information File
959b6cee71dSXin LI!:mime	application/x-dosexec
960b6cee71dSXin LI#>2	string	 	>\0		\b, Title:%.30s
961b6cee71dSXin LI>0x24	string		>\0		\b for %.63s
962b6cee71dSXin LI>0x65	string		>\0		\b, directory=%.64s
963b6cee71dSXin LI>0xA5	string		>\0		\b, parameters=%.64s
964b6cee71dSXin LI#>0x181	leshort	x	\b, offset %x
965b6cee71dSXin LI#>0x183	leshort	x	\b, offsetdata %x
966b6cee71dSXin LI#>0x185	leshort	x	\b, section length %x
967b6cee71dSXin LI>0x187	search/0xB55	WINDOWS\ VMM\ 4.0\0
968b6cee71dSXin LI>>&0x5e		ubyte	>0
969b6cee71dSXin LI>>>&-1		string	<PIFMGR.DLL		\b, icon=%s
970b6cee71dSXin LI#>>>&-1		string	PIFMGR.DLL		\b, icon=%s
971b6cee71dSXin LI>>>&-1		string	>PIFMGR.DLL		\b, icon=%s
972b6cee71dSXin LI>>&0xF0		ubyte	>0
973b6cee71dSXin LI>>>&-1		string	<Terminal		\b, font=%.32s
974b6cee71dSXin LI#>>>&-1		string	=Terminal		\b, font=%.32s
975b6cee71dSXin LI>>>&-1		string	>Terminal		\b, font=%.32s
976b6cee71dSXin LI>>&0x110	ubyte	>0
977b6cee71dSXin LI>>>&-1		string	<Lucida\ Console	\b, TrueTypeFont=%.32s
978b6cee71dSXin LI#>>>&-1		string	=Lucida\ Console	\b, TrueTypeFont=%.32s
979b6cee71dSXin LI>>>&-1		string	>Lucida\ Console	\b, TrueTypeFont=%.32s
980b6cee71dSXin LI#>0x187	search/0xB55	WINDOWS\ 286\ 3.0\0	\b, Windows 3.X standard mode-style
981b6cee71dSXin LI#>0x187	search/0xB55	WINDOWS\ 386\ 3.0\0	\b, Windows 3.X enhanced mode-style
982b6cee71dSXin LI>0x187	search/0xB55	WINDOWS\ NT\ \ 3.1\0	\b, Windows NT-style
983b6cee71dSXin LI#>0x187	search/0xB55	WINDOWS\ NT\ \ 4.0\0	\b, Windows NT-style
984b6cee71dSXin LI>0x187	search/0xB55	CONFIG\ \ SYS\ 4.0\0	\b +CONFIG.SYS
985b6cee71dSXin LI#>>&06		string	x			\b:%s
986b6cee71dSXin LI>0x187	search/0xB55	AUTOEXECBAT\ 4.0\0	\b +AUTOEXEC.BAT
987b6cee71dSXin LI#>>&06		string	x			\b:%s
988b6cee71dSXin LI
989b6cee71dSXin LI# DOS EPS Binary File Header
990b6cee71dSXin LI# From: Ed Sznyter <ews@Black.Market.NET>
991b6cee71dSXin LI0	belong		0xC5D0D3C6	DOS EPS Binary File
99240427ccaSGordon Tetlow!:mime	image/x-eps
993b6cee71dSXin LI>4	long		>0		Postscript starts at byte %d
994b6cee71dSXin LI>>8	long		>0		length %d
995b6cee71dSXin LI>>>12	long		>0		Metafile starts at byte %d
996b6cee71dSXin LI>>>>16	long		>0		length %d
997b6cee71dSXin LI>>>20	long		>0		TIFF starts at byte %d
998b6cee71dSXin LI>>>>24	long		>0		length %d
999b6cee71dSXin LI
1000b6cee71dSXin LI# TNEF magic From "Joomy" <joomy@se-ed.net>
1001b6cee71dSXin LI# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
100240427ccaSGordon Tetlow0	lelong		0x223e9f78	TNEF
1003b6cee71dSXin LI!:mime	application/vnd.ms-tnef
1004b6cee71dSXin LI
1005b6cee71dSXin LI# Norton Guide (.NG , .HLP) files added by Joerg Jenderek from source NG2HTML.C
1006b6cee71dSXin LI# of http://www.davep.org/norton-guides/ng2h-105.tgz
1007b6cee71dSXin LI# http://en.wikipedia.org/wiki/Norton_Guides
1008b6cee71dSXin LI0	string		NG\0\001
1009b6cee71dSXin LI# only value 0x100 found at offset 2
1010b6cee71dSXin LI>2	ulelong		0x00000100	Norton Guide
1011b6cee71dSXin LI# Title[40]
1012b6cee71dSXin LI>>8	string		>\0		"%-.40s"
1013b6cee71dSXin LI#>>6	uleshort	x		\b, MenuCount=%u
1014b6cee71dSXin LI# szCredits[5][66]
1015b6cee71dSXin LI>>48	string		>\0		\b, %-.66s
1016b6cee71dSXin LI>>114	string		>\0		%-.66s
1017b6cee71dSXin LI
1018b6cee71dSXin LI# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS
1019b6cee71dSXin LI# of http://www.4dos.info/
1020b6cee71dSXin LI# pointer,HelpID[8]=4DHnnnmm
1021b6cee71dSXin LI0	ulelong	0x48443408		4DOS help file
1022b6cee71dSXin LI>4	string	x			\b, version %-4.4s
1023b6cee71dSXin LI
1024b6cee71dSXin LI# old binary Microsoft (.HLP) files added by Joerg Jenderek from http://file-extension.net/seeker/file_extension_hlp
1025b6cee71dSXin LI0	ulequad	0x3a000000024e4c	MS Advisor help file
1026b6cee71dSXin LI
1027b6cee71dSXin LI# HtmlHelp files (.chm)
10289ce06829SXin LI0	string/b	ITSF\003\000\000\000\x60\000\000\000	MS Windows HtmlHelp Data
1029b6cee71dSXin LI
1030b6cee71dSXin LI# GFA-BASIC (Wolfram Kleff)
1031b6cee71dSXin LI2	string/b	GFA-BASIC3	GFA-BASIC 3 data
1032b6cee71dSXin LI
1033b6cee71dSXin LI#------------------------------------------------------------------------------
1034b6cee71dSXin LI# From Stuart Caie <kyzer@4u.net> (developer of cabextract)
1035b6cee71dSXin LI# Microsoft Cabinet files
1036b6cee71dSXin LI0	string/b	MSCF\0\0\0\0	Microsoft Cabinet archive data
1037b6cee71dSXin LI!:mime application/vnd.ms-cab-compressed
1038b6cee71dSXin LI>8	lelong		x		\b, %u bytes
1039b6cee71dSXin LI>28	leshort		1		\b, 1 file
1040b6cee71dSXin LI>28	leshort		>1		\b, %u files
1041b6cee71dSXin LI
1042b6cee71dSXin LI# InstallShield Cabinet files
1043b6cee71dSXin LI0	string/b	ISc(		InstallShield Cabinet archive data
1044b6cee71dSXin LI>5	byte&0xf0	=0x60		version 6,
1045b6cee71dSXin LI>5	byte&0xf0	!0x60		version 4/5,
1046b6cee71dSXin LI>(12.l+40)	lelong	x		%u files
1047b6cee71dSXin LI
1048b6cee71dSXin LI# Windows CE package files
1049b6cee71dSXin LI0	string/b	MSCE\0\0\0\0	Microsoft WinCE install header
1050b6cee71dSXin LI>20	lelong		0		\b, architecture-independent
1051b6cee71dSXin LI>20	lelong		103		\b, Hitachi SH3
1052b6cee71dSXin LI>20	lelong		104		\b, Hitachi SH4
1053b6cee71dSXin LI>20	lelong		0xA11		\b, StrongARM
1054b6cee71dSXin LI>20	lelong		4000		\b, MIPS R4000
1055b6cee71dSXin LI>20	lelong		10003		\b, Hitachi SH3
1056b6cee71dSXin LI>20	lelong		10004		\b, Hitachi SH3E
1057b6cee71dSXin LI>20	lelong		10005		\b, Hitachi SH4
1058b6cee71dSXin LI>20	lelong		70001		\b, ARM 7TDMI
1059b6cee71dSXin LI>52	leshort		1		\b, 1 file
1060b6cee71dSXin LI>52	leshort		>1		\b, %u files
1061b6cee71dSXin LI>56	leshort		1		\b, 1 registry entry
1062b6cee71dSXin LI>56	leshort		>1		\b, %u registry entries
1063b6cee71dSXin LI
1064b6cee71dSXin LI
1065b6cee71dSXin LI# Windows Enhanced Metafile (EMF)
1066b6cee71dSXin LI# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
1067b6cee71dSXin LI# for further information.
1068b6cee71dSXin LI0	ulelong 1
1069b6cee71dSXin LI>40	string	\ EMF		Windows Enhanced Metafile (EMF) image data
1070b6cee71dSXin LI>>44	ulelong x		version 0x%x
1071b6cee71dSXin LI
1072b6cee71dSXin LI
1073b6cee71dSXin LI0	string/b	\224\246\056		Microsoft Word Document
1074b6cee71dSXin LI!:mime	application/msword
1075b6cee71dSXin LI
1076b6cee71dSXin LI512	string	R\0o\0o\0t\0\ \0E\0n\0t\0r\0y	Microsoft Word Document
1077b6cee71dSXin LI!:mime	application/msword
1078b6cee71dSXin LI
1079b6cee71dSXin LI# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
1080b6cee71dSXin LI# Magic type for Dell's BIOS .hdr files
1081b6cee71dSXin LI# Dell's .hdr
1082b6cee71dSXin LI0	string/b $RBU
1083b6cee71dSXin LI>23	string Dell			%s system BIOS
1084b6cee71dSXin LI>5	byte   2
1085b6cee71dSXin LI>>48	byte   x			version %d.
1086b6cee71dSXin LI>>49	byte   x			\b%d.
1087b6cee71dSXin LI>>50	byte   x			\b%d
1088b6cee71dSXin LI>5	byte   <2
1089b6cee71dSXin LI>>48	string x			version %.3s
1090b6cee71dSXin LI
1091b6cee71dSXin LI# Type: Microsoft DirectDraw Surface
1092b6cee71dSXin LI# URL:	http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
1093b6cee71dSXin LI# From: Morten Hustveit <morten@debian.org>
1094b6cee71dSXin LI0	string/b	DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS),
1095b6cee71dSXin LI>16	lelong	>0			%d x
1096b6cee71dSXin LI>12	lelong	>0			%d,
1097b6cee71dSXin LI>84	string	x			%.4s
1098b6cee71dSXin LI
1099b6cee71dSXin LI# Type: Microsoft Document Imaging Format (.mdi)
1100b6cee71dSXin LI# URL:	http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
1101b6cee71dSXin LI# From: Daniele Sempione <scrows@oziosi.org>
1102a5d223e6SXin LI# Too weak (EP)
1103a5d223e6SXin LI#0	short	0x5045			Microsoft Document Imaging Format
1104b6cee71dSXin LI
1105b6cee71dSXin LI# MS eBook format (.lit)
1106b6cee71dSXin LI0	string/b	ITOLITLS		Microsoft Reader eBook Data
1107b6cee71dSXin LI>8	lelong	x			\b, version %u
1108b6cee71dSXin LI!:mime					application/x-ms-reader
1109b6cee71dSXin LI
1110b6cee71dSXin LI# Windows CE Binary Image Data Format
1111b6cee71dSXin LI# From: Dr. Jesus <j@hug.gs>
1112b6cee71dSXin LI0	string/b	B000FF\n	Windows Embedded CE binary image
1113b6cee71dSXin LI
1114b6cee71dSXin LI# Windows Imaging (WIM) Image
1115b6cee71dSXin LI0	string/b	MSWIM\000\000\000	Windows imaging (WIM) image
11163e41d09dSXin LI0	string/b	WLPWM\000\000\000	Windows imaging (WIM) image, wimlib pipable format
1117b6cee71dSXin LI
1118b6cee71dSXin LI# The second byte of these signatures is a file version; I don't know what,
1119b6cee71dSXin LI# if anything, produced files with version numbers 0-2.
1120b6cee71dSXin LI# From: John Elliott <johne@seasip.demon.co.uk>
1121b6cee71dSXin LI0	string	\xfc\x03\x00	Mallard BASIC program data (v1.11)
1122b6cee71dSXin LI0	string	\xfc\x04\x00	Mallard BASIC program data (v1.29+)
1123b6cee71dSXin LI0	string	\xfc\x03\x01	Mallard BASIC protected program data (v1.11)
1124b6cee71dSXin LI0	string	\xfc\x04\x01	Mallard BASIC protected program data (v1.29+)
1125b6cee71dSXin LI
1126b6cee71dSXin LI0	string	MIOPEN		Mallard BASIC Jetsam data
1127b6cee71dSXin LI0	string	Jetsam0		Mallard BASIC Jetsam index data
1128b6cee71dSXin LI
112940427ccaSGordon Tetlow# DOS backup 2.0 to 3.2
113040427ccaSGordon Tetlow
113140427ccaSGordon Tetlow# backupid.@@@
113240427ccaSGordon Tetlow
113340427ccaSGordon Tetlow# plausibility check for date
113440427ccaSGordon Tetlow0x3	ushort	>1979
113540427ccaSGordon Tetlow>0x5	ubyte-1 <31
113640427ccaSGordon Tetlow>>0x6	ubyte-1 <12
113740427ccaSGordon Tetlow# actually 121 nul bytes
113840427ccaSGordon Tetlow>>>0x7	string	\0\0\0\0\0\0\0\0
113940427ccaSGordon Tetlow>>>>0x1 ubyte	x	DOS 2.0 backup id file, sequence %d
114040427ccaSGordon Tetlow!:ext @@@
114140427ccaSGordon Tetlow>>>>0x0 ubyte	0xff	\b, last disk
114240427ccaSGordon Tetlow
114340427ccaSGordon Tetlow# backed up file
114440427ccaSGordon Tetlow
114540427ccaSGordon Tetlow# skip some AppleWorks word like Tomahawk.Awp, WIN98SE-DE.vhd
114640427ccaSGordon Tetlow# by looking for trailing nul of maximal file name string
114740427ccaSGordon Tetlow0x52	ubyte	0
114840427ccaSGordon Tetlow# test for flag byte: FFh~complete file, 00h~split file
114940427ccaSGordon Tetlow# FFh -127 =	-1 -127 =	-128
115040427ccaSGordon Tetlow# 00h -127 =	 0 -127 =	-127
115140427ccaSGordon Tetlow>0	byte-127	<-126
115240427ccaSGordon Tetlow# plausibility check for file name length
115340427ccaSGordon Tetlow>>0x53	ubyte-1	<78
115440427ccaSGordon Tetlow# looking for terminating nul of file name string
115540427ccaSGordon Tetlow>>>(0x53.b+4)	ubyte	0
115640427ccaSGordon Tetlow# looking if last char of string is valid DOS file name
115740427ccaSGordon Tetlow>>>>(0x53.b+3)	ubyte	>0x1F
115840427ccaSGordon Tetlow# actually 44 nul bytes
115940427ccaSGordon Tetlow# but sometimes garbage according to Ralf Quint. So can not be used as test
116040427ccaSGordon Tetlow#>0x54	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
116140427ccaSGordon Tetlow# first char of full file name is DOS (5Ch) or UNIX (2Fh) path separator
116240427ccaSGordon Tetlow# only DOS variant found. UNIX variant according to V32SLASH.TXT in archive PD0315.EXE
116340427ccaSGordon Tetlow>>>>>5	ubyte&0x8C	0x0C
116440427ccaSGordon Tetlow# ./msdos (version 5.30) labeled the entry as
116540427ccaSGordon Tetlow# "DOS 2.0 backed up file %s, split file, sequence %d" or
116640427ccaSGordon Tetlow# "DOS 2.0 backed up file %s, complete file"
116740427ccaSGordon Tetlow>>>>>>0	ubyte	x	DOS 2.0-3.2 backed up
116840427ccaSGordon Tetlow#>>>>>>0	ubyte	0xff	complete
116940427ccaSGordon Tetlow>>>>>>0	ubyte	0
117040427ccaSGordon Tetlow>>>>>>>1 uleshort	x	sequence %d of
117140427ccaSGordon Tetlow# full file name with path but without drive letter and colon stored from 0x05 til 0x52
117240427ccaSGordon Tetlow>>>>>>0x5	string	x	file %s
117340427ccaSGordon Tetlow# backup name is original filename
117440427ccaSGordon Tetlow#!:ext	*
117540427ccaSGordon Tetlow# magic/Magdir/msdos, 1169: Warning: EXTENSION type `     *' has bad char '*'
117640427ccaSGordon Tetlow# file: line 1169: Bad magic entry '  *'
117740427ccaSGordon Tetlow# after header original file content
117840427ccaSGordon Tetlow>>>>>>128	indirect x	\b;
117940427ccaSGordon Tetlow
118040427ccaSGordon Tetlow
118140427ccaSGordon Tetlow# DOS backup 3.3 to 5.x
118240427ccaSGordon Tetlow
118340427ccaSGordon Tetlow# CONTROL.nnn files
118440427ccaSGordon Tetlow0	string	\x8bBACKUP\x20
118540427ccaSGordon Tetlow# actually 128 nul bytes
118640427ccaSGordon Tetlow>0xa	string	\0\0\0\0\0\0\0\0
118740427ccaSGordon Tetlow>>0x9	ubyte	x	DOS 3.3 backup control file, sequence %d
118840427ccaSGordon Tetlow>>0x8a	ubyte	0xff	\b, last disk
118940427ccaSGordon Tetlow
119040427ccaSGordon Tetlow# NB: The BACKUP.nnn files consist of the files backed up,
119140427ccaSGordon Tetlow# concatenated.
1192