读一本好书,就是和许多高尚的人谈话。——歌德

Magika:文件在开口说话之前,我先看懂它是谁

有些文件特别会演。

它明明是个脚本,却披着 .txt 的外衣;
它明明是个压缩包,却假装自己是无害图片;
它明明是一段代码,却躲在看似普通的附件里,安静地等待被误判、被放行、被执行。

这时候,如果你还在靠扩展名做判断,文件就会在角落里冷笑一声:
“你看我名字就信我?那你也太好骗了。”

于是 Magika 出场。

Magika 是一个 快速且准确的 AI 驱动文件内容类型检测工具。它不靠文件名,不靠扩展名,而是看内容本身,用一个很轻、很快、很准的深度学习模型,在毫秒级告诉你:
“别猜了,我知道你手里的这个文件到底是什么。” (github.com)


Magika 是谁:它是一个“识别文件本体”的人

Magika 自我介绍很克制,但每句话都很有分量:

  • 它是 AI-powered file type detection:用深度学习来识别文件类型 (github.com)
  • 它的模型 只有几 MB,却能在 单 CPU 上做到毫秒级推理 (github.com)
  • 它训练评估的数据量级是 约 1 亿样本,覆盖 200+ 内容类型,测试集上达到 约 99% 平均精确率与召回 (github.com)
  • 它在 Google 内部被用来给 Gmail、Drive、Safe Browsing 做文件路由,规模是“每周处理数千亿样本”这种级别的工作量 (github.com)

你可以把它想象成一个极其专业的“安检员”,不看你穿什么(扩展名),只看你骨子里是什么(内容)。它的工作不是“猜”,而是“判”。


Magika 为什么快:它不是翻遍全身,而是看你最关键的几眼

Magika 的速度,来自一种很工程化、很“懂事”的策略:

它通常只读取文件的少量字节(常见上限到 2KB 左右),提取特征后让模型做预测,从而实现近似常数时间的推理——基本不随文件大小增长而变慢。 (securityresearch.google)

它识别时的核心流程很清晰:

  1. 读取文件开头的若干 chunk(或字节流)
  2. 抽取特征 → 交给深度学习模型预测内容类型
  3. 依据置信度分数做判断
  4. 分数过低时返回更保守的“泛化标签”(比如文本/未知二进制) (securityresearch.google)

它像一个经验老到的鉴定师:
不需要把整幅画刮开重画,只要看笔触、看构图、看细节,就能下结论;如果证据不够,它宁愿说“我不确定”,也不会乱报一个看似精准、实则危险的答案。


Magika 有哪些“亮点人格”

Magika 的 README 给了一份 Highlights,读起来像一份简历,但每条都很“可用”:

  • 形态多:Rust 写的 CLI、Python API,还有 Rust/JS/TS(实验性 npm 包)以及 Go(WIP)绑定 (github.com)
  • 可批量:一次喂给它上千个文件也行;用 -r 还能递归扫目录 (github.com)
  • 近常数时间:基本不随文件大小变化;因为只看内容的一小部分 (github.com)
  • 有“信任阈值系统”:每个内容类型都有阈值,决定是否相信模型的预测;不够就回退到泛化标签 (github.com)
  • 有预测模式:high-confidence / medium-confidence / best-guess 这种容错档位,让你自己决定“宁可错杀还是宁可漏掉” (github.com)
  • 模型加载后,单文件推理大约 5ms(单 CPU) (github.com)

Magika 这人最讨喜的一点是:
它不把“准确”当作绝对的单目标,它同时尊重“不确定性”。它会告诉你分数,会让你选模式,会在低置信度时退回保守结果——这在安全场景里非常重要。


快速启动:让 Magika 立刻开工

Magika 的上手方式很友好,它给了多种安装路径,你挑一个最顺手的就行。

CLI 安装(多种方式)

magika Python 包(适合想要一个干净 CLI 的人):

1
pipx install magika

用 Homebrew(macOS / Linux):

1
brew install magika

用官方安装脚本(就是那种“我来替你把事情办完”的感觉):

1
curl -LsSf https://securityresearch.google/magika/install.sh | sh

Windows PowerShell:

1
powershell -ExecutionPolicy Bypass -c "irm https://securityresearch.google/magika/install.ps1 | iex"

如果你更 Rust 一点:

1
cargo install --locked magika-cli

以上安装方式与示例均来自项目 README。 (github.com)


CLI 快速试用:它说话很直

Magika 的命令行输出属于那种“干净、有用、不废话”的类型。

递归扫一批文件(示例来自 README):

1
cd tests_data/basic && magika -r * | head

你会看到像这样的输出风格(README 展示):

  • ...: C source (code)
  • ...: Dockerfile (code)
  • ...: Microsoft Word 2007+ document (document)
  • ...: RFC 822 mail (text)
  • ...: Empty file (inode) (github.com)

如果你要机器友好一点,用 JSON:

1
magika ./tests_data/basic/python/code.py --json

如果你想让它吃标准输入(把内容管道喂给它):

1
cat tests_data/basic/ini/doc.ini | magika -

它的帮助信息也很完整,选项包括递归、是否跟随 symlink、输出 score、输出 MIME、输出 label、JSON/JSONL、自定义 format 等。 (github.com)


Python API:把“识别文件类型”变成你代码里的一句话

如果你更想把它嵌到项目里,Python 也有很直观的用法(README 示例):

1
2
3
4
from magika import Magika
m = Magika()
res = m.identify_bytes(b'function log(msg) {console.log(msg);}')
print(res.output.label)

识别路径:

1
2
3
4
from magika import Magika
m = Magika()
res = m.identify_path('./tests_data/basic/ini/doc.ini')
print(res.output.label)

识别流:

1
2
3
4
5
from magika import Magika
m = Magika()
with open('./tests_data/basic/ini/doc.ini', 'rb') as f:
res = m.identify_stream(f)
print(res.output.label)

这些用法来自项目 README 的 Python Examples。 (github.com)


它在安全场景里像什么:一个“分流官”

Magika 在 Google 的使用场景,描述得很明确:
它会把 Gmail、Drive、Safe Browsing 的文件路由到合适的安全扫描器和内容策略扫描器,并且规模巨大。 (github.com)

这件事的意义在于:
现代安全系统很多时候不是“一个扫描器打天下”,而是“多个扫描器各司其职”。
而“文件究竟是什么类型”就是分流的第一道门槛。

如果类型错了,后面的链路就可能扫不到、放错行、判错罪。
Magika 的存在,就是把“第一道门槛”做得更稳、更快、更适合规模化。


文档与生态:它不是只给你一个二进制就跑了

README 里明确建议你去 Magika 的网站看更系统的内容,包括:

  • Core Concepts(如何工作、模型与内容类型、预测模式、如何理解输出)
  • CLI 与各类绑定
  • FAQ、Contributing 等 (github.com)

如果你在意“它到底怎么做判断”,核心概念页也讲得很直白:读取少量字节、模型推理、阈值决定信任与否,以及在空文件/非普通文件/极小文件上会走启发式而不是跑模型。 (securityresearch.google)


License 与安全漏洞报告

  • License:Apache 2.0(见 LICENSE) (github.com)
  • 安全漏洞:README 提供了联系邮箱 magika-dev@google.com (github.com)

结语:Magika 像一个不爱夸张、但非常可靠的同事

Magika 不会告诉你“我无所不能”。
它更像一个可靠的同事:

  • 快:模型小,推理毫秒级,单 CPU 也能跑 (github.com)
  • 准:海量数据训练评估,覆盖 200+ 类型,测试集接近 99% (github.com)
  • 谨慎:有阈值、有模式、有回退,不确定就保守 (github.com)
  • 能打规模:在大规模安全链路里长期服役 (github.com)

当文件还在“装”的时候,Magika 已经在心里把它的底牌翻了个面,然后把答案轻轻放到你面前:

“我看过了,你不用猜。”