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 достаёт текст — обе команды безопасны (не запускают файл).
  • Строки и импорты дают первую гипотезу о функциональности.
  • Мало строк + высокая энтропия = вероятно, упаковка/шифрование.
Проверьте себя
1. Что делает утилита strings?
AЗапускает программу
BИзвлекает из файла печатные текстовые последовательности без его запуска
CДизассемблирует код
DШифрует строки
2. О чём может говорить файл с очень малым числом осмысленных строк и высокой энтропией?
AЭто точно безвредный файл
BФайл, вероятно, упакован или зашифрован
CЭто исходный код
DФайл повреждён и не запустится