二进制文件检查器

拖入一个程序文件——Windows PE(.exe、.dll)、Linux ELF 二进制文件,或 macOS/iOS Mach-O——在动用更重的工具之前,先读取它对自身的声明:文件头、节与段、它导入的库与函数、它的导出与符号,以及其中每一个可打印字符串,并附带 MD5 与 SHA 哈希值和各节熵值。该文件永远不会离开你的设备,也永远不会被执行:它是在本页面中打开和读取的,而不是上传,因为你所怀疑的二进制文件,恰恰是最不应该交给陌生人服务器的文件。

最后更新:

或者将文件拖到此框中的任意位置。以下所有内容都从文件本身、在本设备上读取。仅做静态分析:文件只会被解析,永远不会运行。限制:128 MB。

本页面是什么——以及不是什么

这是一次初步的静态检查:文件只会被解析,永远不会被执行,这里的任何内容都不是恶意软件判定。所列发现都是观察结果,而不是定罪——未签名的文件是一个事实(许多合法工具都没有签名),熵值高于 7.2 是一个事实(加壳程序会提高熵值,但普通的压缩资源也会),而 Authenticode 签名块的存在并不能说明签名是否有效,只能说明那里有一个签名。对于你不信任的文件,如需第二意见,可将它的 SHA-256 与公开判定结果进行对比,入口在概览选项卡中——被搜索的是哈希值,文件本身永远不会被发送。Android 软件包有其专用的读取工具 APK Analyzer;程序在网络上的行为属于 PCAP Analyzer 的范畴;配套文章 AI 智能体能对你的应用进行逆向工程吗? 则解释了自动化分析如今已经走到了哪一步。

程序文件在运行之前会声明什么

每一个原生程序文件都以一份写给操作系统加载器的意图声明开头。Windows PE 会指明其目标机器、构建时间戳、希望被加载到的地址以及所期望的子系统;它的节表会列出代码、数据和资源所在的位置,它的导入表则会按名称列出它打算调用的每一个库和函数,这最接近于一个封闭二进制文件的目录。ELF 二进制文件会声明其类别、字节序和机器、将启动它的解释器、内核必须映射的段以及它按顺序所需的共享库。Mach-O 会声明其 CPU 和文件类型、它的段与节、它链接的 dylib、标识该构建的 UUID,以及它的代码是否已签名或经过 FairPlay 加密。这一切都不需要运行文件、信任文件或上传文件——它们全都位于加载器本身也会读取的文件头中。

本页面读取的正是这一层,而且刻意只读取这第一层。它不会反编译任何内容,不会脱壳任何内容,也不会告诉你代码做了什么——那是 Ghidra、IDA 以及配套文章所介绍的智能体驱动工具链的工作。初步查看的目的是分诊:这是否是你预期的架构,它是否已签名,它是否是一个穿着原生外衣的 .NET 程序集,是否有一节携带了密度可疑的数据,导入列表是否列出了这个程序根本不应该调用的库,以及别人发给你的文件是否与所有其他人拿到的文件相同——哈希值可以直接回答最后这个问题(哈希生成器可以对文本或较小的文件进行交叉核对)。在本机花五分钟读一读文件头,在安装任何重型工具之前就能回答其中大部分问题。

常见问题

我的文件会被上传到任何地方吗?

不会。文件是在本页面、你的设备上打开和解析的,任何内容都不会被上传、传输或存储——分析文件不会发出任何网络请求。页面上唯一的外部链接是 VirusTotal 查询,它以文本形式搜索文件的 SHA-256 哈希值;文件本身永远不会被发送。页面加载完成后也可以离线工作。

这能告诉我一个文件是否是恶意软件吗?

不能,任何承诺能做到这一点的标头读取工具都是在夸大其词。本页面报告的是文件所声明的内容——格式、架构、节、导入、导出、字符串、签名是否存在——这足以识别那些粗心的情况:实为 32 位可执行文件的“发票”、某个构建中有一节密度高得不合常理、未签名的更新程序其哈希值与厂商公布的任何值都不匹配。判断代码实际做了什么,需要反编译、沙箱运行或信誉良好的扫描器的判定。在这里看到一个看起来干净的结果,应理解为“文件头中没有什么看起来不对的地方”,永远不要把它当作安全证书。

什么是熵,为什么以 7.2 为标记线?

香农熵衡量一段字节看起来有多随机,从 0(全部是相同的字节)到 8(与随机无异)。普通编译代码和文本远低于 7;压缩数据接近 8,加密数据实际上就是 8。加壳程序会压缩或加密程序的真实代码,因此熵值大致高于 7.2 的节是标准的分诊标记,表示“这里面的某些东西被压缩过”——但安装程序、压缩资源、嵌入的媒体和现代运行时在完全合法的文件上也会产生高熵节。这是一个需要进一步查看的理由,而不是结论。

为什么我的文件显示的结构这么少?

因为本页面报告的是文件实际声明的内容,而有些文件声明得很少。被剥离(stripped)的 ELF 可能根本没有节头表(只有段);手工制作或被截断的文件可能在其文件头所承诺的结构之前就结束了——在这种情况下,备注会明确说明这一点,而且所显示的一切仍然是从实际存在的字节中读取的。而有些格式根本不在深度解析器的处理范围内:它们会按名称被识别(ZIP、PDF、图像等),并获得通用事实——大小、哈希值、熵值、字符串——而不会虚构细节。