Код Доступа Termux

ARTICLES 21.02.22 21.02.22 875
Бесплатные курсына главную сниппетов

Статья посвящается любителям CLI в знак солидарности лучшего терминала на OS Android, который испытывает «кошмарную» монополию Google.

Эта блок-схема создана в Termux.
Эта блок-схема создана в Termux.

Termux — это Android приложение под свободной GPL3+ лицензией: эмулятор терминала для среды GNU/Linux, которое работает напрямую без необходимости рутирования. Минимальный базовый функционал устанавливается автоматически, расширенные возможности подтягиваются с помощью менеджера пакетов и установкой стороннего ПО с git, а продвинутая деятельность на телефоне достигается за счёт рут-прав пользователя и установкой proot дистрибутивов GNU/Linux.

Сам Termux весит ~100 Мб (расширяется на Гб) работает на OS Android v7-11.

Termux-среда — киберпанковские разработки и некоторые пакеты содержат кучу ошибок, исправлением которых при случае занимается сам пользователь или сообщество, что является (по шкале красноглазия) нормой в open source среде (стандартные пакеты так же как и приложение распространяются под свободными, но разными лицензиями — это требования сопровождающих packages). В целом, качество и популярность приложения поддерживается на достаточно высоком уровне в мировом масштабе (звёзды на Github-е; рейтинг/отзывы на GP). В настоящее время технические политики GP vs Termux конфликтуют между собой в результате чего у пользователей новичков может ничего не получаться в CLI с минимальным базовым функционалом из коробки. RTFM и ещё раз RTFM. На Github-е с рекурсией на документацию частые проблемы и их решения достаточно технически-просто расписаны сообществом, по этому стоит лишний раз заглянуть в местную wiki перед постингом своей проблемы на профильном форуме.

Опыт использования Termux

Я уже не помню точно когда и каким образом Termux стал инструментом моей души, но изучать и юзать это чудо стал со времён Android 6. Накопился личный опыт, которым я хотел бы поделиться с читателями и по возможности самому освоить что-то новое (пишите в комментах ваш уникальный опыт использования этого терминала).

В данной работе вербализация пойдет о нижеизложенном со всеми остановками:

Дисклеймер

Любые действия и техники исполнения, связанные с рассматриваемыми инструментами в данной статье, являются исключительно ответственностью читателей. Злоупотребление набором инструментов и/или недопонимание может привести к ответственности соответствующих лиц. Автор не несёт ответственность в случае предъявления каких-либо обвинений против каких-либо лиц, злоупотребляющих инструментами/информацией для правонарушений; или сдачи читателями на запчасти своих испорченных гаджетов. Инструменты, упомянутые в этой статье, связанные с бэкапом/пентестом/шифрованием могут нанести ущерб или быть опасными, ознакомьтесь с законами вашей страны/округа и технической информацией. Если вы что-то собираетесь использовать, то используете это на свой страх и риск. Короче, автор ни к чему не призывает, а лишь демонстрирует возможности ПО в ознакомительных целях, что не является руководством к неправомерным действиям или обучающим материалом для сокрытия правонарушений.

Установка и настройка среды Termux

1. Скачиваем и устанавливаем приложение Termux из магазина приложений F-droid (Termux в магазине приложений GP больше не поддерживается и не обновляется с осени 2020 года, вся разработка продолжает осуществляется на Github, но релизы выкладываются в F-droid/Github). Причины с рекурсией описаны здесь.

2. $ termux-setup-storage
Этой командой пользователь предоставляет Termux разрешение на «доступ к хранилищу» (обязательный шаг). После предоставления разрешения приложению у пользователя появится доступ из Termux к диску/общедоступным каталогам Android через ~/storage/shared/* и флэш накопителю ~/storage/external-1/. На Android 11 существуют проблемы с правами: требуется повторно отозвать/дать права «доступ к хранилищу»:
* «настройки android» -> «приложения» -> «termux» -> «разрешения»;
* отозвать разрешение на хранение;
* предоставьте разрешение на хранение еще раз.
А на Android 12 Termux не способен в принципе нормально работать.

3. Установка ПО из менеджера пакетов

$ pkg list-all #посмотреть стандартные пакеты в менеджере (альтернатива apt/dpkg). Портированных пакетов >1000, не заблудитесь.
$ pkg update && pkg install python wget curl nano git tsu tor cronie grep htop printf #установить необходимый минимум утилит, другие пакеты выбирать и ставить по мере необходимости.

У Termux имеется приятная особенность угадывания: если пользователь запускает какую-либо утилиту (в т.ч. с опечаткой), которая у него не установлена, но присутствует в репозитории, то юзер получает уведомление «угадывания» в терминале: что похожего имеется в репо и что пользователю нужно доставить.
$ sqget #ввод ошибочной команды
$ pkg show «оно ли это» #получить мета-информацию о пакете

sqget-пакета не существует и Termux пытается угадать, что пользователю требуется.
sqget-пакета не существует и Termux пытается угадать, что пользователю требуется.

Пример решения проблем с обновлением/установкой пакетов.

Если пользователь Termux сталкивается с ошибкой при 'pkg update' обновлении пакетов из коробки (как повезёт), например из-за цензуры в стране, и/или из-за того, что Termux давно не обновлялся на устройстве пользователя (или того хуже имеется проблема с подписями: Termux ранее был установлен с GP и обновлён/переустановлен с F-droid); из-за компрометации ключей разработчиков, то удаление/установка Termux-приложения не поможет (обязательно нужно вычищать с устройства и все установленные termux-сервисы (termux api; termux boot; termux style), а так же очищать кэш и данные приложения перед удалением версии Termux GP). После же обычного удаления приложения часть данных остаётся на устройстве пользователяв, в таком случае проблем не избежать.

Первые три скриншота — описание проблемы обновлений Termux (в данном примере проблема обновлений пакетов навязана пользователю из-за internet censorship). Нижние 2 скриншота — решение: применение команды: «termux-change-repo». Данная команда предоставляет пользователю выбрать альтернативное зеркало репозитория: изменить источник обновления пакетов. Если с каким-либо репозиторием проблемы, то пользователь всегда может его заменить на дублёр с другого хостинга.
Первые три скриншота — описание проблемы обновлений Termux (в данном примере проблема обновлений пакетов навязана пользователю из-за internet censorship). Нижние 2 скриншота — решение: применение команды: «termux-change-repo». Данная команда предоставляет пользователю выбрать альтернативное зеркало репозитория: изменить источник обновления пакетов. Если с каким-либо репозиторием проблемы, то пользователь всегда может его заменить на дублёр с другого хостинга.

$ termux-change-repo
Выбрать получение обновлений (для всех репо, их может быть больше одного) с другого хостинга, которое не цензурируется вашим провайдером (на мой взгляд самое стабильное зеркало репозитория в РФ — это зеркало Termux/Github). Эта проблема и ее решение описана в документации, но как видите некоторые юзеры об этом и не догадываются и регулярно задают одни и те же одинаковые вопросы на профильных форумах (обычно такие пользователи вычисляются по количеству минусов над своим вопросом).

4. Кастомизация Termux (необязательно)

4.1. Стиль
Благодаря Fan-сообществу в Termux имеется множество готовых цветовых тем, а не только белый шрифт на чёрном фоне. Для выбора темы пользователю необходимо скачать с F-droid дополнение к Termux: Termux-Styling. После установки аддона при длительном нажатии на экран в области CLI появится пункт: more --> style. Можно выбирать/сменять из списка любую, приятную для глаз цветовую тему.

4.2. Настройка приветствия и приглашающей строки (необязательно)

На скриншоте приветствие и приглашающая строка Termux. Слева — настройки по умолчанию, справа — кастомные настройки пользователя.
На скриншоте приветствие и приглашающая строка Termux. Слева — настройки по умолчанию, справа — кастомные настройки пользователя.

Для настройки кастомной, приглашающей строки пользователю необходимо описать переменную «PS1» в файле домашнего каталога ~/.bashrc

$ nano ~/.bashrc -$ # ключ «-$» заставляет nano визуально переносить текст на новую строку

HISTSIZE=20000 #сохранять историю команд
        HISTFILESIZE=1000 #размер истории в текущей сессии

        export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S' #отображать дату введённой команды в истории (проверка даты --> $ history)

        PS1="\[\033[1;34m\]┌──\[\033[0m\]\[\033[1;31m\]boss\[\033[0m\]\[\033[;34m\]──[\[\033[0m\]\[\033[1;35m\]\w\[\033[0m\]\[\033[;34m\]]\[\033[0m\]\n\[\033[1;34m\]└─❕\[\033[0m\]" #настройка переменной приглашающей строки как у автора.

        export EDITOR=nano #сделать nano — редактором по умолчанию.

        #«ctrl + o» сохранить; «ctrl + x» выход; $ bash

Для настройки приветствия пользователю необходимо отредактировать файл "/data/data/com.termux/files/usr/etc/motd".
Если у пользователя имеются рут-права, то редактирование файла «motd» из-за общего доступа очень простое, например, с помощью Total Commander  в связке с QuickEdit. Если же рута нет, то
$ nano ../usr/etc/motd #две точки означают подняться на каталог выше из текущей директории.

Всё что пользователь набросает в "motd" каждый раз будет отображаться при запуске Termux. В моём случае с помощью утилиты figlet сгенерировал текст «Код Доступа Рай», добавив строкой ниже смайлики цветных кружков и всё это записал в файл «motd».

4.3. Настройка размера отображения вывода в CLI
По умолчанию Termux отображает 2000 строк, что является невероятно низким значением рендеринга по отношению к мощностям гаджетов. Например, пользователь сильно ограничен при просмотре баз данных, словарей, работой с html/текстами и т.д. Что бы проще было понять проблему её нужно воспроизвести.

Код:
$ seq 2100 #генерация числовых строк от 1..2100 и вывод их на печать. Попробуйте прокрутить CLI до самого верха и вы остановитесь на числе/строке 100 (всё что сгенерировано до числа 100 пользователь не увидит, а увидит строки чисел от 100..2100, вот оно ограничения в 2к строк).

В прошлом году я обратился к разработчикам Termux с предложением расширить ограничения терминала с 2к строк до 5-50к. строк. Проведя тесты, разработчики поддержали предложение и в Termux с v0.114+ доступна пользовательская настройка на рендеринг строк в termux-конфиге.

Код:
$ nano -$ .termux/termux.properties #конфиг, в котором настраиваются некоторые вещи: например, рендеринг строк, клавиши виртуальной клавиатуры, кликабельность ссылок в CLI

terminal-transcript-rows=10000 #отображать в CLI 10к строк вместо 2к (доступно с v0.114+)
        terminal-onclick-url-open=true #понимать url(s) в CLI (доступно с v0.118+).

Парсинг данных​

«Лошадью ходи, лошадью!»

Однажды по пути в командировку мне на глаза попалась свежая chess-news: во время девятой, зимней, недавно завершившейся, партии за звание ЧМ по шахматам среди мужчин 2021г. наш «декабрист» допустил грубейшую ошибку (на уровне «любителя»), повлиявшую и на окончательный итог турнира не в его пользу. Поискав в сети саму партию в чистом виде для импорта/анализа в шахматном движке на своём Android — столкнулся с проблемой: всякие, разные, шахматные сайты/базы требовали регистрацию/авторизацию что бы поработать с данными. Например, на одном таком, русскоязычном, шахматном сайте партия отображалась, но без аккаунта — скачать её было «невозможно». Расшарив ссылку на 9-партию, её все ещё «невозможно» было скопипастить подручными средствами для анализа. Самому же «играть в шахматы, угодя в цейтнот», против сайтов по их правилам я не спешил. Расставив черные и белые фигуры на доске кликнув по тёмно-белому значку Termux на рабочем столе и набрав несколько команд, черным по белому отобразился результат. Беспристрастно проанализировав партию в скором времени движок подытожил: «драма» за доской разыгралась в жарком декабре Дубая на 27 ходу.

curl https://share.chessbase.com/SharedGames/game/?p=GGcui1RiwlsMXUUn49qJYW2loW1DrYRbproL+VX5mtFrtma1XhYxiFD4U+vvB+7P | grep "WCh 2021" -A 12 #чекаю ссылку с помощью curl, ищу данные партии, вывожу 12 строк (охват партии)
Результат — готовая партия для импорта/анализа:
Результат — готовая партия для импорта/анализа:

Загружаю её в open source Android приложение droidfish и включаю анализ.

Погибельно-оборонительный за белых пассивный 27 ход: «пешка c5» вместо контратаки «конь с5/пешка f3» соответствует проигрышу лёгкой фигуры за белых, движок всё видит и отображает преимущество за чёрных в 3 единицы (1 = пешка, 3 = конь/слон. При прочих равных условиях МС должен обыграть гроссмейстера с преимуществом 1-й пешки в 9 из 10 случаев).
Погибельно-оборонительный за белых пассивный 27 ход: «пешка c5» вместо контратаки «конь с5/пешка f3» соответствует проигрышу лёгкой фигуры за белых, движок всё видит и отображает преимущество за чёрных в 3 единицы (1 = пешка, 3 = конь/слон. При прочих равных условиях МС должен обыграть гроссмейстера с преимуществом 1-й пешки в 9 из 10 случаев).

И забавная реакция чемпиона мира, против которого так «дерзко» было сыграно:

К слову, в Termux имеется возможность играть в шахматы прямо в CLI. Пакет для установки: «gnuchess».

$ pkg install gnuchess
$ gnuchess

спойлер gnuchess
Тяжёлая боевая ничья на 45 ходу в ходе троекратного повторения позиции.
                Gnuchess не единственная логическая cli-игра в Termux, под гейм-пакеты выделен целый репозиторий.
Тяжёлая боевая ничья на 45 ходу в ходе троекратного повторения позиции. Gnuchess не единственная логическая cli-игра в Termux, под гейм-пакеты выделен целый репозиторий.

Музыкальный пауза

Являясь поклонником литературного аудио сериала Этногенез (ИМХО, одни из лучших аудиокниг в проекте — цикл про хакеров [1, 2]) намеревался получить всю коллекцию этногенез-музыки, а потом ещё и слушать её прямо в CLI. Сами саундтреки бесплатные и свободно доступны на официальном сайте для скачивания в разделе музыка.

82 музыкальных трека, из которых некоторые просто не качают не вау, а некоторые почему-то повторяются, тем не менее присутствует более насущная и техническая проблема: отсутствует возможность/кнопка «скачать весь проект». Классика: выбор композиции и скачивание по одному файлу, как по итогу — лишних восемьдесят пальцедвижений помноженное на прокрутку и выбор явно повлечёт за собой переутомление и потерю темпа.

Карманный CLI спешит на помощь...

Чтобы проверить с чем именно придется иметь дело, сurl-ом и grep-ом проверяю web-страницу проекта Этногенеза. Разметка страницы простая, набрасываю рабочий bash-код в одну строку для скачивания всех аудиотреков за один присест. Жизнь движение, ставлю «музыкальный поток» на автоскачивание и ухожу на тренировку.

Код:
#Создаю общедоступный каталог «этногенез», в который собираюсь загрузить все аудиотреки:
$ mkdir storage/shared/Download/этногенез
$ cd storage/shared/Download/этногенез

Curl-ом получаю html-страницы, grep-ом ищу все отношения к «mp3»:

curl http://www.etnogenez.ru/music/ | grep '<span><a href="/paid-audio/0/pgg/episode'

Исходя из проанализированных данных полный код на скачку музыки следующий:

mkdir storage/shared/Download/этногенез
        cd storage/shared/Download/этногенез
        curl http://www.etnogenez.ru/music/ | grep '<span><a href="/paid-audio/0/pgg/episode' | awk '{print $2}' | sed 's/href="/http:\/\/www.etnogenez.ru/' | sed s/\"//g | wget -i -

Описание bash-кода.
Curl-ом получаю страницу; grep-ом ищу все отношения к «.mp3»; вижу, что все нужные данные по разделителю «пробел» находятся во втором «столбце», использую awk забирая 2-й столбец; с помощью sed восстанавливаю валидный префикс url-ов всех mp3-треков и отбрасываю кавычки; готовые url(s) саундтреков поочередно отправляются на вход утилите для скачивания wget.

Пошёл процесс скачивания всех 82 аудиотреков.
Пошёл процесс скачивания всех 82 аудиотреков.

Однако, если пользователь не так причудлив чтобы искусно владеть bash-оболочкой, а может всё с точностью на оборот, то задачу с извлечением url(s)/mp3-треков со страницы можно повторить, например, на Python.

Код:
$ pip install beautifulsoup4 html5lib
$ nano parsing_mp3.py

import requests
        from bs4 import BeautifulSoup

        r = requests.get("http://www.etnogenez.ru/music/").text
        soup = BeautifulSoup(r, 'html.parser')

        for link in soup.find_all('a'):
        if ".mp3" in link.get('href'):
        print(f"http://www.etnogenez.ru/{link.get('href')}")

Спарсим данные.
$ python parsing_mp3.py > url && wget -i url #с помощью python извлекаю с web-сайта все url(s) относящиеся к mp3 и сохраняю в файл "url", с помощью wget закачиваю всё что указано в файле "url"

Пошла скачка всех тех же 82 аудиотреков по порядку, а в случае какой-либо ошибки/обрыва линии всегда можно докачать прерванное без излишнего кода.
Пошла скачка всех тех же 82 аудиотреков по порядку, а в случае какой-либо ошибки/обрыва линии всегда можно докачать прерванное без излишнего кода.

Кроме того, с помощью wget (в случаях отсутствия ограничений) можно, например, выкачать весь сайт; отдельный web-каталог или спарсить все изображения, чем не может похвастать какое-либо Android приложение.

wget -U="Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0" -r -k -p -E -nc url #выкачать ресурс
        wget -U="Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0" -r -l=1 -nd -nc -A jpeg,jpg,bmp,gif,png url #спарсить/выкачать все изображения, глубина рекурсии задается ключом -l=цифра

Автоматизация процесса: бэкап, шифрование данных с последующей синхронизацией в облако по расписанию​

Rclone & 7-zip & crontab

Rclone

Данные, которые я постоянно выгружаю (вернее написать: данные которые автосинхронизируются) в облако со своего Android устройства — это зашифрованные бэкапы кэш/приложения.

Бэкап приложений и их данных по расписанию осуществляет приложение OandBackuPX/TB (требуется root). Остальная логика завязана на Termux.
Синхронизация/шифрование берёт на себя «rclone». Автозапуск скрипта по расписанию осуществляется с помощью «cron» в Termux.

Установка и настройка rclone на примере Яндекс.Диска.

Код:
$ pkg install rclone
$ rclone config

Настройка rclone простая: выбор в стиле POSIX:: [y/n/enter/digit] ответив на вопросы (выбирать все действия рекомендую значениями по умолчанию).

Цифрами выбрать Yandex Disk (это может быть любая другая цифра в любой/обновленной версии ПО, например сегодня это цифра - 32). Откроется браузер. Ввести данные авторизации яндекс-аккаунта и вернуться в терминал, где автоподставится ключ. Облако настроено и готово к синхронизации в обе стороны, но такое положение вещей нас не устраивает, нам нужно защищать свои данные в любом случае (примечание — если пользователю не нужно шифровать данные, для последующей выгрузки на диск, то Я.Диск на этом шаге уже настроен и готов к работе).

Чтобы создать отдельный зашифрованный каталог в облаке, необходимо донастроить созданный ранее контейнер: обеспечить шифрование/дешифрование данных на лету.

Код:
$ rclone config #настраиваем простейший конфиг

Настройка конфига

#--> n --> вводим имя (сопоставление шифрованного каталога), если у меня ранее контейнер назывался «yad», этот я назову: yenc (первая буква облака, суффикс от сокращения «encrypt», стоить иметь ввиду на будущее, что короткие имена удобней использовать в этой утилите). Выбрать «Encrypt/Decrypt a remote» --> 10, далее ввести имя и шифрованный каталог (имя до двоеточия обязательно должно = имени создаваемого ранее контейнера: yad) yad:crypt выбрать режим шифрования, их 3 (в зависимости от работы в параноидальных условиях).

1. Encrypt the filenames see the docs for the details.​

2. Very simple filename obfuscation."obfuscate".

3. Don't encrypt the file names. Adds a ".bin" extension only."off".

Использую 3-й вариант, который добавляет к шифрованным файлам лишь расширение «.bin» (остальные варианты обфусцируют имена файлов).

Далее, directory_name_encryption --> «2» (false), далее Password or pass phrase for encryption --> «y» (напечатать пароль, он не будет отображаться в CLI — это не баг, а стандартная защита), далее No leave this optional password blank --> «n», далее Edit advanced config? --> «n». После чего увидите свою конфигурацию (подтвердите её нажав «y»):

[yenc]​

remote = yad:cryptfilename_encryption = offdirectory_name_encryption = falsepassword = *** ENCRYPTED ***

На сколько «сложным» бы не казался rclone его конфиг настройки простой, в затруднительном положении (выбирать все пункты по «default») в крайне затруднительном — RTFM.

Вот пара команд, которые нам потребуются «sync» и «copy».

Обратите внимание, чтобы получить зашифрованные данные с Я.Диска и расшифровать, их нужно указывать просто как «yenc:» (а не «yenc:crypt»):
$ rclone copy yenc: ~home/test #скопирует/расшифрует все данные с облака в каталог test (если в папке «test» имелись какие-либо сторонние данные, с ними ничего не произойдет)
$ rclone sync yenc: ~home/test #аналогично, но уничтожит все сторонние данные в папке «test» (то есть полная синхронизация каталогов). Как всё просто. Да, так просто потерять всё. Пользователю необходимо соблюдать осторожность и внимательность, чтобы случайно не уничтожить сторонние данные. Например, ошибочный ввод:
$ rclone sync yenc: ~home/ #уничтожит все пользовательские данные Termux, синхронизировав зашифрованный «crypt» каталог в облаке c «home» на гаджете нерадивого пользователя

Синхронизация, но в обратную сторону (гаджет --> облако):
$ rclone sunc источник :приемник/каталог #полная синхронизация
$ rclone copy источник :приемник/каталог #синхронизация только выбранных данных

Существуют векторы атак, при которых пользовательская цитадель может не устоять (проблема хранения облачного пароля в открытом виде в конфигурации rclone). Плюсом rclone является то, что он легко настраивается для работы в параноидальных обстоятельствах (зашифровав конфиг/открытый пароль, но потребуется вводить каждый раз пароль разблокировки при синхронизации данных). Из минусов, бэкап-данные дублируются перед шифрованием в облако, излишне нагружая дисковое пространство на устройстве пользователя.

В rclone имеется второстепенно-полезная hash-функция, которая умеет проверять рекурсивно заданный хэш у файлов во всех подкаталогах без «| трубы» и циклов (алогичная утилита hashdeep).

Скриншот Rclone --> Я.Диск.
Скриншот Rclone --> Я.Диск.

7-zip

Если пользователь не желает шифровать данные в облаке с помощью rclone, например, если он находится в обстоятельствах, где нет возможности быстро развернуть rclone (а установить и настроить его нет времени), а данные нужно получить в расшифрованном виде как можно скорее, то на помощь приходит криптостойкий/кроссплатформенный архиватор «7-zip».

Код:
$ pkg install p7zip
$ cd storage/shared/Download
$ 7z u test.7z -pCodeby -mx9 'test' #ключ «u» сообщает, что в архив добавлять/создавать только новые/обновлённые файлы; пароль «Codeby»  (шифрование криптостойкое, т.е хэш из разряда медленных, придерживаясь парольной доктрины хэш не растрескать); «mx9» максимальное сжатие; архивирование каталога «test»

Эта 7z-команда выше удобна, если пользователь настроил автобэкап архива «test.7z» в облако.

В ином случае (ручной бэкап архивов в облако).
Код:
$ 7z u test.7z -pCodeby -mx9 'test' && mv 'test.7z'
$ (date +"%d-%m-%Y_%Hч_%Mм")_android.7z #разница в том, что архив после сжатия будет переименован с новым дата-префиксом: «13-02-2022_10ч_25м_android.7z»

Из плюсов, наглядно видно по имени файла: когда был сделан/обновлён бэкап. Из минусов, с таким именем возникнут сложности с автобэкапом; такие архивы множатся (вместо быстрой дозаписи одного единственного архива создаются новые копии).

Автовыполнение скриптов по расписанию

В Termux нет полноценной системы инициализации, но кое-что и кое-как работает и позволяет запускать скрипты на автомате:
A) при автозагрузке гаджета;
Б) либо запускать скрипты строго по расписанию, даже когда Termux не в трее.

Для выполнения скриптов при автозагрузке гаджета необходимо установить addon Termux boot, настроив простой boot-конфиг. Для другой задачи: автовыполнение скриптов по расписанию у Termux в репозитории имеется пакет «cronie» (местный crontab), который нужно установить и немного подкрутить по причине того, что подчёркнуто выше.

Код:
$ pkg install cronie termux-services
#ребут Termux
$ sv-enable crond #достаточно этот шаг сделать один раз и пользователь в деле
$ crontab -e #настроить выполнение скриптов по расписанию по классике. Например, в исполняемом "скрипт.sh" первой строкой достаточно указать сокращенный путь: "#!/bin/bash" и не забывайте про раздачу прав: "chmod +x скрипт.sh"
Быстрая проверка, работает ли "демон"
$ pidof crond

Пользователям с агрессивным энергосбережением стоит добавить все приложения Termux в исключение: «ограничения работы в фоновом режиме» в настройках своего Android.

Быстрый check автоматизации процесса

Код:
$ nano -$ срипт.sh

#!bin/bash
        mkdir storage/downloads/Habr #создать пустой каталог в общедоступном месте

$ chmod + x срипт.sh #разрешаем выполнение скрипта
$ crontab -e #создаём задание: каждую минуту автоматически создавать папку «Habr» в общедоступном каталоге «Downloads»

*/1 * * * * bash /data/data/com.termux/files/home/скрипт.sh #«ctrl + o» сохранить; «ctrl + x» выход из nano; «ctrl + d» выход из Termux

Любым файловым менеджером проверяем общедоступный каталог «Downloads» и ищем папку «Habr», удаляем её, но в течение минуты она снова появится, что сигнализирует о том, что скрипт работает на автомате, а значит можно приступать к написанию сценариев реальных задач.

Если пользователь не скачивал termux-boot, если у пользователя агрессивное энергосбережение, то в шторке Android/Termux есть функция «wakelock» (пытаться запрещать переходить гаджету в глубокий сон).

Бэкап Termux

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

Проверка сколько места занимает настроенная Termux-среда. Код:
$ cd ../../ && du -sh #подняться на два каталога выше и измерить пользовательские и системные пакеты Termux

>>>4.1G

$ pkg list-install | wc -l #количество установленных пакетов

>>> 307

Если у пользователя отсутствуют root-права, то авто/бэкап всей среды делается по мануалу.

Программирование на Android

Уметь ловко писать сценарии на bash хороший навык, но ограниченный. В Termux репозитории имеются пакеты языков программирования (ЯП), например, python, phpperlruby, а так же scalaelixirjavagorustbrainfuck. Давайте напишем нашу однофункциональную программу на всех вышеперечисленных языках, которая поприветствует пользователей Хабра.

Код:
$ pkg install python golang elixir php rust perl ruby scala brainfuck #установка ЯП, bash/java уже предустановленные среды

Пруфы. Успешное выполнение программ на всех вышеперечисленных ЯП.
Пруфы. Успешное выполнение программ на всех вышеперечисленных ЯП.

Хорошие новости: можно обучаться и практиковать/поддерживать навыки владения ЯП прямо с гаджета, например, проходя курсы программирования по Python на Stepik, решая задачи где бы ты не находился.

В реальности же имеются технические ограничения. Например, на Python «нельзя» писать и запускать ПО, требующего многопроцессорного параллельного вычисления напрямую в Termux (параллельные вычисления на нескольких ядрах CPU, не путать с многопоточностью (и не касается, например СИ-программ)). Скрипты, которые размашисто потребляют ОЗУ, несмотря на избыточно-свободную память могут аномально снижать скорость вплоть до замирания. Простой пример воспроизведения проблемы на Python с распараллеливанием кода на CPU(s).

Код:
$ python

import concurrent.futures as pool
        e = pool.ProcessPoolExecutor(max_workers=2, mp_context=None, initializer=None, initargs=())
        #Приведёт к следующей ошибке:
        #>>>raise ImportError("This platform lacks a functioning sem_open" + ImportError:
        #This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.

По той же причине не встанет, например, и библиотека NumPy и импортирующее её ПО:
$ pip install numpy #установка не завершится и приведёт к ошибке

Но если очень надо....
Вмешаемся в сам интерпретатор Python, заменив многопроцессорные параллельные вычисления на многопоточные.

Код:
$ nano ../usr/lib/python3.10/multiprocessing/synchronize.py
заменяем ~28 строку:

from _multiprocessing import SemLock, sem_unlink

на

from threading import Lock

В таком случае можно запускать параллельные вычисления в потоках, а не процессах.

Пруф, библиотека numpy установлена и работает!
Пруф, библиотека numpy установлена и работает!

Proot-distro

Компромисс. Если пользователь располагает достаточно свободным дисковым пространством (±10 Гб) на своем гаджете, то он может установить в Termux один из дистрибутивов GNU/Linux (например, termux-ubuntu и п.д.).

И запускать не только скрипты, требующие распараллеливания кода на CPU(s), но и юзать GUI-софт, например, Gimp.

Proot-distro, метафорично выражаясь — это сила Temux и ни NetHunter-у и ни Andrax далеко им всем сейчас. Вся Termux-стихия заключена в 4-х строчках ниже, но обойдя одни ограничения, обязательно натыкаешься на другие (overkill abstractions).

Код:
$ pkg install proot-distro
$ proot-distro list
$ proot-distro install ubuntu
$ proot-distro login ubuntu

Сравнение пакетов​

mutt & smtplib

Для работы с электропочтой в Termux имеется пакет: mutt.

Код:
$ pkg install mutt
$ nano ../usr/etc/Muttrc #редактирование конфига в CLI/nano для тех у кого не рут прав
$ mutt #запуск

Скриншот: входящие письма на Яндекс почте.
Скриншот: входящие письма на Яндекс почте.

Работа с email требуется, например тогда, когда произошло какое-либо событие, и в случае успеха или ошибки автоматическая отправка репорта на email. Я не могу похвалить или раскритиковать mutt не предвзято т.к. пользуюсь в подобных скрипто-делах Python с библиотекой smtplib, которая работает стабильно и без нареканий.

Сравнение пакетов: html2tetx* vs links

А вот пример, когда сторонний софт перспективнее местного. В Termux имеется в наличии пакет «html2text», который позволяет выводить очищенные от тегов web-страницы в CLI. У данного пакета имеются нюансы с автовыбором кодировки: например, русскоязычные символы отображаются кракозяброй и на мой взгляд не самое лучшее форматирование текста. В Python имеется альтернативный пакет с тем же названием и аналогичным функционалом, но ИМХО, разработкой на порядок выше. Сравним эти два пакета от разных разработчиков написанных на разных языках, но выполняющих одну и ту же функцию (примечание — html2text популярные утилиты и представлены на многих ЯП, не только на Python и Perl).

Код:
$ pkg install html2text #установка из репозитория Termux
#тесты
$ pip install html2text #установка из репозитория (каталог ПО Python)
#тесты

Запуск разных html2text-пакетов на примере обработки одной и той же русскоязычной статьи:
$ curl https://habr.com/en/post/488432/ | html2text

Выхлоп утилит на одной и той же статье: слева — пакет html2text из репозитория Termux, справа — python пакет html2text. В данном случае наблюдаем, что python-пакет по умолчанию верно определяет кодировку, а для нормального отображения русскоязычного текста при работе с пакетом из репозитория Termux необходимо явно указывать флаг кодировки, например, «-from_encoding windows-1251»; «-from_encoding utf-8».
Выхлоп утилит на одной и той же статье: слева — пакет html2text из репозитория Termux, справа — python пакет html2text. В данном случае наблюдаем, что python-пакет по умолчанию верно определяет кодировку, а для нормального отображения русскоязычного текста при работе с пакетом из репозитория Termux необходимо явно указывать флаг кодировки, например, «-from_encoding windows-1251»; «-from_encoding utf-8».

Альтернативный, возможно даже более удобный, способ получить текстовую версию web-страницы очищенную от тегов — это использовать cli-браузер, например, links.

Код:
$ pkg install links

$ links # «g» открыть url --> файл --> Сохранить форм. документ

CLI-браузер links.
CLI-браузер links.

Преимущество cli-браузера перед curl/html2text-пакетами — это гарантия корректного форматирования текста. В links можно сохранить масштабируемый/форматированный текст по любой/заданной ширине, используя легкий жест двумя пальцами по cli-экрану.

Для общего развития просто сравните выхлоп команд на смартфоне, а не на планшете и покажите мне в комментариях. Код:
$ links wttr.in/kolomna && curl wttr.in/kolomna
«Ожидание...»

Yaspeller

Как было выше написано: сторонний cli-git-софт — это не только python-скрипты. Например, установим в Termux полезный для авторов-редакторов npm-пакет yaspeller, написанный на JS русскоязычным разработчиком, который позволяет проверять ru-en орфографию локальных txt-данных, так и данных по url в два касания.

Код:
$ pkg install nodejs
$ npm install yaspeller -g
$ yaspeller https://habr.com/ru/post/647267/ #указываем любой url для проверки ошибок

Скриншот Yaspeller. Yaspeller мгновенно подозревает/обнаруживает орф.ошибки, а в скобках справа предлагает исправления.
Скриншот Yaspeller. Yaspeller мгновенно подозревает/обнаруживает орф.ошибки, а в скобках справа предлагает исправления.

Обычно материалы на портале Хабр считаются в рунете достаточно грамотными и качественными: авторы текстов заботятся о своей репутации, в т.ч. модераторы постоянно следят за статьями. Но иногда там можно встретить и такую жалость, как на скрине. Орфографический анализ yaspeller информирует в целом и о низкой квалификации автора, статью которого, впрочем, сообщество оценило по достоинству: загнав в глубокий минус автора и его материалы.

В моём топ-списке пакетов этот инструмент, возможно, самый популярный (нет, не для того чтобы устроить кому-либо очередную IT-порку, а для поддержания качества собственных материалов).

Снифить, парсить, брутить, дампить, сканить, фишить

В одной жизни Вы - Томас Андерсон, программист в крупной уважаемой компании. У Вас есть медицинская страховка, Вы платите налоги и еще - помогаете консьержке выносить мусор. Другая Ваша жизнь - в компьютерах. И тут Вы известны как хакер Нео. Вы виновны практически во всех уголовно наказуемых компьютерных преступлениях. У первого - Томаса - есть будущее. У Нео - нет.​

Pipal

Следующий инструмент, о котором не стыдно публично сообщить написан на ruby. Вы находите утечки, он рассказывает вам интересные истории.

Возможно, читатели не раз встречали в сети новости о том, что в интернет выложена очередная утечка паролей: «дамп из некоего диджекорп». И разные издания из рук в руки перепечатывали анализ и выводы экспертов не вникая в суть деталей. Давайте немного побудем экспертом и сами проанализируем одну из публичных утечек паролей с помощью Pipal.

Итак, что делает Pipal? Самый простой способ объяснить — выборочно показать вывод, полученный при разборе списка утекших паролей. Я нагуглил список паролей из утечки «...», которую я взял «...» (многоточия проставлены по этическим причинам).

Код:
$ pkg install ruby
$ git clone https://github.com/digininja/pipal && cd pipal
$ ./pipal.rb dump.txt #dump.txt — утечка/словарь содержащий пароли

Скриншот, выборочный анализ данных из утечки.
Скриншот, выборочный анализ данных из утечки.

