Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Когда x86 и Windows уже приелись, а уютный x64dbg больше не радует глаз, пора переходить к настоящему хардкору. ARM, QNX, эмулятор QEMU и старый добрый GDB — вот инструменты для тех, кто не ищет легких путей. Сегодня мы запустим экзотическую ОС, подключимся к ней через виртуальный адаптер и шаг за шагом разберем логику программы прямо на лету, без лишнего комфорта, но с изрядной долей азарта.
Ты, вероятно, уже заметил, что большинство моих статей посвящено разбору задач под Windows на процессорах семейства Intel. Это нехорошо, и я изо всех сил стараюсь разнообразить тематику исследованием экзотических виртуальных машин и процессоров.
Виртуалки, каюсь, мною охвачены в меньшей степени по весьма уважительной причине: задачи под них очень неудобно отлаживать в динамике и приходится ограничиваться статическим анализом. Однако при желании всегда можно найти выход, даже такой нестандартный, как использование различных эмуляторов. Ты, вероятно, помнишь мои статьи, посвященные эмуляторам SheepShaver для Mac OS или BlueStacks под Android. На этот раз я хочу обратить твое внимание на легендарный эмулятор QEMU, при помощи которого мы будем анализировать приложения, реализованные под ARM QNX.
До этого мы уже сталкивались и с ARM, но исследовали его исключительно в дизассемблере, сегодня у нас появилась счастливая возможность прощупать его в динамике, причем на PC и даже из‑под Windows.
Возьмем в качестве пациента некое устройство, функционирующее под операционной системой QNX на процессоре ARM. Из этических соображений не будем раскрывать название программы и подробности о специфике ее работы, также оставим за скобками процесс снятия дампа с этого приложения. Кроме того, я не буду отвлекаться на процесс установки QEMU и загрузки образа, об этом написано много статей.
По условию нашей задачи файловая система устройства уже загружена в QEMU и успешно там функционирует. В окончательной формулировке наша цель выглядит так: путем патча или кейгена добиться валидности активационного кода (на скриншоте выделено голубым) в активационной строке (выделено красным), которую скармливают программе при помощи специального активационного Lua-скрипта. На представленном ниже изображении результат проверки выделен желтым.
Начнем с подключения отладчика GDB. Об этом тоже написано много разных статей, но почему‑то все они как‑то стыдливо умалчивают о настройке сетевого подключения. У неподготовленного пользователя может сложиться ложное впечатление, что опции -s -S
вполне достаточно, чтобы GDB увидел QEMU по 1234-му порту.
На самом деле это, конечно, не так, поэтому чуть подробнее остановлюсь на подключении отладчика через виртуальный сетевой адаптер. Лично у меня получилось подключить только так. На сайте QEMU описанный способ показан в отдельной статье, я же попробую своими словами на пальцах объяснить пошаговую последовательность действий, необходимых для его реализации, поскольку она не совсем очевидна.
Для начала нам требуется создать новое сетевое подключение с именем tap0
(Панель управления → Сеть и Интернет → Сетевые подключения).
Создать его тоже не так‑то просто: лично у меня это получилось только путем установки OpenVPN. Создав виртуальный адаптер, мы прописываем у него в настройках следующую информацию.
После этого добавляем в командную строку QEMU опцию -nic tap,ifname=tap0,id=hub0
, и можно тестировать подключение отладчиков к эмулятору. Я понимаю, что ты уже привык к удобному уютному x64dbg и, самое смешное, что с его помощью тоже можно отлаживать приложения в эмуляторе, но мы, наверное, оставим такую странную экзотику для какой‑нибудь следующей статьи. В этот раз мы начнем с самого удобного способа отладки — при помощи уже хорошо известного нам дизассемблера IDA.
Для тебя, вероятно, уже не новость, что этот дизассемблер оснащен собственным отладчиком. Хотя, конечно, все универсальное хуже специального, и он сильно проигрывает в удобстве и надежности x64dbg. Но в данном случае это самое меньшее из всех зол.
Вообще‑то процесс подключения IDA к QEMU через GDB подробно и с цветными картинками описан на сайте Hex-Rays, однако я снова попробую изложить его своими словами, поскольку там тоже есть нюансы.
Итак, после описанной выше настройки QEMU и его запуска мы вводим в его консоль команду pdebug 1234
. Затем открываем в IDA меню Debugger → Attach → Remote GDB debugger и переходим к окну настроек подключения, в которое (исходя из выбранных выше настроек) вводим следующую информацию.
Далее в окне GDB configuration (Debugger options → Set specific options) нужно обязательно указать тип процессора (в нашем случае это ARM Little-endian), иначе IDA, скорее всего, рухнет при аттаче.
Однако при попытке подключения IDA просит имя или PID запущенного в эмуляторе процесса, а нам он неизвестен, и список выбора пустой.
При попытке выбрать процесс 0 IDA успешно коннектится к эмулятору, и хотя бы это радует: значит, мы всё сделали правильно.
Источник: xakep.ru