95 lines
3.2 KiB
Go
95 lines
3.2 KiB
Go
package unpack
|
|
|
|
// FileMagicNumbers 文件类型及其对应的魔数(文件头标识)
|
|
var FileMagicNumbers = map[string][]byte{
|
|
// 图像文件
|
|
".png": {0x89, 'P', 'N', 'G', '\r', '\n', 0x1A, '\n'},
|
|
".jpg": {0xFF, 0xD8, 0xFF},
|
|
".jpeg": {0xFF, 0xD8, 0xFF},
|
|
".gif": {'G', 'I', 'F', '8'},
|
|
".bmp": {'B', 'M'},
|
|
".webp": {'R', 'I', 'F', 'F'},
|
|
".tiff": {0x49, 0x49, 0x2A, 0x00},
|
|
".cr2": {0x49, 0x49, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x43, 0x52},
|
|
".ico": {0x00, 0x00, 0x01, 0x00},
|
|
".heic": {'f', 't', 'y', 'p', 'h', 'e', 'i', 'c'},
|
|
|
|
// 文档文件
|
|
".pdf": {'%', 'P', 'D', 'F', '-'},
|
|
".doc": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1},
|
|
".docx": {'P', 'K', 0x03, 0x04},
|
|
".xls": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1},
|
|
".xlsx": {'P', 'K', 0x03, 0x04},
|
|
".ppt": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1},
|
|
".pptx": {'P', 'K', 0x03, 0x04},
|
|
".odt": {'P', 'K', 0x03, 0x04},
|
|
".ods": {'P', 'K', 0x03, 0x04},
|
|
".odp": {'P', 'K', 0x03, 0x04},
|
|
".rtf": {'{', '\\', 'r', 't', 'f', '1'},
|
|
".epub": {'P', 'K', 0x03, 0x04},
|
|
".mobi": {'M', 'O', 'B', 'I'},
|
|
|
|
// 压缩文件
|
|
".zip": {'P', 'K', 0x03, 0x04},
|
|
".rar": {'R', 'a', 'r', '!', 0x1A, 0x07, 0x00},
|
|
".7z": {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C},
|
|
".gz": {0x1F, 0x8B, 0x08},
|
|
".tar": {'u', 's', 't', 'a', 'r'},
|
|
".bz2": {'B', 'Z', 'h'},
|
|
".xz": {0xFD, '7', 'z', 'X', 'Z', 0x00},
|
|
|
|
// 音频文件
|
|
".mp3": {0xFF, 0xFB},
|
|
".wav": {'R', 'I', 'F', 'F'},
|
|
".ogg": {'O', 'g', 'g', 'S'},
|
|
".flac": {'f', 'L', 'a', 'C'},
|
|
".aac": {0xFF, 0xF1},
|
|
".m4a": {'f', 't', 'y', 'p', 'M', '4', 'A', ' '},
|
|
".mid": {'M', 'T', 'h', 'd'},
|
|
".aiff": {'F', 'O', 'R', 'M'},
|
|
|
|
// 视频文件
|
|
".mp4": {0x00, 0x00, 0x00, 0x18, 'f', 't', 'y', 'p'},
|
|
".avi": {'R', 'I', 'F', 'F'},
|
|
".mkv": {0x1A, 0x45, 0xDF, 0xA3},
|
|
".flv": {'F', 'L', 'V'},
|
|
".mov": {'f', 't', 'y', 'p', 'q', 't', ' ', ' '},
|
|
".webm": {0x1A, 0x45, 0xDF, 0xA3},
|
|
".mpg": {0x00, 0x00, 0x01, 0xBA},
|
|
".wmv": {0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11},
|
|
|
|
// 可执行文件和库文件
|
|
".exe": {'M', 'Z'},
|
|
".elf": {0x7F, 'E', 'L', 'F'},
|
|
".so": {0x7F, 'E', 'L', 'F'},
|
|
".dll": {'M', 'Z'},
|
|
".app": {0xCA, 0xFE, 0xBA, 0xBE}, // Mach-O 文件格式 (macOS)
|
|
|
|
// 脚本和标记语言文件
|
|
".json": {'{'}, // 假设 JSON 文件以 { 开头
|
|
".xml": {'<', '?', 'x', 'm', 'l'},
|
|
".html": {'<', '!', 'D', 'O', 'C', 'T', 'Y', 'P', 'E'},
|
|
|
|
// 字体文件
|
|
".ttf": {0x00, 0x01, 0x00, 0x00, 0x00},
|
|
".otf": {'O', 'T', 'T', 'O'},
|
|
".woff": {'w', 'O', 'F', 'F'},
|
|
".woff2": {'w', 'O', 'F', '2'},
|
|
|
|
// 数据库文件
|
|
".sqlite": {'S', 'Q', 'L', 'i', 't', 'e', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', '3', 0x00},
|
|
".db": {0x00, 0x06, 0x15, 0x61, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
|
|
// 其他
|
|
".swf": {'F', 'W', 'S'},
|
|
".class": {0xCA, 0xFE, 0xBA, 0xBE},
|
|
".psd": {'8', 'B', 'P', 'S'},
|
|
".torrent": {'d', '8', ':', 'a', 'n', 'n', 'o', 'u', 'n', 'c', 'e'},
|
|
".blend": {'B', 'L', 'E', 'N', 'D', 'E', 'R'},
|
|
".pcap": {0xD4, 0xC3, 0xB2, 0xA1},
|
|
".dwg": {0x41, 0x43, 0x31, 0x30},
|
|
".iso": {0x43, 0x44, 0x30, 0x30, 0x31},
|
|
".vsd": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1},
|
|
".mdb": {0x00, 0x01, 0x00, 0x00, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x4A, 0x65, 0x74},
|
|
}
|