Выполнение бинарных файлов ELF в OSX

11

У меня есть вопрос, связанный с CTF, и мне было интересно, если кто-то может указать мне правильное направление.

Я работаю над OSX Yosemite, и у меня были некоторые военные игры и старые вызовы CTF. Моя цель - выполнить двоичный файл ELF запроса «изначально» в мой итерм (после того, как я его проверю локально), хотя я понимаю, что базовая система может выполнять только двоичные файлы MACH.

Тем не менее, возможна ли такая вещь с помощью эмуляции (например, QEMU) или любого другого метода, чтобы избежать открытия целой виртуальной машины только для запуска двоичного файла?

Заранее спасибо.

nilminus
источник
Эта проблема имеет отношение к безопасности, поскольку она встречается главным образом в CTF безопасности и варгеймах (вот как я застрял на этом). Я считаю, что у сообщества безопасности больше шансов встретить эту конкретную тему. Я тоже постараюсь там.
нольминус
3
Ваш вопрос не о безопасности, а о запуске двоичных файлов.
Нил Смитлайн

Ответы:

2

Сам по себе бинарные файлы ELF ничего не значат. Несколько бинарных файлов работают в одиночку - вам понадобятся вспомогательные библиотеки, API-интерфейсы, ABI и другие замечательные вещи.

При работе с QEMU вам все еще нужна большая часть ОС - только я не подозреваю, что она не так тесно связана с хост-системой.

Теоретически, если у вас есть что-то вроде 'wine', но вы действуете как linux (или другая ОС * nix syle) -> уровень совместимости с OS X, вы можете получить то, что хотите, но такого зверя не существует.

Так что нет, вы не можете запустить произвольный, предварительно скомпилированный бинарный файл ELF в OS X

Подмастерье Компьютерщик
источник
1
этот вопрос касается сценария безопасности, который является довольно нишевым в пространстве суперпользователя. представьте себе статический двоичный файл (библиотеки, скомпилированные в образ, а не динамически связанные), которые злоумышленник хочет поместить в целевую систему и запустить (это основной сценарий безопасности игры CTF). ему не понадобятся внешние библиотеки, хотя ваша точка зрения на ABI (например, системные вызовы) справедлива. вы правы в общем случае, но этот вопрос конкретно не о общем случае. Имхо это не должно было быть перенесено с сайта безопасности.
донкихотские
2

Вероятно, ответ таков: зависит от того, как был создан файл ELF.

На основании этой статьи и этого предложения:

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

Не все файлы ELF будут выполнены, даже если у вас есть правильная настройка.

Основываясь на этой статье , существует группа файлов ELF под названием FatELF:

  • FatELF - это формат файла, который встраивает в один файл несколько двоичных файлов ELF для разных архитектур.
  • Поставьте один файл, который работает в Linux и FreeBSD

На основе этой страницы от Apple

  • Часть BSD ядра OS X в основном основана на FreeBSD

Итак, для Mac OS X FatELF - это «начало ответа».

И наконец, основываясь на этой странице :

Конвертер файлов объектов

Эта утилита может использоваться для преобразования объектных файлов между форматами COFF / PE, OMF, ELF и Mach-O для всех 32-разрядных и 64-разрядных платформ x86. Может изменять имена символов в объектных файлах. Может создавать, изменять и конвертировать библиотеки функций на разных платформах . Может дамп объектных файлов и исполняемых файлов. Также включает в себя очень хороший дизассемблер, поддерживающий наборы инструкций SSE4, AVX, AVX2, AVX512, FMA3, FMA4, XOP и Knights Corner. Исходный код включен (GPL).

У вас есть возможность активировать то, что вы хотите.

PS: есть еще одна страница о XBinary , я не анализировал ее.

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

apagando_tudo
источник