Ситуация знакомая: скачал программу, хочется запустить, но внутри что-то не даёт покоя. Антивирус может молчать, а файл выглядит подозрительно. Или вы разработчик и хотите убедиться, что ваш бинарник не содержит случайно встроенных вредоносных паттернов. В любом случае, задача конкретная — найти в .exe-файле строки, которые совпадают с известными вредоносными сигнатурами, и принять решение. Расскажу, как это сделать на практике, без теоретических экскурсов.
- Что такое «вредоносные строки в ресурсе» и почему это важно
- Где именно в .exe прячутся строки
- Способ 1: Утилита strings (Sysinternals / GNU Binutils)
- Вариант А: Sysinternals Strings
- Вариант Б: GNU strings (Linux / WSL)
- Способ 2: Поиск по ресурсам напрямую — Resource Hacker и CFF Explorer
- Resource Hacker
- CFF Explorer
- Способ 3: Автоматизированный поиск по базе сигнатур
- Скрипт на Python
- YARA — промышленный стандарт
- Сравнение инструментов
- Что делать в зависимости от вашей ситуации
- Ситуация 1: Один файл, нужно быстро проверить
- Ситуация 2: Нужно проверить ресурсы конкретно
- Ситуация 3: Регулярная проверка файлов на рабочем месте
- Ситуация 4: Вы получили IOC от аналитиков и нужно применить
- Частые ошибки при проверке
- Как лучше организовать проверку
- Итог
Что такое «вредоносные строки в ресурсе» и почему это важно
Вредоносные строки — это фрагменты текста или бинарные последовательности, которые встречаются в малвари: URL-адреса командных центров, хэши паролей, имена системных функций, используемых для инъекций, сигнатуры конкретных семейств малвари. Они могут быть спрятаны в секциях ресурсов .exe-файла — в строковых таблицах, диалогах, иконках, манифестах.
Простой антивирус ищет по хэшам всего файла и поведенческим признакам. Но если вы хотите целенаправленно проверить конкретный .exe на наличие определённых паттернов — например, после анализа другого файла вы получили список индикаторов компрометации (IOC) и хотите применить их к новому файлу — тут нужен другой подход.
Где именно в .exe прячутся строки
PE-файл (Portable Executable — формат .exe в Windows) состоит из заголовков и секций. Строки могут находиться в нескольких местах:
- .rdata — секция только для чтения, здесь хранятся строковые константы, имена DLL, сообщения об ошибках.
- .rsrc — секция ресурсов: строки в таблицах (String Tables), данные диалогов, манифесты, встроенные файлы.
- .data — изменяемые данные, иногда строки попадают сюда.
- Overlay — данные, приписанные после формального конца файла.
Для поиска вредоносных строк вас в первую очередь интересуют .rdata и .rsrc, потому что именно там малварь чаще всего хранит URL, команды, пути к файлам и прочие текстовые артефакты.
Способ 1: Утилита strings (Sysinternals / GNU Binutils)
Самый быстрый и доступный способ — извлечь все печатные строки из файла и отфильтровать их. Утилита strings делает именно это: проходит по бинарнику и вытаскивает последовательности печатных символов длиннее заданного порога.
Вариант А: Sysinternals Strings
Скачайте Strings от Sysinternals. Работает из командной строки:
strings.exe -n 8 suspicious_file.exe > output.txt
Флаг -n 8 означает минимальную длину строки — 8 символов. Это отсекает мусор. Результат сохраняется в текстовый файл, который уже можно искать вручную или автоматически.
Вариант Б: GNU strings (Linux / WSL)
Если вы работаете в Linux или используете WSL:
strings -n 8 suspicious_file.exe > output.txt
# Только из определённой секции:
strings -n 8 -t x suspicious_file.exe | grep rdata
Дальше — ищем по вашим сигнатурам:
grep -i -f signatures.txt output.txt
Где signatures.txt — файл с вашими индикаторами: по одной строке на каждую сигнатуру.
Способ 2: Поиск по ресурсам напрямую — Resource Hacker и CFF Explorer
Если вам нужен именно ресурсный раздел, а не весь файл, лучше использовать инструменты для разбора PE-структуры.
Resource Hacker
Бесплатная утилита Resource Hacker (angusj.net/resourcehacker). Открывает .exe, показывает дерево ресурсов: строковые таблицы, диалоги, битмапы, манифесты. Вы можете вручную просмотреть каждую таблицу и увидеть все строки.
Порядок действий:
- Откройте файл в Resource Hacker.
- Разверните узел String Table.
- Просмотрите содержимое каждой таблицы — строки видны сразу.
- Сравните с вашим списком вредоносных сигнатур.
CFF Explorer
Более мощный инструмент для анализа PE-файлов. Показывает структуру секций, ресурсов, импорта. Полезен, если нужно понять, в какой именно секции находится подозрительная строка и как она туда попала.
- Откройте файл в CFF Explorer.
- Перейдите в раздел Resource Editor.
- Просмотрите строковые ресурсы.
- Для глубокого анализа — смотрите Section Headers, чтобы понять смещения.
Способ 3: Автоматизированный поиск по базе сигнатур
Когда файлов много или сигнатур больше десятка, ручной просмотр не работает. Нужна автоматизация.
Скрипт на Python
Простой скрипт, который извлекает строки из .exe и ищет совпадения по вашей базе:
import re
import sys
def extract_strings(filepath, min_length=6):
with open(filepath, 'rb') as f:
data = f.read()
# ASCII строки
ascii_pattern = rb'[\x20-\x7e]{' + str(min_length).encode() + rb',}'
ascii_strings = re.findall(ascii_pattern, data)
# UTF-16LE строки (стандарт для Windows)
utf16_pattern = rb'(?:[\x20-\x7e]\x00){' + str(min_length).encode() + rb',}'
utf16_strings = re.findall(utf16_pattern, data)
result = []
for s in ascii_strings:
result.append(s.decode('ascii'))
for s in utf16_strings:
result.append(s.decode('utf-16-le', errors='ignore'))
return result
def search_signatures(strings, sig_file):
with open(sig_file, 'r', encoding='utf-8') as f:
signatures = [line.strip() for line in f if line.strip()]
matches = []
for s in strings:
for sig in signatures:
if sig.lower() in s.lower():
matches.append((sig, s))
return matches
if __name__ == '__main__':
strings_found = extract_strings(sys.argv[1])
matches = search_signatures(strings_found, sys.argv[2])
for sig, found in matches:
print(f'[{sig}] => {found}')
Использование:
python check_exe.py suspicious_file.exe signatures.txt
Скрипт простой, но рабочий. Если нужно обрабатывать сотни файлов — оберните в цикл по директории.
YARA — промышленный стандарт
YARA — это инструмент, который создавался именно для поиска паттернов в файлах. Используется аналитиками малвари по всему миру. Правило YARA — это набор строк и условий для их поиска.
Пример правила:
rule Suspicious_URL_In_Resources {
meta:
description = "Ищем подозрительный URL в ресурсе"
author = "analyst"
strings:
$url = "http://evil-c2-server.com/panel" ascii wide
$cmd = "cmd.exe /c" ascii wide nocase
$reg = "CurrentVersion\\Run" ascii wide
condition:
url or (cmd and $reg)
}
Ключевое слово wide означает поиск в UTF-16LE (стандарт для Windows-ресурсов), ascii — в ANSI. Без флага wide вы пропустите большинство строк в ресурсах .exe-файла Windows.
Запуск:
yara64.exe suspicious_rule.yar target_file.exe
YARA можно интегрировать в автоматические пайплайны проверки. Это самый правильный инструмент для задачи, если вы готовы потратить время на освоение.
Сравнение инструментов
| Инструмент | Сложность | Что находит | Когда использовать |
|---|---|---|---|
| strings (Sysinternals / GNU) | Низкая | Все печатные строки по всему файлу | Быстрая первичная проверка, один-два файла |
| Resource Hacker | Низкая | Строки только в ресурсных секциях | Нужно посмотреть именно ресурсы визуально |
| CFF Explorer | Средняя | Полная структура PE, включая ресурсы | Глубокий анализ, нужно понимать контекст строки |
| Python-скрипт | Средняя | Любые строки, с кастомной фильтрацией | Нужна автоматизация под свои условия |
| YARA | Высокая | Сигнатуры с условиями, логикой, контекстом | Регулярная проверка, много файлов, промышленный подход |
Что делать в зависимости от вашей ситуации
Ситуация 1: Один файл, нужно быстро проверить
Запустите strings, сохраните вывод, откройте в текстовом редакторе и ищите по ключевым словам. Если знаете конкретный URL или команду — просто Ctrl+F. Пяти минут достаточно.
Ситуация 2: Нужно проверить ресурсы конкретно
Откройте файл в Resource Hacker. Строковые таблицы — это именно то, что вам нужно. Просмотрите вручную или экспортируйте и обработайте скриптом.
Ситуация 3: Регулярная проверка файлов на рабочем месте
Напишите YARA-правила под ваши индикаторы компрометации и запускайте по расписанию. Или используйте Python-скрипт, который обходит папку и проверяет каждый .exe по вашей базе сигнатур.
Ситуация 4: Вы получили IOC от аналитиков и нужно применить
Возьмите список IOC (URL, домены, хэши строк), оформите в виде YARA-правила или текстового файла для grep. Проверьте все подозрительные файлы в системе. Если нашли — изолируйте машину и вызывайте инцидент-响应 команду.
Частые ошибки при проверке
- Поиск только в ASCII. В Windows большинство строк в ресурсах хранятся в UTF-16LE. Если вы ищете только в ASCII, пропустите половину находок. Всегда добавляйте поиск в
wide(YARA) или декодируйте UTF-16 (скрипты). - Слишком короткий порог длины.
strings -n 3выдаст тысячи бессмысленных обрывков. Ставьте минимум 6–8 символов. - Проверка только секции .rsrc. Малварь может прятать строки в .rdata или даже в оверлее. Проверяйте весь файл.
- Одна сигнатура — приговор. Найденная строка ещё не значит, что файл вредоносный. Например,
cmd.exe /cиспользуется и легитимными программами. Смотрите на контекст: что ещё есть в файле, куда ведёт URL, какие функции импортируются. - Игнорирование ложносрабатываний антивируса. Если антивирус не ругается, это не значит, что файл чист. Сигнатурный антивирус может не знать о новой малвари. Ручная проверка по ресурсам — дополнение, а не замена.
Как лучше организовать проверку
Если вы системно подходите к задаче, вот что рекомендую:
- Соберите базу сигнатур. Источники: отчёты по малвари (VirusTotal, Any.Run, публичные IOC-фиды), ваши собственные находки. Храните в текстовом файле или YARA-правилах.
- Автоматизируйте извлечение строк. Скрипт на Python или YARA — на ваш выбор. Главное, чтобы процесс был воспроизводимым и быстрым.
- Фильтруйте результаты. Не каждое совпадение — инцидент. Настройте белые списки для известных ложносрабатываний.
- Документируйте. Если нашли совпадение — запишите, какая строка, в какой секции, с каким смещением. Это пригодится при эскалации.
- Проверяйте в контексте. Строка в ресурсе + подозрительный импорт + сетевой трафик = картина инцидента. Одна строка — просто данные.
Итог
Проверка .exe на вредоносные строки в ресурсе — это не магия, а рутинная задача разбора PE-структуры и поиска совпадений. Начните с strings для быстрого обзора, используйте Resource Hacker для визуального осмотра ресурсов, и если задача повторяется — переходите на YARA или собственные скрипты. Главное правило: всегда ищите и в ASCII, и в UTF-16LE, и всегда смотрите на контекст находки, а не на одно совпадение.
Если нашли подозрительное совпадение — не спешите удалять файл. Сначала изолируйте его (переместите в защищённую папку или на машину без сети), задокументируйте находку и только потом принимайте решение об удалении или дальнейшем анализе.
