Блокчейн на C# (.Net Core 3.1), Часть 0
Всем категорический привет! На связи из Волго-Вятского экономического района — великий и могучий Нукрас!
Вдохновившись этой и этой статьями, я, ̶к̶а̶к̶ ̶к̶о̶р̶е̶н̶н̶о̶й̶ ̶о̶д̶е̶с̶с̶и̶т̶ не преминул возможностью подрезать интересную идейку. Поэтому, встречайте, Блокчейн на C#, часть номер ноль!
Так как данная статья, по сути, является ̶ф̶о̶р̶к̶о̶м̶ сиквелом вышеуказанных статей, я не буду останавливаться на объяснении таких терминов как «блокчейн», «сложность», «майнинг» и так далее. В тех статьях, в принципе, все вполне понятно рассказали.
Ну и заранее отмечу, что с программированием я знаком на уровне младшего братика джуна, и вообще олень.
Первым делом определим класс «Block»
В классе «Block» мы будем хранить время, когда блок был создан, данные, который мы в него записываем, его хэш и значение nonce. Что-либо еще хранить в блоке считаю излишним.
Цепочку блоков мы будем хранить в списке:
А данный список будет лежать в статическом классе «Blockchain»:
Для того, чтобы добавлять блоки, напишем метод «AddBlock». Данный метод будет находиться в статическом классе «Blockchain», весь процесс майнинга будет происходить именно здесь.
Что такое «string dat = «genesis» и «string prvHash = «»? Дело в том, что в каждом уважающем себя блокчейне должен быть нулевой блок. В качестве нулевого блока у нас будет блок, в который будет записано слово «genesis», потому, что я так захотел.
А написанные аргументы с заранее присвоенными значениями — это необязательные аргументы. в методе «Main» у нас есть вот такая вот строчка:
Эта строчка — первая в методе «Main», именно она создает нулевой блок, прямо во время старта программы, даже если вы хотели, например, загрузить ваш замечательный блокчейн с диска. Что? Да, это будет в статье номер два.
Программистам не читать
Зачем все это надо? Ну вот надо. Вы не представляете, каких мук мне стоило отказаться от передачи в метод AddBlock строки «type» и последующей проверки, какой блок нам надо создать — генезис или стандартный
Продолжим изучение метода добавления блока!
Думаю, не нужно объяснять, что это такое
Здесь мы и передаем в метод «getHash» время добавления, данные, хэш предыдущего блока и значение nonce.
Так как метод getHash вряд ли с первой попытки возвратит нам нужный хэш, придется проверять его на вхождение нужного количества нулей.
Воувоувоу! Полегче, ковбой! Что все это значит?!
Если в начале полученного хэша будут нули в количестве difficulity, то мы сделаем
Что такое difficulity? это количество нулей, находящихся в начале хэша блока, необходимое для добавления блока в блокчейн. Именно так мы решаем проблему сложности в нашем блокчейн-проекте. Кстати, сложность должна изменяться динамически, но об этом трошки позже.
В противном случае мы добавляем к nonce единичку и по-новой запускаем расчет хэша, получая абсолютно новое значения, и так по кругу, пока не найдем необходимое значение
Целиком код метода «AddBlock» выглядит так:
За кадром я написал простенькую логику, прямо в методе «Main» которая позволяла бы нам из консоли добавлять новый блок и выводить на экран все блоки.
Генезис-блок создается сразу же, с тридцать третьей попытки
Какой же блокчейн без блокчейн эксплорера? (К счастью, его написать крайне просто)
Этот всего лишь выводит на экран все блоки. Демонстрирую:
Все точно, как в аптеке
Но что будет, если какой-нибудь сумрачный гений решит всех обмануть и подменит данные в каком-нибудь блоке? Например Саня, который не хочет возвращать банку сотку вместе с кровной десяткой? На этот случай и был придуман метод «Verification»!
Ну как-то так. В этом замечательном методе мы берем данные и время блока, к ним добавляем его значение nonce и хэш предыдущего блока, суем это все в метод «getHash» и сравниваем с хэшем текущего блока. Если все ОК — берем следующий блок и проводим те же манипуляции. Если нет — останавливаем проверку. Тест!
Блоки добавляются. Это хорошо
Все блоки прошли проверку. Отлично
Теперь отредактируем третий блок, сделав вид, что мы ̶м̶о̶н̶а̶р̶х̶и̶с̶т̶ы̶
Нам удалось подделать блок! Прекрасно!
А теперь сисадмин Валера решил проверить, что творится на вверенном ему сервере, и запустил верификацию:
Сисадмин Валера спалил несанкционированное вмешательство в блокчейн, теперь он может сделать примерно то же, что мечтают сделать все пассажиры автобусов, когда видят тот самый молоточек: разбить стекло и выдернуть патч-корды (Я честно искал тот мем, но не нашел, может вы найдете)
В дополнение ко всему этому неплохо бы добавить динамически изменяющуюся сложность, что мы сделаем в статье номер один, и что-то вроде. GUI? Фу, мерзость. Также я хочу запихнуть это все на сервер, который будет заниматься лишь хранением и предоставлением блокчейна, считать хэш же будут должны юзеры, все как у взрослых криптовалют. Но это в будущем.
Всем большое спасибо за прочтение моей статьи, исходный код проекта вы сможете найти на гитхабе, ковыряйте в свое удовольствие!
Буду рад услышать критику и предложения, первая статья, все-таки!
Ну и, разумеется, ждите продолжения, оно не за горами! (Я еще не начинал, но все говорят именно так. )
Пишем скрытый майнер-лоадер на C# [BlackCoding]
Привет хацкеры, сегодня будем писать свой майнер-лоадер на шарпе.
Комментарии к коду будут выглядеть так — //комментарий
Приступим!
Создаем проект -> C# -> Консольное приложение (.NET Framework) -> Платформа ".NET Framework 4"
В класс главной программы прописываем следующие строки
Создаем следующий void, он будет проверять на наличие майнера в папке и копировать его туда в случае отсутствия, так же ставить атрибуты Hidden / System
Теперь организуем автозапуск.
Как я считаю делать автозапуск через "Автозагрузку" сейчас чуток палевно, так как это легко отключить в диспетчере.
Но вдруг кому то нужно будет, то вот:
Но я буду делать через "Планировщик задач", на запуск каждую минуту (если процесс запущен, то он не будет запускать повторно)
Теперь на всякий случай сделаем проверку на повторный запуск
Теперь перейдем к самим майнерам
Сначала реализуем скачивание нужных майнеров под пк
Теперь вставляем данный код, чуток расписал, думаю поймете.
Нужно скачать майнеры для CPU (x32/x64) и GPU (nvidia/amd) и залить их на хост (только .exe файлы (сами майнеры)) — LINK
Создаем 2 процесса (один для CPU второй для GPU) и данные для майнера
Теперь делаем строки которые отвечают за запуск и закрытие майнера
Теперь делаем скрытие от диспетчеров задач, будем смотреть как и по имени процесс, и по заголовку окна, поэтому пишем
Будем проверять на ProcessHacker и Диспетчер задач (другие можете добавить сами)
Ну и все, теперь нужно все это зайдествовать
В void Main вписываем
Теперь нужно скрыть наше окно майнера
Сверху нажимаем 'Проект' -> 'Свойства : "Имя проекта"'
С++ Встраивание консольного майнера в своё приложение
Здравстсвуйте всемогущие программеры! Сразу скажу если я в тему не попал то уж простите. Есть у меня дельце, я фрилансер и тут поступил заказ написать майнер с некоторыми дополнительными функциями. Вот за основу я собираюсь брать XMRig ну тоесть его сорцы:
1. Мне нужно в его коде зарание изменить все url пулов, юзера, параметры и т.д.
2. Нужно чтобы юзер имел возможность как включать этот майнер так его и выключать, но при этом это все должно происходить в моем приложении тоесть без каких либо консолей.
З.Ч. Не надо жаловаться на меня это не скрытый майнер, я просто его дописываю для стобильности и ради некоторых функций.
Вот уже день бьюсь над этим.
Запустить одно свое приложение через другое свое приложение
Здравствуйте. В программе "программа1" запускаю "программа2" через Process.Start("программа1"); .
Встраивание в приложение другое приложение классом QX11EmbedContainer
Здравствуйте, нужно сделать так, чтобы в основное приложение встроилось другое (которое я вызываю.
Встраивание базы в приложение
Извините может за глупый вопрос, но не занимался никогда работой с базами, а сейчас потребовалось.
Встраивание рекламы в приложение
Здравствуйте! Есть ли возможность встроить в НЕ мобильное приложение рекламу с оплатой за клик.
Shashank’s Security Blog
Hidden Crypto currency mining has always been a game for blackhat hackers to make money out of it. After reading a lot of blog and news about hackers injecting silent miners to hacked computers, servers and websites, I thought of playing with it.
Note this blog is just for awareness of cryptocurrency hidden miners. I am not responsible for what my readers do with my codes. And I never suggest anyone deploy cryptocurrency miners on unauthorized computers.
Lets first understand what mining is?
Cryptocurrency mining includes two functions, i.e., adding transactions to the blockchain (securing and verifying) and also releasing new currency. Individual blocks added by miners should contain a proof-of-work or PoW.
Mining needs a computer and a special program(provided by developers of the community), which helps miners compete with their peers in solving complicated mathematical problems. This would need huge computer resources. In regular intervals, miners would attempt to solve a block having the transaction data using cryptographic hash functions.
Now, as we already know that bitcoin transactions are kind of traceable. Hard but still possible. So in the recent trends, I found that most of the blackhat hackers shifted to monero mining. When I heard about monero in the news I wanted to figure out why monero?
The reasons are:-
1) Monero is private and untraceable crypto currency.
But this doesn’t fully answer our question because there are other cryptocurrencies too, which are untraceable like zcash, dash (earlier know as dark coin), verge, etc.
After a bit more research, I found my answer.
2) Monero uses «cryptonote» algorithm. Which rules out asci miners and hence mining is dependent on CPU and GPU, which means the mining difficulty is lower than what we have with bitcoin also it is better suited for regular consumer laptops and PCs.
This makes CPU mining feasible for users and a golden opportunity for hackers to bot/mass mine Monero on hacked computers.
Next question was how simple can this be?
Let’s learn it by doing it!
Building a Monero Miner Linux (Ubuntu for example):-
Note:- I am a horrible coder. Hence I try to make my codes easy, to write less number of lines with less complexity no matter how horrible the code is. I am fine if it works 🙂
Preparing a list, how to make a silent miner!
1) A reliable miner manager.
2) Make it run invisible/silently on a system.
The best miner I could fine was a javascript one. Created by «https://coinhive.com/.» It’s free to signup, and they take 30% commission for using their miner.
But then this a browser based miner, to execute it on a hacked system we need to fire the miner in a system’s browser and that too invisible.
As far as I knew that for browser automation, selenium is used.
Now we just embed our javascript code from coinhive and use our API public API key to trigger the miner.
Code file.html
Next step is to open the HTML file silently on a system’s browser. So we host our file somewhere . And make selenium trigger the URL.
First, we need to install dependencies. I wrote a script that installs all the dependencies in one go.
Code script.py
Understanding the code:-
So we are installing python virtual display which is a wrapper of xvfb for python.
Selenium which is required for browser automation.
And then we need geckodriver for triggering Firefox from selenium.
Gecko driver for Linux can be downloaded from here
When we unzip the downloaded file from there, we get geckodriver file in it. In 5th line, I am just fetching the unzipped file from my own server.
In 6th line, I am moving it to the bin directly so as I don’t have to mention the path of geckodriver in my further code
The last line finally calls the miner file to run, whose code is below.
Code selenium_miner.py
This code simply made the visibility to zero and calls the URL where the miner is hosted (our file.html). Since I didn’t exit the selenium, so the HTML file is open in a hidden firefox browser, till the system is running and the HTML file with the javascript code is using the systems CPU for mining Monero.
Windows miner:-
There are two ways of doing it.
Since there is no available wrapper for python virtual driver, I had to look for an alternative.
I found that phantomjs provides a ghost browser for windows
Code windows_miner1.py
In the code above the path, a variable is to set the path of your phantom js ghost driver which can be downloaded from here
In the bin folder, there is a phantomjs.exe. That path is to be mentioned in the variable.
This was my first approach. But then I went for a more straightforward approach. While strolling the internet, I found that chrome had enabled headless mode. That’s all we need 🙂
Code windows_miner2.py
Where Gchome is your portable chrome executable or simply mention the file path of your chome.exe file.
Now many readers will think why did I ever write python code for windows miner because windows systems don’t have python installed by default.
Because I am not good with c and c++ and I figured out py2exe. Tried and tested on my system, works like a charm!
Go to «http://py2exe.net» and get your executable.
Now comes the final question! How do I prevent hackers from stealing my CPU resources for their benefits?
My answer is feeling your loving PC <3. If you ever find your system fans working all the time even though you are not performing a heavy task. Go to your task manager and check if any unusual program is using all the remaining CPU resources.
If you see a sudden spike in CPU resources of your server. Use the command «top» in your server terminal to check if any unwanted program is using your CPU resources.
The best part is since everything is happening over the browser that too with javascript, it will go undetected from most of the anti-viruses.