- Как проанализировать .exe-файл с помощью VirusTotal API и собрать метаданные
- Что тебе нужно для начала
- Шаг 1: Загрузи файл и получи ID анализа
- Шаг 2: Жди, пока анализ завершится
- Шаг 3: Собери метаданные из результата
- Что делать, если файл упакован?
- Сравнение: VirusTotal API vs веб-интерфейс
- Частые ошибки
- Как лучше сделать: практические рекомендации
- Что выбрать в зависимости от ситуации
- Что делать дальше
Как проанализировать .exe-файл с помощью VirusTotal API и собрать метаданные
Ты скачал файл — .exe, может быть, с форума, из письма или от коллеги. Он не запускается, или система ругается, или просто не доверяешь. Ты не хочешь запускать его на своём компьютере, но должен понять: это вредоносный код или просто старая программа с подозрительным поведением? VirusTotal API — твой инструмент, чтобы ответить на этот вопрос без риска.
Это не про «проверить на вирус» в браузере. Это про то, как автоматизировать анализ, собрать метаданные — кто создал, когда скомпилирован, какие библиотеки используются, какие домены вызываются — и сделать это системно, без кликов в интерфейсе. Ты не просто хочешь «зелёный» или «красный» результат. Ты хочешь понять почему он такой.
Что тебе нужно для начала
Ты не должен быть программистом, но должен уметь:
- Запускать команды в терминале (Windows: PowerShell или CMD, macOS/Linux: Terminal);
- Работать с JSON — хотя бы читать его;
- Иметь API-ключ от VirusTotal (бесплатный, без регистрации платных тарифов).
API-ключ берёшь на virustotal.com — входишь в аккаунт, заходишь в «My API key», копируешь его. Бесплатный ключ даёт 500 запросов в сутки — этого хватит, чтобы проанализировать десятки файлов в день. Не делай массовый сканирующий бот — VirusTotal блокирует такие активности.
Шаг 1: Загрузи файл и получи ID анализа
Первое, что нужно сделать — отправить файл на анализ. VirusTotal не принимает файлы по URL, только через POST-запрос с содержимым файла.
Пример на Python (если ты не программист — не паникуй, я покажу, как сделать это в терминале без кода):
import requests
file_path = "your_file.exe"
api_key = "твой_ключ_здесь"
url = "https://www.virustotal.com/api/v3/files"
with open(file_path, "rb") as f:
files = {"file": (file_path, f)}
headers = {"x-apikey": api_key}
response = requests.post(url, headers=headers, files=files)
analysis_id = response.json()["data"]["id"]
print("ID анализа:", analysis_id)
Если ты не хочешь писать код — используй curl в терминале:
curl -X POST "https://www.virustotal.com/api/v3/files" \
-H "x-apikey: твой_ключ_здесь" \
-F "file=@/путь/к/файлу.exe"
Ответ будет в формате JSON. Тебя интересует поле data.id. Это и есть ID анализа — уникальный идентификатор, по которому ты будешь запрашивать результаты. Не теряй его. Сохрани в текстовый файл.
Шаг 2: Жди, пока анализ завершится
Загрузка файла — это только начало. VirusTotal не анализирует мгновенно. Обычно 1–3 минуты. Иногда до 10, если очередь длинная.
Ты не можешь сразу запросить результаты — получишь ошибку «analysis in progress». Нужно ждать. Простой способ — сделать запрос каждые 20 секунд, пока статус не сменится на completed.
Запрос статуса:
curl -X GET "https://www.virustotal.com/api/v3/analyses/твой_анализ_id" \
-H "x-apikey: твой_ключ_здесь"
Смотри в ответе на поле data.attributes.status. Пока там queued или running — жди. Как только появляется completed — переходи к следующему шагу.
Шаг 3: Собери метаданные из результата
Теперь ты получаешь полный отчёт. Он огромный — до 10–20 КБ. Но тебе нужны только ключевые поля. Вот что важно:
- file_name — как файл назывался при загрузке. Иногда обрезается или искажается — проверяй, совпадает ли с ожидаемым именем.
- type_description — что VirusTotal считает файлом: «PE32 executable», «DLL», «MSI» и т.д. Если ты ждал .exe, а тут «PDF», значит, файл подменён.
- magic — магическое число в начале файла. Для PE-файлов —
MZ. Если тут что-то другое — файл повреждён или подделан. - size — размер в байтах. Сравни с ожидаемым. Неожиданно маленький .exe (меньше 100 КБ) — подозрительно. Очень большой (больше 50 МБ) — возможно, вшитый установщик или майнер.
- pe_info — если есть, это золотая жила. Тут:
- compile_time — время компиляции. Часто совпадает с датой создания. Если файл «создан» в 2023, а дата компиляции — 2018 — подозрительно.
- imported_dlls — какие DLL импортируются.
kernel32.dll— нормально.advapi32.dll— нормально. А вотuser32.dllс вызовомSetWindowsHookEx— тревожный признак.winhttp.dll+InternetConnect— возможный C2-контакт. - imphash — импорт-хеш. Если ты знаешь чистый файл, сравни хеши. Одинаковые импхеши — один и тот же бинарник, даже если переименован.
- sections — количество и размер секций. Нормальный .exe — 2–5 секций. 10+ — подозрительно. Секции с именами вроде
.mal,.pack,.crypt— явный признак упаковки. - times_submitted — сколько раз файл уже загружали. Если 50+ — значит, его уже разбирали. Читай комментарии других пользователей.
- last_analysis_stats — сколько антивирусов сказали «вредоносный». Но не доверяй цифре 1/70 — если один антивирус (например, Kaspersky) выдал «Trojan», а остальные — «clean», это может быть ложное срабатывание. А вот 15/70 — уже серьёзно.
- network — если есть поле
contacted_ipsилиcontacted_domains— это критично. Запомни их. Проверь черезwhoisилиShodan. Домен вродеupdate-secure[.]xyz— почти всегда вредоносный.
Вот как выглядит пример полезных метаданных в JSON:
{
"data": {
"attributes": {
"magic": "MZ",
"size": 124928,
"type_description": "PE32 executable (GUI) Intel 80386 Mono/.Net assembly",
"compile_time": "2023-11-15T08:22:10Z",
"imported_dlls": ["kernel32.dll", "user32.dll", "winhttp.dll"],
"imphash": "e1e2a8c3d4f5b6a7c8d9e0f1a2b3c4d5",
"sections": [
{ "name": ".text", "size": 81920 },
{ "name": ".rdata", "size": 16384 },
{ "name": ".data", "size": 12288 },
{ "name": ".rsrc", "size": 14336 }
],
"contacted_domains": ["api-update[.]secure[.]xyz"],
"contacted_ips": ["185.130.102.11"],
"last_analysis_stats": {
"harmless": 65,
"malicious": 12,
"suspicious": 1,
"undetected": 2
}
}
}
}
Запомни: импхеш и время компиляции — самые надёжные метаданные. Они не меняются при переименовании или упаковке. Даже если файл упакован в UPX, импхеш останется прежним — если не меняли код.
Что делать, если файл упакован?
Если ты видишь в отчёте много секций, странное имя секции или статистику: «12/70 антивирусов нашли вредоносный код» — скорее всего, файл упакован. Упаковка — не всегда зло. Иногда это просто способ уменьшить размер. Но вредоносные программы используют её, чтобы скрыть поведение от антивирусов.
Как понять, что это упаковка:
- Слишком много секций (5+), особенно с именами вроде
.UPX,.pack,.crypt; - Низкий импхеш — если ты знаешь чистый файл с тем же импхешем, но он не упакован — значит, здесь упаковка;
- Маленький размер исходного файла, но большой размер после анализа — признак сжатия с распаковкой в памяти.
Если ты подозреваешь упаковку — ищи в отчёте поле unpacker. VirusTotal иногда определяет, какой упаковщик использовался: UPX, ASPack, Themida и т.д. Если там Themida — это почти всегда вредоносный код. Это платный упаковщик, который используют только серьёзные злоумышленники.
Сравнение: VirusTotal API vs веб-интерфейс
Зачем вообще использовать API, если можно просто залить файл на сайт?
| Критерий | Веб-интерфейс | API |
|---|---|---|
| Автоматизация | Нет — только вручную | Да — можно сканировать сотни файлов в день |
| Получение метаданных | Частично — нужно копировать вручную | Полностью — можно парсить JSON |
| Сравнение нескольких файлов | Невозможно | Можно сравнивать импхеши, даты, IP-адреса |
| Интеграция с другими системами | Нет | Да — можно встроить в SIEM, скрипт мониторинга |
| Скорость | Зависит от загрузки сайта | Быстрее — прямой запрос без HTML-разбора |
| Ограничения | 500 запросов/сутки | То же — 500 запросов/сутки |
Если ты анализируешь 1–2 файла в неделю — веб-интерфейс подойдёт. Если ты администратор, который получает десятки .exe-файлов в день от пользователей, или ты исследуешь вредоносное ПО — API не просто удобен, он необходим.
Частые ошибки
- Запрашиваешь результаты сразу после загрузки. Это самая распространённая ошибка. Ты ждёшь 2 секунды — и думаешь, что «анализ не работает». Нет, он ещё в очереди. Жди минимум 60 секунд.
- Доверяешь только цифре «X/70». Если 1 антивирус сказал «вредоносный», а остальные — «чисто», это может быть ложное срабатывание. Ищешь конкретные антивирусы, которые сработали. Например, если сработал Kaspersky, но не сработал Microsoft Defender — это может быть просто старая сигнатура. А если сработали Kaspersky, ESET, CrowdStrike — это уже тревожный сигнал.
- Игнорируешь импхеш. Ты думаешь, что если файл переименован — это новый файл. Нет. Импхеш — это хеш по импортируемым функциям. Он не меняется. Сравнивай его с базой известных угроз.
- Не проверяешь домены и IP. Файл может быть «чистым», но пытаться связаться с доменом вроде
malware[.]xyz— это уже угроза. Проверяй их черезwhoisилиabuseipdb.com. - Загружаешь один и тот же файл несколько раз. Это тратит твои лимиты. Сохраняй хеши (SHA-256) загруженных файлов — и проверяй, не был ли он уже проанализирован.
Как лучше сделать: практические рекомендации
- Создай базу хешей. Сохраняй SHA-256 всех проанализированных файлов. Проверяй его перед загрузкой — если уже был, не загружай заново. Это сэкономит тебе 30–50% запросов.
- Автоматизируй проверку доменов. После получения списка контактируемых доменов — отправляй их в
whoisчерезpython-whoisилиcurl whois.iana.org. Домены, зарегистрированные на 1 день — почти всегда вредоносные. - Сравнивай с известными угрозами. Используй базы вроде MalwareBazaar — там можно искать по импхешу. Если ты нашёл импхеш, который там есть — ты нашёл известный майнер или троян.
- Создай простой скрипт-фильтр. Например: если
last_analysis_stats.malicious > 5иcontacted_domainsесть — отправляй уведомление. Еслиcompile_time > 2023иsize < 50000— помечай как подозрительный. - Не анализируй файлы с неизвестного источника в рабочей среде. Даже через API. Используй виртуальную машину или песочницу, если хочешь запустить файл после анализа.
Что выбрать в зависимости от ситуации
- Ты — обычный пользователь, скачал файл с форума → Загрузи его на virustotal.com в браузере. Посмотри, сколько антивирусов сработало. Если 0–2 — можно осторожно запускать. Если 5+ — удали.
- Ты — ИТ-специалист, получил .exe от клиента → Используй API. Собери метаданные: импхеш, время компиляции, импортируемые DLL. Проверь, не совпадает ли импхеш с известным вредоносным ПО. Если есть подозрительные домены — предупреди клиента.
- Ты — аналитик угроз, обрабатываешь сотни файлов в день → Автоматизируй через API + базу хешей + скрипт фильтрации. Добавь в логи: дата, имя файла, импхеш, статус, IP/домены. Интегрируй с SIEM.
- Ты подозреваешь, что файл упакован → Ищи
sectionsиunpacker. ЕслиThemidaилиVMProtect— почти наверняка вредоносный. Не запускай.
Что делать дальше
Ты теперь знаешь, как:
- Загружать .exe-файл через VirusTotal API;
- Ждать завершения анализа;
- Извлекать метаданные — импхеш, время компиляции, DLL, домены;
- Отличать ложные срабатывания от реальных угроз;
- Автоматизировать процесс для работы с несколькими файлами.
Теперь — сделай это. Возьми один файл, который тебе кажется подозрительным. Загрузи его через curl. Подожди 2 минуты. Скачай JSON. Найди imphash. Скопируй его и вбей в поиск VirusTotal по импхешу. Посмотри, что там. Если ты увидишь хотя бы один известный троян — ты уже нашёл ответ.
Это не магия. Это работа. Ты не должен доверять «зелёному» или «красному» — ты должен понимать, почему он так окрашен. И теперь ты знаешь, как это делать.
Информация, представленная в этой статье, носит ознакомительный характер. Анализ файлов и принятие решений о их безопасности требует профессионального подхода. При работе с подозрительными файлами используй изолированные среды и консультируйся с кибербезопасностными специалистами.
