2024-02-10 12:53:55 +00:00

271 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== SYG - Майнер адресов на bash ======
SimpleYggGen -- майнер адресов Yggdrasil, написанный на bash. Позиционировался, как простой инструмент, с которым справится даже начинающий пользователь Linux. Позволяет добывать адреса с красивыми сочетаниями символов. Работает с регулярными выражениями. Проект поддерживался пользователем [[user:acetone|acetone]]. Первый релиз датируется 23 апреля 2020 года.\\
Причина малой скорости работы скрипта кроется в обращении операционной системы к бинарному файлу Yggdrasil. Скрипт постоянно запрашивает у него конфигурационный файл, после чего проверяет полученный адрес через стандартный функционал того же бинарного файла.\\
Код распространяется свободно, номинально под лицензией GPL v3 or later.
**Notabene**: В настоящее время использование скрипта SYG на bash не имеет практического смысла. Он остался в истории, как идеологический прородитель, когда в игру вступили майнеры, написанные на [[yggdrasil:address_miners:simpleygggen_cpp|C++]] и [[yggdrasil:address_miners:simpleygggen_go|Go]].
{{:syg:v2.4.png}}
==== Механика процесса ====
Для работы скрипта, в системе должен быть установлен клиент Yggdrasil. В конечном счете майнинг сводится к получению файлов конфигурации Yggdrasil и их проверке на совпадение адреса с искомым фрагментом. Цель (target) задается при запуске скрипта. Обработка осуществляется по параметру EncryptionPublicKey.\\
=== Наглядный пример ===
<code bash>
# Получаем новый файл конфигурации со случайным адресом. Записываем его в переменную "tempconf".
tempconf=$(yggdrasil -genconf)
# Извлекаем из конфига значение EncryptionPublicKey в одноименную переменную.
EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}")
# Проверяем адрес, ищем совпадение с искомой строкой ($target).
if ( echo $EncryptionPublicKey | yggdrasil -address -useconf | grep -i -E "$target")
# Если есть совпадение, извлекаем из конфига EncryptionPrivateKey.
then EncryptionPrivateKey=$(echo $tempconf | grep -w -o -E "EncryptionPrivateKey: [0-9a-f]{64}")
# Затем удачный конфиг записывается на диск.
</code>
==== Скачать ====
Для практического использования скрипта и более подробного изучения кода, можете сохранить скрипт, кликнув по заголовку блока:
<file bash syg2.4.sh>
#!/bin/bash
#---------------------------------------------------------------#
# RU: Пожелания и правки присылайте на hash.null @acetone #
# EN: Send wishes and corrections to the hash.null @acetone #
# #
# SimpleYggGen v2.4, acetone, 2020. Russia. #
#---------------------------------------------------------------#
#-----------------КОНФИГУРАЦИЯ / CONFIGURATION------------------#
# Set Yggdrasil binary path:
# for Linux:
YGGBIN=/usr/bin/yggdrasil
# for Windows (running that script with MSYS2 (msys2.org):
#YGGBIN="/c/Program Files/Yggdrasil/yggdrasil.exe"
#
# To enable non-special names uncomment that line:
#nonspecial=true
#
# To enable system testing uncomment that line:
runtest=true
#
#------------------------КОНЕЦ / END----------------------------#
#---------------------------------------------------------------#
#--ЛЮБЫЕ ИЗМЕНЕНИЯ В КОДЕ НИЖЕ ВЫ ДЕЛАЕТЕ НА СВОЙ СТРАХ И РИСК--#
#-----ANY CHANGES IN THE CODE BELOW YOU DO AT YOUR OWN RISK-----#
#---------------------------------------------------------------#
test () {
timestart=$(date '+%s')
for (( c=1; c<101; c++ )); do
tempconf=$("$YGGBIN" -genconf)
EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}")
if [[ $c = 102 ]]; then
echo '' > /dev/null
fi
echo -n -e "\e[36m Analyzing $c%\e[0m" \\r
done
timestop=$(date '+%s')
final=$(($timestop-$timestart))
if [[ "$final" -le "1" ]]; then
color="\e[36m"
elif [[ "$final" -le "2" ]]; then
color="\e[32m"
elif [[ "$final" -le "3" ]]; then
color="\e[33m"
else
color="\e[31m"
fi
echo -n -e "$color Testing taken $final second(s)\e[0m\n\n"
}
log () {
echo -e "Yggdrasil addresses list\\n$(date '+%Y-%m-%d %H:%M:%S')"\\n > ./syg.log
if ( ls ./sygX* 2> /dev/null | grep 2 &> /dev/null ); then
ls ./sygX* 2> /dev/null | tr -d syg | tr _ : | tr -d X >> ./syg.log 2> /dev/null
echo '' >> ./syg.log
liness=$(wc ./syg.log -l | cut -f1 -d' ' 2> /dev/null);
tail -n $(($liness-2)) ./syg.log 2> /dev/null
echo -e "\e[32m Names saved to syg.log\e[0m\n"
else
echo -e "\e[31m sygX* file not exist\e[0m\n"
main
exit 0
fi
}
tars () {
log
tar -cf ./syg$(date '+%Y%m%d_%H%M').tar ./sygX* syg.log 2> /dev/null
echo -e "\e[32m All addresses archived\e[0m\n"
}
intro () {
clear
echo -e "\e[38m"' '
echo -e " ▒▒▒▒▒▒ ▒ ▒ ▒▒▒▒▒▒"
sleep 0.05
echo -e " ▒ ▒ ▒ ▒"
sleep 0.05
echo -e " ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒ ▒▒▒"
sleep 0.05
echo -e " ▒ ▒ ▒ ▒"
sleep 0.05
echo -e " ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒\e[0m"
echo -e "\e[38m\n © SimpleYggGen v2.4\n acetone, 2020\e[0m\n"
}
main () {
circle=0
randomfortune=0
sleep 0.03
echo -e -n ' Target'"$color » \e[0m"
read userinput
if [[ $userinput = '' ]]; then
target=::
elif [[ $userinput == [lL][oO][gG] ]]; then
log
sleep 0.3
main
elif [[ $userinput == [tT][aA][rR] ]]; then
tars
sleep 0.3
main
elif [[ $userinput == [tT][aA][rR][dD][eE][lL] ]]; then
tars
rm -r ./sygX* 2> /dev/null
echo -e "\e[33m Original files deleted\e[0m\n"
sleep 0.3
main
elif [[ $userinput == *[g-zG-Zа-яА-Я\;\+\&\#\~\_\%\=\/]* ]]; then
sleep 0.03
echo -e " \e[31mIncorrect input\e[0m" \\n
sleep 0.03
main
else
target=$userinput
fi
if [[ $nonspecial == "true" ]]; then
dirname=$(echo $target | tr \* S | tr \| I | tr : C | tr ^ U | tr $ D | tr - M | tr [ L | tr ] J | tr . T)
else
dirname=$target
fi
clear
echo -e \\n" [$color$target\e[0m] $(date '+%Y.%m.%d %H:%M:%S')\n"
tput civis
for ((;;)); do
tempconf=$("$YGGBIN" -genconf)
EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}")
if ( echo $EncryptionPublicKey | "$YGGBIN" -address -useconf | grep -i -E "$target" &> /dev/null ); then
EncryptionPrivateKey=$(echo $tempconf | grep -w -o -E "EncryptionPrivateKey: [0-9a-f]{64}")
yggsubnet=$(echo $EncryptionPublicKey | "$YGGBIN" -subnet -useconf)
yggaddress=$(echo $EncryptionPublicKey | "$YGGBIN" -address -useconf)
mkdir ./sygX$dirname &> /dev/null
sygnamefile=$(echo $yggaddress | tr : _)
echo -e "# Address: $yggaddress\n# Subnet: $yggsubnet\n\n# Change it to yggdrasil.conf\n $EncryptionPublicKey\n $EncryptionPrivateKey\n\n# SimpleYggGen v2.4 [$(date '+%Y-%m-%d %H:%M:%S')] \n# Check new version: https://cloud.disroot.org/s/TA63PBsQ6Z7dfGW" > ./sygX$dirname/$sygnamefile
randomfortune=$(($randomfortune+1))
fi
circle=$(($circle+1))
echo -n -e " \e[35m$circle/\e[0m$randomfortune \e[32m$yggaddress\e[0m " \\r
done
}
# Start script execution
intro
# Run test if enabled
if [[ $runtest == "true" ]]; then
test
else
color="\e[37m"
fi
# Start interactive
main
</file>
Для использования, после загрузки необходимо сделать файл исполняемым:
<code>
$ chmod +x ./syg2.4.sh
</code>
И запустить (права суперпользователя не требуются):
<code>
$ ./syg2.4.sh
</code>
==== Регулярные выражения ====
Регулярные выражения - это набор символов, которые наделены особыми свойствами. Они позволяют сделать процесс майнинга более нацеленным на нужный результат. Это позволяет избежать выдачи похожих, но неподходящих адресов.
* Звездочка "*" означает любое количество символов в строке, предшествующих "звездочке", в том числе и нулевое число символов. Выражение "233*" - означает 2 + один или более символов "3" + любые другие символы: 23, 233, 23355, и так далее.
* Точка "." означает не менее одного любого символа. Выражение "13." будет означать 13 + по меньшей мере один любой символ (включая пробел): 1133, 11333, но не 13 (отсутствуют дополнительные символы).
* Крышка "^" означает начало строки.
* Знак доллара "$" в конце регулярного выражения соответствует концу строки.
* Квадратные скобки "[ ]" предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок. Выражение "[abc]" соответствует одному из символов a, b или c. Выражение "[a-f]" соответствует одному из символов в диапазоне от a до f, включительно. Выражение "[a-f0-9]" соответствует одному из символов латиницы от "a" до "f" или цифре. Выражение "[^b-f]" соответствует любому символу, кроме символов из диапазона от "b" до "f", включительно. В данном случае крышка означает отрицание.
Для проверки регулярного выражения перед майнингом его можно проверить следующим образом:
<code>
echo примерный_адресоторый_вы_хотите | grep -E "Регулярное_выражение"
</code>
Если выдача команды оказалась пустой, по вашему регулярному выражению искомый адрес обнаружен не будет.
==== Примеры ====
=== Практические примеры регулярных выражений: ===
''^...:420:'' # Привязка к началу строки, первые три символа - любые, двоеточие, 420, двоеточие.\\
''^2.[a-f]'' # Привязка к началу строки, двойка - первая, затем любой символ, третий символ - любая //цифра// от "a" до "f".\\
''1dea$'' # Привязка к концу строки.\\
''^...:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}$'' # Адрес, состоящий только из цифр от 0 до 9.\\
''^...:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}$'' # Адрес, состоящий только из //букв// от a до f.
=== Примеры майнинга ===
''::'' # Адрес с двойным двоеточием (является целью по умолчанию).\\
На майнинг указанного адреса ушли сотни миллионов циклов (около месяца в несколько потоков).\\
''200::c84:77b0:f66d:b47e:64c7''
''^...:ace:'' # Второй разряд адреса "ace".\\
Такие адреса находились примерно раз в 20-40 минут, каждый оценивался визуально. В результате майнинга в течение нескольких суток были сохранены адреса с [[yggdrasil:subnet_setting|подсетью]] следующего вида:\\
''
300:ace:1ace:dd67::\\
300:ace:1dea:319f::\\
300:ace:ac1d:1f10::\\
''
Конечно же это баловство, но мелочь, а приятно ;-)
==== Дополнительные функции ====
В версии 2.3 //(релиз 29.05.2020)// появилось три функции, которые делают работу с полученными файлами конфигурации более удобной.
* ''log'' - сохраняет в файл имена всех имеющихся адресов
* ''tar'' - создает лог и упаковывает все имеющиеся адреса в один архив
* ''tardel'' - создает лог, упаковывает конфиги в архив и удаляет оригинальные файлы
Данный функционал полезен для крупномасштабного майнинга.
==== Специальные символы в именах ====
Для замены специальных символов в названии файлов и папок, создаваемых майнером, необходимо раскомментировать строку ''special=false''. В некоторых ситуациях это может оказаться полезным.
Таблица замены спецсимволов:
^ Спецсимвол ^ Замена ^ Мнемоника ^
| * | S | Star |
| Вертикальная черта | I | |
| : | C | Colon |
| Крышка | U | Up |
| $ | D | Dollar |
| - | M | Minus |
| [ | L | |
| ] | J | |
| . | T | Точка, по-русски |
===== Ссылки =====
* [[yggdrasil:address_miners:simpleygggen_cpp|SimpleYggGen-C++]]
* [[yggdrasil:address_miners:simpleygggen_go|SimpleYggGen-Golang]] от tdemin
* [[https://github.com/vikulin/ygg_me_nice_ipv6|YggMeNice (Golang)]] от vikulin
''**Спасибо:**'' R4SAS