May 10, 2022

Хакер - Мастерская хакера. Собираем утилиты, которые облегчат жизнь и работу

https://t.me/hacker_frei

Польский Кот

Содержание статьи

  • Работа с файлами
  • Сеть
  • Графика
  • Для скриптов
  • Прочее

Не зна­ешь, чем занять­ся в праз­дни­ки? Не пых­тишь над гряд­кой, под­ста­вив пятую точ­ку сол­нцу? Не орешь пес­ни в пьяном уга­ре? Не беда! Сей­час я тебе рас­ска­жу о замеча­тель­ных прог­рам­мках, копание с которы­ми тебя обя­затель­но раз­вле­чет. А может быть, что‑то из это­го потом будет радовать тебя каж­дый день!

Это уже чет­вертая статья о кон­соль­ных ути­литах, которые дела­ют нашу жизнь луч­ше. В пер­вой мы рас­смат­ривали в основном сетевые ути­литы, во вто­рой — даш­борды и про­чие укра­шатель­ства. В треть­ей я скон­цен­три­ровал­ся на жиз­ни в Windows с WSL.

Я думал было закан­чивать серию, но вы про­дол­жаете при­сылать мне ути­литы, которые счи­таете незас­лужен­но забыты­ми на (веб-) стра­ницах Хакера. Поэто­му сегод­няшняя под­борка будет поч­ти пол­ностью сос­тоять из прис­ланных читате­лями инс­тру­мен­тов, часть из которых я уже взял себе на воору­жение. Думаю, и в твой чемодан­чик что‑то най­дет­ся. Пош­ли смот­реть!

РАБОТА С ФАЙЛАМИ

Goful

Goful — это новень­кий двух­панель­ный фай­ловый менед­жер, написан­ный на Go. Он под­держи­вает мно­гие полез­ные фичи вро­де груп­пового пере­име­нова­ния с помощью регуля­рок и поис­ка. Есть встро­енный тер­минал и мно­гие дру­гие полез­ности.

Скрин­шот Goful

Уп­равля­ется он нем­ного неп­ривыч­но, но удоб­но: вмес­то шот­катов из двух‑трех кно­пок здесь положе­но нажимать все­го по одной. Нап­ример:

  • про­белом мож­но выб­рать один или нес­коль­ко фай­лов (как кли­ки с зажатым Ctrl в гра­фичес­ких сре­дах);
  • \ переб­расыва­ет в кор­невую дирек­торию (нем­ного неоче­вид­но, потому что слеш тут обратный, а не пря­мой, как при­нято в ник­сах);
  • i — пос­мотреть файл в стра­нич­ном прос­мот­рщи­ке;
  • b — добавить зак­ладку на файл;
  • f / — открыть поиск по фай­лам в текущей пап­ке;
  • K — соз­дать пап­ку;
  • d — перей­ти по пути.

Са­мо собой, это лишь малая часть команд. Пол­ный спи­сок есть в README репози­тория.

Ус­тановить Goful мож­но одним из двух спо­собов. Пер­вый — прос­то ска­чать и запус­тить бинар­ный ре­лиз из репози­тория на GitHub. Для вто­рого понадо­бит­ся уста­нов­ленный на тво­ей машине Go:

go install github.com/anmitsu/goful@latest

Goful и так выг­лядит неп­лохо, но мож­но его еще и кас­томизи­ровать: менять управле­ние, цве­та, интер­пре­татор встро­енной коман­дной стро­ки, редак­торы и прос­мот­рщи­ки. Кон­фигура­цион­ного фай­ла нет, вмес­то это­го пред­лага­ется пра­вить main.go, пос­ле чего пере­уста­новить коман­дой go install.

Nnn

Nnn

Nnn — это один из самых минима­лис­тичных кон­соль­ных фай­ловых менед­жеров. Его глав­ное пре­иму­щес­тво — прос­тота и нет­ребова­тель­ность, хотя пос­леднее в мире домаш­них компь­юте­ров с 32 Гбайт опе­ратив­ки ста­ло неак­туаль­но.

В Ubuntu ты можешь уста­новить nnn пря­мо из репози­тория:

sudo apt install nnn

Те­перь ког­да угод­но пиши nnn, и можешь лететь по катало­гам с ветер­ком! Встро­енную справ­ку в любой момент мож­но открыть, нажав знак воп­роса.

Ncdu

Ncdu (NCurses Disk Usage) — это про­качан­ная вер­сия du, которая показы­вает занятое мес­то в кра­сивом псев­догра­фичес­ком интерфей­се.

С ncdu ты можешь не толь­ко смот­реть, сколь­ко занима­ют фай­лы в каком‑то катало­ге, но и лег­ко переме­щать­ся меж­ду ними, а если решишь уда­лить что‑то ненуж­ное, то дос­таточ­но будет нажать кноп­ку d. Естес­твен­но, по слу­чай­ному нажатию прог­рамма ничего не уда­лит — в нее встро­ен новей­ший телепа­тичес­кий ана­лиза­тор, который про­верит твои намере­ния, зап­росив под­твержде­ние.

Ус­танов­ка прос­та как два руб­ля:

sudo apt install ncdu

При запус­ке ncdu прос­каниру­ет текущую пап­ку и выдаст резуль­таты. Путь для ска­ниро­вания мож­но ука­зать пер­вым аргу­мен­том:

ncdu /

Ути­лита работа­ет с впе­чат­ляющей ско­ростью, чем немало раду­ет.

Diffoscope

Ког­да обыч­ного diff мало, может при­годить­ся diffoscope. Кро­ме тек­сто­вых фай­лов, эта шту­кови­на уме­ет срав­нивать пап­ки, архи­вы, бинар­ники, ISO-обра­зы, PDF-докумен­ты и кучу все­го еще — под­держи­вает­ся око­ло 70 типов фай­лов. Пол­ный спи­сок дос­тупен в выводе diffoscope -h.

Diffoscope срав­нива­ет бинар­ники

Ус­танов­ка на Debian и Ubuntu дела­ется одной коман­дой:

sudo apt install diffoscope

Прав­да, при такой уста­нов­ке на чис­тую Ubuntu ска­чалось 1124 пакета сум­марным объ­емом око­ло полуто­ра гигабайт, потому что в зависи­мос­тях есть Python, Java и X-сер­вер. Зачем это кон­соль­ной ути­лите — неиз­вес­тно.

Есть вер­сия для Docker:

docker run --rm -t -w $(pwd) -v $(pwd):$(pwd):ro registry.salsa.debian.org/reproducible-builds/diffoscope

А еще есть вер­сия diffoscope для бра­узе­ра — try.diffoscope.org (на скрин­шоте имен­но она).

Eget

Eget — это клас­сная ути­лита, с помощью которой мож­но уста­нав­ливать софт из репози­тори­ев GitHub, где авто­ры раз­мести­ли релизы с бинар­никами.

Ес­ли бы eget мож­но было уста­новить с помощью eget, то дос­таточ­но было бы написать

eget zyedidia/eget

Ес­ли же eget у тебя еще нет, при­дет­ся вос­поль­зовать­ся готовым ре­лизом или скрип­том‑уста­нов­щиком:

curl https://zyedidia.github.io/eget.sh | sh

СЕТЬ

Wireproxy

Ес­ли тебе нуж­но исполь­зовать Wireguard, но по каким‑то при­чинам не хочет­ся под­нимать пол­ноцен­ный кли­ент, обра­ти вни­мание на wireproxy. Он под­клю­чает­ся к пиру по про­токо­лу Wireguard, но не соз­дает новый сетевой интерфейс, а под­нима­ет SOCKS5-прок­си, который ты можешь ука­зывать в сво­их прог­раммах.

Ус­танов­ка сво­дит­ся к трем строч­кам в тер­минале:

git clone https://github.com/octeep/wireproxy

cd wireproxy

go build ./cmd/wireproxy

Ес­ли же у тебя нет Go — не беда, прос­то ска­чай соб­ранный ре­лиз.

За­пуск тре­бует все­го одно­го парамет­ра:

./wireproxy -c <config file>

Кон­фиг — стан­дар­тный для Wireguard, но в него нуж­но добавить две сек­ции (ком­мента­рии оста­вил для ясности):

# TCPServerTunnel is a tunnel listening on wireguard,

# and it forwards any TCP traffic received to the specified target via local network.

# Flow:

# <an app on your wireguard network> --(wireguard)--> 172.16.31.2:3422 --> localhost:25545

[TCPServerTunnel]

ListenPort = 3422

Target = localhost:25545

# SOCKS5 creates a SOCKS5 proxy on your LAN, and all traffic would be routed via wireguard.

[Socks5]

BindAddress = 127.0.0.1:25344

# SOCKS5 authentication parameters, specifying username and password enables

# proxy authentication.

#Username = ...

# Avoid using spaces in the password field

#Password = ...

Бо­лее под­робно про wireproxy читай в ре­пози­тории про­екта.

Ssh-tools

Ssh-tools — это неболь­шой набор ути­лит для тех, кто мно­го работа­ет по SSH. Самыми полез­ными из них кажут­ся эти:

  • ssh-ping — про­пин­говать SSH-сер­вис (не машину, а имен­но демон SSH);
  • ssh-diff — срав­нить фай­лы на раз­ных машинах;
  • ssh-facts — нем­ного информа­ции об уда­лен­ной сис­теме;
  • ssh-force-password — про­пус­тить авто­риза­цию по клю­чу и залоги­нить­ся по паролю (если сер­вер поз­воля­ет);
  • ssh-keyinfo — информа­ция о клю­чах.

Все ути­литы из это­го набора пар­сят ~/.ssh/config, так что мож­но исполь­зовать уже нас­тро­енные име­на хос­тов отту­да.

На­бор есть в репози­тори­ях всех популяр­ных дис­три­бути­вов — можешь прос­то ста­вить пакет ssh-tools.

Nala

Nala — это клас­сный интерфейс для APT. Уме­ет все, что может стан­дар­тный apt, а кро­ме это­го, под­держи­вает исто­рию и кача­ет пакеты парал­лель­но.

В штат­ных репози­тори­ях nala пока нет, но мож­но под­клю­чить сто­рон­ний и уста­новить отту­да:

echo "deb http://deb.volian.org/volian/ scar main" | sudo tee /etc/apt/sources.list.d/volian-archive-scar-unstable.list

wget -qO - https://deb.volian.org/volian/scar.key | sudo tee /etc/apt/trusted.gpg.d/volian-archive-scar-unstable.gpg > /dev/null

sudo apt install nala

Пос­ле это­го дос­таточ­но вмес­то apt прос­то вызывать nala (nala install nmap, нап­ример).

Iptables-tracer

С помощью iptables-tracer мож­но пос­мотреть, про­ходит ли тра­фик через нуж­ные нам цепоч­ки iptables. Дела­ет он это, встав­ляя в каж­дую цепоч­ку спе­циаль­ные пра­вила‑мар­керы (-j NFLOG), которые будут сра­баты­вать при про­хож­дении пакета через цепоч­ку.

Выг­лядит это так:

$ iptables-tracer -f "-s 192.0.2.1 -p tcp --dport 443" -t 30s

14:42:00.284882 raw PREROUTING 0x00000000 IP 192.0.2.1.36028 > 203.0.45.41.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:]

14:42:00.287255 mangle PREROUTING 0x00008000 IP 192.0.2.1.36028 > 203.0.45.41.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:]

14:42:00.288966 nat PREROUTING 0x00008000 IP 192.0.2.1.36028 > 203.0.45.41.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:]

14:42:00.290545 mangle FORWARD 0x00008000 IP 192.0.2.1.36028 > 198.2.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:eth1]

14:42:00.292123 filter FORWARD 0x00008002 IP 192.0.2.1.36028 > 198.2.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:eth1]

14:42:00.293164 mangle POSTROUTING 0x00008002 IP 192.0.2.1.36028 > 198.2.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In: Out:eth1]

14:42:00.293780 nat POSTROUTING 0x00008002 IP 192.0.2.1.36028 > 198.2.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In: Out:eth1]

Для уста­нов­ки нужен Git и Go. Ста­вим:

git clone https://github.com/x-way/iptables-tracer

cd ./iptables-tracer/

go build

За­пус­каем:

./iptables-tracer -f "-s 1.3.5.7 -p tcp --dport 22" -t 90s

