xref: /minix/external/bsd/file/dist/magic/magdir/msdos (revision 84d9c625)
1
2#------------------------------------------------------------------------------
3# $File: msdos,v 1.85 2013/03/09 22:36:00 christos Exp $
4# msdos:  file(1) magic for MS-DOS files
5#
6
7# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
8# updated by Joerg Jenderek at Oct 2008,Apr 2011
90	string/t	@
10>1	string/cW	\ echo\ off	DOS batch file text
11!:mime	text/x-msdos-batch
12>1	string/cW	echo\ off	DOS batch file text
13!:mime	text/x-msdos-batch
14>1	string/cW	rem		DOS batch file text
15!:mime	text/x-msdos-batch
16>1	string/cW	set\ 		DOS batch file text
17!:mime	text/x-msdos-batch
18
19
20# OS/2 batch files are REXX. the second regex is a bit generic, oh well
21# the matched commands seem to be common in REXX and uncommon elsewhere
22100	search/0xffff   rxfuncadd
23>100	regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc	OS/2 REXX batch file text
24100	search/0xffff   say
25>100	regex/c =^[\ \t]{0,10}say\ ['"]			OS/2 REXX batch file text
26
270	leshort		0x14c	MS Windows COFF Intel 80386 object file
28#>4	ledate		x	stamp %s
290	leshort		0x166	MS Windows COFF MIPS R4000 object file
30#>4	ledate		x	stamp %s
310	leshort		0x184	MS Windows COFF Alpha object file
32#>4	ledate		x	stamp %s
330	leshort		0x268	MS Windows COFF Motorola 68000 object file
34#>4	ledate		x	stamp %s
350	leshort		0x1f0	MS Windows COFF PowerPC object file
36#>4	ledate		x	stamp %s
370	leshort		0x290	MS Windows COFF PA-RISC object file
38#>4	ledate		x	stamp %s
39
40# Tests for various EXE types.
41#
42# Many of the compressed formats were extraced from IDARC 1.23 source code.
43#
440	string/b	MZ
45!:mime	application/x-dosexec
46# All non-DOS EXE extensions have the relocation table more than 0x40 bytes into the file.
47>0x18	leshort <0x40 MS-DOS executable
48# These traditional tests usually work but not always.  When test quality support is
49# implemented these can be turned on.
50#>>0x18	leshort	0x1c	(Borland compiler)
51#>>0x18	leshort	0x1e	(MS compiler)
52
53# If the relocation table is 0x40 or more bytes into the file, it's definitely
54# not a DOS EXE.
55>0x18  leshort >0x3f
56
57# Maybe it's a PE?
58>>(0x3c.l) string PE\0\0 PE
59>>>(0x3c.l+24)	leshort		0x010b	\b32 executable
60>>>(0x3c.l+24)	leshort		0x020b	\b32+ executable
61>>>(0x3c.l+24)	leshort		0x0107	ROM image
62>>>(0x3c.l+24)	default		x	Unknown PE signature
63>>>>&0 		leshort		x	0x%x
64>>>(0x3c.l+22)	leshort&0x2000	>0	(DLL)
65>>>(0x3c.l+92)	leshort		1	(native)
66>>>(0x3c.l+92)	leshort		2	(GUI)
67>>>(0x3c.l+92)	leshort		3	(console)
68>>>(0x3c.l+92)	leshort		7	(POSIX)
69>>>(0x3c.l+92)	leshort		9	(Windows CE)
70>>>(0x3c.l+92)	leshort		10	(EFI application)
71>>>(0x3c.l+92)	leshort		11	(EFI boot service driver)
72>>>(0x3c.l+92)	leshort		12	(EFI runtime driver)
73>>>(0x3c.l+92)	leshort		13	(EFI ROM)
74>>>(0x3c.l+92)	leshort		14	(XBOX)
75>>>(0x3c.l+92)	leshort		15	(Windows boot application)
76>>>(0x3c.l+92)	default		x	(Unknown subsystem
77>>>>&0		leshort		x	0x%x)
78>>>(0x3c.l+4)	leshort		0x14c	Intel 80386
79>>>(0x3c.l+4)	leshort		0x166	MIPS R4000
80>>>(0x3c.l+4)	leshort		0x168	MIPS R10000
81>>>(0x3c.l+4)	leshort		0x184	Alpha
82>>>(0x3c.l+4)	leshort		0x1a2	Hitachi SH3
83>>>(0x3c.l+4)	leshort		0x1a6	Hitachi SH4
84>>>(0x3c.l+4)	leshort		0x1c0	ARM
85>>>(0x3c.l+4)	leshort		0x1c2	ARM Thumb
86>>>(0x3c.l+4)	leshort		0x1c4	ARMv7 Thumb
87>>>(0x3c.l+4)	leshort		0x1f0	PowerPC
88>>>(0x3c.l+4)	leshort		0x200	Intel Itanium
89>>>(0x3c.l+4)	leshort		0x266	MIPS16
90>>>(0x3c.l+4)	leshort		0x268	Motorola 68000
91>>>(0x3c.l+4)	leshort		0x290	PA-RISC
92>>>(0x3c.l+4)	leshort		0x366	MIPSIV
93>>>(0x3c.l+4)	leshort		0x466	MIPS16 with FPU
94>>>(0x3c.l+4)	leshort		0xebc	EFI byte code
95>>>(0x3c.l+4)	leshort		0x8664	x86-64
96>>>(0x3c.l+4)	leshort		0xc0ee	MSIL
97>>>(0x3c.l+4)	default		x	Unknown processor type
98>>>>&0		leshort		x	0x%x
99>>>(0x3c.l+22)	leshort&0x0200	>0	(stripped to external PDB)
100>>>(0x3c.l+22)	leshort&0x1000	>0	system file
101>>>(0x3c.l+24)	leshort		0x010b
102>>>>(0x3c.l+232) lelong	>0	Mono/.Net assembly
103>>>(0x3c.l+24)	leshort		0x020b
104>>>>(0x3c.l+248) lelong	>0	Mono/.Net assembly
105
106# hooray, there's a DOS extender using the PE format, with a valid PE
107# executable inside (which just prints a message and exits if run in win)
108>>>(8.s*16)		string		32STUB	\b, 32rtm DOS extender
109>>>(8.s*16)		string		!32STUB	\b, for MS Windows
110>>>(0x3c.l+0xf8)	string		UPX0 \b, UPX compressed
111>>>(0x3c.l+0xf8)	search/0x140	PEC2 \b, PECompact2 compressed
112>>>(0x3c.l+0xf8)	search/0x140	UPX2
113>>>>(&0x10.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
114>>>(0x3c.l+0xf8)	search/0x140	.idata
115>>>>(&0xe.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
116>>>>(&0xe.l+(-4))	string		ZZ0 \b, ZZip self-extracting archive
117>>>>(&0xe.l+(-4))	string		ZZ1 \b, ZZip self-extracting archive
118>>>(0x3c.l+0xf8)	search/0x140	.rsrc
119>>>>(&0x0f.l+(-4))	string		a\\\4\5 \b, WinHKI self-extracting archive
120>>>>(&0x0f.l+(-4))	string		Rar! \b, RAR self-extracting archive
121>>>>(&0x0f.l+(-4))	search/0x3000	MSCF \b, InstallShield self-extracting archive
122>>>>(&0x0f.l+(-4))	search/32	Nullsoft \b, Nullsoft Installer self-extracting archive
123>>>(0x3c.l+0xf8)	search/0x140	.data
124>>>>(&0x0f.l)		string		WEXTRACT \b, MS CAB-Installer self-extracting archive
125>>>(0x3c.l+0xf8)	search/0x140	.petite\0 \b, Petite compressed
126>>>>(0x3c.l+0xf7)	byte		x
127>>>>>(&0x104.l+(-4))	string		=!sfx! \b, ACE self-extracting archive
128>>>(0x3c.l+0xf8)	search/0x140	.WISE \b, WISE installer self-extracting archive
129>>>(0x3c.l+0xf8)	search/0x140	.dz\0\0\0 \b, Dzip self-extracting archive
130>>>&(0x3c.l+0xf8)	search/0x100	_winzip_ \b, ZIP self-extracting archive (WinZip)
131>>>&(0x3c.l+0xf8)	search/0x100	SharedD \b, Microsoft Installer self-extracting archive
132>>>0x30			string		Inno \b, InnoSetup self-extracting archive
133
134# Hmm, not a PE but the relocation table is too high for a traditional DOS exe,
135# must be one of the unusual subformats.
136>>(0x3c.l) string !PE\0\0 MS-DOS executable
137
138>>(0x3c.l)		string		NE \b, NE
139>>>(0x3c.l+0x36)	byte		1 for OS/2 1.x
140>>>(0x3c.l+0x36)	byte		2 for MS Windows 3.x
141>>>(0x3c.l+0x36)	byte		3 for MS-DOS
142>>>(0x3c.l+0x36)	byte		4 for Windows 386
143>>>(0x3c.l+0x36)	byte		5 for Borland Operating System Services
144>>>(0x3c.l+0x36)	default		x
145>>>>(0x3c.l+0x36)	byte		x (unknown OS %x)
146>>>(0x3c.l+0x36)	byte		0x81 for MS-DOS, Phar Lap DOS extender
147>>>(0x3c.l+0x0c)	leshort&0x8003	0x8002 (DLL)
148>>>(0x3c.l+0x0c)	leshort&0x8003	0x8001 (driver)
149>>>&(&0x24.s-1)		string		ARJSFX \b, ARJ self-extracting archive
150>>>(0x3c.l+0x70)	search/0x80	WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip)
151
152>>(0x3c.l)		string		LX\0\0 \b, LX
153>>>(0x3c.l+0x0a)	leshort		<1 (unknown OS)
154>>>(0x3c.l+0x0a)	leshort		1 for OS/2
155>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
156>>>(0x3c.l+0x0a)	leshort		3 for DOS
157>>>(0x3c.l+0x0a)	leshort		>3 (unknown OS)
158>>>(0x3c.l+0x10)	lelong&0x28000	=0x8000 (DLL)
159>>>(0x3c.l+0x10)	lelong&0x20000	>0 (device driver)
160>>>(0x3c.l+0x10)	lelong&0x300	0x300 (GUI)
161>>>(0x3c.l+0x10)	lelong&0x28300	<0x300 (console)
162>>>(0x3c.l+0x08)	leshort		1 i80286
163>>>(0x3c.l+0x08)	leshort		2 i80386
164>>>(0x3c.l+0x08)	leshort		3 i80486
165>>>(8.s*16)		string		emx \b, emx
166>>>>&1			string		x %s
167>>>&(&0x54.l-3)		string		arjsfx \b, ARJ self-extracting archive
168
169# MS Windows system file, supposedly a collection of LE executables
170>>(0x3c.l)		string		W3 \b, W3 for MS Windows
171
172>>(0x3c.l)		string		LE\0\0 \b, LE executable
173>>>(0x3c.l+0x0a)	leshort		1
174# some DOS extenders use LE files with OS/2 header
175>>>>0x240		search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
176>>>>0x240		search/0x200	WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender
177>>>>0x440		search/0x100	CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender
178>>>>0x40		search/0x40	PMODE/W for MS-DOS, PMODE/W DOS extender
179>>>>0x40		search/0x40	STUB/32A for MS-DOS, DOS/32A DOS extender (stub)
180>>>>0x40		search/0x80	STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)
181>>>>0x40		search/0x80	DOS/32A for MS-DOS, DOS/32A DOS extender (embedded)
182# this is a wild guess; hopefully it is a specific signature
183>>>>&0x24		lelong		<0x50
184>>>>>(&0x4c.l)		string		\xfc\xb8WATCOM
185>>>>>>&0		search/8	3\xdbf\xb9 \b, 32Lite compressed
186# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP
187#>>>>(0x3c.l+0x1c)	lelong		>0x10000 for OS/2
188# fails with DOS-Extenders.
189>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
190>>>(0x3c.l+0x0a)	leshort		3 for DOS
191>>>(0x3c.l+0x0a)	leshort		4 for MS Windows (VxD)
192>>>(&0x7c.l+0x26)	string		UPX \b, UPX compressed
193>>>&(&0x54.l-3)		string		UNACE \b, ACE self-extracting archive
194
195# looks like ASCII, probably some embedded copyright message.
196# and definitely not NE/LE/LX/PE
197>>0x3c		lelong	>0x20000000
198>>>(4.s*512)	leshort !0x014c \b, MZ for MS-DOS
199# header data too small for extended executable
200>2		long	!0
201>>0x18		leshort <0x40
202>>>(4.s*512)	leshort !0x014c
203
204>>>>&(2.s-514)	string	!LE
205>>>>>&-2	string	!BW \b, MZ for MS-DOS
206>>>>&(2.s-514)	string	LE \b, LE
207>>>>>0x240	search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
208# educated guess since indirection is still not capable enough for complex offset
209# calculations (next embedded executable would be at &(&2*512+&0-2)
210# I suspect there are only LE executables in these multi-exe files
211>>>>&(2.s-514)	string	BW
212>>>>>0x240	search/0x100	DOS/4G ,\b LE for MS-DOS, DOS4GW DOS extender (embedded)
213>>>>>0x240	search/0x100	!DOS/4G ,\b BW collection for MS-DOS
214
215# This sequence skips to the first COFF segment, usually .text
216>(4.s*512)	leshort		0x014c \b, COFF
217>>(8.s*16)	string		go32stub for MS-DOS, DJGPP go32 DOS extender
218>>(8.s*16)	string		emx
219>>>&1		string		x for DOS, Win or OS/2, emx %s
220>>&(&0x42.l-3)	byte		x
221>>>&0x26	string		UPX \b, UPX compressed
222# and yet another guess: small .text, and after large .data is unusal, could be 32lite
223>>&0x2c		search/0xa0	.text
224>>>&0x0b	lelong		<0x2000
225>>>>&0		lelong		>0x6000 \b, 32lite compressed
226
227>(8.s*16) string $WdX \b, WDos/X DOS extender
228
229# By now an executable type should have been printed out.  The executable
230# may be a self-uncompressing archive, so look for evidence of that and
231# print it out.
232#
233# Some signatures below from Greg Roelofs, newt@uchicago.edu.
234#
235>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
236>0xe7	string	LH/2\ 	Self-Extract \b, %s
237>0x1c	string	UC2X	\b, UCEXE compressed
238>0x1c	string	WWP\ 	\b, WWPACK compressed
239>0x1c	string	RJSX 	\b, ARJ self-extracting archive
240>0x1c	string	diet 	\b, diet compressed
241>0x1c	string	LZ09 	\b, LZEXE v0.90 compressed
242>0x1c	string	LZ91 	\b, LZEXE v0.91 compressed
243>0x1c	string	tz 	\b, TinyProg compressed
244>0x1e	string	Copyright\ 1989-1990\ PKWARE\ Inc.	Self-extracting PKZIP archive
245!:mime	application/zip
246# Yes, this really is "Copr", not "Corp."
247>0x1e	string	PKLITE\ Copr.	Self-extracting PKZIP archive
248!:mime	application/zip
249# winarj stores a message in the stub instead of the sig in the MZ header
250>0x20	search/0xe0	aRJsfX \b, ARJ self-extracting archive
251>0x20	string AIN
252>>0x23	string 2	\b, AIN 2.x compressed
253>>0x23	string <2	\b, AIN 1.x compressed
254>>0x23	string >2	\b, AIN 1.x compressed
255>0x24	string	LHa's\ SFX \b, LHa self-extracting archive
256!:mime	application/x-lha
257>0x24	string	LHA's\ SFX \b, LHa self-extracting archive
258!:mime	application/x-lha
259>0x24	string	\ $ARX \b, ARX self-extracting archive
260>0x24	string	\ $LHarc \b, LHarc self-extracting archive
261>0x20	string	SFX\ by\ LARC \b, LARC self-extracting archive
262>0x40	string aPKG \b, aPackage self-extracting archive
263>0x64	string	W\ Collis\0\0 \b, Compack compressed
264>0x7a	string		Windows\ self-extracting\ ZIP	\b, ZIP self-extracting archive
265>>&0xf4 search/0x140 \x0\x40\x1\x0
266>>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
267>1638	string	-lh5- \b, LHa self-extracting archive v2.13S
268>0x17888 string Rar! \b, RAR self-extracting archive
269
270# Skip to the end of the EXE.  This will usually work fine in the PE case
271# because the MZ image is hardcoded into the toolchain and almost certainly
272# won't match any of these signatures.
273>(4.s*512)	long	x
274>>&(2.s-517)	byte	x
275>>>&0	string		PK\3\4 \b, ZIP self-extracting archive
276>>>&0	string		Rar! \b, RAR self-extracting archive
277>>>&0	string		=!\x11 \b, AIN 2.x self-extracting archive
278>>>&0	string		=!\x12 \b, AIN 2.x self-extracting archive
279>>>&0	string		=!\x17 \b, AIN 1.x self-extracting archive
280>>>&0	string		=!\x18 \b, AIN 1.x self-extracting archive
281>>>&7	search/400	**ACE** \b, ACE self-extracting archive
282>>>&0	search/0x480	UC2SFX\ Header \b, UC2 self-extracting archive
283
284# a few unknown ZIP sfxes, no idea if they are needed or if they are
285# already captured by the generic patterns above
286>(8.s*16)	search/0x20	PKSFX \b, ZIP self-extracting archive (PKZIP)
287# TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive
288#
289
290# TELVOX Teleinformatica CODEC self-extractor for OS/2:
291>49801	string	\x79\xff\x80\xff\x76\xff	\b, CODEC archive v3.21
292>>49824 leshort		=1			\b, 1 file
293>>49824 leshort		>1			\b, %u files
294
295# added by Joerg Jenderek of http://www.freedos.org/software/?prog=kc
296# and http://www.freedos.org/software/?prog=kpdos
297# for FreeDOS files like KEYBOARD.SYS, KEYBRD2.SYS, KEYBRD3.SYS, *.KBD
2980	string/b	KCF		FreeDOS KEYBoard Layout collection
299# only version=0x100 found
300>3	uleshort	x		\b, version 0x%x
301# length of string containing author,info and special characters
302>6	ubyte		>0
303#>>6	pstring		x		\b, name=%s
304>>7	string		>\0		\b, author=%-.14s
305>>7	search/254	\xff		\b, info=
306#>>>&0	string		x		\b%-s
307>>>&0	string		x		\b%-.15s
308# for FreeDOS *.KL files
3090	string/b	KLF		FreeDOS KEYBoard Layout file
310# only version=0x100 or 0x101 found
311>3	uleshort	x		\b, version 0x%x
312# stringlength
313>5	ubyte		>0
314>>8	string		x		\b, name=%-.2s
3150	string	\xffKEYB\ \ \ \0\0\0\0
316>12	string	\0\0\0\0`\004\360	MS-DOS KEYBoard Layout file
317
318# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)
319# Uncommenting only the first two lines will cover about 2/3 of COM files,
320# but it isn't feasible to match all COM files since there must be at least
321# two dozen different one-byte "magics".
322# test too generic ?
3230	byte		0xe9		DOS executable (COM)
324>0x1FE leshort		0xAA55		\b, boot code
325>6	string		SFX\ of\ LHarc	(%s)
326
327# DOS device driver updated by Joerg Jenderek at May 2011
328# http://maben.homeip.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009
3290	ulequad&0x07a0ffffffff		0xffffffff		DOS executable (
330>40	search/7			UPX!			\bUPX compressed
331# DOS device driver attributes
332>4	uleshort&0x8000			0x0000			\bblock device driver
333# character device
334>4	uleshort&0x8000			0x8000			\b
335>>4	uleshort&0x0008			0x0008			\bclock
336# fast video output by int 29h
337>>4	uleshort&0x0010			0x0010			\bfast
338# standard input/output device
339>>4	uleshort&0x0003			>0			\bstandard
340>>>4	uleshort&0x0001			0x0001			\binput
341>>>4	uleshort&0x0003			0x0003			\b/
342>>>4	uleshort&0x0002			0x0002			\boutput
343>>4	uleshort&0x8000			0x8000			\bcharacter device driver
344>0	ubyte				x
345# upx compressed device driver has garbage instead of real in name field of header
346>>40	search/7			UPX!
347>>40	default				x
348# leading/trailing nulls, zeros or non ASCII characters in 8-byte name field at offset 10 are skipped
349>>>12		ubyte			>0x27			\b
350>>>>10		ubyte			>0x20
351>>>>>10		ubyte			!0x2E
352>>>>>>10	ubyte			!0x2A			\b%c
353>>>>11		ubyte			>0x20
354>>>>>11		ubyte			!0x2E			\b%c
355>>>>12		ubyte			>0x20
356>>>>>12		ubyte			!0x39
357>>>>>>12	ubyte			!0x2E			\b%c
358>>>13		ubyte			>0x20
359>>>>13		ubyte			!0x2E			\b%c
360>>>>14		ubyte			>0x20
361>>>>>14		ubyte			!0x2E			\b%c
362>>>>15		ubyte			>0x20
363>>>>>15		ubyte			!0x2E			\b%c
364>>>>16		ubyte			>0x20
365>>>>>16		ubyte			!0x2E
366>>>>>>16	ubyte			<0xCB			\b%c
367>>>>17		ubyte			>0x20
368>>>>>17		ubyte			!0x2E
369>>>>>>17	ubyte			<0x90			\b%c
370# some character device drivers like ASPICD.SYS, btcdrom.sys and Cr_atapi.sys contain only spaces or points in name field
371>>>4		uleshort&0x8000		0x8000
372>>>>12		ubyte			<0x2F
373# they have their real name at offset 22
374>>>>>22		string			>\0			\b%-.5s
375>4	uleshort&0x8000			0x0000
376# 32 bit sector adressing ( > 32 MB) for block devices
377>>4	uleshort&0x0002			0x0002			\b,32-bit sector-
378# support by driver functions 13h, 17h, 18h
379>4	uleshort&0x0040			0x0040			\b,IOCTL-
380# open, close, removable media support by driver functions 0Dh, 0Eh, 0Fh
381>4	uleshort&0x0800			0x0800			\b,close media-
382# output until busy support by int 10h for character device driver
383>4	uleshort&0x8000			0x8000
384>>4	uleshort&0x2000			0x2000			\b,until busy-
385# direct read/write support by driver functions 03h,0Ch
386>4	uleshort&0x4000			0x4000			\b,control strings-
387>4	uleshort&0x8000			0x8000
388>>4	uleshort&0x6840			>0			\bsupport
389>4	uleshort&0x8000			0x0000
390>>4	uleshort&0x4842			>0			\bsupport
391>0	ubyte				x			\b)
392# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header
393# Too weak, matches files that only contain 0's
394#0	ulequad&0x000007a0ffffffed	0x0000000000000000	DOS-executable (
395#>4	uleshort&0x8000			0x8000			\bcharacter device driver
396#>>10	string				x			%-.8s
397#>4	uleshort&0x4000			0x4000			\b,control strings-support)
398
399# test too generic ?
4000	byte		0x8c		DOS executable (COM)
401# updated by Joerg Jenderek at Oct 2008
4020	ulelong		0xffff10eb	DR-DOS executable (COM)
403# byte 0xeb conflicts with "sequent" magic leshort 0xn2eb
4040	ubeshort&0xeb8d	>0xeb00
405# DR-DOS STACKER.COM SCREATE.SYS missed
406>0	byte		0xeb
407>>0x1FE leshort		0xAA55		DOS executable (COM), boot code
408>>85	string		UPX		DOS executable (COM), UPX compressed
409>>4	string		\ $ARX		DOS executable (COM), ARX self-extracting archive
410>>4	string		\ $LHarc	DOS executable (COM), LHarc self-extracting archive
411>>0x20e string		SFX\ by\ LARC	DOS executable (COM), LARC self-extracting archive
412# updated by Joerg Jenderek at Oct 2008
413#0	byte		0xb8		COM executable
4140	uleshort&0x80ff	0x00b8
415# modified by Joerg Jenderek
416>1	lelong		!0x21cd4cff	COM executable for DOS
417# http://syslinux.zytor.com/comboot.php
418# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
419# start with assembler instructions mov eax,21cd4cffh
4200	uleshort&0xc0ff	0xc0b8
421>1	lelong		0x21cd4cff	COM executable (32-bit COMBOOT)
422# syslinux:doc/comboot.txt
423# A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov
424# eax,21cd4cfeh) as a magic number.
4250       string/b	\xb8\xfe\x4c\xcd\x21	COM executable (COM32R)
426# start with assembler instructions mov eax,21cd4cfeh
4270	uleshort&0xc0ff	0xc0b8
428>1	lelong		0x21cd4cfe	COM executable (32-bit COMBOOT, relocatable)
4290	string/b	\x81\xfc
430>4	string	\x77\x02\xcd\x20\xb9
431>>36	string	UPX!			FREE-DOS executable (COM), UPX compressed
432252	string Must\ have\ DOS\ version DR-DOS executable (COM)
433# added by Joerg Jenderek at Oct 2008
434# GRR search is not working
435#34	search/2	UPX!		FREE-DOS executable (COM), UPX compressed
43634	string	UPX!			FREE-DOS executable (COM), UPX compressed
43735	string	UPX!			FREE-DOS executable (COM), UPX compressed
438# GRR search is not working
439#2	search/28	\xcd\x21	COM executable for MS-DOS
440#WHICHFAT.cOM
4412	string	\xcd\x21		COM executable for DOS
442#DELTREE.cOM DELTREE2.cOM
4434	string	\xcd\x21		COM executable for DOS
444#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
4455	string	\xcd\x21		COM executable for DOS
446#DELTMP.COm HASFAT32.cOM
4477	string	\xcd\x21
448>0	byte	!0xb8			COM executable for DOS
449#COMP.cOM MORE.COm
45010	string	\xcd\x21
451>5	string	!\xcd\x21		COM executable for DOS
452#comecho.com
45313	string	\xcd\x21		COM executable for DOS
454#HELP.COm EDIT.coM
45518	string	\xcd\x21		COM executable for MS-DOS
456#NWRPLTRM.COm
45723	string	\xcd\x21		COM executable for MS-DOS
458#LOADFIX.cOm LOADFIX.cOm
45930	string	\xcd\x21		COM executable for MS-DOS
460#syslinux.com 3.11
46170	string	\xcd\x21		COM executable for DOS
462# many compressed/converted COMs start with a copy loop instead of a jump
4630x6	search/0xa	\xfc\x57\xf3\xa5\xc3	COM executable for MS-DOS
4640x6	search/0xa	\xfc\x57\xf3\xa4\xc3	COM executable for DOS
465>0x18	search/0x10	\x50\xa4\xff\xd5\x73	\b, aPack compressed
4660x3c	string		W\ Collis\0\0		COM executable for MS-DOS, Compack compressed
467# FIXME: missing diet .com compression
468
469# miscellaneous formats
4700	string/b	LZ		MS-DOS executable (built-in)
471#0	byte		0xf0		MS-DOS program library data
472#
473
474# AAF files:
475# <stuartc@rd.bbc.co.uk> Stuart Cunningham
4760	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
477>30	byte	9		(512B sectors)
478>30	byte	12		(4kB sectors)
4790	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
480>30	byte	9		(512B sectors)
481>30	byte	12		(4kB sectors)
482
483# Popular applications
4842080	string	Microsoft\ Word\ 6.0\ Document	%s
485!:mime	application/msword
4862080	string	Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
487!:mime	application/msword
488# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)
4892112	string	MSWordDoc			Microsoft Word document data
490!:mime	application/msword
491#
4920	belong	0x31be0000			Microsoft Word Document
493!:mime	application/msword
494#
4950	string/b	PO^Q`				Microsoft Word 6.0 Document
496!:mime	application/msword
497#
4980	string/b	\376\067\0\043			Microsoft Office Document
499!:mime	application/msword
5000	string/b	\333\245-\0\0\0			Microsoft Office Document
501!:mime	application/msword
502512	string/b	\354\245\301			Microsoft Word Document
503!:mime	application/msword
504
505#
5060	string/b	\xDB\xA5\x2D\x00		Microsoft WinWord 2.0 Document
507!:mime application/msword
508#
5092080	string	Microsoft\ Excel\ 5.0\ Worksheet	%s
510!:mime	application/vnd.ms-excel
511#
5120	string/b	\xDB\xA5\x2D\x00		Microsoft WinWord 2.0 Document
513!:mime application/msword
514
5152080	string	Foglio\ di\ lavoro\ Microsoft\ Exce	%s
516!:mime	application/vnd.ms-excel
517#
518# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
5192114	string	Biff5		Microsoft Excel 5.0 Worksheet
520!:mime	application/vnd.ms-excel
521# Italian MS-Excel
5222121	string	Biff5		Microsoft Excel 5.0 Worksheet
523!:mime	application/vnd.ms-excel
5240	string/b	\x09\x04\x06\x00\x00\x00\x10\x00	Microsoft Excel Worksheet
525!:mime	application/vnd.ms-excel
526#
5270	belong	0x00001a00	Lotus 1-2-3
528!:mime	application/x-123
529>4	belong	0x00100400	wk3 document data
530>4	belong	0x02100400	wk4 document data
531>4	belong	0x07800100	fm3 or fmb document data
532>4	belong	0x07800000	fm3 or fmb document data
533#
5340	belong	0x00000200	Lotus 1-2-3
535!:mime	application/x-123
536>4	belong	0x06040600	wk1 document data
537>4	belong	0x06800200	fmt document data
5380	string/b		WordPro\0	Lotus WordPro
539!:mime	application/vnd.lotus-wordpro
5400	string/b		WordPro\r\373	Lotus WordPro
541!:mime	application/vnd.lotus-wordpro
542
543
544# Summary: Script used by InstallScield to uninstall applications
545# Extension: .isu
546# Submitted by: unknown
547# Modified by (1): Abel Cheung <abelcheung@gmail.com> (replace useless entry)
5480		string		\x71\xa8\x00\x00\x01\x02
549>12		string		Stirling\ Technologies,		InstallShield Uninstall Script
550
551# Winamp .avs
552#0	string	Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
5530	string/b	Nullsoft\ AVS\ Preset\ 	Winamp plug in
554
555# Windows Metafont .WMF
5560	string/b	\327\315\306\232	ms-windows metafont .wmf
5570	string/b	\002\000\011\000	ms-windows metafont .wmf
5580	string/b	\001\000\011\000	ms-windows metafont .wmf
559
560#tz3 files whatever that is (MS Works files)
5610	string/b	\003\001\001\004\070\001\000\000	tz3 ms-works file
5620	string/b	\003\002\001\004\070\001\000\000	tz3 ms-works file
5630	string/b	\003\003\001\004\070\001\000\000	tz3 ms-works file
564
565# PGP sig files .sig
566#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
5670 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
5680 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
5690 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
5700 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
5710 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
5720 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
573
574# windows zips files .dmf
5750	string/b	MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file
576
577
578#ico files
5790	string/b	\102\101\050\000\000\000\056\000\000\000\000\000\000\000	Icon for MS Windows
580
581# Windows icons (Ian Springer <ips@fpk.hp.com>)
5820	string/b	\000\000\001\000	MS Windows icon resource
583!:mime	image/x-icon
584>4	byte	1			- 1 icon
585>4	byte	>1			- %d icons
586>>6	byte	>0			\b, %dx
587>>>7	byte	>0			\b%d
588>>8	byte	0			\b, 256-colors
589>>8	byte	>0			\b, %d-colors
590
591
592# .chr files
5930	string/b	PK\010\010BGI	Borland font
594>4	string	>\0	%s
595# then there is a copyright notice
596
597
598# .bgi files
5990	string/b	pk\010\010BGI	Borland device
600>4	string	>\0	%s
601# then there is a copyright notice
602
603
604# Windows Recycle Bin record file (named INFO2)
605# By Abel Cheung (abelcheung AT gmail dot com)
606# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes
607# Since Vista uses another structure, INFO2 structure probably won't change
608# anymore. Detailed analysis in:
609# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf
6100	lelong		0x00000004
611>12	lelong		0x00000118	Windows Recycle Bin INFO2 file (Win98 or below)
612
6130	lelong		0x00000005
614>12	lelong		0x00000320	Windows Recycle Bin INFO2 file (Win2k - WinXP)
615
616
617##### put in Either Magic/font or Magic/news
618# Acroread or something	 files wrongly identified as G3	 .pfm
619# these have the form \000 \001 any? \002 \000 \000
620# or \000 \001 any? \022 \000 \000
6210	belong&0xffff00ff	0x00010012	PFM data
622>4	string			\000\000
623>6	string			>\060		- %s
624
6250	belong&0xffff00ff	0x00010002	PFM data
626>4	string			\000\000
627>6	string			>\060		- %s
628#0	string	\000\001 pfm?
629#>3	string	\022\000\000Copyright\	yes
630#>3	string	\002\000\000Copyright\	yes
631#>3	string	>\0	oops, not a font file. Cancel that.
632#it clashes with ttf files so put it lower down.
633
634# From Doug Lee via a FreeBSD pr
6359	string		GERBILDOC	First Choice document
6369	string		GERBILDB	First Choice database
6379	string		GERBILCLIP	First Choice database
6380	string		GERBIL		First Choice device file
6399	string		RABBITGRAPH	RabbitGraph file
6400	string		DCU1		Borland Delphi .DCU file
6410	string		=!<spell>	MKS Spell hash list (old format)
6420	string		=!<spell2>	MKS Spell hash list
643# Too simple - MPi
644#0	string		AH		Halo(TM) bitmapped font file
6450	lelong		0x08086b70	TurboC BGI file
6460	lelong		0x08084b50	TurboC Font file
647
648# tests for DBase files moved, updated and merged to database
649
6500	string		PMCC		Windows 3.x .GRP file
6511	string		RDC-meg		MegaDots
652>8	byte		>0x2F		version %c
653>9	byte		>0x2F		\b.%c file
6540	lelong		0x4C
655>4	lelong		0x00021401	Windows shortcut file
656
657# .PIF files added by Joerg Jenderek from http://smsoft.ru/en/pifdoc.htm
658# only for windows versions equal or greater 3.0
6590x171	string	MICROSOFT\ PIFEX\0	Windows Program Information File
660!:mime	application/x-dosexec
661#>2	string	 	>\0		\b, Title:%.30s
662>0x24	string		>\0		\b for %.63s
663>0x65	string		>\0		\b, directory=%.64s
664>0xA5	string		>\0		\b, parameters=%.64s
665#>0x181	leshort	x	\b, offset %x
666#>0x183	leshort	x	\b, offsetdata %x
667#>0x185	leshort	x	\b, section length %x
668>0x187	search/0xB55	WINDOWS\ VMM\ 4.0\0
669>>&0x5e		ubyte	>0
670>>>&-1		string	<PIFMGR.DLL		\b, icon=%s
671#>>>&-1		string	PIFMGR.DLL		\b, icon=%s
672>>>&-1		string	>PIFMGR.DLL		\b, icon=%s
673>>&0xF0		ubyte	>0
674>>>&-1		string	<Terminal		\b, font=%.32s
675#>>>&-1		string	=Terminal		\b, font=%.32s
676>>>&-1		string	>Terminal		\b, font=%.32s
677>>&0x110	ubyte	>0
678>>>&-1		string	<Lucida\ Console	\b, TrueTypeFont=%.32s
679#>>>&-1		string	=Lucida\ Console	\b, TrueTypeFont=%.32s
680>>>&-1		string	>Lucida\ Console	\b, TrueTypeFont=%.32s
681#>0x187	search/0xB55	WINDOWS\ 286\ 3.0\0	\b, Windows 3.X standard mode-style
682#>0x187	search/0xB55	WINDOWS\ 386\ 3.0\0	\b, Windows 3.X enhanced mode-style
683>0x187	search/0xB55	WINDOWS\ NT\ \ 3.1\0	\b, Windows NT-style
684#>0x187	search/0xB55	WINDOWS\ NT\ \ 4.0\0	\b, Windows NT-style
685>0x187	search/0xB55	CONFIG\ \ SYS\ 4.0\0	\b +CONFIG.SYS
686#>>&06		string	x			\b:%s
687>0x187	search/0xB55	AUTOEXECBAT\ 4.0\0	\b +AUTOEXEC.BAT
688#>>&06		string	x			\b:%s
689
690# DOS EPS Binary File Header
691# From: Ed Sznyter <ews@Black.Market.NET>
6920	belong		0xC5D0D3C6	DOS EPS Binary File
693>4	long		>0		Postscript starts at byte %d
694>>8	long		>0		length %d
695>>>12	long		>0		Metafile starts at byte %d
696>>>>16	long		>0		length %d
697>>>20	long		>0		TIFF starts at byte %d
698>>>>24	long		>0		length %d
699
700# TNEF magic From "Joomy" <joomy@se-ed.net>
701# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
7020	leshort		0x223e9f78	TNEF
703!:mime	application/vnd.ms-tnef
704
705# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS
706# of http://www.4dos.info/
707# pointer,HelpID[8]=4DHnnnmm
7080	ulelong	0x48443408		4DOS help file
709>4	string	x			\b, version %-4.4s
710
711# old binary Microsoft (.HLP) files added by Joerg Jenderek from http://file-extension.net/seeker/file_extension_hlp
7120	ulequad	0x3a000000024e4c	MS Advisor help file
713
714# HtmlHelp files (.chm)
7150	string/b	ITSF\003\000\000\000\x60\000\000\000\001\000\000\000	MS Windows HtmlHelp Data
716
717# GFA-BASIC (Wolfram Kleff)
7182	string/b	GFA-BASIC3	GFA-BASIC 3 data
719
720#------------------------------------------------------------------------------
721# From Stuart Caie <kyzer@4u.net> (developer of cabextract)
722# Microsoft Cabinet files
7230	string/b	MSCF\0\0\0\0	Microsoft Cabinet archive data
724!:mime application/vnd.ms-cab-compressed
725>8	lelong		x		\b, %u bytes
726>28	leshort		1		\b, 1 file
727>28	leshort		>1		\b, %u files
728
729# InstallShield Cabinet files
7300	string/b	ISc(		InstallShield Cabinet archive data
731>5	byte&0xf0	=0x60		version 6,
732>5	byte&0xf0	!0x60		version 4/5,
733>(12.l+40)	lelong	x		%u files
734
735# Windows CE package files
7360	string/b	MSCE\0\0\0\0	Microsoft WinCE install header
737>20	lelong		0		\b, architecture-independent
738>20	lelong		103		\b, Hitachi SH3
739>20	lelong		104		\b, Hitachi SH4
740>20	lelong		0xA11		\b, StrongARM
741>20	lelong		4000		\b, MIPS R4000
742>20	lelong		10003		\b, Hitachi SH3
743>20	lelong		10004		\b, Hitachi SH3E
744>20	lelong		10005		\b, Hitachi SH4
745>20	lelong		70001		\b, ARM 7TDMI
746>52	leshort		1		\b, 1 file
747>52	leshort		>1		\b, %u files
748>56	leshort		1		\b, 1 registry entry
749>56	leshort		>1		\b, %u registry entries
750
751
752# Windows Enhanced Metafile (EMF)
753# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
754# for further information.
7550	ulelong 1
756>40	string	\ EMF		Windows Enhanced Metafile (EMF) image data
757>>44	ulelong x		version 0x%x
758
759# From: Alex Beregszaszi <alex@fsn.hu>
7600	string/b	COWD		VMWare3
761>4	byte	3		disk image
762>>32	lelong	x		(%d/
763>>36	lelong	x		\b%d/
764>>40	lelong	x		\b%d)
765>4	byte	2		undoable disk image
766>>32	string	>\0		(%s)
767
7680	string/b	VMDK		 VMware4 disk image
7690	string/b	KDMV		 VMware4 disk image
770
771#--------------------------------------------------------------------
772# Qemu Emulator Images
773# Lines written by Friedrich Schwittay (f.schwittay@yousable.de)
774# Updated by Adam Buchbinder (adam.buchbinder@gmail.com)
775# Made by reading sources, reading documentation, and doing trial and error
776# on existing QCOW files
7770	string/b	QFI\xFB	QEMU QCOW Image
778
779# Uncomment the following line to display Magic (only used for debugging
780# this magic number)
781#>0	string/b	x	, Magic: %s
782
783# There are currently 2 Versions: "1" and "2".
784# http://www.gnome.org/~markmc/qcow-image-format-version-1.html
785>4	belong	1	(v1)
786
787# Using the existence of the Backing File Offset to determine whether
788# to read Backing File Information
789>>12	belong	 >0	 \b, has backing file (
790# Note that this isn't a null-terminated string; the length is actually
791# (16.L). Assuming a null-terminated string happens to work usually, but it
792# may spew junk until it reaches a \0 in some cases.
793>>>(12.L)	 string >\0	\bpath %s
794
795# Modification time of the Backing File
796# Really useful if you want to know if your backing
797# file is still usable together with this image
798>>>>20	bedate >0	\b, mtime %s)
799>>>>20	default x	\b)
800
801# Size is stored in bytes in a big-endian u64.
802>>24	bequad	x	 \b, %lld bytes
803
804# 1 for AES encryption, 0 for none.
805>>36	belong	1	\b, AES-encrypted
806
807# http://www.gnome.org/~markmc/qcow-image-format.html
808>4	belong	2	(v2)
809# Using the existence of the Backing File Offset to determine whether
810# to read Backing File Information
811>>8	bequad  >0	 \b, has backing file
812# Note that this isn't a null-terminated string; the length is actually
813# (16.L). Assuming a null-terminated string happens to work usually, but it
814# may spew junk until it reaches a \0 in some cases. Also, since there's no
815# .Q modifier, we just use the bottom four bytes as an offset. Note that if
816# the file is over 4G, and the backing file path is stored after the first 4G,
817# the wrong filename will be printed. (This should be (8.Q), when that syntax
818# is introduced.)
819>>>(12.L)	 string >\0	(path %s)
820>>24	bequad	x	\b, %lld bytes
821>>32	belong	1	\b, AES-encrypted
822
823>4	default x	(unknown version)
824
8250	string/b	QEVM		QEMU suspend to disk image
826
827# QEMU QED Image
828# http://wiki.qemu.org/Features/QED/Specification
8290	string/b	QED\0		QEMU QED Image
830
831# VDI Image
83264	string/b	\x7f\x10\xda\xbe	VDI Image
833>68	string/b	\x01\x00\x01\x00	version 1.1
834>0	string		>\0			(%s)
835>368	lequad		x			 \b, %lld bytes
836
8370	string/b	Bochs\ Virtual\ HD\ Image	Bochs disk image,
838>32	string	x				type %s,
839>48	string	x				subtype %s
840
8410	lelong	0x02468ace			Bochs Sparse disk image
842
843# from http://filext.com by Derek M Jones <derek@knosof.co.uk>
844# False positive with PPT (also currently this string is too long)
845#0	string/b	\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x03\x00\xFE\xFF\x09\x00\x06	Microsoft Installer
8460	string/b	\320\317\021\340\241\261\032\341	Microsoft Office Document
847#>48	byte	0x1B					Excel Document
848#!:mime application/vnd.ms-excel
849>546	string	bjbj			Microsoft Word Document
850!:mime	application/msword
851>546	string	jbjb			Microsoft Word Document
852!:mime	application/msword
853
8540	string/b	\224\246\056		Microsoft Word Document
855!:mime	application/msword
856
857512	string	R\0o\0o\0t\0\ \0E\0n\0t\0r\0y	Microsoft Word Document
858!:mime	application/msword
859
860# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
861# Magic type for Dell's BIOS .hdr files
862# Dell's .hdr
8630	string/b $RBU
864>23	string Dell			%s system BIOS
865>5	byte   2
866>>48	byte   x			version %d.
867>>49	byte   x			\b%d.
868>>50	byte   x			\b%d
869>5	byte   <2
870>>48	string x			version %.3s
871
872# Type: Microsoft DirectDraw Surface
873# URL:	http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
874# From: Morten Hustveit <morten@debian.org>
8750	string/b	DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS),
876>16	lelong	>0			%hd x
877>12	lelong	>0			%hd,
878>84	string	x			%.4s
879
880# Type: Microsoft Document Imaging Format (.mdi)
881# URL:	http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
882# From: Daniele Sempione <scrows@oziosi.org>
8830	short	0x5045			Microsoft Document Imaging Format
884
885# MS eBook format (.lit)
8860	string/b	ITOLITLS		Microsoft Reader eBook Data
887>8	lelong	x			\b, version %u
888!:mime					application/x-ms-reader
889
890# Windows CE Binary Image Data Format
891# From: Dr. Jesus <j@hug.gs>
8920	string/b	B000FF\n	Windows Embedded CE binary image
893
894# Windows Imaging (WIM) Image
8950	string/b	MSWIM\000\000\000	Windows imaging (WIM) image
896
897# The second byte of these signatures is a file version; I don't know what,
898# if anything, produced files with version numbers 0-2.
899# From: John Elliott <johne@seasip.demon.co.uk>
9000	string	\xfc\x03\x00	Mallard BASIC program data (v1.11)
9010	string	\xfc\x04\x00	Mallard BASIC program data (v1.29+)
9020	string	\xfc\x03\x01	Mallard BASIC protected program data (v1.11)
9030	string	\xfc\x04\x01	Mallard BASIC protected program data (v1.29+)
904
9050	string	MIOPEN		Mallard BASIC Jetsam data
9060	string	Jetsam0		Mallard BASIC Jetsam index data
907
908