Как стать автором
Обновить

Код доступа Termux

Время на прочтение62 мин
Количество просмотров150K

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

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

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

Сам Termux весит ~100 Мб, расширяется на Гб, работает на OS Android v7-11. (Примечание — для стареньких устройств на OS Android v5-6 существует бэкап Termux-среды и новость).

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

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

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

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

  • глубоко настраивать средý (флэшка, виджет, стиль, зеркала и конфиги);

  • управлять серверами через ssh;

  • скачивать ролики/отрывки с YouTube;

  • нарезать видео, создавать gif;

  • воспроизводить текст/музыку/радио прямо в CLI;

  • нарезать mp3-бигфайлы (аналогов приложений на Android попросту нет), и склеивать аудиофайлы;

  • редактировать документы;

  • проверять орфографию: как текстовых файлов, так и различных статей по url, например, проверка орфографии статей на Habr-e;

  • генерировать словари различной сложности со скоростью Си;

  • создавать блок-схемы; графики; облако слов и даже 3D-визуализацию;

  • заниматься Data Science на Android-мощностях;

  • тестировать интернет соединение/интерфейс (требуется частично Root);

  • сниффить/сканировать сети (требуется частично Root);

  • запускать и управлять TOR-сетью (deleted);

  • управлять приложениями и процессами в ОС Android (требуется Root);

  • анализировать память;

  • защищать любые данные от случайного редактирования/уничтожения (требуется Root);

  • автоматически шифровать и бэкапить по ночам любые данные в своё облако;

  • чекать username(s) и e-mail(s);

  • проводить аудит безопасности (об опасности сердить скрипт-кидди с их любимыми: «сниффить, парсить, брутить, дампить, сканить, фишить»);

  • работать с электропочтой;

  • изучать UNIX/shell;

  • программировать на Android (в Termux портированы несколько интерпретируемых и компилируемых языков программирования);

  • запускать bash/python/php/npm скрипты в т.ч. в одно касание с рабочего стола;

  • работать с криптографией, стеганографией и цифровыми подписями;

  • парсить данные;

  • и даже запускать GNU-GUI-софт из CLI.

Дисклеймер

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

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

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

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

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

$ pkg list-all #вывести на печать список всех Termux пакетов (альтернатива apt), только в официальном репозитории их > 1.5k, не заблудитесь
$ apt update && pkg upgrade && pkg install python wget curl nano git tsu cronie grep printf coreutils lsof android-tools gawk nodejs #ключевой момент: обновить/установить/расширить необходимый минимум утилит, другие пакеты выбирать и ставить по мере необходимости.

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

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

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

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

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

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

Если повнимательнее присмотреться к доменам у зеркал, то выяснится, что ~50% серверов располагаются не на Швейцарских мощностях и не на островах северной Европы, а в Китае/.cn. Следы ведут к университетам их преподам и волонтёрам. Вероятно, пользователь может испытать смешанные чувства защитной реакции и выбрать оставшееся, нала-ла-ладом дышащее, но в другой локации зеркало репозитория. Зря. Технология подписи отработана десятилетиями. Репозиторий/пакеты Termux подписаны разработчиком, и если, например, в Китайском зеркале: репозитории/пакете появится что-то иное или модифицированное "старшим братом", то синхронизация/установка не пройдёт, а пользователь получит ошибку (примечание — при условии, что приватный ключ/пароль для подписи не были скомпрометированы и не ходили по рукам, например, если они случайно не выкладывались/удалялись с кодом). Иными словами, азиаты с материка посодействовали Termux-проекту больше, чем вы думаете, т.е. держать нос по ветру нужно, но в другом направлении.

Сам Termux свободный и развивается на пожертвования/ресурсы сообщества. Затраты на домены, хостинг, зеркала или драгоценное время не всегда окупаются. И когда в очередной, 13-й раз ты будешь применять команду "termux-change-repo", то не ругайся, а задумайся о поддержке, волнующего, настоящего, киберпанковского IT-проекта.

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

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

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

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

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

$ nano ~/.bashrc -$ #ключ «-$» заставляет nano визуально переносить текст на новую строку. Набиваем файл следующим содержимым:

HISTSIZE=10000 #сохранять историю команд
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» выход из nano.

$ bash #обновим настройки.

Для тюнинга приветствия (один из вариантов) пользователю необходимо отредактировать файл: «/data/data/com.termux/files/usr/etc/motd».
Если у пользователя имеются рут-права, то редактирование файла «motd» из-за общего доступа очень простое, например, с помощью Total Commander  в связке с QuickEdit/Acode. Если же рута нет, то
$ 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, ранее под гейм-пакеты был выделен целый репозиторий.

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

Являясь поклонником литературного аудио сериала Этногенез (ИМХО, одни из лучших аудиокниг в проекте — цикл про хакеров) намеревался получить всю коллекцию этногенез-музыки, а потом ещё и слушать её прямо в 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 -

# а так получить общий размер всех аудиотреков перед загрузкой = 849.09 Мб
curl http://www.etnogenez.ru/music/ | grep '<span><a href="/paid-audio/0/pgg/episode' | awk '{print $5}' | sed s/~//g | awk 'length( $0 ) < 9 {sum += $0} END {print sum}'

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

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

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

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

import requests
from bs4 import BeautifulSoup

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

## Парсинг url(s) аудиотреков
for link in soup.find_all(class_="play ga_track"):
    if ".mp3" in link.get('href'):
        print(f"http://www.etnogenez.ru/{link.get('href')}")

## Предварительный размер аудиотреков        
sum_ = 0
for i in soup.find_all("div", class_="inner_content episode_size"):
    try:
        sum_ += float(i.string.split()[0])
    except:
        pass

print(f"\n{sum_} Мб") #получаем общий размер всей будущей музыки

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

Стоит обратить внимание: если вместо "старого" wget использовать "новый"wget2, то данные будут загружаться не последовательно, а параллельно т.е. с существенным быстродействием.

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

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

cd && mkdir storage/downloads/test
cd storage/downloads/test #будущие, загруженные данные станут доступны для любых приложений в общедоступном каталоге

wget -e robots=off -U="Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0" -r -l 1 -nd -nc -A "*.mp3" http://www.etnogenez.ru/music/ #скачать всю музыку Этногенез, но гораздо медленнее, как если бы "чистый парсинг ручками" продемонстрированный выше
wget -e robots=off -U="Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0" -H -r -l 1 -nd -nc -A "*.gif" url_этой_статьи #спарсить/выкачать все гифки из данной статьи на Хабре, глубина рекурсии задается ключом -l=цифра, ключ "-H" потому что гифки загружены не на Habr, а на Habrastorage
wget -U="Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0" -r -k -p -E -nc url # а так, например, выкачать полностью какой-либо ресурс.