Из работы pipal видим, что утечка данных внушительная: содержит ~426K утекших паролей и из них ~78% уникальных паролей. По классике самым популярным паролем является пароль «123456», но и встречается он довольно редко менее чем 0,5% от общего дампа. Популярная длина паролей от 6-10 символов и пользователи в основном очень любят использовать простой буквенный пароль в нижнем регистре (33%). На скрине видно и топ 10 базовых слов (это частые слова что-то вроде корней, без префикса и суффикса если такие встречаются чаще остальных). Внешний список (external list) - что-то вроде базовых слов, только их задает сам пользователь на основе мета-информации об утечке БД. Предварительный вывод: высока вероятность реальной утечки данных, а не вброса.

Описательная статистика прежде всего интересна тем шифропанкам, кто работает со словарями и занимается обогащением баз данных.

Продолжая темпу пентеста было бы нечестно не затронуть инструменты и на родном bash.

Фишинг

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

Код:
$ git clone git://github.com/htr-tech/zphisher.git
$ cd zphisher
$ bash zphisher.sh
$ git pull #обновление

Инструмент примечателен тем, что атакующий может отказаться от «ngrock» и не вникать в связанные с ним ограничения чтобы туннелировать фишинговую ссылку.

zphisher в деле.
zphisher в деле.

Использование фишинга на примере Instagram. Ключи команд отсутствуют, атакующий выбирает все действия цифрами: что именно он будет использовать. Выбрав в качестве примера Instagram, а в качестве инициализации туннельный клиент cloudflared, а не ngrock получил на выбор две рандомные, но рабочие фишинг-ссылки. Открыв, например, обфусцированную ссылку на своём устройстве жертва предоставляет атакующему свой ip-адрес. Дизайн страницы Instagram реалистичный (жертве стоило бы обратить внимание на url). И если атакуемый, поддавшись манипуляции и коварству социальной инженерии, введёт свои данные (или рандомные), они тут же будут перехвачены атакующим, а фишинговая страница перенаправит скомпрометированного пользователя на официальный сайт Instagram для авторизации (создав ложное впечатление о том, что юзер просто ошибся при вводе логина/пароля, а повторный ввод логина/пароля авторизует нерадивого пользователя, усилив его предположение об ошибке).

Собираем легендарный инструмент аудит паролей, в основном написанный на Cи — John The RipperPipal

John The Ripper (далее JTR) — это софт для аудита паролей.

JTR хорош по отношению к любому подобному ПО тем (часть wiki опубликована мной), что он может самостоятельно извлекать хэш любого формата с помощью внутренних скриптов *2john. Например, нужно восстановить пароль от своей забытой keepass БД — для извлечения хэша используем keepass2john и т.д.. В Hashcat, например, на большинстве форматов пользователю необходимо уже иметь готовый хэш на руках, а где его брать, или чем извлекать пользователю киберпанкам из Hashcat не интересно, но в сети встречаются дискуссии: когда таких пользователей Hashcat-овцы отсылают за хэшем к JTR. Кроме того, функционал JTR предназначен в т.ч. и для генерации словарей любой сложности со скоростью Си, а само JTR-ядро made in Russia.

JTR компилируется с оглядкой на предустановленные пакеты пользователя, например, если у пользователя установлен пакет «libz/libbz2/libpcap», то он сможет брутить гораздо больше хэшей. Кроме того, для извлечения некоторых хэшей требуется сторонние ЯП, например, python/perl.

Код:
$ git clone https://github.com/openwall/john && cd john/src && ./configure && make -s clean && make -sj4

Несколько нюансов о ПО:

Проведем тестирование на скорость/криптостойкость, например, двух разных архив-форматов: rar vs zip в JTR и разберём предварительные результаты.

Код:
$ ~/john/run/john --test --format=rar5 && ~/john/run/john --test --format=zip

Скрин JTR-1
Скрин JTR-1

1. Оба архив-формата поддерживаются JTR на Android девайсах (то есть можно проводить брутфорс атаку).

2. Оба архив-формата поддерживают параллельные вычисления на всех ядрах CPU. Параметр «с/s real» отображает реальное положение вещей (на моём гаджете 8 ядер): скорость при брутфорсе будет составлять ~150 паролей/с. для rar и 10,6к паролей/с. для zip форматов. Параметр «c/s virtual» отображает скорость брутфорс атаки на одном ядре CPU Если на каком-либо хэше с/s real = c/s virtual, то это означает, что параллельные вычисления на CPU для данного формата не поддерживается JTR-ом, и брутфорс такого рода хэшей будет задействовать лишь одно ядро CPU.

3. Из скрина видим, что rar-архив криптостойкий по сравнению с zip-архивом. В целом хэш из разряда медленных и растрескивать его целесообразно разве что на коротких цифровых паролях или обладая достаточно-большой мета-информацией о пароле: сведя к минимуму всевозможные комбинации.

Простая математика брутфорса.
Например, гарантированное время восстановления пароля для rar архива с паролем «6948» ~= (10^4/150) = 67c. А что если мы обладаем меньшей мета-информацией о пароле, например, мы предполагаем, что пароль цифровой, но может иметь длину не строго 4 знака, а от 1-4 цифр в таком случае, гарантированное время восстановления увеличится на 10% ~= (10^4/150) +(10^3/150) +(10^2/150) + (10^1/150) = 74с. Время выросло, но с такими подобными/предварительными данными мы просто «обязаны» атаковать подобные криптостойкие форматы. А вот, например, буквенно-цифровой пароль длиной от 1-4 символов в нижнем регистре мы сможем сбрутить лишь в диапазоне до 3.5ч. (36^4/150) +(36^3/150) +(36^2/150) + (36^1/150).

Расчет: 26 букв + 10 цифр = 36, степень - длина пароля, 150 - перебор хэшей в сек. на всех 8 ядрах CPU. Для батареи гаджета такое время работы CPU на всю катушку явно критическое, но как обычно в подобных делах можно проявить хитрость и «упорство». Возможно, некоторые читатели сразу подумали об искусственном охлаждении девайса на подзарядке в холодильнике, но финиш можно растянуть, контролируя нагрев батареи с прерыванием и последующим возобновлением атаки, и JTR поддерживает данную функцию («ctrl + c» прервать атаку, «john -restore» - продолжить атаку с места прерывания).

Кроме того, в GNU/Linux имеется пользовательская поддержка: настройка ограничений загрузки процессора для любых операций (OMP_NUM_THREADS и taskset).

Код:
$ OMP_NUM_THREADS=3 ~/john/run/john hash #данная команда разрешает использовать JTR на все 100% только 3 ядра из 8, что в перспективе снизит нагрузку на батарею, но замедлит растрескивание хэша

Аналогична и манипуляция:
$ taskset -c 0,2,7 ~/john/run/john hash #данная команда заставляет JTR использовать CPU 3/8 ядер (первое; третье и восьмое ядра, т.е. контроль утилизации ресурсов предоставлен на выбор пользователя)

Давайте наконец-то сбрутим наш пароль подтвердив, вышеизложенные теоретические расчёты на практике.

Код:
$ ~/john/run/rar2john storage/shared/Download/test.rar > hashrar #извлекаем хэш
$ ~/john/run/john --incremental=Digits -max-len=4 hashrar #брутим хэш rar архива «test.rar» (сообщаем JTR, что пароль исключительно цифровой от 1 до 4 символов)

Скрин JTR-2
Скрин JTR-2

Из скрина JTR2 видим, что JTR разогнался и показал свою ярость, перебирая пароли ~ на 7% быстрее чем в тестах, а пароль «6948» был восстановлен за 38с. то есть в рамках (теоретически рассчитанного выше) гарантированного диапазона расчётного времени: 74с.

Но пользователь человек с интеллектом, а не алгоритм машины, заученные шаги ему не помогут, если неизменно полагаться исключительно на тесты JTR, хотя мы и видим как они важны. На скрине JTR1 в тестах кроме архивов видим и хэш «telegram» (примечание: добавил Tg для сравнения, формат telegram в JTR - это local code telegram, защитный pin/pass на Android; Windows и GNU/Linux desktop программах). Судя по скрину тест JTR информирует нас о том, что хэш telegram из разряда медленных/криптостойких (скорость перебора 417 паролей/с.). Это не совсем так. Хэш telegram-a криптостойкий лишь для Telegram-программ на OS Windows и GNU/Linux, а на Android-е local code — это «пустышка» и его реальная скорость перебора ~составляет не (417 паролей/с., а космические 1.11млн. паролей/с.).

Давайте восстановим цифровой и буквенный «pin/pass пустышки» на Android-Telegram, оценив энергозатраты и сравним с тестами.

Код:
# Пользователю необходимо задать pin/pass в Telegram на своем рутированном Android-устройстве, далее:
$ ~/john/run/telegram2john.py userconfig.xml > hashtelegram #извлекаем хэш из «/data/data/org.telegram.messenger/shared_prefs/userconfing.xml»
$ ~/john/run/john hashtelegram --mask=?d?d?d?d #запускаем брутфорс атаку

Команды аналогичны и для pass local code, изменяя маску/словарь.

Скрин JTR-3
Скрин JTR-3

Из скрина JTR-3 видим, что любой pin (в данном примере pin «7596») восстанавливается мгновенно, а буквенный пароль в нижнем регистре на примере пароля «codeby» восстановлен за 2м.13с., что соответствует гарантированному времени восстановления пароля при брутфорсе (и в тоже время противоречит JTR-тестам).Р асчет диапазона гарантированного времени восстановления пароля составлял: (26^6/1_100_000/60) ~= 4.5мин.

Для сравнения, если бы ваши данные хранились не в Tg, а в любом другом защищенном контейнере, например в rar, то на брутфорс пароля «codeby» при прочих равных обстоятельствах потребовалось бы гарантированное время восстановления ~24суток.

Обратите внимание, что хэш local code telegram для брутфорса на Android доступен пользователям с рут-правами по пути:
"/dat/data/org.telegram.messenger/shared_prefs/userconfing.xml", а JTR попросит доставить крипто-python-пакет.

Пример из жизни: однажды мне в лс написал читатель с просьбой о помощи восстановить свой local code telegram, доказав в суде свою непричастность.

Но упомянутый читатель получил отказ в услуге, никто не готов/не может написать скрипт «_iphone2john» для извлечения хэша с яблочных устройств (они же все дорогостоящие для киберпанков).
Но упомянутый читатель получил отказ в услуге, никто не готов/не может написать скрипт «_iphone2john» для извлечения хэша с яблочных устройств (они же все дорогостоящие для киберпанков).

На сколько целесообразно и актуально проводить брутфорс на гаджете, надеюсь для читателей стало чуть более очевидным.

Хотя, стоп, стоп, стоп! А как же без скрипт-кидди классики: вардрайвинга? Совершенно верно — никак.
Рассмотрим вторую из двух частей атаки, которая отработает на любом гаджете: сравнив брутфорс wifi-рукопожатия с помощью JTR и с помощью aircrack-ng.

Восстановление wifi-пароля с помощью JTR

Никаких чисток захваченного рукопожатия, якобы ускоряющих атаку, не проводим. Эта чушь, которую новички продолжают черпать с одного источника — не актуальна. Кроме того, нет необходимости в конвертации стандартного cap-формата рукопожатия в индивидуальные форматы (извлечение хэша засчитываем, как стандартную операцию, а не конвертирование).

Код:
$ ~/john/run/wpapcap2john storage/shared/Download/test/test_wifi.cap > hand_wifi #извлечение хэша
$ ~/john/run/john -w=storage/shared/Download/test/word.txt hand_wifi #атака по словарю на извлеченный хэш

Пруф. Пароль в JTR успешно восстановлен. (Примечание — JTR не брутит найденные пароли повторно, чтобы снова брутить один и тот же пароль, необходимо очистить файл ~/john/run/john.pot).
Пруф. Пароль в JTR успешно восстановлен. (Примечание — JTR не брутит найденные пароли повторно, чтобы снова брутить один и тот же пароль, необходимо очистить файл ~/john/run/john.pot).

Восстановление wifi-пароля с помощью aircrack

Aircrack в репозитории багный и если не запускается после установки, то нужно пролечить: переименовать "/data/data/com.termux/files/usr/lib/libaircrack-ce-wpa-1.6.0.so" > "libaircrack-ce-wpa.so".

Код:
$ pkg install aircrack-ng #предполагается, что у пользователя установлен root-repo и имеются рут права.
$ head -n 15000 storage/shared/Download/test/word.txt | aircrack-ng -w - -e Ragnar storage/shared/Download/test/test_wifi.cap

Пароль восстановлен и в Aircrack.
Пароль восстановлен и в Aircrack.

Я трижды, дважды, десять не рекомендую пользоваться в принципе aircrack-ng из-за его багов, которые представлены сообществу как фичи. А много ли хэш-форматов поддерживает JtR? Много:
$ ~/john/run/john --list=formats | wc -l

>>> 506 formats (149 dynamic formats shown as just "dynamic_n" here).

Но, как написал выше о хэшах для JTR: некоторые не оптимизированы, некоторые с багами, некоторые требуют perl-настроек подобного.По итогу, JTR — это лучшее, что есть на Android устройствах в своей области для растрескивания хэшей.

OSINT в Termux

Читая комментарии на Хабре, я обратил внимание на активность «подозрительных аккаунтов»: эти аккаунты объединяла, некая на мой взгляд, закономерность:: во-первых, они имели сходные nickname(s) (k30; k32...), во-вторых, были подписаны на топики «сделай сам». Я решил проверить популярность k-аккаунтов над другими подобными аккаунтами, например, b-аккаунтами на дистанции в 111 учёток т.е k0, k1..k99. Для этого использовал инструмент разведки по нику — Snoop Project.

pkg install python libcrypt libxml2 libxslt git
        pip install --upgrade pip
        git clone https://github.com/snooppr/snoop -b snoop_termux
        cd ~/snoop
        python -m pip install -r requirements.txt && cd

        john/run/john -min-len=1 -max-len=3 --mask=k?d?d --stdout | sort -n -t "k" -k2 > k-аккаунты #выше я писал, что JTR в т.ч. умеет генерировать словари (альтернатива crunch). Генерирую словарь из 111 к-аккаунтов (почему не 100, первые 10 аккаунтов имеют вид k1 и k01...)
        john/run/john -min-len=1 -max-len=3 --mask=b?d?d --stdout | sort -n -t "b" -k2 > b-аккаунты# прошу snoop прочекать все 111-аккаунтов на порталах «Habr» и «Codeby»

        python snoop.py -s habr -u k-аккаунты
        python snoop.py -s habr -u b-аккаунты
        python snoop.py -s codeby -u k-аккаунты
(Первые верхние два скрина слева) из полученных данных видим преобладание k-аккаунтов над b-аккаунтами ~в 2 раза! Третий скрин — k-аккаунты на Codeby, как русские на мариенплац. Нижние два скрина — отображение последовательного скопления k-аккаунтов в основном в диапазоне от 10-40. Если отбросить все теории заговора, предполагаю, что популярность k-аккаунтов над другими подобными аккаунтами (я прочекал и другие алфавит-аккаунты) связана у пользователей с фильмами (с вертолётами и субмаринами).
(Первые верхние два скрина слева) из полученных данных видим преобладание k-аккаунтов над b-аккаунтами ~в 2 раза! Третий скрин — k-аккаунты на Codeby, как русские на мариенплац. Нижние два скрина — отображение последовательного скопления k-аккаунтов в основном в диапазоне от 10-40. Если отбросить все теории заговора, предполагаю, что популярность k-аккаунтов над другими подобными аккаунтами (я прочекал и другие алфавит-аккаунты) связана у пользователей с фильмами (с вертолётами и субмаринами).

Metasploit

Иди за белым кроликом...

Одним из самых популярных true_инструментов у безопасников является Metasploit, но в местном репозитории он всё: false (кстати, как и sqlmap).

Вот скрин с избитой Termux-wiki страницы посвященной инструменту.

Нет, это не wiki-вандализм, вот официальная позиция лиц сопровождающих репозиторий, цитирую переводом:

Не обслуживаем функции взлома, фишинга, рассылки спама, шпионажа и DDoS.Мы не принимаем пакеты, которые служат исключительно деструктивным целям или целям нарушения конфиденциальности, включая, помимо прочего, пентестинг, фишинг, брутфорс, sms/звонки, DdoS-атаки, OSINT.

Немного обидно и за OSINT, вспыхнула в памяти фраза главного судьи по делу pgp в далёкие времена, когда криптография приравнивалась к оружию, а шифропанки испытывали давление:

«Двери сарая открыты и свиньи сбежали».

Установка Metasploit:

$ wget https://raw.githubusercontent.com/gushmazuko/metasploit_in_termux/master/metasploit.sh && chmod +x metasploit.sh && ./metasploit.sh && msfconsole

Metasploit for Termux is running, no problem.
Metasploit for Termux is running, no problem.

Dirb

Dirb — это простой, но чертовски популярный сканер, который почему-то ещё не изгнан из стандартного репозитория Termux. Dirb брутфорсит web-каталоги/файлы на true/false указанного ресурса по словарю, что найдёт то и выведет или сохранит в файл. Автор старой школы разработал инструмент для единомышленников почти 20 лет назад, сам же не замечен в проявлении своей онлайн публичности/активности.

Код:
$ pkg install dirb #установка сканера
$ dirb --help #изучить справку по функциям
$ dirb url #самый простой вариант натравить сканер на какой-либо ресурс

Steghide

Поиграть в CTF со стеганографией в Termux на Android-устройствах пользователю поможет ПО Steghide, которое по качеству выше аналогичного GUI-приложения: отстойного Pixelknot (стеганография которого детектируется со 100% вероятностью).

Код:
$ pkg install steghide

$ steghide embed -cf ./musor/1.jpg -p pass123 -ef ./musor/secret.txt #зашифровать файл secret.txt паролем «pass123» и спрятать текстовый документ в фотографии без намёка на его существование
$ steghide extract -sf ./musor/1.jpg #извлечь секрет из фото

Бесследная проверка существования email

Давайте ощутим азартные эмоции нетсталкеров/владыки OSINT-a: проверив за 50 секунд существует ли у Habr-a почта, например, на Яндексе и Protonmail без отправки писем и лишних следов активности (относительно Habr-a).

Для анализа разведданных нам понадобятся два инструмента: Dig в связке с Netcat, которые присутствуют в репозитории Termux.

Код:
$ pkg install dig netcat-openbsd
$ dig protonmail.com MX

<<>> DiG 9.16.11 <<>> protonmail.com MX;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35040;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;protonmail.com. IN MX

;; ANSWER SECTION:​

protonmail.com. 315 IN MX 10 mailsec.protonmail.ch.protonmail.com. 315 IN MX 5 mail.protonmail.ch.

Нас интересует ANSWER SECTION с наименьшим (желательно) MX (5): «mail.protonmail.ch».

Подключаемся к Protonmail для отправки писем, по факту устанавливаем соединение только ради завладения метаинформацией о почте:
$ nc mail.protonmail.ch 25
#сервер вернул статус кода 200+, всё хорошо
$ HELO aria.ru #откуда
$ mail from:<termuxsupersoft@aria.ru> #и кто мы такие
#сервер вернул статусы кодов 200+, всё хорошо
#запрашиваем информацию об интересующих нас email(s)
$rcpt to:snoopproject@protonmail.com
$rcpt to:habr@protonmail.com
$rcpt to:hosebarero@protonmail.com
Сервер возвращает статусы:
«200+» почта существует
«500+» почта не существует

Как видим из скриншота у меня и у Habr-a имеется почта на Protonmail, а вот hosebarero ещё не обзавелся защищённой почтой на Швейцарских мощностях.
Как видим из скриншота у меня и у Habr-a имеется почта на Protonmail, а вот hosebarero ещё не обзавелся защищённой почтой на Швейцарских мощностях.

Аналогично проверяем и почту на Яндексе без жертв и выкрутасов.

OpenSSH

В Termux имеется полноценный ssh-клиент. Установим соединение со своим сервером во Франкфурте-на-Майне.

Код:
$ pkg install openssh $ alias connectsserver='ssh -i 'key.pem' login@ip -p 4001'#создадим alias, чтобы не вводить длинную команду каждый раз на подключение к серверу, все алиасы хранятся в «~./bashrc»
$ bash#чтобы alias сразу стал активным без перезапуска приложения
$ connectsserver#подключаемся и производим любые операции на сервере

Обратите внимание: в качестве первой линии обороны у меня на сервере изменён стандартный 22-й порт на 4001, но боты всё равно ежедневно пытаются взломать защиту и ворваться в мою цитадель.

Давайте проверим наш 4001 порт в легендарном nmap сканере, который занимает своё достойное место среди остальных пакетов Termux.

Код:
$ pkg install nmap $ nmap -p 4001 IP -Pn -A #сканирую IP/порт 4001 и пытаюсь определить, что на нём крутится
$ nmap 192.168.0.1/24 -sP #заодно и быстро проверю свою локальную сеть на подключенные устройства

Из скриншота (частично закрашенного для пущей важности ) видим, что портированный nmap сканер в Termux рабочий и информирует нас о том, что на сервере на открытом 4001 порту крутится ssh, а в локальной сети присутствует 5 устройств. Всё честно, продолжаем...

PDFTK

Этот пакет позволяет работать с документами в pdf-формате (обрезка, удаление страниц, склейка, что для хацкера — заурядно). Выделяющаяся функция в pdftk — это сброс пароля на права у pdf-файла: разрешение на печать; копи-паста текста; редактирование.

Код:
$ pkg install pdftk $ pdftk protec_doc.pdf input_pw output defen_doc.pdf #пароль на редактирование сброшен (не путать с паролем на открытие файла)

Из минусов, размер пакета pdftk тянет зависимость cups под 300Мб, что как бы неприемлемо много. Это не единственный софт, который «не уважает» старозападную защиту PDF-формата. Например, в OS GNU/Linux стандартный просмотрщик Evince просто игнорирует защиту прав на pdf документах, позволяя пользователю скопировать текст/распечатать документ, как-будто он и не был защищён.

​Визуализация данных

Povray — это непростой для работы пакет: cli-программа трассировки лучей, проще говоря, создание графики на основе данных. Созидать Огни святого Эльма мне не по плечу, но кое-чему я всё же научился: единственное применение povray-волшебства — это обработка gps/локации. На соревнованиях в которых участвую — оживляю ландшафт.

Код:
$ pkg install povray $ povray data.pov #data pov конфиг/данные, которые содержат gps-координаты; координаты затенения/осветления; srtm-высоты и другие параметры

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

Povray «оживил» osm-ландшафт (3d): низменности и высоты теперь видны на основе реальных srtm-данных, зеленным наложен gps-маршрут (старт и финиш), синим контрольные точки (пункты питания на соревнованиях). А уж как потрясно петлять gps-треком среди 3d-гор воодушевляет автора на созидание отдельной статьи для спорт-сообщества.

Gnuplot

Одним из любимых инструментов у аналитиков для работы с графиками, который не требует навыков программирования, является ПО gnuplot.

Код:
$ pkg install gnuplot $ gnuplot #откроем среду
$ set terminal png size 1440, 720 #настроим будущее разрешение графика под смартфон
$ set output "storage/downloads/graph.png" #сохраним будущий график в общедоступном каталоге
$ plot sin(x) #простейший пример построения графика

В каталоге «Download» появится картинка синус: graph.png.

Plantuml

В начале статьи я приложил блок-схему «Код Доступа Termux» и написал, что она была создана в Termux. Приложенная блок-схема была создана в Plantuml.

Код:
$ pkg install plantuml
$ nano storage/shared/Download/plan

Код блок-схемы
# Habr
                @startmindmap
                scale 1480*740
                title Создано в Termux
                *[#lightgreen] **Termux**
                ** Мультимедиа
                ***_ mp3splt
                ***_ cmus
                ***_ cava
                ***_ ffmpeg
                ***_ <s>youtubedr</s> => yt-dlp
                ***_ cava
                ** Парсинг данных
                ***_ curl..wget
                ***_ примеры
                ** Автобэкап данных
                ***_ rclone
                ***_ 7-zip
                ***_ cronie
                ** Работа с письмами
                ***_ mutt
                ** OSINT
                ***_ check_emails(s)
                ***_ check_account(s)
                left side
                ** Программирование на Android
                ***_ python..brainfuck
                ** Сравнение пакетов
                ***_ html2texl*
                ***_ links
                ** Пентест
                ***_ снифинг
                ***_ скан
                ***_ брутфорс
                ***_ дамп
                ***_ фишинг
                ** Системное администрирование
                ***_ chattr..nethogs
                ** Пользовательское ПО
                ***_ yaspeller
                ***_ povray
                ***_ gnuplot
                ***_ plantuml
                ***_ steghide
                ***_ gpg
                ***_ tor
                ** <&people>Установка и настройка среды
                ***_ pkg...proot-distro
                @endmindmap

$ plantuml storage/shared/Download/plan #в каталоге “загрузки” появится наша блок-схема

Руководство Plantuml на RU.

Проверка цифровых gpg/pgp подписей в CLI

Для проверки цифровых подписей пользователю необходимо иметь установленный gnupg пакет; data (данные, которые требуется проверить); data.sig (подпись data-данных) и публичный ключ того, чьи данные мы проверяем.

pkg install gpgv gnupg
        curl -s https://raw.githubusercontent.com/snooppr/snoop/master/PublicKey.asc | gpg --import - #импортируем публичный ключ «PublicKey»
        gpg --output .gnupg/test-key --export 076DB9A00B583FFB606964322F1154A0203EAE9D #сохраняем ключ по отпечатку именно в каталог «.gnupg», это особенность Termux ссылаться на ключи в этом месте
        gpgv --keyring test-key storage/downloads/file.sig storage/downloads/file #проверяем подписанные данные, сначала указываем ключ, далее подпись и данные
Аллилу е-е-еа, из скриншота видим, что подпись успешно прошла проверку/валидная, данные не повреждены и не скомпрометированы.
Аллилу е-е-еа, из скриншота видим, что подпись успешно прошла проверку/валидная, данные не повреждены и не скомпрометированы.

Защита данных от случайного и явного удаления или редактирования (требуется root)

Видел на различных форумах, как пользователи часто жаловались на проблему: когда сеть вдруг переставала работать в Parrot и пд. дистрибутивах. Проблема иногда заключается в перезаписи динамического файла: "/etc/resolv.conf" после перезагрузки ПК. Чтобы решить эту проблему достаточно повесить бит неизменяемости на resolv.conf и файл больше не будет никем перезаписан до снятия бита. Так как Android — это часть Linux, то попробуем повесить бит из Termux на данные которыми мы дорожим, например, фотки/кэш приложения/любая_data чтобы случайно их не удалить, например, в ходе автоочистки каким-нибудь ПО/скриптом/экспериментом.

Код:
$ tsu
$ chattr +i storage/downloads/test/Прослушка.\ Перехват\ информации.pdf #повесил защитный бит на pdf-документ

Пробуем удалить pdf-документ

Работает! А то..
Работает! А то..

Снять защитный бит:
$ chattr -i storage/downloads/test/Прослушка.\ Перехват\ информации.pdf #после этой операции файл может быть удален/перемещён

"Сhattr" поддерживает рекурсию и можно защищать целые каталоги с вложениями. Я нахожу эту фишку одной из самых полезных в Termux и активно её использую.

Скачивание видеороликов с YouTube

Для скачивания видеороликов с самого популярного видеохостинга у Termux имеется пакет «youtubedr».

Код:
$ pkg install youtubedr #установка пакета
$ mkdir storage/downloads/ролики #создание каталога «ролики»
$ cd storage/downloads/ролики # переход в каталог, куда будет скачан ролик
$ youtubedr download url_ролика #закачать ролик

Под конец 2021 года скорость закачки youtube-dl и производных форков обрезана до 70 Кб/с. Популярнейший проект кажется заброшен самим разработчиком. Проблема объединяющая форки описана здесь. Кратко — разработчик наконец-то занялся своими бытовыми делами. Киберпанки не любят мериться с потерями (особенно с тем свободным ПО, которое являлось резонансным) и создают рабочие форки. Следуем за тенденциями: форк yt-dlp с которым на сегодняшний день всё в полном порядке.

Код для Termux немного отличен от кода установки на Github:
$ wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O ../usr/bin/yt-dlp #скачиваем скрипт
$ chmod a+rx ../usr/bin/yt-dlp #разрешаем его исполнение
$ bash $ yt-dlp url_ролика

Синтаксис у скрипта схожий с прошлыми форками, однако ролики скачиваются с существенным быстродействием.
Синтаксис у скрипта схожий с прошлыми форками, однако ролики скачиваются с существенным быстродействием.

Создание gif в Termux

В статье читатели видели GIF созданные в Termux. Вот как легко создавать анимацию в CLI.

pkg install ffmpeg #установка популярнейшей кроссплатформенной библиотеки для редактирования/работы с аудиовизуальными данными
        ffmpeg -i "/storage/emulated/0/Movies/chess.mp4" -r 15 -vf scale=480:-1 "/storage/emulated/0/Movies/chess.gif" # указываем входной видео-файл, выбираем качество 15 кадров/с, понижаем разрешение по ширине до 480p, а по вертикали автоподгон, сохраняем в gif. chess.gif — gif из второй части данной статьи

Нарезка mp3

Меня до сих пор непритворно удивляет ситуация с отсутствием нужного миру приложения для OS Android: на всех OS кроме Android имеются GUI-инструменты для того чтобы нарезать один большой mp3-файл на множество мелких с заданными параметрами (например частями по 20 мин. или, например, на 9 частей) Такие big-файлы встречаются всюду, например, аудиокниги в TG одним файлом, лекции и т.д. Я не смог найти ни одного приложения на Android решающих эту простейшую задачу, но нашёл и использовал ту же кроссплатформенную библиотеку на Termux, которая всё может: «mp3splt».

pkg install mp3splt
        mp3splt -S +20 -o +@n storage/downloads/Семинар\ rt.mp3 #нарезка многочасового «Семинар tr.mp3» на 20 частей (можно, например, нарезать не на 20 частей, а нарезать по времени, например, каждую часть по 10мин, а последнюю с остатком)

Аудиомания в Termux

В Termux иногда люблю послушать радиоспектакли/аудио рассказы (онлайн).
Для прослушки музыки/радио в CLI необходимо установить два пакета и графический эквалайзер (необязательный пакет).

Код:
$ pkg install pulseaudio cmus cava
$ cmus #запуск cli-аудиоплеера

Для добавления музыки/радиостанций в библиотеку код:
$ :add sdcard/music_path #разовая операция добавления треков в библиотеку
$ :add url_потока_radio #приятная особенность плеера он умеет воспроизводить онлайн радио потоки (https Вещание)
$ :clear #если что-то пошло не так, например, музыка была удалена или перемещена из music_path, то очищаем библиотеку

Управляется cmus стрелками и клавишей «Tab», один из главных неприятных нюансов у плеера — это проигрывание одного трека и остановка (без автовоспроизведения следующей композиции). Настроить автовоспроизведение на плеере — нажать латинскую заглавную букву «С», удалить радиостанцию — «D».

Для пафосного воспроизведения музыки как на скрине: экран разделён по горизонтали, в верхний его части — плеер, в нижней — пульсирующий эквалайзер код:
$ pkg install screen #установка мультиплексирующего физического терминала между несколькими процессами (аналог Tmux)
$ screen
$ cmus #запуск плеера
"ctrl+a+S" #разделить экран по горизонтали"
"ctrl+a+tab"; "ctrl+a+с" #перейти в нижний экран и активировать его (дальнейшие переключения между верхним и нижним CLI "ctrl+a+tab")
$ cava #запуск эквалайзера

Для обычного воспроизведения аудио код:
$ cmus

Системное администрирование

На Android 9+ разработчики транснациональной корпорации добавили новую функцию: «персональный dns-сервер» (настойки --> сеть и интернет --> дополнительно --> персональный dns-сервер) усилив защиту пользователя. Вот пример, как работает Android по умолчанию без активации «персонального dns».

Код:
$ pkg install tcpdump dnstop #для установки этих пакетов требуется root
$ tsu
$ tcpdump -pni wlan0 53 #снифим запросы dns
$ dnstop wlan0 --> 2 #снифим запросы dns, но более компактно

На скриншоте один и тот же dns-поток, слева — tcpdump, справа — dnstop. CLI-сниферы информируют, что пользователь искал в поисковых системах «Github»; «Codeby» и заходил на их сайты.
На скриншоте один и тот же dns-поток, слева — tcpdump, справа — dnstop. CLI-сниферы информируют, что пользователь искал в поисковых системах «Github»; «Codeby» и заходил на их сайты.

Настройка персонального dns-сервера: настройки --> сеть и интернет --> дополнительно --> персональный dns сервер --> имя хоста поставщика «dns.google».
Настроив персональный dns-сервер — на 53 порту будет чисто, то есть снифить трафик уже не получится. Проэкспериментируем это утверждение.

Вся защищенная DNS-движуха отображается уже не на 53 порту, а на 853 порту, что говорит нам об использовании пользователем DoT.

Надеюсь вы поняли о чём речь и настроили свой персональный dns-сервер.

Наблюдаем какие приложения активнее всех потребляют трафик

Эй, тореро, жизнь как миг,
Опять звучит трубы призывный зов...

$ pkg install nethogs #требуется root
$ tsu
$ nethogs

В нижнем правом углу играет клип с YouTube, поэтому видим и активность антирекламного YouTube-приложения vanced; параллельно сёрфю в DDG-браузере, ну и в фоне TG высаживает батарею. Такая слабая активность приложений обусловлена тем, что ради экономии заряда батареи я приручил ПО на своём смартфоне (мне помогли root-права + свободная прошивка). Из минусов, в качестве расплаты по классике — куча багов OS, к которым просто подстраиваешься.

Техническая информация о текущем соединении

Код:
$ pkg install wavemon #требуется root
$ wavemon

Запускаем и управляем TOR-сетью

Не так давно я создал подробное видео по настройке и управлению TOR-сетью.

Код:
$ pkg install tor proxychains-ng python && pip install nyx

Расшарить (удалить символ '#') ControlPort 9051 в "/data/data/com.termux/files/usr/etc/tor/torrc"

Пакет tor — служит для запуска соединения пользователя с сетью Tor, пакет nyx - управляет соединением Tor, пакет proxychains направляет выбранные утилиты через сеть Tor. Подробнее что на видео (см. тайм коды под описанием ролика на самом YouTube).

Управляем OS Android на уровне процессов

Завершает обзор данной статьи хедлайнер-пакет: Htop (требует root)

$ pkg install htop

Htop — это системный cli-монитор, позволяющий в т.ч. мониторить, выявлять, уничтожать любые подозрительные и непослушные дочерние/процессы в парку касаний. Из минусов, htop не поддерживает мониторинг нагрузки дисковой подсистемы (iotop), что является одним из важных параметров наблюдения в системе.

Остальные утилиты Termux, которыми я пользуюсь, но не требуют, с моей точки зрения, ревью: nslookuproutediffwhois; traceroute; file; silversearcher-ag.

Некоторые полезности

Код:
создание alias иным способом, отличным от вышеописанного способа.

printf "alias his='history | grep -i '" >>.bashrc
        printf "alias ipls='curl ipinfo.io/ip'" >>.bashrc
        Bash && alias #проверка всех alias в среде

По команде "ipls" пользователь узнает свой внешний ip-адрес, а по команде "his ключ.слово" пользователь узреет все команды которые он вводил в терминал.

$ am start --user 0 -a android.intent.action.VIEW -d content://com.android.externalstorage.documents/document/primary%3Aкаталог%2Fкатлог%2Fфайл%2F #откроет из Termux стандартное приложение просмотрщик файлов перейдя в каталог. Аналогично можно из Termux запускать браузер с переходом по ссылке и п.д...

$ ctrl + d #выход из терминала

Кроме всего вышеописанного, Termux популизирует GNU/Linux среду т.к. в нём немало unix-утилит, что является хорошей тренировочной базой для изучения GNU/Linux пользователями новичками со своего Android девайса. Если после прочтения статьи читатели больше не считают Termux лишь жалкой обвязкой над busybox, то мой план по лоббированию Termux в массы — сработал.

Создано в Termux
Создано в Termux

Статью первоначально написал и опубликовал для портала Codeby (ч1, ч2, ч3, ч4, ч5) под свободной лицензией.

 

на главную сниппетов
Курсы