Инспектор бинарных файлов

Перетащите файл программы — Windows PE (.exe, .dll), бинарник ELF для Linux или Mach-O для macOS/iOS — и прочитайте, что он заявляет о себе, прежде чем доставать более тяжёлые инструменты: его заголовки, секции и сегменты, библиотеки и функции, которые он импортирует, его экспорты и символы, а также каждую печатаемую строку внутри него, вместе с хэшами MD5 и SHA и энтропией по секциям. Файл никогда не покидает ваше устройство и никогда не выполняется: он открывается и читается на этой странице, а не загружается на сервер, потому что бинарник, которому вы не доверяете, — это именно тот файл, который не следует отдавать на чужой сервер.

Последнее обновление:

Или перетащите файл в любое место этого поля. Всё ниже читается из самого файла, на этом устройстве. Только статический анализ: файл разбирается, но никогда не запускается. Лимит: 128 MB.

Что эта страница собой представляет — и чем не является

Это статический осмотр с первого взгляда: файл разбирается, но никогда не выполняется, и ничто здесь не является вердиктом о вредоносности. Находки — это наблюдения, а не приговоры: неподписанный файл — это факт (многие легитимные инструменты не подписаны), энтропия выше 7.2 — это факт (упаковщики её повышают, но обычные сжатые ресурсы тоже), а наличие блока подписи Authenticode ничего не говорит о том, действительна ли подпись, — только о том, что она есть. Для второго мнения о файле, которому вы не доверяете, сравните его SHA-256 с публичным вердиктом через поиск на вкладке «Обзор»: ищется хэш, сам файл никогда не отправляется. У пакетов Android есть собственный специализированный читатель — APK Analyzer; то, что программа делает в сети, относится к PCAP Analyzer; а сопроводительная статья могут ли ИИ-агенты провести обратную разработку вашего приложения? объясняет, как далеко зашёл автоматизированный анализ.

Что файл программы заявляет до запуска

Каждый нативный файл программы начинается с заявления о намерениях, написанного для загрузчика операционной системы. 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, изображения и так далее) и получают общие сведения — размер, хэши, энтропию, строки — без выдуманных деталей.