Недавно у меня была задача понять бинарную программу для Linux. Однако программа была в двоичном виде.
Я использовал команды file
, strings
и objdump
иметь некоторое представление о том , что она делает, и какие функции он звонит.
Кажется, двоичный файл скомпилирован с отладочной информацией. Что еще я могу узнать об этом?
linux
reverse-engineering
Джефф Шаллер
источник
источник
Ответы:
Включая команды, которые вы уже использовали, я постараюсь подробно описать, что можно сделать для выполнения некоторых криминалистических операций в исполняемом файле.
Скромная
strings
команда может быть полезна для визуализации текстовых сообщений об ошибках, которые дают подсказки о двоичных функциях. Это также простой способ обнаружения упакованных двоичных файлов, как в примере (часто с двоичными файлами вредоносного ПО):file
позволяет увидеть исполняемые свойства, а именно:В этом примере «not stripped» означает, что он был скомпилирован с включенной информацией отладки.
objdump
создает список разборки исполняемого файла:objdump
также позволяет узнать компилятор, используемый для компиляции двоичного исполняемого файла:objdump
также перечисляет внешние функции, динамически связанные во время выполнения:$ objdump -T exe_file
Вы можете запускать бинарный файл только на виртуальной машине, созданной, а затем отброшенной только для запуска бинарного файла. Используйте
strace
,ltrace
,gdb
и ,sysdig
чтобы узнать больше о том , что делает двоичная на уровне системных вызовов во время выполнения.Он также может быть отлажен шаг за шагом
gdb
.Чтобы отслеживать / создавать дампы большей части своей системной активности, выполняющей его, используйте sysdig как в:
Мы еще раз разберемся со статическим анализом самого двоичного файла в оставшейся части этого ответа.
ldd exe_file
перечисляет библиотеки, которые он использует;size -A exe_file
readelf -x .rodata exe_file
перечисляет статические строкиreadelf -h exe_file
получает информацию заголовка ELFreadelf -s exe_file
отображает символыnm exe_file
перечисляет символы из таблицы объектов:Помимо разборки двоичного файла с
objdump
помощью декомпилятора также можно использовать.Для декомпиляции я недавно выполнил техническую задачу, в которой мне нужно было декомпилировать два небольших 64-битных бинарных файла Linux.
Я пытался использовать Бумеранг и Снеговик. Проект Бумеранг кажется заброшенным, и меня не впечатлили ограничения обоих из них. Несколько других альтернатив, либо open source / freeware / old, включая недавно выпущенный Avast, декомпилировали только 32-битные двоичные файлы.
В итоге я попробовал демо-версию Hopper в MacOS (она также имеет версию для Linux).
Hopper разбирает и декомпилирует 32- или 64-битные двоичные файлы для OS / X, Linux и Windows. Он способен работать с большими двоичными файлами при получении лицензии.
Он также создает потоковые графики функций / структуры программы и переменных.
Он также активно поддерживается и обновляется. Однако это коммерческий.
Мне так нравилось пользоваться им и полученным результатом, который купил лицензию. Лицензия гораздо более доступная, чем шестнадцатеричное излучение.
В комментариях к этому ответу @ d33tah и @Josh также упоминают в качестве альтернативы с открытым исходным кодом radare2, и соответствующий графический интерфейс Cutter , похожий на Hopper в Linux, не может поручиться лично за него, поскольку я их не использую.
Кроме того, поскольку целевой двоичный файл был скомпилирован с отладочной информацией, вы можете получить исходное имя функций и переменных.
Более того, вы никогда не получите обратно комментарии в исходном коде, поскольку они никак не скомпилированы в двоичные исполняемые файлы.
Улучшение качества выходного источника и понимание двоичного кода всегда будет означать некоторое время и детективную работу. Декомпиляторы только делают большую часть работы.
Пример вывода Hopper без отладочной информации:
Графический интерфейс Hopper также очень удобен (несколько функций, одновременно расширенных на этом рисунке):
см. также связанный с этим вопрос. Почему истина и ложь так велики?
источник
strace -f
отследить дочерние потоки / процессы. Есть варианты разделения вывода на отдельные файлы для каждого PID, или вы можете просто/12345
вless
для поиска и ВЫСВЕТИТЬ строки , которые начинаются с вас интересует PID. Если что - то не слишком перемешаны вместе (например , сценарий оболочки , начиная с другом процессы, а не параллельные потоки), это может быть использовано. Но да, чрезвычайно полезно просто посмотреть, какие файлы конфигурации / другие файлы пытается прочитать какая-то запутанная часть программного обеспечения, когда пытается выяснить, почему он не доволен тем, как вы его установили.radare2
в список.