SYG - Майнер адресов на bash

SimpleYggGen – майнер адресов Yggdrasil, написанный на bash. Позиционировался, как простой инструмент, с которым справится даже начинающий пользователь Linux. Позволяет добывать адреса с красивыми сочетаниями символов. Работает с регулярными выражениями. Проект поддерживался пользователем acetone. Первый релиз датируется 23 апреля 2020 года.
Причина малой скорости работы скрипта кроется в обращении операционной системы к бинарному файлу Yggdrasil. Скрипт постоянно запрашивает у него конфигурационный файл, после чего проверяет полученный адрес через стандартный функционал того же бинарного файла.
Код распространяется свободно, номинально под лицензией GPL v3 or later.

Notabene: В настоящее время использование скрипта SYG на bash не имеет практического смысла. Он остался в истории, как идеологический прородитель, когда в игру вступили майнеры, написанные на C++ и Go.

Механика процесса

Для работы скрипта, в системе должен быть установлен клиент Yggdrasil. В конечном счете майнинг сводится к получению файлов конфигурации Yggdrasil и их проверке на совпадение адреса с искомым фрагментом. Цель (target) задается при запуске скрипта. Обработка осуществляется по параметру EncryptionPublicKey.

Наглядный пример

# Получаем новый файл конфигурации со случайным адресом. Записываем его в переменную "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}")
 
# Затем удачный конфиг записывается на диск.

Скачать

Для практического использования скрипта и более подробного изучения кода, можете сохранить скрипт, кликнув по заголовку блока:

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

Для использования, после загрузки необходимо сделать файл исполняемым:

$ chmod +x ./syg2.4.sh

И запустить (права суперпользователя не требуются):

$ ./syg2.4.sh

Регулярные выражения

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

  • Звездочка «*» означает любое количество символов в строке, предшествующих «звездочке», в том числе и нулевое число символов. Выражение «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», включительно. В данном случае крышка означает отрицание.

Для проверки регулярного выражения перед майнингом его можно проверить следующим образом:

echo примерный_адрес_который_вы_хотите | grep -E "Регулярное_выражение"

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

Примеры

Практические примеры регулярных выражений:

^…: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 минут, каждый оценивался визуально. В результате майнинга в течение нескольких суток были сохранены адреса с подсетью следующего вида:
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 Точка, по-русски

Ссылки

Спасибо: R4SAS

Только авторизованные участники могут оставлять комментарии.
yggdrasil/address_miners/simpleygggen.txt · Последнее изменение: 2023/10/10 18:06 — 127.0.0.1
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki