Дебаг на Silicon

от автора

Предыстория

Я, как обладатель яблочного ноута, игрок в CTF и бинарщик, решил динамически проанализировать программу и был очень удивлён, когда не обнаружил привычного для меня GDB. В итоге, немного погуглив, я нашёл для себя решение проблемы и решил его описать.

Что ж будем делать?

  • Поставим Rosetta, чтобы можно было компилировать под x86_64.

  • Установим pwndbg-lldb для отладки Mach-O программ.

  • Установим pwndbg для отладки ELF-файлов.

  • Подведем итоги

Rosetta

Сначала надо скачать Rosetta. Это делается через softwareupdate. Потом запустимся от другой архитектуры.

  1. Установим Rosetta 2:

/usr/sbin/softwareupdate --install-rosetta --agree-to-license

2. Откроем новое окно Terminal в режиме x86_64:

arch -x86_64 /bin/bash

Важно отметить, что arch -x86_64 <cmd> — это просто выполнение различных команд в данной архитектуре, например, вызов bash. Если вы используете какую-либо другую оболочку, такую как zsh, просто укажите путь до неё.

Пример:

uname -a Darwin MacBook-Air-3.local 24.1.0 Darwin Kernel Version 24.1.0: Thu Oct 10 21:02:26 ```PDT 2024; root:xnu-11215.41.3~2/RELEASE_ARM64_T8122 arm64

Как можно заметить, сейчас у меня архитектура arm64, но, прописав эту команду:

arch -x86_64 /bin/bash 

мы поменяли архитектуру на x86_64.

Проверим:

uname -a Darwin MacBook-Air-3.local 24.1.0 Darwin Kernel Version 24.1.0: Thu Oct 10 21:02:26 PDT 2024; root:xnu-11215.41.3~2/RELEASE_ARM64_T8122 x86_64

Теперь, когда мы на x86_64, можно делать то же самое, что и на обычных компьютерах с данной архитектурой. Давайте соберём программу на C под новой архитектурой:

cat >> main.c 
#include <stdio.h>   int main(){   printf("Hello, world!");   return 0; }
gcc main.c -o main  file main  main: Mach-O 64-bit executable x86_64 ./main  Hello, world!

Теперь, когда мы можем работать с иными архитектурами, можно заняться и отладчиками.

PWNDBG-LLDB

На самом деле, вся инструкция доступна на сайте. Я продублирую её, а также покажу, как установить nix и команду, через которую ставил pwndbg-lldb.

Сначала нужно поставить nix (package manager). Для этого можно либо перейти на сайт и скопировать оттуда, либо воспользоваться командой из статьи:

sh <(curl -L https://nixos.org/nix/install)

После этого нужно перезапустить терминал.

Далее через nix ставим pwndbg:

nix shell github:pwndbg/pwndbg#pwndbg-lldb --extra-experimental-features nix-command '--extra-experimental-features flakes

У меня установилось через такую команду. После установки можно пользоваться pwndbg-lldb как обычным отладчиком.

Пример: можете попробовать форматную строку:

#include <stdio.h>  void vulnerable_function() {   char input[100];   printf("Введите строку: ");   gets(input);    printf(input);  }  int main() {   vulnerable_function();   return 0; }

Cheatsheet по компиляции:

gcc <filename>.c -o <output_file_name> -g 
  • -g — оставить отладочную информацию.

  • -o — указать имя выходного файла

Далее в терминале запускаем pwndbg-lldb как обычный pwndbg:

pwndbg-lldb ./<output_file_name>  pwndbg-lldb> breakpoint set -n <vuln_func>  pwndbg-lldb> run  // дальше как в gdb, разберетесь :D 

Теперь самая вкусная часть — pwndbg на arm64 xD.

PWNDBG-GDB

По схеме всё то же: скачать через nix и запустить, но со своими приколами.

nix shell github:pwndbg/pwndbg --extra-experimental-features nix-command --extra-experimental-features flakes

Всё, pwndbg установлен, но debug недоступен. Почему? Потому что у тебя Mac xD. Что же делать? Выход есть — это qemu.

Для установки qemu я буду использовать Orbstack. У них описано, как именно можно поставить qemu-static-user (user-space’s VM):

sudo apt install qemu-user-static qemu-x86_64-static -g 1234 ./hello

В другом терминале:

pwngdb ./hello target remote :1234 continue

Без виртуальной машины, к сожалению, дебажить ELF-файлы на Mac вообще без вариантов. exec format error будет вашим лучшим другом. Поэтому всё же придётся дебажить через qemu: либо через Orbstack, либо поставить на систему, либо через UTM. Но самое простое — это через Orbstack.

Итого

Мы смогли поставить два основных отладчика на macOS. Теперь можно дебажить программы для x86_64, arm и Mach-O файлы этих же архитектур соответственно.


ссылка на оригинал статьи https://habr.com/ru/articles/892544/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *