Вопрос Реверс ARM бинарика

  • Автор темы Автор темы Zubastic
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Дек 2024
Сообщения
15
Реакции
1
Всем привет. На просторах интернета очень много материала по поводу x86 архитектуры, к сожалению информации по разбору ELF файлов с защитой я найти не смог. Не считая
Пожалуйста, авторизуйтесь для просмотра ссылки.
но там достаточно примитивно.

У меня же прошивка, покрытая хрен пойми чем, из-за чего статические анализаторы сходят с ума. Задача достаточно простая: вытащить AES ключ, которым шифруется файл + алгоритм шифрации бинариков, чтобы на будущее можно было их распаковывать, если ключи поменяются. Задача усложняется тем, что донгл, на котором работает эта прошивка не имеет рута + ssh для запуска отладчика. Я вытащил прошивку с флешки, однако товарищи модифицировали JFFS2, что привело к тому, что файлы невозможно распаковать.

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

Файл
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Апну. Нашел способ, как сдампить распакованный бинарик. Однако настал вопрос: как сделать распаковщик для сей тарабарщины? Ну и второй вопрос: как-то упаковщик палит отладчик и падает с ошибками. Если подключиться через gdb, то ошибок нет. Однако отлаживать через консольный gdb то еще удовольствие. Какие есть еще инструменты, которые позволяют дебажить ARM удаленно через gdb, но с помощью UI.
 
как сделать распаковщик для сей тарабарщины?
Очевидно, анализировать того, кто загружает бинари в память и расшифровывает их. Как правило это один бинарь, который находит в целевом бинаре нужные данные, читает их, загружает целевой бинарь в память, дешифрует и инвокает EP. И, как правило, он не должен быть зашифрован сам (иначе нужно обращаться уже к аппаратке или к тому, кто может в теории стоять ещё ниже (для понимания о чём я говорю, посмотри как работает Intel Boot Guard, например)).
Имхо, но я бы юзнул бинволк и посмотрел, сколько вообще бинарей в проше и попробовал бы посмотреть на сами бинари по отдельности.

Какие есть еще инструменты, которые позволяют дебажить ARM удаленно через gdb, но с помощью UI.
Как будто бы задача может быть решена через эмуляцию, в том же QEMU, например, есть gdbstub, который даст подсосаться отладчику к твоей хуйне. Не самый лучший вариант, но первый что мне пришёл в голову (да и в принципе который сам юзаю временами) - QEMU + EXDI + WinDbg. Тут уже будет проблема в том, как скормить QEMU твой бинарь.
 
Последнее редактирование:
анализировать того, кто загружает бинари в память и расшифровывает их
Китайцы пропатчили ядро из-за чего JFFS2 нестандартно шифровалась и из-за этого при извлечении прошивки с микрухи ты не мог извлечь файлы из файловой системы. Это победили методом научного тыка. Так же китайцы пропатчили ядро из-за чего strace при старте отладчика падал с ошибкой PTRACE_TRACEME: Invalid argument
попробовал бы посмотреть на сами бинари по отдельности.
Я сейчас этим и занимаюсь :) Китайцы накрыли их каким-то кастомным пакером с антиотладкой)) При этом через gdb все работает, а вот если подцепиться идой, то бинарь вылетает, судя по дешифрованным строкам он считает тики и если их количество превышает значение, то вылетает (до самого кода проверки я так и не добрался тк он размазан по всему бинарю, поэтому пока предполагаю).

В иде эта хрень выглядит так (по факту код ниже 42 строки не выполняется, там выполняется прыжок и копирование всего бинаря в память):
60ee8cb09c62154e0f8a53a74704[1].png


Пожалуйста, авторизуйтесь для просмотра ссылки.

Сам бинарь.

Как будто бы задача может быть решена через эмуляцию, в том же QEMU, например, есть gdbstub, который даст подсосаться отладчику к твоей хуйне. Не самый лучший вариант, но первый что мне пришёл в голову (да и в принципе который сам юзаю временами) - QEMU + EXDI + WinDbg. Тут уже будет проблема в том, как скормить QEMU твой бинарь.
Там идут вызовы /dev/hwaes, поэтому мне кажется, что эмуляция бы не помогла. Ядро там нифига не стандартное, поэтому я пошел другим путем и купил уязвимый донгл на авито (при цене вопроса в 2к, это было бы быстрее) :) В итоге у меня есть ssh + рут к свистку + возможность дебажить. Сейчас хочу понять какими инструментами можно распаковать эти бинари тк этим пакером покрыто вообще все))

Умные люди вызвали strace и получили такую картину:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Так же DIE выдает интересный результат:
a1782fa57f8b582031f51f4465f5.png


Интересно это просто ложный детект или там измененный upx. У меня, к сожалению, нет опыта в распаковке, не считая студенческих проектов, где шаг за шагом анпакали upx древних версий))

Вообще с этой штукой забавно получилось: хотел пропатчить софт от донгла тк он кривой и периодически начинает дико лагать. В итоге оказалось, что софт пишет ОЕМ производитель, прошивку которого насиловали еще с 2021 года. После чего производитель обиделся и пошифровал все по самые помидоры, лишь бы никто ее не модифицировал :)
 
Последнее редактирование:
  • Попкорн
Реакции: mj12
Чтож поковыряв историю репо, я понял, что чуваки использовали upx, а затем его кастомизировали, поэтому у них на месте дефолтных строк лежит какой-то мусор. На скринах ниже один и тот же бинарь, но один был сохранен 2020.06.03, а второй 2020.07.08 т.е. спустя месяц китайцы созрели, что upx надо скрывать.

Жалкая пародия:
bf2799a9f4eb4227d873d5c2232b.png


Неповторимый оригинал:
5c2bf69f15cfa83f9b2dca61cbe9.png


Вопрос в том, как это сделать. Если восстановить заголовок upx!, то upx все равно отказывается распаковывать файл :(.
 
Учитывая, что у них покрыты upx сейчас все файлы, то хотелось бы понять как поправить файл для корректной распаковки штатным upx.

Пожалуйста, авторизуйтесь для просмотра ссылки.
- упакован upx, распаковывается штатно
Пожалуйста, авторизуйтесь для просмотра ссылки.
- упакован модифицированным upx, штатная тулза ломается и говорит, что это невалидный upx

82edc8086bea2beb2dbe5bd27c05.png
 
В общем я на 99.9% уверен, что это "поправленный" upx:
Пожалуйста, авторизуйтесь для просмотра ссылки.

С помощью утилиты
Пожалуйста, авторизуйтесь для просмотра ссылки.
поправил хеадеры, однако видимо это не все манипуляции с файлом:
Код:
Expand Collapse Copy
upx: E:\Stuff\ARMimg_maker: Exception: compressed data violation
 
Продолжай отписывать сюда как идет работа, интересно чем это закончится.
 
В общем прослеживается эволюция системы распаковки исполняемых файлов:
1) использовали ванильный upx
2) использовали upx с измененными заголовками UPX! на U"U".
3) использовали upx с измененным способом сжатия, падающего с ошибкой:
Код:
Expand Collapse Copy
upx: E:\Stuff\hcid: Exception: compressed data violation
 
Нашел еще примеры:
Пожалуйста, авторизуйтесь для просмотра ссылки.
- если вернуть сигнатуру назад, то распаковка успешна
Пожалуйста, авторизуйтесь для просмотра ссылки.
- следующая версия, изменение сигнатуры уже не помогает
 
Всем привет. На просторах интернета очень много материала по поводу x86 архитектуры, к сожалению информации по разбору ELF файлов с защитой я найти не смог. Не считая
Пожалуйста, авторизуйтесь для просмотра ссылки.
но там достаточно примитивно.

У меня же прошивка, покрытая хрен пойми чем, из-за чего статические анализаторы сходят с ума. Задача достаточно простая: вытащить AES ключ, которым шифруется файл + алгоритм шифрации бинариков, чтобы на будущее можно было их распаковывать, если ключи поменяются. Задача усложняется тем, что донгл, на котором работает эта прошивка не имеет рута + ssh для запуска отладчика. Я вытащил прошивку с флешки, однако товарищи модифицировали JFFS2, что привело к тому, что файлы невозможно распаковать.

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

Файл
Пожалуйста, авторизуйтесь для просмотра ссылки.
а что за донгл
 
я правильно понял. Что твоя тема создана для помощи в разборе шифрования донгла это ?
Точнее упаковщика, которым запакованы все файлы бизнес логики. А так, все верно.
 
Точнее упаковщика, которым запакованы все файлы бизнес логики. А так, все верно.
То есть задача: Донгл - есть упаковщик- упаковщик имеет алгоритм шифрования. Ты хочешь узнать как расшифровать файлы

Все так я понял ?!
 
То есть задача: Донгл - есть упаковщик- упаковщик имеет алгоритм шифрования. Ты хочешь узнать как расшифровать файлы

Все так я понял ?!
Да. Есть предположение, что это upx модифицированный.
 
Последнее редактирование:
А если не секрет, почему взялся за это ?
Интерес. Вообще все началось с того, что я хотел поправить прошивку. Так вышел на это репо, где чуваки уже 4 года ковыряют шифрацию (безуспешно). После того как я смог извлечь ключи стало интересно: а получится ли распаковать все файлы массово, чтобы можно было анализировать нормальные бинарики, искать по строкам и тд + это отдельный опыт связанный с ковырянием неизвестной архитектуры.
 
Назад
Сверху Снизу