Как написать свой майнер
Перейти к содержимому

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

  • автор:

Создаем скрытый майнер XMR с умными опциями

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

Сегодня я покажу, как создать достаточно хороший и функциональный майнер монеро (XMR), который сможет приносить вам доход.

Где скачать билдер майнера

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

Создание и настройка

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

В поле pool нужно написать алрес пула, на котором вы будете майнить.

Итак, нам нужно выбрать pool. От себя могу посоветовать использовать https://supportxmr.com/ или https://minergate.com/xmr-mining-pool. Можно и другие, пулов достаточно много и их легко можно найти по запросу гугл.

В чем отличие? В первом случае вам не нужно будет регистрироваться, нужно будет только создать кошелек Monero (об этом буду говорить дальше), во втором случае потребуется регистрация. Дальше вы еще увидите разницу между ними.

Если вы выбираете supportxmr, то в поле pool вводим:

Следующий пункт — Wallet. Если вы выбрали supportxmr, то вы вводите адрес своего кошелька Monero (очень длинный набор цифр и букв). Если у вас его нет, тогда нужно создать. Для этого переходим на сайт официального приложения монеро и скачиваем GUI кошелек.

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

и вставляем в поле Wallet.

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

В поле Password, вам ничего не нужно вводить.

Далее переходим к разделу Install

Нажимаем на квадратик чтобы он стал зеленым и выбираем куда сохранится наш майнер после попадания на ПК жертвы, я выбрал Appdata. Также даем название файлу майнера. Если вы активируете пункт Watchdog, на ПК жертвы установится дополнительная программа, которая будет следить, чтобы майнер не пропадал из AppData и всё время работал, если вдруг майнер пропадает (его удалили оттуда), эта программа снова копирует майнер по указанному пути (AppData).

Следующий раздел Assembly

Добавляет фейк информацию о вашем файле. Нужно, чтобы просто укрепить доверие к вашему файлу. Можно нажать Randomize и будет сгенерирована случайным образом, можно взять у какого-то другого файла.

Тут всё зависит от того, под что вы хотите маскировать майнер. В соответствии с этим и указываем данную информацию.

Пункт Icon дает возможность добавить иконку вашему майнеру.

Следующий раздел Mining

И вот тут можно найти много интересного.

Первые два пункта отвечают за то, на чем будет майнить ваш майнер, CPU или GPU. Понятно дело, что на GPU процесс будет идти значительно интенсивнее.

Пункт Idle Mining дает возможность настроить мощность майнера в зависимости от того, как работает ПК. Если пользователь пользуется компьютером, то для того, чтобы не выдать себя, следует указать не очень высокую нагрузку. Максимальная нагрузка майнера на систему во время работы пользователя указывается в MAX CPU (я выставил 40%).

Однако если человек не пользуется компьютером и он просто стоит, то почему бы не увеличить мощность. Нагрузка майнера во время простоя ПК указывается в Idle CPU (у меня стоит 80%). При этом время, после которого майнер будет считать, что компьютер простаивает указывается в Idle Wait (у меня 5 минут). Отслеживается это очень просто, если пользователь на двигает мышкой и не печатает на клавиатуре, значит ПК простаивает. Через 5 минут, если не будет никаких движений, то он начнет майнить с нагрузкой 80%.

Пункты SSl/TLS и Nicehash Mining могут не поддерживаться некоторыми пулами, нужно узнавать информацию на сайте пула.

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

Ну и наконец можно перейти к пункту Build и получить готовый майнер. Кстати там же можно настроить время, спустя которое запустится ваш майнер после того, как вы дважды кликните по нему.

Майнер на Java. Создание майнера криптовалюты Electroneum

Electroneum Майнер на Java

В качестве криптовалюты возьмем Electroneum. Это довольно перспективная криптовалюта из семейства Monero. Как заверяют разработчики, она защищена от майнинга на специальном оборудовании, точнее, оборудование будет стоить больше, чем можно получить прибыли. Это дает примерно равные шансы всем майнерам. Так как в качестве основы была использована Monero, многое из написанного будет правдиво и для других криптовалют этого семейства.

Для начала разберемся, что же такое майнинг. По сути это проверка транзакций различных пользователей криптовалют. Нет никакого центрального органа, а подтвердить, что один участник сети не использовал свои деньги дважды или не попытался как-то еще обмануть систему, могут все остальные. За это майнеры получают награду в виде небольшого количества криптоденег. В эту сумму входит награда за создание нового блока и оплата за транзакции, которая взимается с пользователей, проводящих транзакцию, и уже включена в нее.