Па­раметр -f поз­воля­ет филь­тро­вать, какой имен­но тра­фик нуж­но отоб­ражать, сог­ласно син­такси­су iptables, а -t зада­ет вре­мя работы, пос­ле которо­го трас­сиров­ка прек­ратит­ся.

Важ­но пом­нить, что пос­ле оста­нов­ки трас­сиров­ки соз­данные в iptables слу­жеб­ные пра­вила не уда­ляют­ся, так что потом их нуж­но уда­лить такой коман­дой:

./iptables-tracer -c

INFO

А ты знал, что с Nftables трас­сиров­ка пра­вил дос­тупна «из короб­ки»? Мы уже писали об этом под­робнее в статье «Nftables. Раз­бира­ем пре­иму­щес­тва перехо­да с iptables на новый фай­рвол». Если мно­го работа­ешь с фай­рво­лом — обя­затель­но озна­комь­ся!

ГРАФИКА

Picocrypt

Picocrypt — прос­тая, но мощ­ная тул­за для шиф­рования фай­лов. К сожале­нию, пос­тавля­ется толь­ко с гра­фичес­ким интерфей­сом, но вряд ли это будет боль­шой проб­лемой.

Picocrypt уме­ет не толь­ко шиф­ровать, но и генерить надеж­ные пароли и редак­тировать метадан­ные фай­лов. Если хочет­ся, мож­но эти метадан­ные даже пол­ностью уда­лить, но идея нап­равить потен­циаль­ных рас­сле­дова­телей по лож­ному сле­ду выг­лядит более инте­рес­но.

В README автор рас­хва­лива­ет свое тво­рение как чуть ли не луч­шее решение для шиф­рования чего угод­но: тут у нас и откры­тые исходни­ки, и малень­кий раз­мер, и сов­ремен­ный алго­ритм, и даже защита от пов­режде­ния дан­ных. Пол­ную срав­нитель­ную таб­лицу мож­но почитать ниже или в репози­тории про­екта.

Срав­нение ПО для шиф­рования фай­лов от авто­ра Picocrypt

Ус­танов­ка в Windows сво­дит­ся к ска­чива­нию соб­ранно­го бинар­ника со стра­ницы релизов, а в Linux ста­вит­ся через Snap:

snap install picocrypt

Ес­ли Snap нет, сна­чала нуж­но уста­новить его (sudo apt install snapd).

Dockeye

Ес­ли тебе вдруг пот­ребовал­ся UI для Docker, поп­робуй dockeye. Это гра­фичес­кий кли­ент для управле­ния Docker, который выг­лядит поч­ти непохо­же на дру­гие подоб­ные инс­тру­мен­ты.

Де­мо из репози­тория

Есть сбор­ки для Linux и macOS. Ска­чать их мож­но со стра­ницы релизов.

Sysmontask

Ес­ли ты сос­кучил­ся по вин­довому дис­петче­ру задач, то с sysmontask ты будешь в Linux как дома!

Где‑то мы это уже видели

Ду­маю, о том, что он дела­ет, рас­ска­зывать не име­ет смыс­ла, так что давай прос­то уста­новим и ты сам все про­веришь:

sudo add-apt-repository ppa:camel-neeraj/sysmontask

sudo apt install sysmontask

// Выполнить только на Ubuntu <=20.04

sudo pip3 install -U psutil

Пер­вый запуск автор рекомен­дует про­водить из кон­соли коман­дой sysmontask.

Neofetch

Neofetch

Neofetch — это прог­рам­мка, которая наг­лядно и кра­сиво выводит ста­тис­тику о тво­ем компь­юте­ре. Она покажет исполь­зуемый дис­три­бутив (с боль­шим логоти­пом!), вер­сию ядра, информа­цию об объ­еме памяти и про­цес­соре, обо­лоч­ку, окру­жение рабоче­го сто­ла (если оно есть), окон­ный менед­жер, активную тему офор­мле­ния и мно­гое дру­гое.

Neofetch есть в репози­тории Ubuntu:

sudo apt install neofetch

Ес­ли ты тоже поль­зуешь­ся WSL, можешь пос­тавить ана­логич­ную прог­рамму wslfetch, которая пос­тавля­ется в сос­таве дис­три­бути­вов, соб­ранных в Microsoft. Ее вывод выг­лядит чуть по‑дру­гому, и работа­ет она замет­но мед­леннее, но не рас­ска­зать о пре­дус­танов­ленном ана­логе я не могу.

Wslfetch

TTYgames

Са­мая важ­ная часть этой статьи — кол­лекция кон­соль­ных игр. Хотя и выг­лядит это в XXI веке как анах­ронизм, но почему нет? Воз­можно, эти раз­вле­чения даже не заметят на работе. Выход этой статьи был отло­жен как раз потому, что я нашел прек­расный тет­рис (на кар­тинке) и не мог отор­вать­ся.

Petris

ДЛЯ СКРИПТОВ

HttpX

HttpX — это мно­гоце­левой инс­тру­мент для авто­мати­зации работы с HTTP. С его помощью удоб­но искать HTTP-сер­веры в резуль­татах ска­ниро­вания, собирать отпе­чат­ки сер­висов и иссле­довать под­сети при пен­тесте.

Осо­бен­но удоб­но ком­биниро­вать httpX с дру­гими инс­тру­мен­тами.

subfinder -d hackerone.com -silent| httpx -title -tech-detect -status-code

__ __ __ _ __

/ /_ / /_/ /_____ | |/ /

/ __ \/ __/ __/ __ \| /

/ / / / /_/ /_/ /_/ / |

/_/ /_/\__/\__/ .___/_/|_|

/_/ v1.1.1

projectdiscovery.io

Use with caution. You are responsible for your actions

Developers assume no liability and are not responsible for any misuse or damage.

https://mta-sts.managed.hackerone.com [404] [Page not found · GitHub Pages] [Varnish,GitHub Pages,Ruby on Rails]

https://mta-sts.hackerone.com [404] [Page not found · GitHub Pages] [Varnish,GitHub Pages,Ruby on Rails]

https://mta-sts.forwarding.hackerone.com [404] [Page not found · GitHub Pages] [GitHub Pages,Ruby on Rails,Varnish]

https://docs.hackerone.com [200] [HackerOne Platform Documentation] [Ruby on Rails,jsDelivr,Gatsby,React,webpack,Varnish,GitHub Pages]

https://support.hackerone.com [301,302,301,200] [HackerOne] [Cloudflare,Ruby on Rails,Ruby]

https://resources.hackerone.com [301,301,404] [Sorry, no Folders found.]

Ус­тановить прог­рамму из исходни­ков мне не уда­лось из‑за проб­лем с Go, но eget без тру­да под­тянул би­нар­ный релиз, который, конеч­но, мож­но ска­чать и вруч­ную.

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

Xj

Тем, кто пытал­ся работать с HTML из shell-скрип­тов, зна­кома боль от попыток пар­синга с помощью регуля­рок. Для вас сущес­тву­ет xj — ути­лита, которая кон­верти­рует HTML-стра­ницу в JSON для даль­нейшей обра­бот­ки. Обра­баты­вать JSON из скрип­тов очень удоб­но с помощью jq:

$ wget -qO- https://stedolan.github.io/jq/ | xj | jq '..|select(.title?)[][]'

"jq"

Прек­расная вещь для прос­тых пар­серов, ког­да по каким‑то при­чинам не хочет­ся прог­рамми­ровать.

Topalias

Topalias генери­рует али­асы для команд, которы­ми ты чаще все­го поль­зовал­ся. Ути­лита показы­вает ста­тис­тику, пред­лага­ет сок­ращения и показы­вает, как их зарегис­три­ровать.

На скри­не выше вид­на оче­вид­ная проб­лема: ути­лита понятия не име­ет, что некото­рые пред­лага­емые ей али­асы име­ют те же име­на, что уста­нов­ленные в сис­теме прог­раммы, в том чис­ле сис­темные. Нап­ример, для коман­ды cd pbsbot пред­ложен али­ас cp, пос­ле при­мене­ния которо­го ты не смо­жешь копиро­вать фай­лы.

И еще одна неп­рият­ность — это битая зависи­мость при уста­нов­ке. Уста­нав­ливать пред­лага­ется сле­дующим обра­зом:

pip3 install -U --user topalias

Но при попыт­ке запус­ка ути­лита незамед­литель­но краш­нется, руга­ясь на непонят­ную ошиб­ку и не давая даже пос­мотреть справ­ку. Починить это мож­но уста­нов­кой более ста­рой вер­сии пакета click:

pip3 install -U --user click==7.1.2

Толь­ко пос­ле это­го все зарабо­тает нор­маль­но.

ПРОЧЕЕ

Jrnl

Для пос­тоян­ных оби­тате­лей тер­минала сущес­тву­ет jrnl — кон­соль­ная ути­лита для заметок.

Ус­танов­ка дела­ется через pipx, и автор ути­литы пре­дуп­режда­ет о воз­можных проб­лемах при неп­равиль­ной уста­нов­ке это­го пакет­ного менед­жера. Я ста­вил pipx через APT (хотя автор так делать не рекомен­дует) и с проб­лемами не стол­кнул­ся, но имей в виду, что они быва­ют.

Пред­положим, что «пра­виль­ный» pipx у тебя уже есть. Тог­да уста­нов­ка дела­ется в одну коман­ду:

pipx install jrnl

Что­бы запус­тить jrnl, либо прос­то передай замет­ку аргу­мен­том коман­дной стро­ки, либо запус­ти jrnl и напеча­тай все в самой ути­лите — это удоб­но, если текст замет­ки длин­ный.

Мож­но добав­лять к замет­кам заголов­ки, теги, мет­ки вре­мени и даже зашиф­ровать свой жур­нал.

Файл с замет­ками — это прос­той текст, поэто­му смот­реть его мож­но самыми раз­ными спо­соба­ми. В допол­нение к ним в прог­рамме есть клю­чи --short (покажет толь­ко заголов­ки) и --export text (выведет весь файл жур­нала).

Мой малень­кий днев­ник

Ути­лита хоть и выг­лядит минима­лис­тичной, но в реаль­нос­ти воз­можнос­тей немало. Их под­робное опи­сание ты най­дешь на сай­те раз­работ­чика.

Уведомления с Android на Linux

Android2Linux Notifications — это спо­соб показать уве­дом­ления из Android на нас­толь­ном Linux с помощью libnotify.

И компь­ютер, и телефон дол­жны находить­ся в одной сети, так как меж­ду ними уста­нав­лива­ется пря­мое соеди­нение при каж­дом новом уве­дом­лении. Но ник­то не зап­реща­ет соз­дать эту связь уда­лен­но при помощи VPN-тун­неля вро­де Wireguard.

Ус­танав­лива­ется сна­чала сер­вер на компь­юте­ре, а затем при­ложе­ние на телефо­не. Сер­вер уста­нав­лива­ется сле­дующи­ми коман­дами:

git clone https://github.com/patri9ck/a2ln-server.git

cd a2ln-server

sudo make install

Ес­ли воз­никнут проб­лемы, уста­нови зависи­мос­ти через pip — спи­сок лежит в requirements.txt.

Пос­ле это­го мож­но запус­тить сер­вер коман­дой a2ln 50505, что­бы слу­шать на 50505-м пор­те. Конеч­но, ты можешь его поменять по сво­ему усмотре­нию, но пом­ни, что пор­ты ниже 1024-го тре­буют прав root. А еще не забудь закинуть старт сер­вера в авто­заг­рузку любым удоб­ным спо­собом, что­бы уве­дом­ления про­дол­жили при­ходить пос­ле перезаг­рузки машины, если ты ее вооб­ще перезаг­ружа­ешь.

На телефо­не нуж­но ска­чать из F-Droid при­ложе­ние‑кли­ент и вбить в него IP и порт, на котором слу­шает сер­верная часть. Если ты счас­тли­вый обла­датель Huawei, Samsung, Xiaomi или дру­гого телефо­на с дра­коно­вым энер­госбе­реже­нием, то при­дет­ся оза­ботить­ся вне­сени­ем при­ложе­ния в белый спи­сок, что­бы сис­тема его не уби­вала. Как это сде­лать — читай на dontkillmyapp.com или в про­филь­ных вет­ках форумов.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei