strings и базовый анализ бинаря
С чего начинать знакомство с незнакомым файлом — быстрая разведка.
strings — утилита, которая вытаскивает из бинарного файла все печатные текстовые последовательности.
Зачем поверхностный анализ
Прежде чем нырять в дизассемблер, полезно за минуту понять, с чем имеем дело: что это за файл, под какую систему, какие строки внутри. Это экономит часы.
Команда file
Определяет тип файла по сигнатуре:
file program
# program: ELF 64-bit LSB executable, x86-64, dynamically linked
Сразу видно: это 64-битный ELF под x86-64. Для PE покажет «PE32+ executable».
Команда strings
Достаёт текст из файла:
strings program
# Enter the password:
# Access granted
# /tmp/log.txt
# http://example.com/api
По строкам можно догадаться о функциональности: работа с файлами, сетью, наличие сообщений о пароле. В анализе малвари по строкам часто видны подозрительные URL, имена файлов, команды.
Что ещё смотрят на этом этапе
- Импорты/библиотеки — какие системные функции используются.
- Размер и секции — необычно маленький файл с одной секцией может быть упакован.
- Энтропия — высокая «случайность» байтов намекает на шифрование или упаковку.
Как работает под капотом
strings просто идёт по байтам файла и ищет цепочки печатных символов длиной от N подряд (по умолчанию 4), оканчивающиеся непечатным байтом. Никакого разбора кода — поэтому это быстро и безопасно (файл не запускается).
Важно про малварь
strings и file не запускают файл — это безопасные статические операции, их можно применять даже к подозрительным образцам. Но сам образец всё равно держите в изолированной среде и не запускайте.
Частые ошибки
- Делать выводы только по строкам — упакованный файл покажет мало осмысленного текста.
- Запускать подозрительный файл «чтобы проверить» — нет, сначала только статика.
Итог
fileопределяет тип и архитектуру,stringsдостаёт текст — обе команды безопасны (не запускают файл).- Строки и импорты дают первую гипотезу о функциональности.
- Мало строк + высокая энтропия = вероятно, упаковка/шифрование.