类型 | 扩展名 | 签名(十六进制) | 偏移 | MIME |
|---|
PNG 图片 | png | 89 50 4E 47 0D 0A 1A 0A | 0 | image/png |
JPEG 图片 | jpg | FF D8 FF | 0 | image/jpeg |
GIF 图片 (87a) | gif | 47 49 46 38 37 61 | 0 | image/gif |
GIF 图片 (89a) | gif | 47 49 46 38 39 61 | 0 | image/gif |
BMP 位图 | bmp | 42 4D | 0 | image/bmp |
WEBP 图片 | webp | 52 49 46 46 ... 57 45 42 50(偏移 8) | 0 | image/webp |
TIFF 图片(小端) | tif | 49 49 2A 00 | 0 | image/tiff |
TIFF 图片(大端) | tif | 4D 4D 00 2A | 0 | image/tiff |
ICO 图标 | ico | 00 00 01 00 | 0 | image/x-icon |
PSD 源文件 | psd | 38 42 50 53 | 0 | image/vnd.adobe.photoshop |
PDF 文档 | pdf | 25 50 44 46 2D | 0 | application/pdf |
RTF 文档 | rtf | 7B 5C 72 74 66 | 0 | application/rtf |
ZIP 压缩包 | zip | 50 4B 03 04 | 0 | application/zip |
ZIP 空压缩包 | zip | 50 4B 05 06 | 0 | application/zip |
RAR 压缩包 (v1.5-4.x) | rar | 52 61 72 21 1A 07 00 | 0 | application/vnd.rar |
RAR 压缩包 (v5+) | rar | 52 61 72 21 1A 07 01 00 | 0 | application/vnd.rar |
7-Zip 压缩包 | 7z | 37 7A BC AF 27 1C | 0 | application/x-7z-compressed |
GZIP 压缩数据 | gz | 1F 8B 08 | 0 | application/gzip |
BZIP2 压缩数据 | bz2 | 42 5A 68 | 0 | application/x-bzip2 |
XZ 压缩数据 | xz | FD 37 7A 58 5A 00 | 0 | application/x-xz |
TAR 归档 | tar | 75 73 74 61 72 | 257 | application/x-tar |
MP3 音频 (ID3) | mp3 | 49 44 33 | 0 | audio/mpeg |
MP3 音频 (帧同步) | mp3 | FF FB | 0 | audio/mpeg |
MP4 视频 | mp4 | 66 74 79 70 | 4 | video/mp4 |
WAV 音频 | wav | 52 49 46 46 ... 57 41 56 45(偏移 8) | 0 | audio/wav |
AVI 视频 | avi | 52 49 46 46 ... 41 56 49 20(偏移 8) | 0 | video/x-msvideo |
FLAC 音频 | flac | 66 4C 61 43 | 0 | audio/flac |
OGG 媒体 | ogg | 4F 67 67 53 | 0 | audio/ogg |
MIDI 音乐 | mid | 4D 54 68 64 | 0 | audio/midi |
ELF 可执行文件 | 无 | 7F 45 4C 46 | 0 | application/x-elf |
Windows 可执行文件 | exe | 4D 5A | 0 | application/x-msdownload |
Java 类文件 | class | CA FE BA BE | 0 | application/java-vm |
WebAssembly 模块 | wasm | 00 61 73 6D | 0 | application/wasm |
Android DEX | dex | 64 65 78 0A | 0 | application/octet-stream |
Windows CAB | cab | 4D 53 43 46 | 0 | application/vnd.ms-cab-compressed |
SQLite 数据库 | db | 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00 | 0 | application/vnd.sqlite3 |
Office 97-2003 复合文档 | doc | D0 CF 11 E0 A1 B1 1A E1 | 0 | application/vnd.ms-office |
WOFF 字体 | woff | 77 4F 46 46 | 0 | font/woff |
WOFF2 字体 | woff2 | 77 4F 46 32 | 0 | font/woff2 |
功能说明
绝大多数二进制文件格式都会在开头写入一段固定的标识字节,业内称为 Magic Bytes(魔数)或文件签名。例如 PNG 文件永远以 89 50 4E 47 0D 0A 1A 0A 开头,其中 50 4E 47 正是 ASCII 的 PNG 三个字母。本工具读取你选择的文件头部字节,与内置的三十余条签名规则逐条比对,给出真实类型判断、置信度评分与完整的十六进制转储。所有读取通过 FileReader 在本地完成,文件不会上传到任何服务器。
为什么不能只看扩展名
扩展名只是文件名的一部分,任何人都可以随手改掉,它不代表文件的真实内容。把 trojan.exe 改名成 photo.jpg,扩展名会骗过肉眼,但文件头的 4D 5A(即 ASCII 的 MZ,DOS 可执行文件标识)骗不了人。这正是文件上传接口必须做服务端魔数校验的原因——只校验扩展名或前端 MIME 类型是典型的安全漏洞,因为两者都可以被客户端任意伪造。
置信度是怎么算的
评分主要看三个因素:签名越长越可信(八字节的 PNG 签名比两字节的 4D 5A 可靠得多,因为随机数据撞上八字节特定序列的概率是二的六十四次方分之一);需要同时匹配多处特征的规则加分(如 WAV 要求开头是 RIFF 且第 8 字节起是 WAVE);扩展名与识别结果吻合再小幅加分。当多条规则同时命中时,工具会按分数从高到低全部列出,方便你自行判断。
关于误判的坦诚说明
魔数识别不是万无一失的,以下几类情况需要特别留意。
容器格式共用签名:DOCX、XLSX、PPTX、JAR、APK、EPUB、ODT 本质上都是 ZIP 压缩包,头部完全相同都是 50 4B 03 04。本工具会进一步读取 ZIP 第一个条目的文件名做二次判断(例如以 word/ 开头判定为 DOCX,以 xl/ 开头判定为 XLSX),但这依赖打包顺序,某些工具生成的文件可能把 [Content_Types].xml 排在最前,此时只能给出「ZIP 或基于 ZIP 的文档」这一较宽泛的结论。RIFF 家族的 WAV、AVI、WEBP 同理,靠第 8 字节起的四字节子类型区分。
短签名易误报:4D 5A(EXE)与 42 4D(BMP)都只有两字节,任何二进制数据开头恰好是这两个字节都会被命中,置信度因此被压低。无签名格式无法识别:纯文本、CSV、HTML、JSON、SVG、部分 TAR 与老式 MP3 并没有可靠魔数,本工具会尝试识别 BOM 与可打印字符比例给出「疑似文本」的提示,但不会武断下结论。偏移量陷阱:TAR 的 ustar 位于第 257 字节,MP4 的 ftyp 位于第 4 字节,所以工具默认读取 512 字节而非仅仅头部几个字节。
结论是:识别结果应当作为参考与线索,安全敏感场景请结合完整解析、沙箱验证与病毒扫描共同判断,不要仅凭本工具的输出就认定文件安全。
使用场景
排查下载文件损坏或类型不符、分析改过后缀的可疑文件、验证文件上传接口的服务端校验是否可靠、CTF 取证题中的文件头修复、以及学习二进制格式结构。
温馨提示
- 您的反馈将帮助我们改进产品体验
- 反馈内容会匿名保存,保护您的隐私
- 我们会认真阅读每一条反馈
暂无反馈记录
