Documentation
¶
Overview ¶
Package filesig identifies file types from their magic bytes.
A signature constrains particular byte offsets rather than matching a fixed prefix, so a type with several variants is one entry with several alternatives. Detect answers what a buffer starts with; Scan finds every position a signature holds at, which is what carving an embedded file needs.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Signatures = []Category{ {Name: "Images", Types: []Sig{ { Name: "Joint Photographic Experts Group image", Extension: "jpg,jpeg,jpe,thm,mpo", MIME: "image/jpeg", Description: "", Carver: "JPEG", // contains filtered or unexported fields }, { Name: "Graphics Interchange Format image", Extension: "gif", MIME: "image/gif", Description: "", Carver: "GIF", // contains filtered or unexported fields }, { Name: "Portable Network Graphics image", Extension: "png", MIME: "image/png", Description: "", Carver: "PNG", // contains filtered or unexported fields }, { Name: "WEBP Image", Extension: "webp", MIME: "image/webp", Description: "", Carver: "WEBP", // contains filtered or unexported fields }, { Name: "High Efficiency Image File Format", Extension: "heic,heif", MIME: "image/heif", Description: "", // contains filtered or unexported fields }, { Name: "Camera Image File Format", Extension: "crw", MIME: "image/x-canon-crw", Description: "", // contains filtered or unexported fields }, { Name: "Canon CR2 raw image", Extension: "cr2", MIME: "image/x-canon-cr2", Description: "", // contains filtered or unexported fields }, { Name: "Tagged Image File Format image", Extension: "tif", MIME: "image/tiff", Description: "", // contains filtered or unexported fields }, { Name: "Bitmap image", Extension: "bmp", MIME: "image/bmp", Description: "", Carver: "BMP", // contains filtered or unexported fields }, { Name: "JPEG Extended Range image", Extension: "jxr", MIME: "image/vnd.ms-photo", Description: "", // contains filtered or unexported fields }, { Name: "Photoshop image", Extension: "psd", MIME: "image/vnd.adobe.photoshop", Description: "", // contains filtered or unexported fields }, { Name: "Photoshop Large Document", Extension: "psb", MIME: "application/x-photoshop", Description: "", // contains filtered or unexported fields }, { Name: "Paint Shop Pro image", Extension: "psp", MIME: "image/psp", Description: "", // contains filtered or unexported fields }, { Name: "The GIMP image", Extension: "xcf", MIME: "image/x-xcf", Description: "", // contains filtered or unexported fields }, { Name: "Icon image", Extension: "ico", MIME: "image/x-icon", Description: "", Carver: "ICO", // contains filtered or unexported fields }, { Name: "Radiance High Dynamic Range image", Extension: "hdr", MIME: "image/vnd.radiance", Description: "", // contains filtered or unexported fields }, { Name: "Sony ARW image", Extension: "arw", MIME: "image/x-raw", Description: "", // contains filtered or unexported fields }, { Name: "Fujifilm Raw Image", Extension: "raf", MIME: "image/x-raw", Description: "", // contains filtered or unexported fields }, { Name: "Minolta RAW image", Extension: "mrw", MIME: "image/x-raw", Description: "", // contains filtered or unexported fields }, { Name: "Adobe Bridge Thumbnail Cache", Extension: "bct", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Microsoft Document Imaging", Extension: "mdi", MIME: "image/vnd.ms-modi", Description: "", // contains filtered or unexported fields }, { Name: "Joint Photographic Experts Group image (under Base64)", Extension: "B64", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Portable Network Graphics image (under Base64)", Extension: "B64", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "AutoCAD Drawing", Extension: "dwg,123d", MIME: "application/acad", Description: "", // contains filtered or unexported fields }, { Name: "AutoCAD Drawing", Extension: "dwg,dwt", MIME: "application/acad", Description: "", // contains filtered or unexported fields }, { Name: "Targa Image", Extension: "tga", MIME: "image/x-targa", Description: "", Carver: "TARGA", // contains filtered or unexported fields }, }}, {Name: "Video", Types: []Sig{ { Name: "Matroska Multimedia Container", Extension: "mkv", MIME: "video/x-matroska", Description: "", // contains filtered or unexported fields }, { Name: "WEBM video", Extension: "webm", MIME: "video/webm", Description: "", // contains filtered or unexported fields }, { Name: "Flash MP4 video", Extension: "f4v", MIME: "video/mp4", Description: "", // contains filtered or unexported fields }, { Name: "MPEG-4 video", Extension: "mp4", MIME: "video/mp4", Description: "", // contains filtered or unexported fields }, { Name: "M4V video", Extension: "m4v", MIME: "video/x-m4v", Description: "", // contains filtered or unexported fields }, { Name: "Quicktime video", Extension: "mov", MIME: "video/quicktime", Description: "", // contains filtered or unexported fields }, { Name: "Audio Video Interleave", Extension: "avi", MIME: "video/x-msvideo", Description: "", // contains filtered or unexported fields }, { Name: "Windows Media Video", Extension: "wmv", MIME: "video/x-ms-wmv", Description: "", // contains filtered or unexported fields }, { Name: "MPEG video", Extension: "mpg", MIME: "video/mpeg", Description: "", // contains filtered or unexported fields }, { Name: "Flash Video", Extension: "flv", MIME: "video/x-flv", Description: "", Carver: "FLV", // contains filtered or unexported fields }, { Name: "OGG Video", Extension: "ogv,ogm,opus,ogx", MIME: "video/ogg", Description: "", // contains filtered or unexported fields }, }}, {Name: "Audio", Types: []Sig{ { Name: "Waveform Audio", Extension: "wav", MIME: "audio/x-wav", Description: "", Carver: "WAV", // contains filtered or unexported fields }, { Name: "OGG audio", Extension: "ogg", MIME: "audio/ogg", Description: "", // contains filtered or unexported fields }, { Name: "Musical Instrument Digital Interface audio", Extension: "midi", MIME: "audio/midi", Description: "", // contains filtered or unexported fields }, { Name: "MPEG-3 audio", Extension: "mp3", MIME: "audio/mpeg", Description: "", Carver: "MP3", // contains filtered or unexported fields }, { Name: "MPEG-4 Part 14 audio", Extension: "m4a", MIME: "audio/m4a", Description: "", // contains filtered or unexported fields }, { Name: "Free Lossless Audio Codec", Extension: "flac", MIME: "audio/x-flac", Description: "", // contains filtered or unexported fields }, { Name: "Adaptive Multi-Rate audio codec", Extension: "amr", MIME: "audio/amr", Description: "", // contains filtered or unexported fields }, { Name: "Audacity", Extension: "au", MIME: "audio/x-au", Description: "", // contains filtered or unexported fields }, { Name: "Audacity Block", Extension: "auf", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Audio Interchange File", Extension: "aif", MIME: "audio/x-aiff", Description: "", // contains filtered or unexported fields }, { Name: "Audio Interchange File (compressed)", Extension: "aifc", MIME: "audio/x-aifc", Description: "", // contains filtered or unexported fields }, }}, {Name: "Documents", Types: []Sig{ { Name: "Portable Document Format", Extension: "pdf", MIME: "application/pdf", Description: "", Carver: "PDF", // contains filtered or unexported fields }, { Name: "Portable Document Format (under Base64)", Extension: "B64", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Adobe PostScript", Extension: "ps,eps,ai,pfa", MIME: "application/postscript", Description: "", // contains filtered or unexported fields }, { Name: "PostScript", Extension: "ps", MIME: "application/postscript", Description: "", // contains filtered or unexported fields }, { Name: "Encapsulated PostScript", Extension: "eps,ai", MIME: "application/eps", Description: "", // contains filtered or unexported fields }, { Name: "Rich Text Format", Extension: "rtf", MIME: "application/rtf", Description: "", Carver: "RTF", // contains filtered or unexported fields }, { Name: "Microsoft Office document/OLE2", Extension: "ole2,doc,xls,dot,ppt,xla,ppa,pps,pot,msi,sdw,db,vsd,msg", MIME: "application/msword,application/vnd.ms-excel,application/vnd.ms-powerpoint", Description: "Microsoft Office documents", // contains filtered or unexported fields }, { Name: "Microsoft Office document/OLE2 (under Base64)", Extension: "B64", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Microsoft Office 2007+ document", Extension: "docx,xlsx,pptx", MIME: "application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.presentationml.presentation", Description: "", Carver: "ZIP", // contains filtered or unexported fields }, { Name: "Microsoft Access database", Extension: "mdb,mda,mde,mdt,fdb,psa", MIME: "application/msaccess", Description: "", // contains filtered or unexported fields }, { Name: "Microsoft Access 2007+ database", Extension: "accdb,accde,accda,accdu", MIME: "application/msaccess", Description: "", // contains filtered or unexported fields }, { Name: "Microsoft OneNote document", Extension: "one", MIME: "application/onenote", Description: "", // contains filtered or unexported fields }, { Name: "Outlook Express database", Extension: "dbx", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Personal Storage Table (Outlook)", Extension: "pst,ost,fdb,pab", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Microsoft Exchange Database", Extension: "edb", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "WordPerfect document", Extension: "wpd,wp,wp5,wp6,wpp,bk!,wcm", MIME: "application/wordperfect", Description: "", // contains filtered or unexported fields }, { Name: "EPUB e-book", Extension: "epub", MIME: "application/epub+zip", Description: "", Carver: "ZIP", // contains filtered or unexported fields }, }}, {Name: "Applications", Types: []Sig{ { Name: "Windows Portable Executable", Extension: "exe,dll,drv,vxd,sys,ocx,vbx,com,fon,scr", MIME: "application/vnd.microsoft.portable-executable", Description: "", Carver: "MZPE", // contains filtered or unexported fields }, { Name: "Executable and Linkable Format", Extension: "elf,bin,axf,o,prx,so", MIME: "application/x-executable", Description: "Executable and Linkable Format file. No standard file extension.", Carver: "ELF", // contains filtered or unexported fields }, { Name: "MacOS Mach-O object", Extension: "dylib", MIME: "application/octet-stream", Description: "", Carver: "MACHO", // contains filtered or unexported fields }, { Name: "MacOS Mach-O 64-bit object", Extension: "dylib", MIME: "application/octet-stream", Description: "", Carver: "MACHO", // contains filtered or unexported fields }, { Name: "Adobe Flash", Extension: "swf", MIME: "application/x-shockwave-flash", Description: "", // contains filtered or unexported fields }, { Name: "Java Class", Extension: "class", MIME: "application/java-vm", Description: "", // contains filtered or unexported fields }, { Name: "Dalvik Executable", Extension: "dex", MIME: "application/octet-stream", Description: "Dalvik Executable as used by Android", // contains filtered or unexported fields }, { Name: "Google Chrome Extension", Extension: "crx", MIME: "application/crx", Description: "Google Chrome extension or packaged app", // contains filtered or unexported fields }, }}, {Name: "Archives", Types: []Sig{ { Name: "PKZIP archive", Extension: "zip", MIME: "application/zip", Description: "", Carver: "ZIP", // contains filtered or unexported fields }, { Name: "PKZIP archive (under Base64)", Extension: "B64", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "TAR archive", Extension: "tar", MIME: "application/x-tar", Description: "", Carver: "TAR", // contains filtered or unexported fields }, { Name: "Roshal Archive", Extension: "rar", MIME: "application/x-rar-compressed", Description: "", // contains filtered or unexported fields }, { Name: "Gzip", Extension: "gz", MIME: "application/gzip", Description: "", Carver: "GZIP", // contains filtered or unexported fields }, { Name: "Bzip2", Extension: "bz2", MIME: "application/x-bzip2", Description: "", Carver: "BZIP2", // contains filtered or unexported fields }, { Name: "7zip", Extension: "7z", MIME: "application/x-7z-compressed", Description: "", // contains filtered or unexported fields }, { Name: "Zlib Deflate", Extension: "zlib", MIME: "application/x-deflate", Description: "", Carver: "Zlib", // contains filtered or unexported fields }, { Name: "xz compression", Extension: "xz", MIME: "application/x-xz", Description: "", Carver: "XZ", // contains filtered or unexported fields }, { Name: "Tarball", Extension: "tar.z", MIME: "application/x-gtar", Description: "", // contains filtered or unexported fields }, { Name: "ISO disk image", Extension: "iso", MIME: "application/octet-stream", Description: "ISO 9660 CD/DVD image file", // contains filtered or unexported fields }, { Name: "Virtual Machine Disk", Extension: "vmdk", MIME: "application/vmdk,application/x-virtualbox-vmdk", Description: "", // contains filtered or unexported fields }, { Name: "Virtual Hard Drive", Extension: "vhd", MIME: "application/x-vhd", Description: "", // contains filtered or unexported fields }, { Name: "Macintosh disk image", Extension: "dmf,dmg", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "ARJ Archive", Extension: "arj", MIME: "application/x-arj-compressed", Description: "", // contains filtered or unexported fields }, { Name: "WinAce Archive", Extension: "ace", MIME: "application/x-ace-compressed", Description: "", // contains filtered or unexported fields }, { Name: "Macintosh BinHex Encoded File", Extension: "hqx", MIME: "application/mac-binhex", Description: "", // contains filtered or unexported fields }, { Name: "ALZip Archive", Extension: "alz", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "KGB Compressed Archive", Extension: "kgb", MIME: "application/x-kgb-compressed", Description: "", // contains filtered or unexported fields }, { Name: "Microsoft Cabinet", Extension: "cab", MIME: "vnd.ms-cab-compressed", Description: "", // contains filtered or unexported fields }, { Name: "Jar Archive", Extension: "jar", MIME: "application/java-archive", Description: "", // contains filtered or unexported fields }, { Name: "Jar Archive", Extension: "jar", MIME: "application/java-archive", Description: "", Carver: "ZIP", // contains filtered or unexported fields }, { Name: "lzop compressed", Extension: "lzop,lzo", MIME: "application/x-lzop", Description: "", Carver: "LZOP", // contains filtered or unexported fields }, { Name: "Linux deb package", Extension: "deb", MIME: "application/vnd.debian.binary-package", Description: "", Carver: "DEB", // contains filtered or unexported fields }, { Name: "Apple Disk Image", Extension: "dmg", MIME: "application/x-apple-diskimage", Description: "", // contains filtered or unexported fields }, }}, {Name: "Miscellaneous", Types: []Sig{ { Name: "UTF-8 text", Extension: "txt", MIME: "text/plain", Description: "UTF-8 encoded Unicode byte order mark, commonly but not exclusively seen in text files.", // contains filtered or unexported fields }, { Name: "UTF-32 LE text", Extension: "utf32le", MIME: "charset/utf32le", Description: "Little-endian UTF-32 encoded Unicode byte order mark.", // contains filtered or unexported fields }, { Name: "UTF-16 LE text", Extension: "utf16le", MIME: "charset/utf16le", Description: "Little-endian UTF-16 encoded Unicode byte order mark.", // contains filtered or unexported fields }, { Name: "Web Open Font Format", Extension: "woff", MIME: "application/font-woff", Description: "", // contains filtered or unexported fields }, { Name: "Web Open Font Format 2", Extension: "woff2", MIME: "application/font-woff", Description: "", // contains filtered or unexported fields }, { Name: "Embedded OpenType font", Extension: "eot", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "TrueType Font", Extension: "ttf", MIME: "application/font-sfnt", Description: "", // contains filtered or unexported fields }, { Name: "OpenType Font", Extension: "otf", MIME: "application/font-sfnt", Description: "", // contains filtered or unexported fields }, { Name: "SQLite", Extension: "sqlite", MIME: "application/x-sqlite3", Description: "", Carver: "SQLITE", // contains filtered or unexported fields }, { Name: "BitTorrent link", Extension: "torrent", MIME: "application/x-bittorrent", Description: "", // contains filtered or unexported fields }, { Name: "Cryptocurrency wallet", Extension: "wallet", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Registry fragment", Extension: "hbin", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Registry script", Extension: "rgs", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "WinNT Registry Hive", Extension: "registry", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Windows Event Log", Extension: "evt", MIME: "application/octet-stream", Description: "", Carver: "EVT", // contains filtered or unexported fields }, { Name: "Windows Event Log", Extension: "evtx", MIME: "application/octet-stream", Description: "", Carver: "EVTX", // contains filtered or unexported fields }, { Name: "Windows Pagedump", Extension: "dmp", MIME: "application/octet-stream", Description: "", Carver: "DMP", // contains filtered or unexported fields }, { Name: "Windows Prefetch", Extension: "pf", MIME: "application/x-pf", Description: "", Carver: "PF", // contains filtered or unexported fields }, { Name: "Windows Prefetch (Win 10)", Extension: "pf", MIME: "application/x-pf", Description: "", Carver: "PFWin10", // contains filtered or unexported fields }, { Name: "PList (XML)", Extension: "plist", MIME: "application/xml", Description: "", Carver: "PListXML", // contains filtered or unexported fields }, { Name: "PList (binary)", Extension: "bplist,plist,ipmeta,abcdp,mdbackup,mdinfo,strings,nib,ichat,qtz,webbookmark,webhistory", MIME: "application/x-plist", Description: "", // contains filtered or unexported fields }, { Name: "MacOS X Keychain", Extension: "keychain", MIME: "application/octet-stream", Description: "", Carver: "MacOSXKeychain", // contains filtered or unexported fields }, { Name: "TCP Packet", Extension: "tcp", MIME: "application/tcp", Description: "", // contains filtered or unexported fields }, { Name: "UDP Packet", Extension: "udp", MIME: "application/udp", Description: "", // contains filtered or unexported fields }, { Name: "Compiled HTML", Extension: "chm,chw,chi", MIME: "application/vnd.ms-htmlhelp", Description: "", // contains filtered or unexported fields }, { Name: "Windows Password", Extension: "pwl", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Bitlocker recovery key", Extension: "bitlocker", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Certificate", Extension: "cer,cat,p7b,p7c,p7m,p7s,swz,rsa,crl,crt,der", MIME: "application/pkix-cert", Description: "", // contains filtered or unexported fields }, { Name: "Certificate", Extension: "cat,swz,p7m", MIME: "application/vnd.ms-pki.seccat", Description: "", // contains filtered or unexported fields }, { Name: "PGP pubring", Extension: "pkr,gpg", MIME: "application/pgp-keys", Description: "", // contains filtered or unexported fields }, { Name: "PGP secring", Extension: "skr", MIME: "application/pgp-keys", Description: "", // contains filtered or unexported fields }, { Name: "PGP Safe", Extension: "pgd", MIME: "application/pgp-keys", Description: "", // contains filtered or unexported fields }, { Name: "Task Scheduler", Extension: "job", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, { Name: "Windows Shortcut", Extension: "lnk", MIME: "application/x-ms-shortcut", Description: "", Carver: "LNK", // contains filtered or unexported fields }, { Name: "Bash", Extension: "bash", MIME: "application/bash", Description: "", // contains filtered or unexported fields }, { Name: "Shell", Extension: "sh", MIME: "application/sh", Description: "", // contains filtered or unexported fields }, { Name: "Python", Extension: "py,pyc,pyd,pyo,pyw,pyz", MIME: "application/python", Description: "", // contains filtered or unexported fields }, { Name: "Ruby", Extension: "rb", MIME: "application/ruby", Description: "", // contains filtered or unexported fields }, { Name: "perl", Extension: "pl,pm,t,pod", MIME: "application/perl", Description: "", // contains filtered or unexported fields }, { Name: "php", Extension: "php,phtml,php3,php4,php5,php7,phps,php-s,pht,phar", MIME: "application/php", Description: "", // contains filtered or unexported fields }, { Name: "Smile", Extension: "sml", MIME: "\tapplication/x-jackson-smile", Description: "", // contains filtered or unexported fields }, { Name: "Lua Bytecode", Extension: "luac", MIME: "application/x-lua", Description: "", // contains filtered or unexported fields }, { Name: "WebAssembly binary", Extension: "wasm", MIME: "application/octet-stream", Description: "", // contains filtered or unexported fields }, }}, }
Functions ¶
Types ¶
type Match ¶
Match is one signature match found by scanForFileTypes, at the offset the file it describes would start at.
func Scan ¶
Scan reports every position in buf at which a signature matches, in order of increasing offset. detectFileType only asks what the buffer starts with; this is what carving needs, since an embedded file can begin anywhere. categories filters to those category names; nil means all categories.
type Sig ¶
type Sig struct {
Name string
Extension string
MIME string
Description string
// Carver names the algorithm that can cut a file of this type out of a
// larger buffer, or is empty when there is none. carvers maps it to the
// function; the indirection keeps the generated table free of Go identifiers.
Carver string
// contains filtered or unexported fields
}
Sig is one file-type signature. It matches if ANY of its alternative byte patterns (alts) fully matches the buffer.