file
2026/5/29工具工具文件类型file大约 4 分钟
file
是什么
file 是文件类型识别工具,会根据文件头、魔数和内容特征判断文件真实类型。
CTF 中不要只信扩展名。一个 .jpg 可能是 ZIP,一个 .txt 可能是 ELF,一个没有后缀的文件可能是 PNG。
安装与配置
Linux 通常自带。若没有:
sudo apt update
sudo apt install fileWindows 可在 WSL、Git Bash、MSYS2 或 CTF 工具环境中使用。
基本用法
判断单个文件
file challenge判断目录下所有文件
file *输出 MIME 类型
file --mime challenge不跟随符号链接
file -h target更多选项
详细输出
file -v challenge查看版本信息和 magic 数据库路径。
分隔符输出
file -0 challenge使用 NUL 字符分隔,适合脚本处理。
简短输出
file -b challenge只输出类型,不显示文件名。
查看 magic 文件路径
file -C列出所有已知类型
file -l从标准输入读取
echo "PK" | file -
cat challenge | file -检查多个文件
file file1 file2 file3
file *.bin递归检查目录
file -r ./directory/magic 数据库
什么是 magic
file 命令使用 magic 数据库来识别文件类型。
数据库位于: /usr/share/misc/magic 或 /usr/share/file/magic
每个条目定义: 偏移、类型、测试值、描述常见文件签名
文件类型 偏移 签名
PNG 0 89 50 4E 47 0D 0A 1A 0A
JPEG 0 FF D8 FF
GIF 0 47 49 46 38
ZIP 0 50 4B 03 04
PDF 0 25 50 44 46
ELF 0 7F 45 4C 46
RAR 0 52 61 72 21
7z 0 37 7A BC AF
BMP 0 42 4D
TIFF 0 49 49 2A 00
PSD 0 38 42 50 53
Mach-O 0 FE ED FA CE 或 CF FA ED FE自定义 magic
创建自定义 magic 文件:
# mymagic
0 string CTF_FLAG CTF flag file
0 string HIDDEN Hidden data file使用:
file -m mymagic challenge魔数搜索
# 使用 xxd 查看文件头
xxd -l 16 challenge
# 搜索特定魔数
xxd challenge | grep "504b"CTF常用技巧
后缀不可信
file suspicious.jpg如果输出是:
Zip archive data说明应该按压缩包分析,而不是按图片分析。
检查 ELF
file ./vuln常见输出会包含:
ELF 64-bit LSB executable
dynamically linked
not stripped这些信息会影响逆向和 Pwn 方向判断。
批量找异常文件
find . -type f -exec file {} \;适合压缩包解开后快速判断文件集合。
ELF 文件详细信息
file ./vuln输出包含:
ELF: 文件格式
64-bit: 位数
LSB: 字节序
executable: 文件类型(executable/shared object/relocatable)
x86-64: 架构
dynamically linked: 链接方式
interpreter /lib64/ld-linux-x86-64.so.2: 解释器
for GNU/Linux: 目标系统
not stripped: 是否有符号PE 文件信息
file program.exe输出包含:
PE32/PE32+: 文件格式
executable: 文件类型
Intel 80386: 架构
for MS-Windows: 目标系统图片文件判断
file image.png输出可能包含:
PNG image data
image data
dimensions
color type
bit depth压缩包判断
file archive.zip输出可能包含:
Zip archive data
compressed size
uncompressed size
number of files自定义文件类型
创建假文件
# 创建带特定魔数的文件
printf '\x89PNG' > fake.png
file fake.png # 可能识别为 PNG
# 修改扩展名
mv fake.png fake.txt
file fake.txt # 仍然识别为 PNG修改文件头
# 修复损坏的文件头
printf '\x89\x50\x4e\x47\x0d\x0a\x1a\x0a' | dd of=broken.png bs=1 seek=0 count=8 conv=notrunc文件类型伪装
常见伪装:
- 修改扩展名
- 修改文件头
- 嵌套文件
- 拼接文件
检测方法:
- file 命令检查真实类型
- xxd 查看文件头
- binwalk 检查嵌套常见问题
file 判断错了怎么办
file 依赖特征识别,不是绝对真相。遇到异常时继续用 xxd 看文件头、用 binwalk 看嵌入结构。
文件头被改了怎么办
file 可能识别不出。根据内容特征、文件大小、可见字符串、题目提示继续判断。
只看 file 够吗
不够。file 是第一步,不是结论。CTF Misc 通常要继续看结构、尾部、附加数据和隐藏内容。
二进制文件显示 "data"
原因: 无法识别文件类型
解决:
1. xxd 查看文件头
2. binwalk 检查嵌套
3. strings 搜索可见字符串
4. 检查文件大小和结构链接文件
# 不跟随链接
file -h link
# 跟随链接
file -L link
# 查看链接目标
readlink link设备文件
file /dev/sda
file /dev/null关联
- 文件头、文件尾与真实类型
- 压缩包与嵌套文件
- Misc题的文件分析起手式
- xxd与hexdump
- binwalk