2016-07-05 2 views
0

Недавно я получил доступ к исполняемому файлу ELF, предназначенному для микроконтроллеров на базе ARM. К моему удивлению, когда я попытался проверить его, сваливая все с arm-none-eabi-objdump он держал неудачу с ошибкойПроприетарный ARM ELF двоичный

File format not recognized

После спрашивать человек, который поставил двоичный код, я узнал, что он был составлен (и связан) с фирменным набором инструментами , о котором я не буду упоминать, чтобы не дать им дополнительную гласность. Впоследствии мне сказали, что мне нужны утилиты из упомянутой проприетарной инструментальной цепочки, чтобы разобрать бинарный файл. Теперь мне стало любопытно. Как возможно, objdump GNU не анализировать файл ELF? Насколько я знаю, ELF является стандартным бесплатным файловым форматом. Разумеется, даже если набор команд не распознается, тогда должно быть возможно, по крайней мере, получить таблицу разделов и символов, а также двоичную разборку символов. Возможно, информация зашифрована?

ответ

0

Простой заголовок ELF как-то поврежден, чтобы обеспечить применение методов отладки. Вы можете многому научиться из-за проблем с трещинами. У Джонатана Салвана есть x86 crackme, который, похоже, делает то же самое. Вы можете больше узнать об этом в своей статье в блоге «Бинарный анализ, посчитайте меня, если сможете»: http://shell-storm.org/blog/A-binary-analysis-count-me-if-you-can/

+1

Кроме того, вероятно, вы должны начать с 'readelf' вместо' objdump'. –

+0

Отличный блог, спасибо. Следуя вашим предположениям, я попросил у человека, который отправил мне двоичный файл, попытаться его разобрать. Оказывается, они получают одинаковые ошибки. После некоторого расследования мы обнаружили, что каким-то образом двоичный код был поврежден. Затем мне был предоставлен новый, который работает, как ожидается, когда он пройдет через GNU Binutils. Так что шифрования не существует, по крайней мере, не преднамеренно. Тем не менее, статья, с которой вы связаны, была действительно интересной. – goblin

+0

@EmployedRussian readelf действительно обрабатывает заголовок ELF правильно, но тогда он говорит: 'readelf: Ошибка: Не удается прочитать в 0x2800 байт раздела headers' ' readelf: Ошибка: Не удается прочитать в 0x3e80000 байтов заголовков раздела ' ' readelf: Ошибка: заголовки разделов недоступны! ' ' readelf: Ошибка: невозможно прочитать в 0x800000 байт заголовков программы . В противном случае он правильно распознает класс ELF, Endianness, ABI, флаги, размеры таблиц и т. Д. – goblin

Смежные вопросы