Автор статьи: Александр Колесников

Вирусный аналитик

Статья расскажет о том, какие инструменты существуют для анализа форматов файлов и на практике продемонстрирует как можно анализировать данные, которые помещены в какой‑то формат.

Форматы файлов обычно анализируют в нескольких случаях:

  1. Необходимо понять с какими данными работает приложение, а исходных кодов нет.

  2. Анализ вредоносного программного обеспечения.

  3. Написание софта для получения данных из файлов, которые были созданы неизвестным или вышедшим из строя программным обеспечением.

В статье будем анализировать простые примеры файлов, чтобы можно было производить экспресс анализ.

Форматы файлов и быстрый анализ

Исследование любого формата файла начинается с процедуры его просмотра. Делается это для того, чтобы сделать вывод какого типа файл будет исследоваться и нужно ли искать специализированный софт для того чтобы его открыть.

На самом деле, чтобы открыть любой файл, достаточно только средств ввода/вывода информации. Операционная система или приложение которое обрабатывает запросы пользователя на обработку данных все равно постарается показать содержимое любого файла, но вот сможет ли что‑то понять пользователь это большой вопрос.

Разбить все файлы можно условно на 2 большие категории:

  1. Файлы, которые содержат информацию в текстовом формате — здесь могут присутствовать общие соглашения по оформлению файла, но все можно будет читать на обычном вербальном языке.

  2. Файлы, которые преобразовывают информацию в нечитаемый вид. Как правило такие файлы называют бинарными. Чтобы что‑то различить в таком файле, нужно найти алгоритм его чтения.

С первой категорией можно разбираться взяв только текстовый редактор вроде Visual Code или Sublime. Для исследования файла можно будет даже найти удобный плагин, который будет подсвечивать синтаксис такого формата.

Вторая категория самая интерсная и сложная, здесь есть инструменты, которые позволяют просматривать общую структуру файла и одновременно быстро искать уже части данных. Все инструменты могут быть представлены следующими приложениями:

  1. Шестнадцатеричные редакторы — эти приложения могут подсказать какой алгоритм скорее всего использовался, но читать можно будет файл либо частично, либо только с применением доп алгоритма.

  2. Специальные приложения для разбора конкретного набора форматов, это шестнадцатеричные редакторы на стероидах. Могут показывать данные в виде шаблона или автоматически всё в файле декодировать.

  3. Приложения интерпретаторы — некоторые файлы могут использовать специальный синтаксис для преобразования контента и для того чтобы читать данные внутри нужно чтобы приложение выполнило какое‑то количество действий.

Распределяя по группам перечисленным выше можно использовать:

  1. HexEditor, IDA, Ghidra и т. д.

  2. Hiew, Hex 010

  3. Java VM, Unicorn

Попробуем проанализировать несколько файлов, в к качестве примеров возьмем несколько файлов из вот этого ресурса. Просто так анализировать файлы не интересно, поэтому будем искать флаги. Формат данных "FLAG-", чтобы его найти нужно понять как информация хранится внутри файла и подобрать приложение для его чтения или придумать как открыть файл и разобрать его с помощью языков программирования.

Итак, первое задание для разминки, нужно найти флаг. На странице нас встречает самый распространенный и простой формат — текст. Вообщем‑то никаких инструментов не нужно, мы просто читаем текст, первые буквы каждой строки это и есть флаг.

Еще одна причина анализа файлов — стеганография, по сути это практически наука, которая показывает как можно прятать информацию на видном месте. В файлах, которые хранятся на компьютерных системах очень просто это делать, точнее сказать это удобнее всего. В стеганографии есть такое понятие как контейнер — файл, который будет использоваться для сокрытия данных. Контейнером может выступать любой файл — видео, музыка или картинка. Именно эти форматы файлов всегда являются наиболее привлекательными для использования в качестве контейнеров. При этом информацию просто так не просмотреть без специального софта.

Попробуем проанализировать такой файл. Перед нами второе задание. Это обычный файл, который представляет собой картинку, используя любой просмотрщик можно посмотреть все содержимое или нет? Давайте разберемся, что такое бинарный формат. Никакой алгоритм приложения не сможет просто тк открыть данные если они не будут упорядочены по какому‑то правилу. Правила расположения данных обычно описываются в спецификации. Мы возьмем для исследования упрощенную и наглядную версию отсюда.

Судя по картинке все нечитамые данные имеют четкую структуру, поэтому приложения могут показывать картинку. Но это в обычном сценарии, у нас все немного сложнее, потому что это стеганография. Куда смотреть? Файл то выглядит в шестнадцатеричном редакторе обычно:

Здесь без специального софта не обойтись, принцип сокрытия информации в таком бинарном файле строится на использовании частей данных, которые есть в формате файла. Чтобы представить себе как это может работать, можно обратиться к вот этому источнику. Единственно, стоит дополнить, что автору, который будет записывать данные можно придумать такой алгоритм, который без его софта просто ничего не найдет. Что же тогда делать?

Искать данные статистически, стараясь найти «лишние» данные, либо можно использовать готовый софт. Один из таких это steghide.

Попробуем узнать есть ли в предоставленном файле то, что можно использовать для декодирования. Для сбора данных можно использовать «info» флаг.

Судя по всему приложение что-то смогло найти, попробуем достать:

Таким образом можно поверхностно и быстро анализировать форматы файлов для поиска заложенных там данных. В следующей статье попробуем проанализировать более сложные примеры.

В завершение хочу поделиться с вами записью бесплатного урока от OTUS по теме "Стандартные техники инжектов".

Также вы можете зарегистрироваться на бесплатный вебинар, в рамках которого мы рассмотрим способы, с помощью которых, можно перехватить API функции. Регистрация доступна по ссылке ниже.

Комментарии (7)


  1. vilgeforce
    00.00.0000 00:00
    +1

    "Файл то выглядит в шестнадцатеричном редакторе обычно" - и скриншот, на котором значительная часть информации превращена в "точки". Используйте Hiew, он для т.н. непечатных символов все равно символы показывает :-)


    1. Alexeyslav
      00.00.0000 00:00

      А толку от непечатаемых символов? Они только отвлекают. По кодам больше информации получаешь, а колонка с символами - для визуального поиска текстовых строк. Многие так умудряются русифицировать древний софт.


      1. qw1
        00.00.0000 00:00

        Не отвлекают. Как-то запоминается, что mkv/ogg начинается со стрелки вправо, а OLE-storage файлы (старые doc, xls, msi) с рамочек в псевдографике в кодировке 866, или букв РП в кодировке win1251.


        С другой стороны, "кракозябры" помогают визуально оценить энтропию, насколько разнообразны встречающиеся байтики, и какие есть повторяющиеся цепочки из них. Режим "только ASCII" отрезает существенную часть информации.


        1. Alexeyslav
          00.00.0000 00:00

          всё это проще запоминать по кодам символов. чем стрелками и всякими там символами. Впрочем, чудаки учили русский шрифт на винде в кодировке CP866 чтобы читать сообщения на экране смерти написанные на русском в другой кодировке, как впрочем и вывод в досовской консоли. все вотэти кракозябрики.


          1. qw1
            00.00.0000 00:00

            Ассоциативная память у меня лучше срабатывает на кракозябры, чем на ASCII-символы в hex части. Я с первого взляда понимаю, тут utf-8, отображаемый как win1251, или win1251 в OEM-кодировке. И каких символов тут больше — из верхней половины кодовой страницы, или наоборот, с кодами ниже 0x20.


  1. blueboar2
    00.00.0000 00:00

    Вы определитесь - у вас все же "обработка" или "разработка". А то в заголовке одно, а на скриншоте другое.


    1. BadHandycap
      00.00.0000 00:00
      -2

      Тот редкий случай, когда писатель более технически подкован чем автор статьи.