- Понимание того, что делает бинарный файл Linux
- В чем отличие бинарного файла от исходного?
- Бинарный файл
- Преимущества и плюсы использования бинарных файлов
- Недостатки и минусы использования
- Исходные файлы
- Преимущества и плюсы использования исходных файлов
- Недостатки и минусы использования
- Как устанавливать bin файлы в Linux
- Установка bin файлов в Linux
- Консольный вариант
- Графический вариант
Понимание того, что делает бинарный файл Linux
Недавно у меня была задача понять бинарную программу для Linux. Однако программа была в двоичном виде.
Я использовал команды file , strings и objdump иметь некоторое представление о том , что она делает, и какие функции он звонит.
Кажется, двоичный файл скомпилирован с отладочной информацией. Что еще я могу узнать об этом?
Включая команды, которые вы уже использовали, я постараюсь подробно описать, что можно сделать для выполнения некоторых криминалистических операций в исполняемом файле.
Скромная strings команда может быть полезна для визуализации текстовых сообщений об ошибках, которые дают подсказки о двоичных функциях. Это также простой способ обнаружения упакованных двоичных файлов, как в примере (часто с двоичными файлами вредоносного ПО):
strings — печатать строки печатаемых символов в файлах.
Для каждого заданного файла в строках GNU печатаются последовательности печатаемых символов длиной не менее 4 символов (или число, указанное в приведенных ниже параметрах), за которыми следует непечатаемый символ.
file позволяет увидеть исполняемые свойства, а именно:
- архитектура, на которую он нацелен;
- ОС;
- если динамически или статически связаны;
- если скомпилировано с отладочной информацией или нет.
В этом примере «not stripped» означает, что он был скомпилирован с включенной информацией отладки.
file проверяет каждый аргумент в попытке его классифицировать. В этом порядке выполняются три набора тестов: тесты файловой системы, магические тесты и языковые тесты. Первый успешный тест приводит к печати типа файла.
objdump создает список разборки исполняемого файла:
objdump также позволяет узнать компилятор, используемый для компиляции двоичного исполняемого файла:
objdump также перечисляет внешние функции, динамически связанные во время выполнения:
$ objdump -T exe_file
objdump отображает информацию об одном или нескольких объектных файлах Опции управляют отображением конкретной информации. Эта информация в основном полезна для программистов, которые работают над инструментами компиляции, в отличие от программистов, которые просто хотят, чтобы их программа компилировалась и работала.
Вы можете запускать бинарный файл только на виртуальной машине, созданной, а затем отброшенной только для запуска бинарного файла. Используйте strace , ltrace , gdb и , sysdig чтобы узнать больше о том , что делает двоичная на уровне системных вызовов во время выполнения.
strace запускает указанную команду до ее выхода. Он перехватывает и записывает системные вызовы, вызываемые процессом, и сигналы, принимаемые процессом. Имя каждого системного вызова, его аргументы и возвращаемое значение выводятся при стандартной ошибке или в файл, указанный с помощью опции -o.
ltrace это программа, которая просто запускает указанную команду до ее выхода. Он перехватывает и записывает динамические библиотечные вызовы, которые вызываются исполняемым процессом, и сигналы, которые получает этот процесс. Он также может перехватывать и распечатывать системные вызовы, выполняемые программой.
Он также может быть отлажен шаг за шагом gdb .
Назначение отладчика, такого как GDB, состоит в том, чтобы вы могли видеть, что происходит «внутри» другой программы во время ее выполнения.
Чтобы отслеживать / создавать дампы большей части своей системной активности, выполняющей его, используйте sysdig как в:
sysdig это инструмент для устранения неполадок, анализа и исследования системы. Он может использоваться для захвата, фильтрации и декодирования системных вызовов и других событий ОС. sysdig может использоваться как для проверки работающих систем, так и для генерации файлов трассировки, которые можно проанализировать на более позднем этапе.
sysdig включает в себя мощный язык фильтрации, имеет настраиваемый вывод и может быть расширен с помощью сценариев Lua, называемых долотами.
Мы еще раз разберемся со статическим анализом самого двоичного файла в оставшейся части этого ответа.
ldd exe_file перечисляет библиотеки, которые он использует;
ldd печатает общие объекты (общие библиотеки), необходимые для каждой программы или общего объекта, указанного в командной строке.
size -A exe_file
size Утилита GNU перечисляет размеры разделов — и общий размер — для каждого из объектных или архивных файлов objfile в своем списке аргументов. По умолчанию генерируется одна строка вывода для каждого объектного файла или каждого модуля в архиве.
readelf -x .rodata exe_file перечисляет статические строки
readelf -h exe_file получает информацию заголовка ELF
readelf -s exe_file отображает символы
readelf отображает информацию об одном или нескольких объектных файлах формата ELF. Опции управляют отображением конкретной информации.
elffile . объектные файлы, которые нужно исследовать. Поддерживаются 32-битные и 64-битные файлы ELF, а также архивы, содержащие файлы ELF.
nm exe_file перечисляет символы из таблицы объектов:
nm перечисляет символы из объектных файлов objfile . Если никакие объектные файлы не указаны в качестве аргументов, nm принимает файл a.out.
Помимо разборки двоичного файла с objdump помощью декомпилятора также можно использовать.
Для декомпиляции я недавно выполнил техническую задачу, в которой мне нужно было декомпилировать два небольших 64-битных бинарных файла Linux.
Я пытался использовать Бумеранг и Снеговик. Проект Бумеранг кажется заброшенным, и меня не впечатлили ограничения обоих из них. Несколько других альтернатив, либо open source / freeware / old, включая недавно выпущенный Avast, декомпилировали только 32-битные двоичные файлы.
В итоге я попробовал демо-версию Hopper в MacOS (она также имеет версию для Linux).
Hopper Disassembler, инструмент для обратного проектирования, который позволяет вам разбирать, декомпилировать и отлаживать ваши приложения.
Hopper разбирает и декомпилирует 32- или 64-битные двоичные файлы для OS / X, Linux и Windows. Он способен работать с большими двоичными файлами при получении лицензии.
Он также создает потоковые графики функций / структуры программы и переменных.
Он также активно поддерживается и обновляется. Однако это коммерческий.
Мне так нравилось пользоваться им и полученным результатом, который купил лицензию. Лицензия гораздо более доступная, чем шестнадцатеричное излучение.
В комментариях к этому ответу @ d33tah и @Josh также упоминают в качестве альтернативы с открытым исходным кодом radare2, и соответствующий графический интерфейс Cutter , похожий на Hopper в Linux, не может поручиться лично за него, поскольку я их не использую.
Кроме того, поскольку целевой двоичный файл был скомпилирован с отладочной информацией, вы можете получить исходное имя функций и переменных.
Более того, вы никогда не получите обратно комментарии в исходном коде, поскольку они никак не скомпилированы в двоичные исполняемые файлы.
Улучшение качества выходного источника и понимание двоичного кода всегда будет означать некоторое время и детективную работу. Декомпиляторы только делают большую часть работы.
Пример вывода Hopper без отладочной информации:
Графический интерфейс Hopper также очень удобен (несколько функций, одновременно расширенных на этом рисунке):
см. также связанный с этим вопрос. Почему истина и ложь так велики?
Источник
В чем отличие бинарного файла от исходного?
Во время работы с Linux у вас есть возможность на выбор использовать два совсем разных способа установки программ, а именно:
- с помощью бинарных файлов;
- из исходника.
Выбрать нужный необходимо отталкиваясь от ваших потребностей и требований к системе, ну и конечно от наличия навыков и опыта в развертывании ПО. Рассмотрим отдельно каждый из методов, их плюсы, а также минусы и трудности, которые могут встретиться при установке.
Бинарный файл
Бинарный файл — это фактическая программа, которая уже полностью готовая к использованию. Это исполняемый файл, который создается при компиляции из исходного кода. Как правило, они имеют все необходимые библиотеки, встроенные в них, или устанавливают / разворачивают их по мере необходимости (в зависимости от того, как было написано ПО). В большинстве случаев предоставляются в архивном формате.
Для установки требуется специальная программа для распаковки этих файлов и помещения их на компьютер. То есть менеджер пакетов вашего дистрибутива Linux (например, apt, yum и т. д.). Менеджер пакетов также выполняет и другие полезные функции кроме распаковки, такие как отслеживание установленных файлов и управление обновлениями программного обеспечения.
Преимущества и плюсы использования бинарных файлов
- Файл сразу готов к запуску. Если у вас есть бинарный файл, разработанный для вашего процессора и операционной системы, скорее всего, вы сможете запустить программу, и все будет работать как надо уже с первого раза.
- Выполнение меньшего количества конфигураций. Вам не нужно настраивать целую кучу параметров конфигурации, чтобы использовать программу, файл просто будет использовать общую конфигурацию по умолчанию.
- Если что-то пойдет не так, и случится ошибка, будет проще найти помощь в Интернете, поскольку бинарный файл предварительно скомпилирован, и логично, что другие люди могут его уже использовали, а это значит, что вы используете аналогичную программу, как и у других пользователей, а не уникальную, оптимизированную для вашей системы, поэтому можно будет найти советы о том как решить полученные ошибки или получить информацию, что следует делать дальше.
Недостатки и минусы использования
- Вы не можете видеть (иметь доступ) и редактировать исходный код, поэтому вы не имеете возможности получить оптимизацию программы под вашу систему, ваши потребности и предпочтения.
Исходные файлы
Исходные файлы — файлы для “сборки” утилиты/ПО в бинарный файл. Исходный код программного обеспечения для Linux поставляется в виде сжатых tar-файлов, которые обычно имеют расширения .tar.gz или .tar.bz2. Инструменты используются для упаковки исходного кода в tarballs, где «tar» (используется для объединения нескольких файлов в один), «gzip» или bzip2 (используется для сжатия).
Чтобы получить tar-архив с исходным кодом для определенного программного обеспечения, вам нужно знать URL-адрес к tar-архиву. После чего нужно распаковать скачанный tar-архив специальной командой tar для определенного типа расширения архива, чтобы получить доступ к файлам и возможность работать с исходником. Следующим шагом выполняются нужные настройки среды для компиляции и установки программного обеспечения из исходного кода.
Исходные файлы, написанные на разных языках, и нуждаются в специальных компиляторах и командах для преобразования его в исполняемый бинарный файл, который будет читаемым для системы и затем сможет запустить ваш компьютер.
Специальный набор инструментов помогает автоматизировать этот процесс. На десктопах Linux это обычно происходит в форме программы командной строки под названием make. Выше перечислены стандартные этапы, при выполнении каких возможно могут появляться ошибки, и будет необходимо выполнять дополнительные манипуляции, в этом и есть сложность внедрения проектов через исходные файлы.
Касательно вопроса, где можно найти исходный код к продукту, вариантов много, в большинстве случаев Вы можете загрузить исходный код проекта с таких сервисов, как GitHub или BitBucket. Некоторые владельцы ПО могут даже разместить его на личном веб-сайте.
Также шаг который лучше не упускать — это ознакомление с документацией к проекту, там могут содержаться важные данные о всех возможностях, последних обновлениях, детали и подсказки по компиляции и установке этого ПО.
Преимущества и плюсы использования исходных файлов
- Дает гибкость в конфигурации программного обеспечения под себя, нужды и требования конкретной системы.
- Хороший вариант для приобретения практических навыков и получения информации о работе и понимания приложения в системе в целом.
Недостатки и минусы использования
- При возникновении ошибки сложно отыскать ее решение, тем самым простой процесс с развертыванием пакетов может превратится в многочасовое занятие.
- К началу установки ПО нужно выполнять дополнительные действия, настройки и установки. Например, Вы должны иметь установленный компилятор, необходимо вручную установить все необходимые библиотеки, которые также часто должны быть скомпилированы.
К минусам этот пункт можно и не относить, но для установки ПО с исходника потребуется уже наличие теоретических знаний и необходимых навыков в понимании документации к продукту, работы с терминалом и т.д., тут обычному пользователю может быть сложно.
Оба метода хороши и несут в себе разные цели использования. В большинстве случаев достаточно выбрать стандартный метод с помощью бинарных файлов.
Источник
Как устанавливать bin файлы в Linux
Не смотря, на то, что большинство программ в операционной системе Linux (в моем случае Ubuntu) можно установить из Центра приложений, тем самым обеспечивая совместимость с системой, иногда вам может понадобится установить новую версию программы или наоборот, старую, которой может не оказаться в списке.
Такие программы чаще всего распространяются, в формате .bin также известные как бинарные файлы. Бывает, что они запакованы в архив, а иногда как исполняемые файлы. Установка bin linux, может быть произведена через терминал либо же через графический интерфейс. Рассмотрим оба варианта.
Установка bin файлов в Linux
Консольный вариант
1. Для начала в файловом менеджере, нужно найти наш бинарник.
2. Откроем терминал, сочетанием клавиш Ctrl+Alt+T.
3. Зайдем в режим суперпользователя (под рутом). Для этого введем следующую команду в терминале:
Затем нужно ввести пароль.
4. Теперь, в терминале нам нужно зайти в ту директорию, где расположен наш бинарник. В моем случае это будет так:
5. Дайте права на выполнение файла .bin, командой:
chmod +x thefile.bin
В моем случае это выглядит так:
chmod +x clip2net.bin
6. Теперь выполните его. Для этого находясь уже в той директории, где находится бинарный файл введем точку и слэш, затем имя файла. В случае со мной это выглядит так:
7. После этой команды, установщик программы запустился и спрашивает меня на каком языке я хотел бы установить bin файл в linux.
8. Далее устанавливаем программу как обычно это делается в ОС Windows.
Графический вариант
Он ненамного проще, но для новичков, которые недавно перешли с Windows будет понятнее. Первые 3 пункта из консольного варианта все же придется выполнить. Затем нужно выбрать файл, нажать правой кнопкой мыши, выбрать пункт «свойства». На вкладке права, нужно поставить галочку напротив пункта «Разрешить выполнение файла как программы».
Закрываем окно. И перетаскиваем этот файл в терминал, запущенный от суперпользователя, имя файла и путь уже впишутся автоматически, остается лишь нажать на кнопку «Enter». Далее, вы можете установить bin файл, как и в первом варианте. На этом все.
Источник