Ещё один из отличных примеров, как спарсить данные:

Просто следите за руками, по утилите 'VisiData' будет ещё описание в статье по тексту ниже.

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

Rclone & 7-zip & crontab

Rclone

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

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

Установка и настройка 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 является то, что он легко настраивается для работы в параноидальных обстоятельствах (зашифровав конфиг и открытый пароль, но потребуется вводить каждый раз pass разблокировки при синхронизации данных). Из минусов, бэкап-данные дублируются перед шифрованием в облако, излишне нагружая дисковое пространство на устройстве пользователя.

Ещё в 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 нет полноценной системы инициализации, как в GNU/Linux, но кое-что и кое-как работает и позволяет запускать скрипты на автомате:
A) при автозагрузке гаджета;
Б) либо запускать скрипты строго по расписанию, даже когда Termux не в трее.

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

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

Пользователям с агрессивным энергосбережением стоит добавить все приложения Termux в исключение: «ограничение работы в фоновом режиме» в настройках своего Android с учётом производителя. Кроме того, в шторке Android/Termux есть функция «wakelock» (пытаться запрещать переходить гаджету в глубокий сон).

Быстрый 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

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

Проверка места, занимаемой Termux-средой.

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

>>>4.1G

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

>>> 307

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

Программирование на Android & Data Science

Классный код, жаль, не работает. & Власть цифры сменится властью над цифрой, и Data Science станет оплотом второго IT-рассвета.

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

Код:
$ 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

В таком случае можно запускать асинхронные задачи в медленных потоках, а не шустрых процессах. Кроме того, доставив ещё пару научных пакетов иjupyter, пользователь превращает свой гаджет в инструмент бога мини-лабораторию.

Скрины обновлёны, пруфы.
Слева — библиотеки numpy/pandas/matplotlib/scipy установлены и работают. 
Справа — мечта дата саентиста: карманная, научная мини-лаборатория, рабочий jupyter-notebook из Termux.
Скрины обновлёны, пруфы. Слева — библиотеки numpy/pandas/matplotlib/scipy установлены и работают. Справа — мечта дата саентиста: карманная, научная мини-лаборатория, рабочий jupyter-notebook из Termux.
(upd. из комментария) установка Pandas

В лс неоднократно просят помочь с установкой "pandas" на свой Termux (хотя в лонгриде я упомянул сопровождающих доп. ПО для Termux не из официального репозитория). Но мои некоторые читатели, закусив губу, продолжают делать неправильно, закидывая меня своими err-скриншотами:

pip install pandas #err...

Именно поэтому для среды Termux имеются специально скомпилированные пакеты от сообщества, сопровождающих научное ПО, — "python-pandas" или, например, "python-scipy" и устанавливать их нужно не через pip, а через pkg и из tur-repo.

pkg install tur-repo
apt update #после чего в 'pkg list-all' увидите pandas
pkg install clang make pkg-config build-essential
pkg install python-pandas #

По умолчанию tur-repo содержит, кроме pandas, другие полезные пакеты, например, версии python от 3.7 до 3.10. Можно поставить одновременно несколько интерпретаторов, например, python3.7 и python3.11, что кстати тоже очень актуально из вопросов даже от опытных пользователей.

А чтобы включить возможную установку вообще всех доп. пакетов из tur-repo, например, хакерский Aircrack, или графический Blender.

nano ../usr/etc/apt/sources.list.d/tur.list
deb https://tur.kcubeterm.com tur-packages tur tur-on-device tur-continuous tur-hacking tur-multilib
apt update

Сloc

На Termux без подвоха заводится прекрасная утилита «cloc», которая подсчитывает пустые строки, комментарии и физические строки исходного кода IT-проектов на многих ЯП. ПО умеет разбирать и парсить архивы, отдельные файлы, целые проекты по каталогам в т.ч. diff-ать/исключать определенные файлы. В качестве примера по фэншую распарсю ПО, которому пару десятков лет и ПО, которому пару лет.

«John». Самый простой способ парсинга — это указать утилите каталог с анализируемым ПО, где по умолчанию выводятся задействованные в проекте ЯП, кол-во файлов, пустых строк, строк с комментариями и строк с кодом, а также их сумма. «Snoop». Понуждаю «cloc» подсчитывать строки иначе: в процентном соотношении.

Код:
$ npm install -g cloc
$ cloc john/ && cloc --by-percent cmb snoop/

Видим, что кодовая база для "монструозного John" обширна. Проще описать все аспекты "малыша Snoop". И так, что же такое Snoop на первый cloc-взгляд и на чём он базируется?

  • Игнорируемые файлы — это бинарные данные (.png/.wav).

  • Cloc умеет считать лишь процент для комментариев и пустых строк, но так как вычисляется общая сумма кода, то пропорцией легко прикинем любой нужный нам параметр (чистые строчки кода): 10279 * 100 ÷ 13769 = 75% кода текст? Нет, 75% кода от всего проекта — это БД, которая строилась несколько лет (БД — в базовой txt-кодировке).

  • Программный код Snoop написан на Python (1593 строки или 11.5% кода).

  • Примечательно то, что в среднем каждая 6-я строка имеет комментарий, т.е. питоновский код открыт и подробно задокументирован.

  • Немного JS/CSS — код для генерируемой вэб страницы с результатами работы ПО.

  • 2 файла Markdown с менее, чем 400 строчками — это ридми на ru-en языках.

  • Несколько DOS/Shell строк кода — это батник и баш с парочкой git-команд для аккуратного обновления софта.

  • И одна YAML строка — ссылка, страница донатов для встраивания на Github.

Ниже в статье я ещё подробно остановлюсь конкретно на этих программах и продемонстрирую "toda la ira vudú" на реальных примерах, "блюдо будет горячим".

VisiData

VisiDataбесплатный, интерактивный, с открытыми исходниками и звёздным git-рейтингом многофункциональный TUI инструмент для работы с табличными данными. ПО поддерживает ходовые xls/xlsx, sql, csv, dta, json, yaml форматы; умеет гладко конвертировать, например, из csv в html; дёргать ссылки и таблицы из web. Слоган ПО заманчив и в техническом смысле хорош:

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

Код:
$ pip install visidata lxml openpyxl xlrd PyYAML
$ vd storage/shared/Download/входной.csv -b -o storage/shared/Download/выходной.html #конвертнуть csv-таблицу в локальный html-файл
$ vd https://habr.com/ru/post/661285/#дернуть все ссылки и таблицы из web.

Слева направо: исходник — статья на Хабре в браузере; таблица из статьи в visidata; все ссылки из статьи в visidata.
Слева направо: исходник — статья на Хабре в браузере; таблица из статьи в visidata; все ссылки из статьи в visidata.

$ vd storage/shared/Download/dump_snoop.csv #открыть файл.

Скринкаст. Пример работы с датафреймом от Snoop: открыл таблицу в csv формате; поработал со строками и столбцами; применял частотную и описательную статистики; фильтровал данные.
Скринкаст. Пример работы с датафреймом от Snoop: открыл таблицу в csv формате; поработал со строками и столбцами; применял частотную и описательную статистики; фильтровал данные.

Наглядный пример. Откройте сайт в браузере, который состоит из динамических таблиц. Это рейтинг/вклад пользователей в карты OSM по Ивановской области и городу невест, который постоянно меняется. Попробуйте прочекать: какое место в рейтинге занимает юзер под ником, например, "Mike25"? Условно, вероятно, вы попытаетесь скопировать всю таблицу через буфер обмена в nano, найти ник и определить строку, но на таких объемах всё просто повиснет (я специально выбрал Ивановскую обл., здесь объемы данных не такие большие и через свои скиллы можно попробовать вычислить рейтинг/место пользователя, но не в задаче ниже).
С VisiData решается очень просто:

vd http://stat.latlon.org/ru/ivanov/latest/users.html
# /mike25 #поиск
# ctrl+g #отобразить номер строки.

Ответ: какое же место в данный момент занимает "Mike25" не по области, а например, по всей РФ? можете написать в комментариях.

Увы, без документации новичкам с ходу не разобраться в ПО (шпоры: раз, два), но можно попробовать подёргать клавиши: [ctrl+h] — меню; [g_] — развернуть столбец по ширине; [zr цифра] — перейти к номеру строки; [q] — назад; [g/], [g?] — поиск по ключевому слову вперёд/назад; [shift+I], [shift+F] — статистики...

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 и C++).

Код:
$ 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 в два касания.

Код:

npm install yaspeller -g
yaspeller https://habr.com/ru/post/647267/ #указываем любой url для проверки и выявления орфографических ошибок.
Yaspeller подозревает/обнаруживает орф.ошибки, а в скобках справа предлагает исправления.
Yaspeller подозревает/обнаруживает орф.ошибки, а в скобках справа предлагает исправления.

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

В моём топ-списке пакетов этот инструмент, возможно, самый популярный. Нет, не для того чтобы устроить кому-либо очередную 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% — это уникальные pass. По классике самым распространённым паролем является pass «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 Ripper

Её пароль — девичья фамилия и дата дня журналистики в Украине: шестое, шестое. И ещё одна шестёрка было бы совсем смешно, но всё равно не серьёзно.

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

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

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

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

$ john/run/john --test #запуск ПО

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

  • то что JtR компилируется и запускается на Android устройствах уже хорошо, годами ранее — это было невозможно, да и сейчас поддержка гаджетов заявлена только для оф. Android-приложения JtR-HSD (крутая кубинская разработка, но с ограниченным набором в 14-хэшей);

  • при работе JtR нагружает все ядра CPU на 100% потому что, например, опция контроль утилизации ресурсов «--fork=2» не отработает на Android как заявлено в JtR на GNU/Linux и всё равно будет грузить все ядра CPU на всю катушку, а при таком раскладе на длинной дистанции можно получить вместо пароля любые проблемы/ущерб, т.к. JtR-у плевать на температурный контроль вашей батареи, ниже я покажу обходное решение этой проблемы;

  • скорость брутфорса для некоторых хэшей не оптимизирована для нашей среды.

Проведем тестирование на скорость/криптостойкость, например, двух разных архив-форматов: 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. Из скрина JtR-1 видим, что 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 символов в нижнем регистре rar-архива мы сможем сбрутить лишь в диапазоне до 3.5ч(36^4/150) +(36^3/150) +(36^2/150) + (36^1/150). Тот же пароль zip-архива будет восстановлен в течение 3-х минут.

Расчет: 26 латинских букв + 10 цифр = 36; степень — длина пароля; 150 — перебор хэшей (rar) в сек. на всех 8 ядрах CPU. Для батареи гаджета такое время 3.5ч. работы 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.

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

Но пользователь человек с интеллектом, а не алгоритм машины, заученные шаги ему не помогут, если неизменно полагаться исключительно на тесты JtR, хотя мы и видим как они важны. На скрине JtR-1 в тестах кроме архивов видим и хэш «telegram» (примечание — добавил Tg для сравнения, формат telegram в JtR — это локальный, защитный 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 #запускаем брутфорс атаку.

Команды аналогичны и для взлома pin 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» для извлечения хэша с яблочных устройств, они же все дорогостоящие для киберпанков.

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

Хотя, стоп, стоп, стоп! А как же без скрипт-кидди классики: вардрайвинга? Совершенно верно — никак.
Рассмотрим вторую из двух частей атаки, которая отработает на любом гаджете: сравнив брутфорс 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 v1.6.0 в репозитории багный и если не запускается после установки, то нужно пролечить: переименовать "/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, k09, k1..k99. Для этого я использовал инструмент разведки по нику — Snoop Project.

#установка инструмента Snoop
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

#выше я писал, что JtR в т.ч. умеет генерировать словари (альтернатива crunch)
#генерирую словарь из 111 к-аккаунтов (почему не 100, первые 10 аккаунтов имеют вид (k0...k09)
john/run/john -min-len=1 -max-len=3 --mask=k?d?d --stdout | sort -n -t "k" -k2 > k-аккаунты 
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-гор, воодушевляет автора на созидание отдельной статьи для спорт-сообщества. Ещё больше крутой визуализации, созданной мной в Termux в т.ч. при помощи povray, по ссылке.

Облако слов

Дорогой Иисус скоро встретимся. Твоя подружка, Америка.

Wordcloud — это одновременно и CLI-утилита и питоничная библиотека для построения облака слов от специалиста мирового класса в области машинного обучения & data science, и за плечами которого преподавательская деятельность; работа в Amazon и Microsoft. Проблема wordcloud в том, что её предназначение двойственно: для эстетики и для математики. С помощью ключей пользователь смещает баланс либо в сторону математики, жертвуя красотой и размером выходного изображения, либо в сторону эстетики, жертвуя статистикой и реальным положением вещей. И всё же я поместил эту подтему в своей работе в раздел "визуализация данных", а не "data science" т.к., ИМХО, утилита не требует от пользователя навыков программирования/вышмата и доступна любому юзеру по способностям созидать эффектную графику, что также является заслугой молодого учёного.

Немного про математику. Например, если слово "А" употребляется в 10 раз чаще слова "Б", то и размер его должен быть 10:1. На практике же, при наименьшем кегле 4 слова "Б", слово "А" кеглем 40 может не уместиться в контуре изображения или в целом размере изображения (когда в задаче оказывается много слов с такой условной разницей: 10:1). И тут у пользователя появляется выбор: всё уместить, сделать красиво, но на выходе получить изображение в десятки или сотни Мб, которое не годится для печати; либо маневрировать. Например, отношения слов 10:1 визуально увеличивать не пропорционально, а с меньшим коэффициентом масштабирования, жертвуя реальным положением вещей, т.е. математикой, чем, кстати, по умолчанию и занимается wordcloud. Прибегать к стоп-словам.

Мой вариант WC-гамбита: балансировка изображения для статьи с жертвой и эстетикой.

Код:

#Скачал автобиографию С.Кинга с сайта Фантлаб и проверил кол-во слов:
cat storage/downloads/кинг.txt | wc -w
#>>>1692
pip install wordcloud #по numpy см. выше
wordcloud_cli --text storage/downloads/кинг.txt --imagefile storage/downloads/вых_фото.png --stopwords storage/downloads/stop.txt --no_collocations --background "#222222" --max_words 1700 --fontfile storage/downloads/особый_шрифт.ttf --colormask storage/downloads/кинг.jpg --relative_scaling 0 --scale 3 --mask storage/downloads/кинг.jpg
Исходник изображения: Стивен Кинг, микрофон и книга.
Исходник изображения: Стивен Кинг, микрофон и книга.

Разбор параметров WC. Запускаю утилиту wordcloud; на вход подаю биографию С. Кинга и цветное изображение; понуждаю утилиту раскрашивать текст по цвету исходника; указываю "литературный" шрифт (уважил Кинга, но существенно пожертвовал нелишним пространством/размером); выбираю пороховой фон с сильными оттенками лакрицы и маслины (#222222); пренебрегаю математикой в пользу красоты заполнения пространства (--relative_scaling 0); увеличиваю выходное изображение в несколько раз (--scale 3); жертвую некоторыми частыми словами, которые уже присутствуют, но имеют лишь различные окончания — "романов", "Кинга", а также выбрасываю союзы, местоимения, предлоги, числа*, спецсимволы* (--stopwords) и заставляю утилиту визуализировать весь текст т.к. по умолчанию обрабатывается лишь 200 слов. Документация по всем ключам утилиты.

Результат: облако слов. Если не все слова различаются в макс.масштабе, то для просмотра скачать картинку на гаджет.
Результат: облако слов. Если не все слова различаются в макс.масштабе, то для просмотра скачать картинку на гаджет.

ИМХО, для статьи получилось красиво, приглушённые цвета и их расположения близки к оригиналу. Однако удавалось генерировать ещё более презентабельное облако слов, но с выходным размером в ~20 Мб, где можно было проследить на руке Кинга и чёрные часы. Увы, overkill image size/no svg. Для ещё большей гармонии я использовал цвета по входной картинке, а обычно применяют один цвет или что-то разноцветно-ограниченное по дефолту (исключение — выбор цветовых карт, используя библиотеку, а не утилиту). В таком случае перед созданием облака слов необходимо жёстко обесцвечивать входное изображение в ЧБ с помощью "Imagemagick", который описан здесь же, в статье.

Недостатки утилиты перед библиотекой: не смотря на авторитетность разработчика и популярность проекта, в утилите не работает заявленный функционал/ключ выбор цветовых карт --colormap для текста; отсутствует возможность сохранять выходное изображение в .svg формате (сохранение в .png), преимущества которого — это меньший размер с колоссальной детализацией, для web. В библиотеке такие недостатки отсутствуют, и кроме того, если использовать WC в качестве lib, то стоит и пощупать pymorphy2 — библиотека, которая приводит RU-слова к начальной форме, например, "романов", "романы" --> "роман".

Теперь вы имеете представление, как свободно создать изумительное облако слов со своего Андроид гаджета "любой" сложности, или, как нужно быть аккуратным, чтобы не облажаться, если использовать wordcloud для научных целей: например, спарсить свои комментарии в соц.сети и вывести их 'графическую популярность' в масштабе, заявляя всем, что именно в таких пропорциях и выглядит персональное облако слов.

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
skin rose
scale 1480*740
title Создано в Termux ©https://habr.com/ru/users/ne555/
*[#lightgreen] **Termux**
** <&audio-spectrum>Мультимедиа
***_ mp3splt
***_ cmus
***_ cava
***_ ffmpeg
***_ imagemagick
***_ chafa
***_ <s>youtubedr</s> => yt-dlp
** <&data-transfer-download>Парсинг данных
***_ curl..wget
***_ примеры
** <&cloud-upload>Автобэкап данных
***_ rclone
***_ 7-zip
***_ cronie
** <&bar-chart>Data Science
***_ numpy
***_ scipy
***_ pandas
***_ matplotlib
***_ jupyter
***_ wordcloud
***_ visidata
** <&envelope-closed>Работа с письмами
***_ mutt
** <&magnifying-glass>OSINT
***_ check_email(s)
***_ check_account(s)
left side
** <&terminal>Программирование на Android
***_ python..brainfuck
** <&layers>Сравнение пакетов
***_ html2text*
***_ links
** <&lock-unlocked>Пентест
***_ сниффинг
***_ скан
***_ брутфорс
***_ дамп
***_ фишинг
** <&shield>Системное администрирование
***_ chattr..nethogs
** <&document>Пользовательское ПО
***_ yaspeller
***_ povray
***_ gnuplot
***_ plantuml
***_ steghide
***_ gpg
***_ tor
** <&wrench>Установка и настройка среды
***_ widget..proot-distro
@endmindmap

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

Руководство Plantuml частично переведённое на RU.

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

Для проверки цифровых подписей пользователю необходимо иметь установленный 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 #проверяем подписанные данные, сначала указываем ключ, далее подпись и данные.
Аллилу е-е-еа, из скриншота видим, что подпись успешно прошла проверку/валидная, данные не повреждены и не скомпрометированы.
Аллилу е-е-еа, из скриншота видим, что подпись успешно прошла проверку/валидная, данные не повреждены и не скомпрометированы.

Еще одно важное преимущество утилиты 'gpg' перед GUI 'OpenKeychain' в Android — экспорт приватного ключа.

Для примера, создадим нашу пару ключей шифрования в gpg утилите и экспортируем наш приватный ключ для дальнейшей работы (например, для импорта privat_key.gpg в OpenKeychain, или для проверки криптостойкости privat_key.gpg в JtR и т.д.).

$ gpg --full-generate-key #создали пару ключей
$ gpg --export-secret-key -a "ne555" > storage/downloads/gpg_key.asc #экспортируем приватный gpg-ключ.

Сам приватный ключ находится в криптоконтейнере, поэтому для его экспорта требуется ввести, указанную при генерации, парольную фразу. После чего, приватный ключ будет успешно экспортирован для дальнейшей работы с ним. В GUI OpenKeychain все гораздо удобнее: не нужно расчехлять черновик gpg-команд (почти). Но! Одна функция OpenKeychain перечеркивает его преимущество: функция 'экспорт/резервирование приватного ключа'. При экспорте приватного ключа OpenKeychain также, как gpg в CLI требует пароль от ключа. Подстава! Ключ экспортируется только в формате криптоконтейнера, а не чистый 'key.gpg'. И чтобы поработать с таким ключом (импорт в другое ПО, проверка его на криптостойкость и т.д) необходимо изучить инструкцию OpenKeychain, с которой не каждый пользователь справится, а также задействовать CLI для команд.
Сам приватный ключ находится в криптоконтейнере, поэтому для его экспорта требуется ввести, указанную при генерации, парольную фразу. После чего, приватный ключ будет успешно экспортирован для дальнейшей работы с ним.

В GUI OpenKeychain все гораздо удобнее: не нужно расчехлять черновик gpg-команд (почти). Но! Одна функция OpenKeychain перечеркивает его преимущество: функция 'экспорт/резервирование приватного ключа'. При экспорте приватного ключа OpenKeychain также, как gpg в CLI требует пароль от ключа. Подстава! Ключ экспортируется только в формате криптоконтейнера, а не чистый 'key.gpg'. И чтобы поработать с таким ключом (импорт в другое ПО, проверка его на криптостойкость и т.д) необходимо изучить инструкцию OpenKeychain, с которой не каждый пользователь справится, а также задействовать CLI для команд.

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

Видел на различных форумах, как пользователи часто жаловались на проблему: когда сеть внезапно переставала работать в Parrot и пд. GNU/Linux дистрибутивах. Проблема заключается в перезаписи динамического файла: "/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_ролика #скачивание ролика в самом лучшем качестве.
Синтаксис у скрипта схожий с прошлыми форками, однако ролики скачиваются с существенным быстродействием.
Синтаксис у скрипта схожий с прошлыми форками, однако ролики скачиваются с существенным быстродействием.

Преимущество Yt-dlp: скорость; можно скачать несколько Мб фрагмента ролика в любом качестве с определённой метки времени до заданной его длины без необходимости полной, предварительной загрузки многочасового* видео на своё дисковое пространство в Гб/сотни Мб.

Пруф
yt-dlp --downloader ffmpeg --downloader-args "ffmpeg_i:-ss 01:09:57.00 -to 01:11:37.0" "https://www.youtube.com/watch?v=RRo3e-M2XO8" -f "134+139" #скачать за пару сек. отрывок с ютуба в ~5Мб/360p с отметки времени, когда АБВГАТ ругается по делу
yt-dlp url_ролика -F #проверить все доступные форматы аудио/видео для загрузки.

Из-за авторских прав прикладываю не сам отрывок, а ссылку с таймингом на метку времени:

Для такой хитрой операции требуется "ffmpeg" см.ниже.

Создание 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 из статьи.

Обработка изображений

ImageMagick — это не просто редактор изображений, это мощный, популярный, кроссплатформенный комбайн для обработки графики различных форматов в т.ч. [.png/.gif/.mp4...].

В качестве примера я разберу флаги государств России и Белиза из Wikipedia на предмет некоторого несоответствия человеческим ожиданиям.

Флаг РФ и флаг Белиза.
Флаг РФ и флаг Белиза.
Код
pkg install imagemagick


#вывести кол-во обнаруженых цветов/оттенков:
identify -format %k storage/downloads/test/флаг_россия.png
#>>> 5
#получить гистограмму цветового распределения флага РФ:
convert storage/downloads/test/флаг_россия.png -format "%c" histogram:info:- | sort -nk1
#>>> 800: (142,48,75) #8E304B srgb(142,48,75)
#>>> 800: (170,189,225) #AABDE1 srgb(170,189,225)
#>>> 141600: (0,57,166) #0039A6 srgb(0,57,166)
#>>> 141600: (213,43,30) #D52B1E srgb(213,43,30)
#>>> 141600: (255,255,255) #FFFFFF white


#вывести кол-во обнаруженых цветов/оттенков
identify -format %k storage/downloads/test/флаг_белиза.png
#>>> 7571
#получить гистограмму цветового распределения флага Белиза:
convert storage/downloads/test/флаг_белиза.png -colors 16 -format "%c" histogram:info:- | sort -nk1
#>>> 231: (46.9722,46.0833,160.882) #2F2EA1 srgb(18.4205%,18.0719%,63.091%)
#>>> 403: (185.756,173.653,109.062) #BAAE6D srgb(72.8455%,68.0992%,42.7694%)
#>>> 633: (30.7529,101.07,187.928) #1F65BC srgb(12.06%,39.6351%,73.6974%)
#>>> 1142: (210.119,121.965,87.4392) #D27A57 srgb(82.3996%,47.8293%,34.2899%)
#>>> 1348: (113.278,142.174,161.626) #718EA2 srgb(44.4228%,55.7545%,63.3828%)
#>>> 1358: (61.3529,136.853,31.8059) #3D8920 srgb(24.06%,53.6678%,12.4729%)
#>>> 1638: (91.2133,157.048,62.0254) #5B9D3E srgb(35.7699%,61.5876%,24.3237%)
#>>> 2116: (158.699,177.951,179.25) #9FB2B3 srgb(62.235%,69.7849%,70.2941%)
#>>> 2285: (252.353,228.921,132.456) #FCE584 srgb(98.9618%,89.7728%,51.9436%)
#>>> 2586: (161.572,116.734,87.5861) #A27558 srgb(63.3615%,45.7779%,34.3475%)
#>>> 3390: (71.9851,66.0432,41.4991) #484229 srgb(28.2295%,25.8993%,16.2741%)
#>>> 3603: (209.959,215.213,211.67) #D2D7D4 srgb(82.3368%,84.3974%,83.0077%)
#>>> 10201: (51.0583,137.143,2.00709) #338902 srgb(20.0229%,53.7816%,0.787094%)
#>>> 30611: (252.349,252.456,252.215) #FCFCFC srgb(98.9604%,99.0025%,98.9079%)
#>>> 76811: (216.999,14.9999,24.9999) #D90F19 srgb(85.0978%,5.88233%,9.80389%)
#>>> 245644: (23.0013,22.0013,150) #171696 srgb(9.02011%,8.62796%,58.8234%)

identify сообщает, что у флага РФ не 3 цвета на картинке, а 5! Вкрапление двух лишних оттенков занимает по 800px и в сумме составляет = 0,38% от общего размера изображения:: 1600 * 100 / (141600 + 141600 + 141600 + 800 + 800), слагаемые в скобках — это разложенное на цвета изображение размером 800px * 533px = 426400px. Цифра 0.38% не такая уж и маленькая и при увеличении изображения баг свободно детектируется невооруженным глазом. Вывод — на Wikipedia залито "некорректное изображение" Российского триколора под размером: 800x533px.

С флагом Белиза размером 800х480px сложнее: identify детектирует на картинке 7571 цветов/оттенков! С помощью ключа "-colors 16" сокращаем/усредняем изображение до 16 цветов и печатаем их в CLI. Самый значимыемый цвет у флага: #171696 — ультрамариновый с оттенками индиго и сапфира, который занимает по всё той же школьной формуле пропорции = 64% от общего изображения:: 245644 * 100 / (800 * 480).

Теперь вы знаете, как можно вычислить самый популярный/редкий/усреднённый цвет флагов всех вместе взятых стран, не прибегая к компьютерному зрению на Python. И ещё разочек, на секундочку:
💎ультрамариновый с оттенками индиго и сапфира💎, звучит бескрайне поэтично.

Просмотр изображений в текстовом терминале

UX в 21-м веке добрался и до терминала. Встречайте — chafa. Теперь пользователь может просматривать "разумные изображения/анимацию" не выходя из своего эмулятора терминала. "Графика" строится с помощью управления последовательностей и символов. Актуально, например, проверять изображения на серверах без необходимости предварительной их выгрузки/ФМ/scp. "Разумность графики" зависит от регулировки масштаба CLI.

Код:
$ pkg install chafa
$ chafa storage/shared/Download/test/изображение.jpg

"Да вы прикалываетесь?!" (С) сестра Эллиота — Дарлин Алдерсон.
"Да вы прикалываетесь?!" (С) сестра Эллиота — Дарлин Алдерсон.

Нарезка и склейка 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мин, а последнюю с остатком).
Аудиофайл порезан на 20 аудиофайлов.
Аудиофайл порезан на 20 аудиофайлов.

Иногда может потребоваться наоборот склеить аудиофайлы в один 'длинный аудиофайл'. Библиотека "mp3splt" не умеет, но умеет вышеупомянутый "ffmpeg":

cd storage/downloads/аудио/ #переход в каталог, содержащий аудиофайлы, которые нужно будет склеить
printf "file '%s'\n" *.mp3 > все_mp3.txt #создание txt-файла, содержащ префиксы 'file ' и имена всех mp3-треков, префикс — требование ffmpeg
ffmpeg -f concat -safe 0 -i все_mp3.txt -c copy сборник.mp3 #произойдет быстрая склейка без лишнего перекодирования потоков.

Аудиомания в 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-сетью

РКН и их приятели не спят и мы тоже, один девять восемь четыре.

Deleted

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

Конституция РФ: Статья 29::
5. Гарантируется свобода массовой информации. Цензура запрещается.

Анализируем память

Ncdu — TUI-шная утилита, которая анализирует диски/каталоги/файлы на предмет занятого пространства. Утилита замечательна тем, что благодаря её работе хозяин гаджета способен очень быстро проанализировать память устройства и принять компромиссное решение о зачистке "ненужного", высвобождая место в переполненном 'ведре'. Если читатель, как и автор, постоянно испытывает нехватку дискового пространства, то именно это ПО, как глоток свежего воздуха в условиях удушья без преувеличения. Ncdu, IMHO, намного более эффективная альтернатива всем вместе взятым: "ls/sort/tree/ФМ".

$ pkg install ncdu — установка утилиты
$ ncdu ../../ — прочекать termux
$ ncdu storage/shared — прочекать общедоступные данные.

Слева направо: приложение OsmAnd; ncdu — среда termux; ncdu — среда OsmAnd. ОС Android, например, не расскажет пользователю: какие именно данные в OsmAnd-е занимают место. Ncdu сообщает, что это спутниковые, картографические снимки Яндекса. К сожалению 1.4Gb — не высвободить, данные очень важные для пользователя (в походах, оффлайн спутниковая карта важна). С помощью ncdu ищем дальше, что можно такого зачистить из "ненужного" (клавиша 'd' — удалить данные)...
Слева направо: приложение OsmAnd; ncdu — среда termux; ncdu — среда OsmAnd.
ОС Android, например, не расскажет пользователю: какие именно данные в OsmAnd-е занимают место. Ncdu сообщает, что это спутниковые, картографические снимки Яндекса. К сожалению 1.4Gb — не высвободить, данные очень важные для пользователя (в походах, оффлайн спутниковая карта важна). С помощью ncdu ищем дальше, что можно такого зачистить из "ненужного" (клавиша 'd' — удалить данные)...

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

Хедлайнер пакет: Htop (требуется root).

$ pkg install htop
$ tsu
$ ../usr/bin/htop #если просто запустить "$ htop", то, возможно, запустится предустановленный с рут-правами htop старой версии (зависит от OS/Magisk/Root), который не умеет смотреть нагрузку дисковой подсистемы.

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

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

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

Ваш рай — это только сон.

Termux Widget позволяет запускать termux-скрипты в касание с рабочего стола по ярлыку либо по виджету.

Один из примеров: вывод времени во всплывающем уведомлении с момента вкл. гаджета::

$ nano "./.shortcuts/время вкл.sh"

#!/data/data/com.termux/files/usr/bin/sh
#условия для моего скрипта: Termux/Widget/Api с f-droid; $ pkg install termux-api
echo ⌛время_с_момента_вкл: $(uptime) | awk '{gsub(",", "") ; print $1,$4,$5,$6}'| termux-toast -c green

Зажать ярлык "Termux:Widget" на рабочем столе и в меню выбрать "Виджеты". На рабочем столе появится виджет с именами скриптов, или вместо виджета можно выбрать "Ярлык/Иконку" на каждый скрипт.

Примеры: ярлык/виджет
Запуск скрипта в касание по ярлыку.
Запуск скрипта в касание по ярлыку.
Запуск скрипта из виджета: при выборе скрипта тапом (время вкл.sh) виджет открывает Termux, выполняется цель и закрывается Termux.
Запуск скрипта из виджета: при выборе скрипта тапом (время вкл.sh) виджет открывает Termux, выполняется цель и закрывается Termux.

Обратите внимание, что скрипты в фоне хорошо работают на Android <= 9. На Android 10+ необходимо разрешить использование 'поверх других окон'.


Если я был бы профессор Лопух, то в качестве проверки усвоения материала поставил бы таймер на 6 минут и попросил решение у студентов: в один клик по иконке на раб. столе вывести во всплывающем окне динамично-обновляемые:: кол-во неокругленных звёзд проекта Termux и там же — кол-во неокругленных просмотров у данной статьи.

Разная солянка

Не обязательно испытывать неудобства tmux/screen, для того чтобы открыть параллельно новую сессию в терминале, просто потяните за левую вертикальную шторку вправо, живой пример см. видео про tor из статьи, а щипок в CLI изменяет масштаб.

Создание alias иным способом, отличным от далеко вышеописанного способа где-то в статье.

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

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

'Али-Баба и сорок разбойников' не только завладели чувствительными ПД, приложение яростно фонит. Усмиряем:

tsu #активируем ROOT
ls /data/data/ | grep ali # или $ pm list packages | grep ali ##ищем полное название пакета AliExpress
#>>> ru.aliexpress.buyer
pm disable ru.aliexpress.buyer #заморозить приложение на длительной дистанции
#>>> Package ru.aliexpress.buyer new state: disabled
pm enable ru.aliexpress.buyer #разморозить приложение, когда идём закупаться
#Глубинный смысл в том, чтобы автоматизировать контроль в один клик, а не набивать каждый раз команды.

$ am start -n com.android.documentsui/.files.FilesActivity #откроет из Termux стандартное приложение просмотрщик файлов/проводник. Аналогично можно из Termux запускать браузер с переходом по ссылке криво-ограничено по Гугловски и п.д.:
$ am start -a android.intent.action.VIEW https://habr.com/ru/post/652633/
Упрощение: открыть любой файл/любым приложением, например, из каталога "download".

Код:

#единожды:
pkg install termux-tools
cd && echo "allow-external-apps=true" >> .termux/termux.properties #разрешить Termux открывать стороннее.

#открывать в будущем что угодно:
termux-open storage/downloads/файл

Косвенно-скоростной тест терминала:

timeout 1 yes ne555 CC BY-SA 4.0 https://habr.com/ru/post/652633/ > testik
wc -l testik && head -n 66 testik
# "yes" генерирует бесконечный вывод строк: автора материала, лицензии и url-статьи
# "timeout" прерывает выполнение команды через 1 секунду. ">" записывает поток в файл, а не печатает в CLI
# "wc" подсчитывает кол-во строк. "head" выводит первые 66 строк на печать из файла
# в начале команды можно подсавить "time" и получить реальное время исполнения задачи.
Результат
Ввод-вывод полтора млн. строк в секунду с учётом 'terminal-transcript-rows=10000' — недурно.
Ввод-вывод полтора млн. строк в секунду с учётом 'terminal-transcript-rows=10000' — недурно.

$ cal 1861 #быстро прочекать дату. Диапазон времени от н.э. - до армагедона.

Календарь

по умолчанию календарь не подчиняется международному стандарту ISO 8601 и выводит начало недели по английски: с воскресенья. Для отображения недели с понедельника ключ "-m":

$ cal 1861 -m

Крепостное право отменили в воскресенье.
Крепостное право отменили в воскресенье.

Помянуть английское величие:
$ cal sep 1752

$ pkg install libqrencode zbar #установка пакетов для кодирования и декодирования QR-кодов:
$ qrencode -o storage/downloads/qr.png "ne555 CC BY-SA 4.0 https://habr.com/ru/post/652633/" #кодируем
$ zbarimg storage/downloads/qr.png #декодируем.

А так получаем QR-код онлайн прямо в CLI:
$ printf "ne555 CC BY-SA 4.0 https://habr.com/ru/post/652633/" | curl -F-=\<- qrenco.de

QR-пруф

$ getprop #вывести сотни строк о программно-аппаратной части своего гаджета, и/или идентифицировать устройство среди аналогов: IMEI/hostname... Например, "getprop ro.build.version.release" выводит версию OS Android, тогда как, в частности, питоновский модуль "platform" в этом дистрибутиве является бесполезным и заменяется на вызов "getprop".

OSM cli карта & гео-npm-cli-карта

Географическая карта, поддерживающая рендеринг вплоть до зданий и лесных дорог (без троп):

$ telnet mapscii.me #подключаемся к гео-карте, клавиши [a,z] — масштаб; [c] — плотность; [q] — выход.

Пруф
На Герои меча и магии 2 похожа?!
На Герои меча и магии 2 похожа?!

А вот эта гео-cli-утилита примечательна тем, что её код не обновлялся 7 лет, но она продолжает функционировать так, как и задумывалась.

Код:
$ npm install -g iponmap
$ iponmap -t 149.154.167.99 13.33.243.64 46.22.212.44 178.248.237.68 #или "cat iplist.txt | iponmap"

Termux-API

Установка termux-api с f-droid, далее:

$ pkg install termux-api #api установлен

$ termux-clipboard-get #вывести содержимое буфера обмена

$ termux-clipboard-set ne555 CC BY-SA 4.0 https://habr.com/ru/post/652633/ #наполнить/затереть буфер обмена своим текстом

$ termux-tts-speak Раз-два-три, даю пробу... Костя, как слышно? Три-два-один, прием #Termux озвучит фразу из к./ф.

$ termux-contact-list #вывести книгу контактов

$ termux-sms-list #прочитать все смс-ки

$ termux-battery-status # вывести информацию о батарее

$ termux-camera-photo -c 1 storage/downloads/фото.jpg #сделать фото с камеры (ключ '-с' принимает id камеры) и сохранить в загрузках

$ termux-camera-photo $(echo | date | sed "s/[: ]/_/g" | awk '{print "-c 1 storage/downloads/" $0".jpg"}') #хитро сделать фото камеры, которое сохраняется каждый раз под новым дата-именем в загрузках, например, "Thu_Feb_10_02_04_25_MSK_2022.jpg". Поднимаем cron/rclone, как описал в статье и получаем 48-фото в сутки на Я.Диск в зашифрованном виде (самая дешёвая двухкамерная система видеонаблюдения развёрнута и это не голая теория).

Как узнать к какому пакету принадлежит та или иная утилита?

Касается утилит штатного менеджера пакета — apt (ни pip, ни git, ни npm). Как я показал в начале статьи: достаточно сделать опечатку при наборе команды и Termux предложит варианты исправления/пакеты куда входит предполагаемая GNU-утилита, но это работает лишь в "99%" случаях. Классический GNU/Linux способ детектирования, а может и нет, но я так делаю:

$ whereis mkdir #отобразит абсолютный путь к исполняемому файлу утилиты (на примере "mkdir-утилиты"): "/data/data/com.termux/files/usr/bin/mkdir"
$ dpkg -S /data/data/com.termux/files/usr/bin/mkdir #укажет принадлежность утилиты к пакету: coreutils

$ whereis whereis #отобразит /data/data/com.termux/files/usr/bin/whereis
$ dpkg -S data/data/com.termux/files/usr/bin/whereis #укажет util-linux

$ dpkg -S $(find /data/data/com.termux/files/usr/bin/) #проверить принадлежность "всех" утилит к пакетам.

Чек-лист

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

Про флэшку

Если флэшка была отформатирована повторно или заменена, то симлинк на неё будет нерабочим: "storage/external-1/". Исправляем и создаём симлинк на корень флэшки:

cd #перешли в домашний каталог.
termux-setup-storage #повторно передёрнуть права и обновив симлинки
ls -shla storage/external-1 #получаем идентификатор флэшки, что-то вроде этого: 'B42E-C917'
ln -s /storage/B42E-C917/ flash #создаём симлинк на флэшку
# в домашнем каталоге появляется наша флэшка и что самое главное — её корень, а не "storage/B42E-C917/Android/data/com.termux/files"
ls flash #проверяем доступ к флэшке.
ещё про флэш в человекочитаемом виде (требуется root)

Утилита "duf" не подскажет конкретно по ФС флэшки, поэтому для манипуляции с flash задействуем root-права с утилитами: "blkid" и "parted".

Обмен файлами по локальной сети

В случае, когда ssh/sftp-total commander/другое ПО для обмена файлами внутри сети не настроено, или когда пользователь находится в "быстрых обстоятельствах", можно передать файлы между устройствами по http протоколу с помощью python сервера в пару кликов.

Пример:

  1. Локальная сеть состоит из ПК подключенного к Android через точку доступа на смартфоне.

  2. Запускаю http сервер на Android в Termux:
    $ python -m http.server

  3. Проверяю свой IP Android внутри сети:
    $ ifconfig

  4. Захожу на ПК в браузере по Android IP:8000 и забираю файлы с Android. Можно и в обратную сторону раздать файлы: с ПК на Android, запустив http сервер python на ПК и браузер на смартфоне.

Пруф
Раздача файлов с Android устройства по локальной сети.
Раздача файлов с Android устройства по локальной сети.

Проблема

С каждым новым релизом Android ¶ Termux сталкивается с новыми ограничениями, теряя функциональность: невозможно прочитать серийные номера; открывать локальные html файлы; нетривиально управлять сетевыми соединениями; фоном отрабатывать скрипты и т.д.. Солидарен с сопровождающими Termux/среду, которые демонстративно не согласились с обновлённой политикой Google, уйдя на F-droid, ради сохранения функциональности софта и философии GNU/Linux, где терминал является их центральной и неотъемлемой частью.

Обобщение

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

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

P.S. Этот уникальный материал первоначально был написан мною для IT-портала Codeby под свободной лицензией, а для посетителей Хабра опубликовано расширенное издание. На момент публикации в работе продемонстрированы техники и приёмы, например, JtR или OSINT по хабраюзерам, которых нет ни в Рунете, ни в сабреддите Termux, ни в зоне .cn. Читатель, проникнувшийся данной масштабной работой, может поддержать автора и его техничный вклад баночкой пивка, спасибо.

[Отредактировано]

🌶️🌶️Спустя год. Обычно срок жизни материалов на портале Habr составляет ~ три дня, после чего просмотры контента стремятся к нулю. "Код доступа Termux", относящийся к узкоспециализированной тематике, оказался и высококачественным лонгридом, и к годовщине после своего лайфтайм набрал ещё +𝟜𝟘𝕂 просмотров и продолжает 👁 ↑

~Longread statistics

Подготовленных изображений, включая скринкасты

106

Кол-во символов

96k

Кол-во слов

12k

[RU] Удельный активный словарный запас

Высокий.
1.4k уник. лемм на 5k слов текста

Время на подготовку материала

7 недель ± UPD

Ср. время на чтение

> 1ч.

О подготовке материала

  • 🌶️Ради единственного скриншота «gnuchess» разыгрывал на своём Android в Termux несколько десятков шахматных партий, пока не получил обоюдоострую (угрозы в обе стороны форсированного мата), красивейшую, ничейную позицию.

  • 🌶️Для создания скриншота «программирование» требовалось написать код на 11 ЯП.

  • 🌶️Во имя «imagemagick» я выискивал брак и баги в изображениях от авторитетных источников и нашёл их на Wikipedia.

  • 🌶️Для подготовки скриншота «yaspeller» периодически пинговал Хабр на предмет публикации низкокачественного во всех отношениях материала, чтобы взять его за живой и реалистичный пример.

 А вот до следующего орфографического примера с момента публикации статьи прошло несколько месяцев.
А вот до следующего орфографического примера с момента публикации статьи прошло несколько месяцев.
  • 🌶️Для создания информативного изображения: «описание update/проблемы», содержащей пять скриншотов, мне пришлось прошерстить всю ветку «Termux» на 4pda и всю Wiki на Github-e, а также погрузиться в internet censorship для формирования проблематичной ситуации.

  • 🌶️Ради скринкаста/скриншота «ssh/nmap» я специально арендовал сервер, где развернул дистрибутив OS для пентеста.

  • 🌶️Шесть дефектов до полуночи. При подготовке скриншота «html2text» репортил о баге по утилите разработчику на Github. При обновлении обложки статьи (блок-схема в «Plantuml») тоже репортил баг-репорт разработчикам ПО на Github. Оформлена тройка issues по утилите «visidata». Даже при обновлении превью этой статьи Хабр менял абзацы местами, и им я тоже зарепортил (HABR: CQD-SMNKG-152).

  • 🌶️А для примера «брутфорс/wifi-рукопожатия» я запрашивал разрешение у студентов (пока гостил, как хакер сновидений) на непродолжительное вмешательство в сетевую конфигурацию роутера в образовательных целях. В тех же целях использовал и их современные гаджеты, чтобы развернуть на них Termux и зафиксировать снижение функциональности/ограничения с увеличением версии OS Android.

  • 🌶️Немалая доля времени уходила на изучение биографий, следов и послужных списков мэтров ПО. Например, при описании «wordcloud» исследовал всю доступную на разных площадках активность программиста (вплоть до совместных трудов с ru-коллегой), чтобы смело заявить в статье об авторитетности его персоны. Напротив, влияние разработчика инструмента «dirb» я не смог ни подтвердить ни опровергнуть, шифропанк под ником "Темный Рейвер" оказался явно непубличной личностью.

  • 🌶️Для разнообразия подачи материала, и усиления эмоциональной составляющей читателя, предисловия некоторых утилит начинаются с увлекательных цитат, тесно связанных с ПО. Например, эту цитату для «взломщика паролей JtR» я генерировал всю ночную поездку в стрессовой ситуации: "Её пароль — девичья фамилия и дата дня журналистики в Украине: шестое, шестое. И ещё одна шестёрка было бы совсем смешно, но всё равно не серьёзно."

  • 🌶️Elephant in the room 2022, пришлось отказаться от некоторых изначально задуманных и ярких примеров в пользу нейтрально-бледных парадигм.

Доркнул в интернете информацию о своём материале:

Коллаж технического эха.
Коллаж технического эха.


  • 💎 Опробовать поисковую систему, разработанную автором статьи — check.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 28: ↑27 и ↓1+28
Комментарии46

Публикации

Истории

Работа

Ближайшие события

Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область