Разбор бинарных форматов. Часть 2

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Автор статьи: Александр Колесников

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

Вторая часть статьи по анализу бинарных форматов файлов, в первой части мы познакомились с достаточно простыми инструментами для анализа файлов. В этой статье мы закрепим результат и попробуем сделать что-то интересное. Будем искать информацию, которая может скрываться в недрах структуры файлов. В качестве тестовых примеров файлов, можно взять файлы из раздела Forensics вот этого ресурса. Ниже будут разобраны файлы и приведены примеры использования методов изучения бинарных файлов. Чтобы не блуждать просто по бинарным дебрям, сразу определимся, что изучение файлов производится в рамках заданий, которые были взяты для этой статьи, тоесть итогом исследования должен быть флаг (последовательность символов, которые заложены организаторами), который находится в изучаемом файле.

Пример анализа №1

В качестве подопытного файла возьмем вот этот файлик. Скачаем и попробуем его изучить, как мы помним изучение вести проще всего с помощью шестнадцатеричного редакторв. Откроем файл в нем и попробуем понять что это за файл. При открытии файла наблюдаем вот такую картину:

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

  • binwalk

  • file

Инструменты специально заточены на то, чтобы искать специальные отметки на разных смещениях и сообщать что это за файл. Попробуем использовать утилиту file:

Утилита смогла определить, что это раздел файловой системы. А точнее это её дамп, который был сохранен отдельным файлом. В общем, можно попробовать вручную разобраться где что лежит в этой файловой системе. Так же можно просто попытаться примонтировать эту файловую систему локально и операционная система все сделает самостоятельно. Однако, это не наш вариант решения, мы будем пользоваться или специальным софтом, либо писать приложение, которое нам поможет изучить файл.

Для решения задания нам все таки надо заглянуть внутрь этого бинарного файла, поэтому воспользуемся следующим инструментом - xxd и grep. Работать это будет, если данные хранятся в текстовом виде, в противном случае нужно монтировать файл:

В этот раз повезло, grep показывает необходимый флаг, который был внутри дампа.

Пример анализа №2

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

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

Не повезло, попробуем использовать более адаптированный софт. Удобнее всего использовать WireShark. Самый интересный вариант поиска флага - просмотреть все активные соединения из дампа и экспортировать переданные файлы в рамках этих соединений. Попробуем экспортировать и снова поискать в файлах флаг. На очередном шаге мы обнаруживаем его:

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

Пример анализа №3

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

Откроем файл в шестнадцатеричном виде с шаблоном и без.

Если прослежить за данными, то мы видим, что файл состоит из:

  • Заголовка

  • Данные, которые содержат информацию о самом изображении или просто - чанки

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

В начшем случае, если обратить внимание именно на старт чанков, то будет сразу видно, где находится наш паттерн:

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

data=[]

with open('hey.png','rb') as f:
	data = f.read()

res = ""

for i in range(0,len(data)):
	if data[i] == 73 and data[i+1] == 68 and data[i+2] == 65 and data[i+3] == 84:		 
		res += chr(data[i-1])

print(res)

И флаг найден:

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

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

  • Зарегистрироваться на бесплатный урок

Источник: https://habr.com/ru/companies/otus/articles/727388/


Интересные статьи

Интересные статьи

Рано или поздно, занимаясь DIY-разработкой, проектированием IoT устройств и тому подобным творчеством (или работой), вы приходите к необходимости защищать свои устройства и их коммуникации от взло...
Эта серия статей посвящена неравномерному развитию BIM в разных странах. Эту тему нельзя начать без краткого экскурса в историю возникновения BIM-программ или, точнее, - ...
В первых двух статьях я поднял вопрос автоматизации и набросал её фреймворк, во второй сделал отступление в виртуализацию сети, как первый подход к автоматизации настройки сервисов. А теперь при...
Ценность ресурсного планирования для IT-компании сложно подвергнуть сомнению. Ресурсные планы есть у многих. А действительно работающей системой ресурсного планирования похвалиться могут совсем н...
Продолжаем наш цикл статей про импортозамещение. В предыдущих публикациях были рассмотрены варианты замещения развернутых систем на «отечественные», и конкретно гипервизоры «отечественного пр...