Хакер - Мастерская хакера. ИИ-помощники, работа с JSON и приятные мелочи, которые пригодятся в работе
hacker_frei
Польский Кот
Соскучился по нашим подборкам утилит? Сейчас исправим! Сегодня я принес тебе заморские диковинки, которые и код напишут, и отладят его, и расскажут, как работу правильно сделать. А бонусом еще немного штук, которым ты и сам найдешь применение. Поехали!
«Мастерская хакера»
Это уже шестая моя подборка утилит, облегчающих жизнь в мелочах. Благодарные читатели продолжают открывать передо мной свои кладовки, а я выношу оттуда и показываю на страницах «Хакера» самое лучшее.
MOAR
Первый релиз страничного просмотрщика less состоялся в 1985 году. Сегодня, спустя больше чем 35 лет, имеет смысл поискать ему замену. Встречай Moar — более современную альтернативу less, написанную на Go.

Moar умеет подсвечивать синтаксис кода, поддерживает UTF-8, инкрементальный поиск, поиск по регуляркам и автоматическое разархивирование .gz, .xz и .bz2. При этом разработчик прилагает усилия, чтобы Moar был полностью совместим с less и миграция не составляла особого труда.
Для установки достаточно скачать бинарник для своей платформы со страницы релизов, дать нужные права (chmod a+x moar-*) и скопировать его в папку, прописанную в $PATH:
sudo cp moar-* /usr/local/bin/moar
Чтобы сделать Moar просмотрщиком по умолчанию, добавь эту строку в свой .zshrc (или .bashrc, если ты все еще сидишь на Bash):
export PAGER=/usr/local/bin/moar
AI-CLI
Часто гуглишь нужную команду и ругаешь себя, что не можешь запомнить? Не беда, можно и не запоминать! С ai-cli тебе не понадобится переходить в браузер и перекапывать десятки ответов на форумах: готовые решения будут появляться в терминале. А писать их будет известная нейросеть GPT-3.

Чтобы начать использовать персонального ИИ‑консультанта, достаточно сделать следующие шаги:
- Поставить Node.js.
- Установить пакет
ai-cli:npm i @abhagsain/ai-cli -g - Залогиниться в OpenAI.
- Сгенерировать API-ключ на соответствующей странице. Ключ нужно сохранить, больше его посмотреть не получится.
- Выполнить команду
ai auth, после чего ввести сгенерированный на прошлом шаге ключ (он не отображается при вводе, так что лучше скопировать и вставить).

Чтобы спросить что‑то у нейросети, достаточно написать ai ask и дальше в кавычках вопрос на английском. Например:
ai ask "How to save xakep.ru main page to file?"

Только имей в виду, что при слишком сложных запросах GPT-3 может и не понять, что ты от нее хочешь, и выдать не то, что нужно. Так что хотя бы просматривай глазами команду, прежде чем ее выполнить (о чем программа нас честно предупреждает, когда показывает ответ)!
Теперь о грустном — о цене. Она составляет почти два цента за один запрос, и это не очень хорошо, с учетом того, что Google и Stack Overflow бесплатны. Фактически единственное преимущество ai-cli в скорости, с которой тебе доставляется (возможно, правильный) ответ.
В описании программы перечислено еще и автодополнение команд, но оно и так есть в том же Zsh и многих других оболочках.
CLICKBAIT REMOVER FOR YOUTUBE

Многие авторы роликов на YouTube для привлечения внимания ставят на обложку видео не реальный кадр, а кликбейтное непонятно что. В результате весь YouTube покрыт яркими картинками, а что за ними скрыто, неясно (и без просмотра двух реклам и длинного вступления часто не узнать).
Браузерное расширение Clickbait Remover for YouTube решает эту проблему, просто заменяя обложки кадрами из видео, а названия роликов пишет строчными буквами с заглавной, если изначально оно было набрано заглавными.
Есть версии расширения для Chrome и для Firefox. Устанавливаем, и кликбейт практически исчезает.
Не подумай только, что твой трафик начнет уходить на фоновое скачивание видео. Дело в том, что у YouTube есть автоматические сгенерированные миниатюры и расширение просто получает их в готовом виде.
Исходники Clickbait Remover доступны на GitHub.
CLI-EXERCISES
Хоть в этой программе и нет искусственного интеллекта, она все равно пригодится новичку, чтобы научиться работе в терминале. Вместо того чтобы спрашивать каждую мелочь у ИИ (что дорого и потенциально опасно), можно посидеть какое‑то время с тренажером и научиться всему самостоятельно. Программа cli-exercises — это как раз такой тренажер, который учит работе с терминалом на примерах частых задач.

Сначала понадобится установить зависимости (python3, python3.10-venv и git), затем клонировать репозиторий с проектом, и можно запускать:
$ python3 -m venv textual_apps
$ cd textual_apps
$ source bin/activate
$ pip install textual==0.5.0
$ git clone --depth 1 https://github.com/learnbyexample/TUI-apps.git
$ cd TUI-apps/CLI-Exercises
$ python cli_exercises.py
Список задач находится в файле questions.json. По умолчанию в нем уже есть 40 заданий на работу с текстовыми файлами, но никто не запрещает дописать туда свои, на любые темы.

К каждой задаче есть ответ, который ты увидишь при вводе правильного решения или нажав Ctrl-S. Можно пропускать (Ctrl-N) вопросы и возвращаться к ним позже (Ctrl-P).
JSON FX

Все мы знаем о jq (а если не знаем — идем и читаем про сам jq и песочницу с ним). Так вот, если jq — это редактор и поисковик по JSON, то FX — это просмотрщик. Работать в нем можно в том числе при помощи мыши.
FX удобно отображает даже очень большие числа, а еще показывает внизу экрана JSON path, который потом можно легко скормить jq или аналогичной утилите.
Киллер‑фича: можно фильтровать данные выражениями на JavaScript или Python! Пример:
fx data.json '.filter(x => x.startsWith("xakep"))'
Ну и совсем уж мелочи: FX поддерживает темы (их можно поправить в файле theme.go), а выбираются они установкой соответствующей переменной окружения (что тоже удобно добавить в .zshrc):
export FX_THEME=8
Всего поставляется девять тем, их можно увидеть на скриншоте ниже.

Установить FX можно из snap (пакет fx) или просто скачав бинарник со страницы релизов.
Если раньше я для просмотра JSON пользовался VS Code, то теперь для быстрого просмотра использую только FX.
YQ
На JSON свет клином не сошелся, и один из его главных конкурентов — формат YAML (Yet Another Markup Language). И если для анализа и преобразования JSON часто используют jq, то для YAML есть yq.
Конечно, никто не запрещает применять sed, но это, во‑первых, лотерея, а во‑вторых, зачем мучиться с регулярками, если есть специальные инструменты?
Например, чтобы поправить сохраненное имя пользователя в таком файле:
users:
admin: admin
editor: xakep
corrector: autospellcheck
можно использовать следующую команду:
cat xakepusers.yaml | yq '.users.corrector=chatgpt'
Пример выглядит надуманным, но в скриптах такая адресная замена может быть полезна.
Чтобы установить yq, достаточно одной команды:
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq &&\
chmod +x /usr/bin/yq
Как отменить исправление форматирования
У yq есть одна проблема: форматирование утилита переделывает, как ей нравится, и пустые строки выкидывает. Некто vladimir259 придумал решение, которое позволит сохранить пропуски:
# Сделаем изменения и сохраним в новый файл
yq '.data.TEST="NewValue"' sample.yaml > sample.yaml.new
# Удалим только пустые строки, без обновления самих данных
yq '.' sample.yaml > sample.yaml.noblanks
# Найдем сами полезные изменения
diff -B sample.yaml.noblanks sample.yaml.new > patch.file
# Применим их к оригиналу
patch sample.yaml patch.file
Подразумевается, что, кроме самого yq, на твоей машине установлены patch и diff.
ADRENALINE
Название программы звучит мощно, но на деле это простенький сервис, который позволяет скармливать GPT-3 код с ошибками, чтобы нейросеть объяснила, в чем заключается тот или иной баг. Она может даже попытаться исправить ошибки!

Чтобы воспользоваться «Адреналином», нужно зайти на сайт проекта либо развернуть его у себя локально. Сервис бесплатный, но требует ввода API-ключа для OpenAI. Разработчики клятвенно обещают, что ключ будет храниться локально, но, так это или нет, мы не знаем.
Кроме ключа, потребуется ввести дефектный кусок кода на одном из 22 поддерживаемых языков и ошибку, которую тебе выдает компилятор или интерпретатор. Потом жмешь Debug, и в окне справа должно появиться объяснение. Магия!
TEETTY
Инструмент teetty пригодится, когда нужно организовать для программы фальшивый терминал и рулить вводом‑выводом через файлы. На скриншоте как раз пример такого использования: интерактивная программа висит в фоне, а ввод в нее подается в специальный хитрый файл. Аналогично вывод отображается из другого файла. И конечно, эти файлы могут быть проброшены через сеть или быть доступными не одному человеку.

Фактически teetty — это оболочка, создающая фейковые stdin и stdout, которые ведут себя точно как настоящие. С их помощью можно даже создавать клавиатурные события. Например, отправить Ctrl-D, записав в виртуальный stdin символ 0x04, и таким образом завершить ввод.
Написан teetty на Rust и ставится через Cargo:
cargo install teetty
У программы есть два режима: сырой и для скриптов (--script-mode). Отличаются они тем, что в сыром консоль эмулируется полноценно, но stdout и stderr не разделены. Так работают постраничные просмотрщики, текстовые редакторы и другие программы, которые рисуют целый экран. В скриптовом режиме консоль получается неполноценная, зато поток ошибок становится действительно отдельным и его можно тоже куда‑нибудь направить.
TTOP

Так уж получилось, что в каждой из моей подборок есть вариация на тему top. Этот раз не станет исключением. Предлагаю твоему вниманию ttop. После всего, что мы уже видели в прошлых выпусках, он не выглядит каким‑то уж особенно крутым, но изюминку все же имеет: он может записывать историю активности и позволяет просматривать ее. Это не atop, конечно, но тоже ничего.
Установить ttop можно, просто скачав готовый бинарь с GitHub:
wget https://github.com/inv2004/ttop/releases/latest/download/ttop
chmod +x ttop
Чтобы запустить сбор статистики, выполни ./ttop --on, а для остановки — ./ttop --off. Просматривать историю можно будет при обычном запуске.
SHELLJACK
Shelljack — это утилита, которая работает в пространстве пользователя и с помощью ptrace снифает терминал и позволяет пересылать куда‑нибудь полученные данные. Этакий кейлоггер, который умеет еще и захватывать ввод.
Применение такому инструменту есть не только в целевых атаках, но и в мирной повседневной жизни. Допустим, ты вынужден предоставить кому‑то доступ к оболочке на сервере, который ты администрируешь. Но как проконтролировать происходящее там? Можно просто запустить shelljack и настроить его пересылать тебе все, что творится в терминале, в реальном времени, и, если что‑то идет не так, ты сразу узнаешь, что именно сделал пользователь, и сможешь вовремя дропнуть сессию.
Обычно подобные защитные приколы реализуют с помощью функций аудита, политик SELinux или даже специального модуля в ядре, но эта утилита позволяет вообще не лезть в ядро и сделать все в пользовательском пространстве. Тебе не потребуется даже root!
Но не думай, что ты сможешь вот так вот просто следить за любыми пользователями. Мало того, на Ubuntu, начиная с еще допотопной версии 10.10, применен специальный патч, который ограничивает возможности ptrace, и именно в Ubuntu работа этой утилиты все же потребует прав root. Впрочем, если ты админ, то это вряд ли вызовет какие‑то проблемы.
Готового бинарника у shelljack нет. Для сборки потребуется установить зависимости ptrace_do и ctty, но они тоже собираются без малейших затруднений:
git clone https://github.com/emptymonkey/ptrace_do.git
cd ptrace_do
make
cd ..
git clone https://github.com/emptymonkey/ctty.git
cd ctty
make
cd ..
git clone https://github.com/emptymonkey/shelljack.git
cd shelljack
make
После этого достаточно любым способом подсмотреть PID процесса эмулятора терминала, за которым нужно следить. Команда запуска в общем случае такая:
shelljack [-f FILE]|[-n HOSTNAME:PORT] <PID>
Опция -f указывает на файл для хранения логов, а -n позволяет передавать перехваченные данные в реальном времени по сети на указанный IP-адрес и порт. <PID> — это, соответственно, идентификатор процесса‑жертвы.
PRIVAXY
Блокировщик рекламы и следящих скриптов Privaxy работает не как браузерное расширение, а как отдельный прокси‑сервер, который ставится на компьютер и фильтрует трафик. Учитывая, что с Chrome Manifest v3 появились проблемы, которые мешают работать блокировщикам рекламы, такая замена может быть очень кстати.
Вмешиваться в HTTPS-трафик Privaxy позволяет самоподписанный сертификат: программа добавит его в список доверенных, и браузер не будет поднимать лишнюю панику.

Privaxy написан на Rust и экономично относится к ресурсам — по заявлениям разработчика, на ~320 000 фильтров нужно всего около 50 Мбайт оперативки!
Для установки достаточно скачать собранный бинарник со страницы релизов на GitHub. Сборки доступны для Windows, Linux (пакеты deb и AppImage) и macOS, причем для последних двух есть билды и для ARM.
Прокси поднимается на локальном хосте (не смотрит в сеть) на порте 8100. Для управления существует GUI и CLI-интерфейс.
Что немаловажно, есть возможность выборочно отключать вмешательство в трафик до определенных хостов.
CHATGPT FOR GOOGLE

Про ChatGPT в 2023 году слышал каждый. Эта замечательная нейросеть свободно понимает на многих языках, отвечает на любые вопросы и умеет врать настолько убедительно, что даже понадобились детекторы, способные распознать контент, сгенерированный ИИ (один, другой).
Для нас, инженеров, важно то, что ChatGPT с полпинка понимает задачу и выдает красивое готовое решение. Особенно удобно это использовать при решении типовых проблем, в духе «создать React-компонент» или «распарсить JSON на C#». Можно гуглить, перекапывать Stack Overflow, а можно просто спросить ИИ и получить ответ для конкретно твоей ситуации.
Расширение ChatGPT for Google позволяет совместить эти способы: каждый раз, когда ты спрашиваешь что‑то в Google, Bing, DDG, Brave или еще некоторых поисковиках, расширение продублирует твой запрос в ChatGPT и покажет ответ прямо на странице результатов.
Поддерживается подсветка кода, Markdown в ответах корректно парсится, есть кнопка копирования ответа и, самое главное, темная тема!
Установить это чудо прогресса можно из официальных магазинов Chrome и Firefox, а если у тебя браузер Brave, то нужно будет снять в настройках галочку «Prevent sites from fingerprinting me based on my language preferences», иначе расширение не сможет показывать ответы на страницах поисковика.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei