We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Разработка собственных инструментов безопасности в Termux на Rust

Termux предоставляет полноценную Linux‑окружение на Android‑устройствах, позволяя использовать современные языки программирования для создания инструментов безопасности. Rust – язык системного уровня, известный своей безопасностью памяти и высокой производительностью, что делает его отличным выбором для разработки эксплойтов, сканеров и прочих утилит.

Почему именно Rust?

  • Отсутствие ошибок доступа к памяти (null‑pointer, buffer overflow).
  • Низкоуровневый контроль и возможность работы без runtime.
  • Быстрая компиляция и кросс‑компиляция под разные архитектуры.
  • Большое сообщество и готовые библиотеки (crates) для сетевого программирования.

Установка Rust в Termux

Для начала установим необходимые пакеты и саму цепочку инструментов Rust.

pkg update && pkg upgrade -y
pkg install -y git curl build-essential clang
curl https://sh.rustup.rs -sSf | sh -s -- -y
source $HOME/.cargo/env
rustc --version
cargo --version

После выполнения вы увидите версии rustc и cargo, подтверждающие успешную установку.

Создание простого сканера портов

В этом разделе мы реализуем минимальный TCP‑сканер, который проверяет открытость портов на заданном хосте.

# Создаём новый проект
cargo new port_scanner --bin
cd port_scanner

# Добавляем зависимости в Cargo.toml
cat >> Cargo.toml <<'EOF'
[dependencies]
tokio = { version = \"1\", features = [\"full\"] }

Откройте файл src/main.rs и замените его содержимое на следующее:

use tokio::net::TcpStream;
use std::net::IpAddr;
use std::time::Duration;

#[tokio::main]
async fn main() {
    let target = std::env::args().nth(1).expect(\"IP address required\");
    let ip: IpAddr = target.parse().expect(\"Invalid IP address\");
    let ports = 1..1024u16;

    for port in ports {
        let addr = format!(\"{}:{}\", ip, port);
        let fut = TcpStream::connect(&addr);
        let timeout = tokio::time::timeout(Duration::from_millis(300), fut);
        match timeout.await {
            Ok(Ok(_)) => println!(\"Port {} is open\", port),
            _ => {} // closed or filtered
        }
    }
}

Соберём и запустим утилиту:

cargo build --release
./target/release/port_scanner 192.168.1.1

Кросс‑компиляция под разные архитектуры Android

Termux работает на ARM64, ARMv7 и x86_64. Чтобы собрать бинарник, совместимый со всеми устройствами, задаём целевой триплет.

# Установим нужный target
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add x86_64-linux-android

# Пример сборки для ARM64
cargo build --release --target aarch64-linux-android

Полученный файл target/aarch64-linux-android/release/port_scanner можно перенести на любое Android‑устройство с установленным Termux и запускать без дополнительных зависимостей.

Интеграция с Termux API

Для повышения полезности инструмента можно использовать Termux API. Например, после завершения сканирования отправим уведомление:

# Установим пакет API
pkg install -y termux-api

# Добавим вызов в main.rs
use std::process::Command;

async fn notify(message: &str) {
    let _ = Command::new("termux-notification")
        .arg("-t")
        .arg(message)
        .output();
}

// В конце main() после сканирования:
notify("Port scanning completed").await;

Лучшие практики и безопасность

  • Всегда проверяйте ввод пользователя – используйте std::net::IpAddr::parse вместо строковых манипуляций.
  • Ограничивайте количество одновременных соединений, чтобы не вызвать отказ в обслуживании (DoS) на целевом хосте.
  • Подписывайте бинарники (sign) при распространении, чтобы пользователи могли проверять подлинность.
  • Регулярно обновляйте зависимости через cargo update.

Заключение

Termux в сочетании с Rust открывает широкие возможности для создания быстрых, надёжных и безопасных инструментов кибербезопасности непосредственно на мобильных устройствах. Вы освоили установку среды, написание простого сканера портов, кросс‑компиляцию и интеграцию с Termux API. Эти навыки можно расширять, создавая более сложные системы анализа трафика, эксплойты или автоматизированные скрипты.

Если вы хотите ускорить процесс разработки, получить аудит кода или настроить CI/CD для ваших Rust‑утилит, обратитесь к профессионалам RybinskLab. Мы предоставляем услуги по разработке, аудиту и сопровождению безопасных решений под Android и Linux, а также обучение персонала.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом RybinskLab.

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю IT-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса.

Связаться со мной
Поддержать проект