Категория > Новости > Шелл-код для ARM. Пишем на ассемблере свой реверс-шелл для устройств на ARM - «Новости»
Шелл-код для ARM. Пишем на ассемблере свой реверс-шелл для устройств на ARM - «Новости»18-10-2023, 08:08. Автор: Turner |
сайте, посвященном этим процессорам, или в Википедии. Также имеются публикации об AArch64. Про ассемблер под ARM советую следующие книги: Ассемблер для Raspberry Pi. Практическое руководство; Эксплуатация систем ARM Linux; Blue Fox: Arm Assembly Internals and Reverse Engineering. Создание виртуальной машины в QEMUQEMU — это эмулятор различных процессорных архитектур. Как правило, он используется для эмуляции целого компьютера (то есть для запуска виртуальной машины), однако для отладки одной программы это необязательно. В Linux можно использовать эмуляцию QEMU User-Mode, именно этот способ и будет рассмотрен первым. Читайте также - Передавайте на отправку Ваши посылки и документы в любом офисе СДЭК или вызывайте к себе курьера - можно ли через сдэк отправить документы по доступным ценам. Наша конечная цель — запускать скомпилированные программы для ARM 64-bit. Для начала необходимо установить сам пакет эмулятора: sudo apt-get update sudo apt-get install qemu qemu-user qemu-user-static Для AArch64 устанавливаем следующие компоненты: sudo apt install gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf binutils-arm-linux-gnueabihf-dbg sudo apt install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu binutils-aarch64-linux-gnu-dbg Чтобы эмулировать процессор типа ARM64, необходимо создать две директории — Для этого используем следующие команды: wget -Oinstaller-linux http://http.us.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/debian-installer/arm64/linux wget -Oinstaller-initrd.gz http://http.us.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz Дальше создаем диск для установки на него системы: qemu-img create -fraw hda.img 20G Создаем файл qemu-system-aarch64 -Mvirt -m 2G -cpucortex-a53 -smp 2 -kernelinstaller-linux -initrdinstaller-initrd.gz -drive if=none,file=hda.img,format=raw,id=hd -devicevirtio-blk-pci,drive=hd -netdevuser,id=mynet -devicevirtio-net-pci,netdev=mynet -displaygtk,gl=on -devicevirtio-gpu-pci -no-reboot -deviceqemu-xhci -deviceusb-kbd -deviceusb-tablet Здесь
Сохраняем и запускаем скрипт. Начнется классическая установка Debian 11. На первом экране надо выбрать английский язык в качестве основного. Далее необходимо выбрать UNITED STATES. Ближе к завершению установки появится ошибка. Выбираем Continue и дожидаемся окончания установки Debian. Переносим образ qemu-system-aarch64 -Mvirt -m 3G -cpucortex-a53 -smp 2 -kernelvmlinuz-5.10.0-8-arm64 -initrdinitrd.img-5.10.0-8-arm64 -append 'root=/dev/vda2' -drive if=none,file=hda.img,format=raw,id=hd -devicevirtio-blk-pci,drive=hd -netdevuser,id=mynet -devicevirtio-net-pci,netdev=mynet -displaygtk,gl=on -devicevirtio-gpu -no-reboot -deviceqemu-xhci -deviceusb-kbd -deviceusb-tablet Щелкаем на созданном диске ./debARM64 Для настройки сети в скрипт DockerЕсть и альтернативный вариант: эмуляция Raspberry Pi с использованием Docker. Для этого нужно установить Docker: sudo apt-get install docker.io Затем скачать соответствующий образ: docker pull lukechilds/dockerpi Как только все прогрузится, вводим команду В качестве Итогом успешного запуска будет такое окно. Учетные данные для входа в систему стандартны: Установка GDB и PEDA/GEFУстановка GDB и плагина PEDA довольно проста. Для GDB используем команду sudo apt install gdb Для установки PEDA команды такие: git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >>~/.gdbinit GEF установим командой Отладку я буду выполнять в основном в GEF. Пробуем GDB и пишем первую программуЧтобы написать программу на ассемблере, потребуются три инструмента:
Текстовый редактор — это вкусовщина. Многие пишут в Vim, мне удобнее в nano, поэтому код я буду писать там. Программа as создает объектный файл, а ld выполняет динамическую привязку. Работать с этими программами нужно следующим образом:
У любого файла с кодом на языке ассемблера должна быть точка, с которой начинается программа. Она выглядит так: _start: Эта точка определяется как глобальное имя для всей программы. Каждый оператор имеет следующий синтаксис: <обозначение:> <инструкция> @ комментарий Первая программаВ первой программе, по классике, реализован вывод приветственной строчки — _start: Здесь
Все это схоже с ассемблером для i386. В ARM регистры для взаимодействия такие:
Информация обо всех системных вызовах есть в справке программы J0llyTr0LLz. Там же описано, что именно должно лежать в регистрах. Скачать программу и узнать, как с ней работать, можно на GitHub. Компилируем приложение и запускаем. as -gproga1.asm -oproga1.o ld proga1.o -oproga1.bin Здесь $ file proga1.bin Попробуем продебажить это приложение. Первый опыт в отладкеЗапускаем GDB и загружаем в него бинарный файл, после чего переходим к разделу $ gdb Поставим точку останова на первой инструкции и запустим программу: b *_start Окно отладки GDB-GEF выглядит так. Шпаргалку по GDB-командам можно найти в документации, опубликованной на сайте Darkdust. Перейти обратно к новости |