Magika
Magika 是一款新颖的基于 AI 的文件类型检测工具,它利用深度学习的最新进展来提供准确的检测。
在底层,Magika 采用了一个定制的、高度优化的模型,大小仅为几 MB,即使在单个 CPU 上运行,也能在几毫秒内完成精确的文件识别。
Magika 已在包含约 1 亿个样本、覆盖 200 多种内容类型(包括二进制和文本文件格式)的数据集上进行了训练和评估,在我们的测试集上平均准确率达到约 99%。
Magika 被大规模用于帮助提高 Google 用户的安全性,通过将 Gmail、Drive 和 Safe Browsing 的文件路由到适当的安全和内容策略扫描器,每周处理数千亿个样本。Magika 也已与 VirusTotal(示例)和 abuse.ch(示例)集成。
更多背景信息,您可以阅读我们最初的在 Google 开源博客上的公告文章,查阅 Magika 的网站,以及在发表于 2025 年 IEEE/ACM 国际软件工程会议 (ICSE) 的研究论文中了解更多。
您无需安装任何软件即可通过我们的 Web 演示 试用 Magika,该演示在您的浏览器中本地运行!
亮点
- 提供用 Rust 编写的命令行工具、Python API,以及 Rust、JavaScript/TypeScript(实验性 npm 包,为我们的 Web 演示 提供支持)和 GoLang(进行中)的附加绑定。
- 在包含约 1 亿个文件、覆盖 200 多种内容类型 的数据集上训练和评估。
- 在我们的测试集上,Magika 实现了约 99% 的平均精确率和召回率,优于现有方法——尤其是在文本内容类型上。
- 模型加载完成后(一次性开销),即使仅在单个 CPU 上运行,每个文件的推理时间也约为 5 毫秒。
- 您可以同时调用 Magika 处理数千个文件。您也可以使用
-r递归扫描目录。 - 推理时间接近恒定,与文件大小无关;Magika 仅使用文件内容的有限子集。
- Magika 使用一个基于内容类型的阈值系统,决定是否“信任”模型的预测,或者返回一个通用标签,例如“通用文本文档”或“未知二进制数据”。
- 对错误的容忍度可以通过不同的预测模式进行控制,例如
high-confidence、medium-confidence和best-guess。 - 客户端和绑定已经开源,更多内容即将推出!
目录
快速入门
安装
命令行工具
Magika 提供了一个用 Rust 编写的 CLI,可以通过多种方式安装。
通过 magika Python 包:
pipx install magika
通过 brew(macOS / Linux)
brew install magika
通过安装脚本:
curl -LsSf https://securityresearch.google/magika/install.sh | sh
或:
powershell -ExecutionPolicy Bypass -c "irm https://securityresearch.google/magika/install.ps1 | iex"
通过 magika-cli Rust 包:
cargo install --locked magika-cli
Python 包
pip install magika
JavaScript 包
npm install magika
快速开始
这里有一些快速示例帮助您入门。
要了解 Magika 的内部工作原理,请参阅 Magika 网站上的核心概念部分。
命令行工具示例
% cd tests_data/basic && magika -r * | head
asm/code.asm: Assembly (code)
batch/simple.bat: DOS batch file (code)
c/code.c: C source (code)
css/code.css: CSS source (code)
csv/magika_test.csv: CSV document (code)
dockerfile/Dockerfile: Dockerfile (code)
docx/doc.docx: Microsoft Word 2007+ document (document)
docx/magika_test.docx: Microsoft Word 2007+ document (document)
eml/sample.eml: RFC 822 mail (text)
empty/empty_file: Empty file (inode)
% magika ./tests_data/basic/python/code.py --json
[
{
"path": "./tests_data/basic/python/code.py",
"result": {
"status": "ok",
"value": {
"dl": {
"description": "Python source",
"extensions": [
"py",
"pyi"
],
"group": "code",
"is_text": true,
"label": "python",
"mime_type": "text/x-python"
},
"output": {
"description": "Python source",
"extensions": [
"py",
"pyi"
],
"group": "code",
"is_text": true,
"label": "python",
"mime_type": "text/x-python"
},
"score": 0.996999979019165
}
}
}
]
% cat tests_data/basic/ini/doc.ini | magika -
-: INI configuration file (text)
% magika --help
使用 AI 确定文件内容类型
用法:magika [选项] [路径]...
参数:
[路径]...
要分析的文件路径列表。
使用短横线 (-) 从标准输入读取(只能使用一次)。
选项:
-r, --recursive
识别目录内的文件,而不是识别目录本身
--no-dereference
将符号链接识别为本身,而不是跟随链接识别其内容
--colors
无论终端是否支持都打印彩色输出
--no-colors
无论终端是否支持都不打印彩色输出
-s, --output-score
除内容类型外还打印预测分数
-i, --mime-type
打印 MIME 类型而不是内容类型描述
-l, --label
打印简单标签而不是内容类型描述
--json
以 JSON 格式打印
--jsonl
以 JSONL 格式打印
--format <自定义>
使用自定义格式打印(使用 --help 查看详细信息)。
支持以下占位符:
%p 文件路径
%l 标识内容类型的唯一标签
%d 内容类型的描述
%g 内容类型的组别
%m 内容类型的 MIME 类型
%e 内容类型可能的文件扩展名
%s 该文件的内容类型分数
%S 该文件的内容类型分数(百分比形式)
%b 如果被覆盖则输出模型输出,否则为空
%% 字面量 %
-h, --help
打印帮助(使用 '-h' 查看摘要)
-V, --version
打印版本
更多示例和关于 CLI 的文档,请参阅 https://crates.io/crates/magika-cli。
Python 示例
>>> from magika import Magika
>>> m = Magika()
>>> res = m.identify_bytes(b'function log(msg) {console.log(msg);}')
>>> print(res.output.label)
javascript
>>> from magika import Magika
>>> m = Magika()
>>> res = m.identify_path('./tests_data/basic/ini/doc.ini')
>>> print(res.output.label)
ini
>>> 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)
ini
更多示例和关于 Python 模块的文档,请参阅 Python Magika 模块 部分。
文档
请查阅 Magika 的网站 获取详细文档,内容包括:
- 核心概念
- Magika 的工作原理
- 模型与内容类型
- 预测模式
- 理解输出
- CLI 与绑定(Python 模块、JavaScript 模块等)
- 贡献指南
- 常见问题
- …
安全漏洞
请直接通过 magika-dev@google.com 联系我们。
许可证
Apache 2.0;详情请参阅 LICENSE。
免责声明
本项目并非 Google 官方项目。Google 不提供支持,并且 Google 特别声明不对其质量、适销性或针对特定用途的适用性作任何保证。