Создание нового блока представляет собой решение определенной математической задачи. Необходимо найти такой хеш блока, который был бы меньше значения, определяемого сетью. Это значение называется сложность (difficulty). Оно регулируется сетью, чтобы время создания блока было более-менее предсказуемо. Майнер, который первый решит задачу, получает всю награду. Награда за блок на сегодняшний день составляет 11 300,93 ETN, что примерно равно 146,2 доллара.

В блоке не обязательно должны быть транзакции других пользователей, может быть только одна транзакция создания новых денег. Зачем нужно просто раздавать деньги? Во-первых, это привлекает больше участников сети, во-вторых, снижает риск атаки на сеть, так как заработать легально получается проще.

Чтобы стать участником сети Electroneum, необходимо скачать пакет программ с официального сайта. Выбираем direct miner для своей платформы. После скачивания и распаковки нужно синхронизироваться с сетью — скачать все уже сгенерированные блоки. Для разработки и тестирования лучше пользоваться тестовой сетью с пониженной сложностью.

К сожалению, синхронизация «из коробки» может зависнуть на блоке 155750. Это связано с найденным критичным багом и кардинальными изменениями из-за этого в сети Electroneum (подробнее). Поэтому прежде чем запускать синхронизацию, нужно скачать файлик с правильной цепочкой блоков и положить его в папку . electroneum / testnet / export / blockchain . raw . Затем выполнить импорт:

Пишем майнер на Java. Кодим добытчик криптовалюты Electroneum

В качестве криптовалюты возьмем Electroneum. Это довольно перспективная криптовалюта из семейства Monero. Как заверяют разработчики, она защищена от майнинга на специальном оборудовании, точнее, оборудование будет стоить больше, чем можно получить прибыли. Это дает примерно равные шансы всем майнерам. Так как в качестве основы была использована Monero, многое из написанного будет правдиво и для других криптовалют этого семейства.

Для начала разберемся, что же такое майнинг. По сути это проверка транзакций различных пользователей криптовалют. Нет никакого центрального органа, а подтвердить, что один участник сети не использовал свои деньги дважды или не попытался как-то еще обмануть систему, могут все остальные. За это майнеры получают награду в виде небольшого количества криптоденег. В эту сумму входит награда за создание нового блока и оплата за транзакции, которая взимается с пользователей, проводящих транзакцию, и уже включена в нее.

Создание нового блока представляет собой решение определенной математической задачи. Необходимо найти такой хеш блока, который был бы меньше значения, определяемого сетью. Это значение называется сложность (difficulty). Оно регулируется сетью, чтобы время создания блока было более-менее предсказуемо. Майнер, который первый решит задачу, получает всю награду. Награда за блок на сегодняшний день составляет 11 300,93 ETN, что примерно равно 146,2 доллара.

В блоке не обязательно должны быть транзакции других пользователей, может быть только одна транзакция создания новых денег. Зачем нужно просто раздавать деньги? Во-первых, это привлекает больше участников сети, во-вторых, снижает риск атаки на сеть, так как заработать легально получается проще.

Чтобы стать участником сети Electroneum, необходимо скачать пакет программ с официального сайта. Выбираем direct miner для своей платформы. После скачивания и распаковки нужно синхронизироваться с сетью — скачать все уже сгенерированные блоки. Для разработки и тестирования лучше пользоваться тестовой сетью с пониженной сложностью.

К сожалению, синхронизация «из коробки» может зависнуть на блоке 155750. Это связано с найденным критичным багом и кардинальными изменениями из-за этого в сети Electroneum (подробнее). Поэтому прежде чем запускать синхронизацию, нужно скачать файлик с правильной цепочкой блоков и положить его в папку .electroneum/testnet/export/blockchain.raw . Затем выполнить импорт:

Теперь смело запускаем синхронизацию:

Далее создаем кошелек для начисления заработка:

Ответив на все вопросы, получаем публичный адрес в файлике <название кошелька>.address.txt . Если лениво заморачиваться с развертыванием сервера Electroneum, можно воспользоваться онлайн-сервисом nodes.hashvault.pro:26968 .

Настало время запустить свой любимый редактор и приступать к кодированию. Для связи с сервисом Electroneum используется протокол jsonrpc . Нам понадобится всего две команды: получить шаблон блока и отправить решение. Начнем с простого HTTP-клиента:

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Пишем майнер криптовалюты на Java.

IB Tree

В качестве криптовалюты возьмем Electroneum. Это довольно перспективная криптовалюта из семейства Monero. Как заверяют разработчики, она защищена от майнинга на специальном оборудовании, точнее, оборудование будет стоить больше, чем можно получить прибыли. Это дает примерно равные шансы всем майнерам. Так как в качестве основы была использована Monero, многое из написанного будет правдиво и для других криптовалют этого семейства.

Для начала разберемся, что же такое майнинг. По сути это проверка транзакций различных пользователей криптовалют. Нет никакого центрального органа, а подтвердить, что один участник сети не использовал свои деньги дважды или не попытался как-то еще обмануть систему, могут все остальные. За это майнеры получают награду в виде небольшого количества криптоденег. В эту сумму входит награда за создание нового блока и оплата за транзакции, которая взимается с пользователей, проводящих транзакцию, и уже включена в нее.

Создание нового блока представляет собой решение определенной математической задачи. Необходимо найти такой хеш блока, который был бы меньше значения, определяемого сетью. Это значение называется сложность (difficulty). Оно регулируется сетью, чтобы время создания блока было более-менее предсказуемо. Майнер, который первый решит задачу, получает всю награду. Награда за блок на сегодняшний день составляет 11 300,93 ETN, что примерно равно 146,2 доллара.

В блоке не обязательно должны быть транзакции других пользователей, может быть только одна транзакция создания новых денег. Зачем нужно просто раздавать деньги? Во-первых, это привлекает больше участников сети, во-вторых, снижает риск атаки на сеть, так как заработать легально получается проще.

Чтобы стать участником сети Electroneum, необходимо скачать пакет программ с официального сайта. Выбираем direct miner для своей платформы. После скачивания и распаковки нужно синхронизироваться с сетью — скачать все уже сгенерированные блоки. Для разработки и тестирования лучше пользоваться тестовой сетью с пониженной сложностью.

К сожалению, синхронизация «из коробки» может зависнуть на блоке 155750. Это связано с найденным критичным багом и кардинальными изменениями из-за этого в сети Electroneum (подробнее). Поэтому прежде чем запускать синхронизацию, нужно скачать файлик с правильной цепочкой блоков и положить его в папку .electroneum/testnet/export/blockchain.raw . Затем выполнить импорт:

> ./electroneum-blockchain-import —testnet —verify 0 Теперь смело запускаем синхронизацию:

> ./electroneumd —testnet Далее создаем кошелек для начисления заработка:

> electoneum-wallet-cli —testnet Ответив на все вопросы, получаем публичный адрес в файлике <название кошелька>.address.txt . Если лениво заморачиваться с развертыванием сервера Electroneum, можно воспользоваться онлайн-сервисом nodes.hashvault.pro:26968 .

Настало время запустить свой любимый редактор и приступать к кодированию. Для связи с сервисом Electroneum используется протокол jsonrpc . Нам понадобится всего две команды: получить шаблон блока и отправить решение. Начнем с простого HTTP-клиента:

< "jsonrpc":"2.0", "id":"0", "method":"get_block_template", "params":< "wallet_address":"44GBHzv6ZyQdJkjqZje6KLZ3xSyN1hBSFAnLP6EAqJtCRVzMzZmeXTC2AHKDS9aEDTRKmo6a6o9r9j86pYfhCWDkKjbtcns", "reserve_size":8 >> В качестве параметра wallet_address указываем адрес из файла <название кошелька>.address.txt . Адрес используется, чтобы сразу сгенерировать транзакцию получения награды за расчет блока. Параметр reserve_size задает, сколько выделить зарезервированных байтов, которые потом можно использовать при майнинге. Максимальное число — 255 байт.

В результате получаем:

Описание blocktemplate_blobElectroneum предоставляет две возможности для майнинга. Можно использовать готовый для расчета хеша blockhashing_blob, подбирая четыре байта nonce. Из достоинств — не нужно рассчитывать самому корень Меркле для транзакций. Из недостатков — довольно скудный набор возможных значений, среди которых может и не найтись нужного.

Второй вариант — использовать сырой блок blocktemplate_blob. Тут уже можно перебирать как четыре байта nonce, так и значение блока дополнительных данных, что заметно расширяет вероятность нахождения нужного значения. Но приходится считать хеш первой транзакции и корень Меркле, а только потом рассчитывать хеш самого блока.

Для начала попробуем первый вариант. Напишем небольшой метод, который будет перебирать значения nonce.

public static boolean findProperNonce(byte[] blockheader, int nonceByteIndex, long difficulty) < byte nonceByte = Byte.MIN_VALUE; while (nonceByte != Byte.MAX_VALUE) < blockheader[39 + nonceByteIndex] = nonceByte; if (nonceByteIndex < 3) < boolean found = findProperNonce(blockheader, nonceByteIndex + 1, difficulty); if (found) < return true; >> else < byte[] hash = calculateHash(blockheader); if (hasRequiredDifficulty(hash, difficulty)) return true; >nonceByte++; > return false; > Electroneum использует алгоритм хеширования CryptoNight. Описание алгоритма можно посмотреть тут. Хорошая новость — есть много готовых реализаций, плохая — практически все они написаны на С. К счастью, Java-машина прекрасно умеет запускать код на С. Поэтому, чтобы сократить время, возьмем готовую реализацию алгоритма и сделаем для нашего майнера подключаемую DLL’ку.

Для этого нам понадобится Cygwin. Это набор опенсорсных линуксовых утилит, которые можно запускать под виндой. При установке нужно выбрать пакеты mingw64-x86_64-gcc-core и mingw64-x86_64-gcc-g++ .

Установка CygwinДля загрузки библиотеки создадим класс CryptoNight в пакете com.gogaworm.electroneumminer .

public class Cryptonight < // Загружаем библиотеку с именем minerhashing, расширение писать не нужно static < System.loadLibrary("minerhashing"); >// Метод расчета хеша из библиотеки public native static void calculateHash(byte[] output, byte[] input); > Метод calculateHash объявлен как native, это означает, что он реализован на другом языке. Далее нужно сгенерировать файл заголовка:

> %JAVA_HOME%\bin\javah.exe -jni -v -d com/gogaworm/electroneumminer com.gogaworm.electroneumminer.Cryptonight В результате получим файл com_gogaworm_electroneumminer_Cryptonight.h . В нем объявлен метод Java_com_gogaworm_electroneumminer_Cryptonight_hash , который нужно реализовать на С. Для этого создадим файл с таким же именем, но расширением .c. Оба файла нужно перенести в папку с исходниками libcryptonight.

> x86_64-w64-mingw32-gcc -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/win32" -shared -o minerhashing.dll -g com_gogaworm_electroneumminer_Cryptonight.c cryptonight.c crypto/aesb.c crypto/c_blake256.c crypto/c_groestl.c crypto/c_jh.c crypto/c_keccak.c crypto/c_skein.c crypto/oaes_lib.c Чтобы наш майнер увидел библиотеку, необходимо определить системную переменную Java java.library.path=<путь к библиотеке> .

Проверим, что библиотека работает правильно. В документе, описывающем алгоритм CryptoNight, есть два примера для проверки. Запустим один из них:

@Test public void testHashMethod() throws UnsupportedEncodingException < byte[] outputBuffer = new byte[32]; byte[] input = hexStringToByteArray(block); Cryptonight.calculateHash(outputBuffer, "This is a test".getBytes("US-ASCII")); assertEquals("a084f01d1437a09c6985401b60d43554ae105802c5f5d8a9b3253649c0be6605", bytesToHex(outputBuffer).toLowerCase()); >Остался метод проверки, найдено ли нужно значение. Команда get_block_template вернула в результате параметр difficulty. Этот параметр показывает условный коэффициент сложности нахождения нужного хеша. По спецификации сложность = ( 2^265 — 1 ) / целевое значение (target). Для этой формулы хеш блока нужно перевести из больших индейцев в мелкие. Затем сравним с текущей сложностью, чтобы понять, найдено ли нужное значение:

13b3cf8b04b6bb78f0c7c1a50f7e8656963c1f48a56ba89999eddf0531750b15 а сложность — 252087628780 . В результате вычислений получаем, что hashdiff больше difficulty.

Когда найдено нужное значение nonce, можно отправлять блок в сеть. Это делает команда

Вместо заключения

Как заявляют разработчики криптовалюты Electroneum, ее можно майнить даже на смартфонах. Приложение для майнинга уже лежит в Google Play. Но на самом деле там только симуляция майнинга: вместо того чтобы решать сложную криптографическую задачу, измеряют доступную производительность CPU, которую теоретически можно было бы использовать для майнинга, и на основе этого значения начисляется заработок. Поэтому майнер для Андроида будет выглядеть несколько иначе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *