Как кодеры выносят сейлы
Кодеры — самые обычные люди, но если вы залетаете в любые сейлы ручками — они влетают в них с помощью ботов, которые за них делают определенные действия одновременно и много раз, что даёт им возможность обогнать вас и замультиаччить почти любую активность.
В этой статье мы хотим разобрать с какими они трудностями сталкиваются, какие инструменты и используют и как научиться так же любому человеку.
С помощью чего кодеры пишут программы
Кодеры пишут программы на языках программирования либо конструкторах. К языкам программирования(сокращённо ЯП-ам) относятся: Python, JavaScript и т.д. К конструкторам: BAS, Clickerman и т.д. Сравним оба подхода создания программ.
Из недостатков использования языков программирования:
1. Более высокий порог входа т.к. вам нужно изучить правила написания программ на этом языке.
2. Более долгий период разработки программы.
3. Конструкторы заточены под абуз и мультиаккинг, а ЯП-ы — нет. То есть, вам прийдётся, в основном, использовать написанные пользователями библиотеки для построения своей программы.
1. Они быстрее. Если перед вами будет задача отправить запрос или транзакцию как можно быстрее — лучшим выбором будет использование быстрых языков программирования типа Rust.
2. Они обладают большим инструментарием и гибкостью.
3. С помощью языков программирования вы можете написать что угодно, тогда как конструкторы обладают ограниченными возможностями
Из этого сравнения можно сделать вывод, что конструкторами можно пользоваться только в случае необходимости быстро разработать простую программу, под которую заточен конструктор, или если вы не обладаете умением программировать на ЯП-ах.
Поэтому, рано или поздно, вам прийдётся научиться программировать.
Но перед этим разберём виды языков программирования, чтобы потом от них отталкиваться при выборе ЯП-а:
- Динамически типизированный язык. Это значит, что переменные в нём могут менять свой тип посреди выполнения программы. К таким относится Python. Данная особенность делает простым программирование на таких языках, но значительно замедляет их выполнение и увеличивает возможность получения ошибок посреди выполнения программы.
- Статически типизированный язык. Это значит, что переменные не могут менять свой тип во время выполнения программы без их переопределения. К таким относится Rust. Это ускоряет выполнение работы программы и позволяет увидеть большинство ошибок до запуска программы. Вместе с этим, это усложняет написание программ, потому что вам необходимо написать больше кода и следить за типом каждой переменной.
- Компилируемый язык. Это значит, что перед исполнением программа компилируется(превращается) в машинный код. Это ускоряет выполнение программы т.к. позволяет процессору сразу же читать код. К минусам можно отнести необходимость ждать компиляции программы перед каждым новым исполнением, если вы её изменили, что может занять некоторое время(от 5 секунд).
- Интерпретируемый язык. Это значит, что текст, который вы написали превращается в специальный код и затем исполняется с помощью специальной программы. К минусам можно отнести значительное замедление работы программы, а к плюсам быстрый запуск программ.
Разберём какие языки программирования кодеры используют в основном:
1. Python. Самый популярный язык программирования, а вместе с тем и самый лёгкий. Обладает большим выбором библиотек(инструментарий, написанный под определённые задачи) и возможностей реализовать вашу программу. Простой в написании кода и не очень требовательный к программисту т.к. является динамически типизированным. Так же это интерпретируемый язык, что замедляет его работу.
2. JavaScript. Один из наипопулярнейших языков программирования. Но поговорим мы о NodeJs — реализации языка JavaScript превращающей его в быстрый компилируемый язык. Разработка на нём не будет такой легкой как на Python, но он обладает большим набором библиотек(например, Python не имеет возможности работать с блокчейном Terra или с кошельком Wax) и программы на нём запускаются быстрее. Имеет подробную документацию, что делает его изучение легче.
3. Go. Очень быстрый компилируемый строго статически типизированный язык. Является быстрее прошлых двух, но разработка на нём будет более сложной. Имеет удобный инструментарий для работы с многопоточностью, что сделает разработку программ заточенных на выполнение параллельных задач более простым. Может стать хорошим выбором при разработке программ, ориентированных на скорости.
4. Rust. Самый быстрый язык из этого списка. Является компилируемым статически типизированным языком. Разработка на нём будет сложнее, чем на остальных языках программирования, но его скорость вас порадует. Является языком разработки контрактов на Солане, и имеет большое количество библиотек для работы с запросами и веб3.
5. Solidity. Специальный язык, созданный для разработки смарт-контрактов на ETH и его наследниках работающих на EVM(протокол Ethereum, созданный для работы блокчейна ETH), поэтому если вам необходимо создать свой смарт-контракт — вам необходимо изучить его.
Из-за системы газа EVM вам будет гораздо выгоднее минтить сразу 20-30 нфт, чем по 2 нфт с каждого кошелька. Поэтому, создатели контрактов тратят меньше ETH за газ по сравнению с обычными юзерами, что даёт им возможность либо ставить больше газа за те же деньги, либо забирать больше нфт с меньшим газом, что увеличивает их профит.
Отмечу, что многие специалисты советуют начинать с статически типизированных языков для лучшего погружения в логику программирования. Я же начинал с питона и особых сложностей не испытываю.
Какие конструкторы используют в основном:
1. Clickerman. Простейший конструктор, позволяющий вам сказать, куда и когда надо кликать или какие клавиши нажимать. Обычно используют при простейшем абузе игр, например, AaveGotchi. Игру нельзя было автоматизировать по другому, и простейшим выходом было написать скрипт на Кликермане.
2. BAS. Продвинутый конструктор, созданный специально для повторения большого кол-ва действий. Довольно прост в использовании, поддерживает возможность добавления кода JavaScript. Программы в языке создаются с помощью блоков. Имеет простую в реализации возможность добавления мультипоточности, возможность добавления чужого кода(библиотек), множество встроенных функций, например, решение капчи. Гайды по его использованию вы можете найти тут и более продвинутые тут
Итак, обладая такой базой, мы можем продолжить наше путешествие по удивительному миру программирования.
Что можно замультиаччить
Все сейлы, будь то токены, NFT и т.д. можно разделить на оффчейн и ончейн. Ончейн — когда вы делаете транзакцию со своего кошелька, и получаете токен или NFT на свой кошелёк. Оффчейн — когда вы делаете запрос на биржу или сайт и сервис присуждает вам возможность владения токеном или NFT, хотя на самом деле их нету на вашем кошельке.
Итак, если вам нужно сделать что-то оффчейн: вам нужно использовать запросы. Для этого используют библиотеки, обычно называемые requests. Вы должны сэмулировать, то, что вы являетесь реальным пользователем и отослать нужный запрос. Например, отослать нужный запрос на биржу о покупке во время начала сейла.
В зависимости от задачи:
- Если вам нужен упор на скорость запроса( сейлы на биржах и т.д.) — обычно используют go или rust.
- Если вам не важны миллисекунды — используют go, js, python.
P.S. Те же бинанс сейлы активно брали с помощью простых Python ботов, но по моим ощущениям на следующей бычке такого уже не будет.
Если вы хотите сделать что-то ончейн:
- Если это EVM блокчейн(ETH, Polygon, BSC и т.д.) вы можете использовать библиотеки web3 или ethers для того, чтобы отослать транзакцию, подписать сообщение и т.д. , или создать смарт-контракт с помощью солидити, который сам будет отсылать нужные вам транзакции.
- Если это солана — вы можете создать смарт-контракт на Rust или отсылать запросы для минта на кэндимашину(смарт-контракт, распределяющий нфт на солане) с помощью языков поддерживающих работу с соланой. В основном используют Rust и Go
- Если это экзотический блокчейн, вроде WAX или Terra в основном используют JavaScript
Что используют для мультиаккинга
Для мультаккинга часто нужны расходники. Чтобы обмануть антибот систему используют прокси, чтобы замультиаччить часто нужны аккаунты соц. сетей, для комфортного использования софта, или при необходимости получить быстрый интернет и сильную машину используют выделенные сервера.
Прокси
Именно они помогают показать сайту, что очередной ваш аккаунт не робот. И от их качества зависит, не заблочит ли вас сайт, или по результатам какого-то розыгрыша вас не исключат как робота. Их скорость напрямую влияет на ваши шансы взять сейл.
- Серверные (датацентровые, ЦОД, четверки, IPv4) прокси — это IP-адреса виртуальных и физических серверов, находящихся в центрах обработки данных (дата-центров). Этот тип прокси старый, поэтому самый известный и широко предлагаемый рынком.
- Резидентный прокси – это IP-адрес, выданный реальным интернет-провайдером из определенного города, области или штата. Обычно эти адреса выдают владельцам жилья, они отмечаются в базах данных региональных интернет-регистров (RIR). При правильном использовании запросы с таких адресов невозможно отличить от обращений реального пользователя.
- Мобильные прокси - это IP-адреса мобильных операторов, с возможностью смены ip по времени или запросу.
Какие прокси использовать и когда:
- Для абуза простых форм, тестнетов можно использовать дешевые серверные ipv-4, или даже ipv-6, если с них можно зайти на сайт.
- Если стоит более сложная задача по типу gleam где нужно использовать соц сети, обходить защиту cloudflare, тот тут лучшим выбором будет использовать мобильные прокси со сменой ip по запросу или времени, или резидентские ipv4, что выйдет дороже при увеличении количества аккаунтов.
Cервера
Использовать свой основной ПК для работы скрипта не всегда удобно и не целесообразно. Лучшим решением будет использовать удаленный сервер, который всегда будет работать и не зависит от вашего пк.
Обязательно делайте резервную копию данных с серверов, иначе можно потерять их навсегда.
Сервера бывают с дневной, месячной и часовой оплатой. Чем дольше минимальный срок — тем дешевле обычно сервера.
Сервисы с почасовой оплатой:
- Hetzner
- Contabo
- Zomro
- Sauceservers. Продают кастомные сборки взятые на Hetzner с наценкой. Брал их для сейлов на солане, где требуются мощные сервера с быстрым интернетом.
Аккаунты
Для абуза часто нужно большое кол-во аккаунтов разных соцсетей. Часто они должны быть с отлежкой или с накрученными подписчиками. Ботоводы часто покупают аккаунты, но главное правильно их использовать.
Советую всегда менять пароль от купленного аккаунта. Не редки случаи, когда их заново продавали, или просто угоняли.
Сервисы для покупок аккаунтов:
- Мой любимчик hstock
- Accsmarket — качественные аккаунты, но обычно дороже чем на других маркетах
- Darkstore — огромный выбор аккаунтов и приятные цены, желательно брать маленькими партиями в начале на тест.
- Install-shop — можно найти практические любые аккаунты, есть много хороших продавцов, цены средние по рынку
Настройка и работа с купленными аккаунтами
- Twitter. Советую к прочтению https://teletype.in/@bendercrypt/Twitter_ferm
- Discord. https://teletype.in/@bendercrypt/discord_master
Защиты от мультиаккинга и их обход
Самой главной проблемой при абузе является антибот защита, которую добавляют создатели сайтов, бирж, сейлов. Разберём оффчейн и ончейн защиту.
- Добавление проверок, робот ли отослал запрос. Например, anticaptcha или cloudflare. Anticaptcha обходят с помощью запросов на специальные сайты, которые предоставляют решение капчи(https://anti-captcha.com/) с помощью работы индусов или машинных алгоритмов. Код решения затем вставляется в запрос и система пропускает запрос. Cloudflare обходится с помощью эмулирования того, что запрос создал человек. Для этого используются сложные приёмы, но иногда хватает простой подмены юзер-агентов(краткая информация о вашей системе) и добавления всех нужных атрибутов запроса. К ним относятся headers(информация о вас и о запросе) и cookies(информация о вашей системе и о сессии).
- Токены сессии. Токен, который генерируется при заходе в аккаут. Достают ручками или с помощью бота, который эмулирует гугл и заходит в аккаунт, и достаёт токен.
- csrf-токен. Токен формы, который необходим для защиты от робота. Достают его запросом на сайт и поиском среди текста сайта или эмуляцией захода на сайт через фейковый гугл.
- Шифровка запросов. Очень сложная защита, иногда её не выходит вскрыть. Например, AaveGotchi. Все запросы передавались в шифрованном виде и повторить их не было возможности
- Скрытие запросов. Например, скоро пройдёт сейл на бирже, но запроса, который отвечает за покупку вы не знаете. Иногда, нужные запросы сливаются создателями сейла или проходит подмена времени запроса( вы отправляете запрос на сайт, не на покупку, с временем после начала сейла, хотя на самом деле сейл ещё не начался).
- Подмена запросов. Например, на прошлом сейле использовался один запрос, но на этом запрос уже будет другим. Этот метод защиты почти никак не обойти, только если вы не знаете заранее нужного запроса.
- Сигнатура. Специальное значение, генерируемое на сервере, которое необходимо передать в транзакцию, чтобы она успешно прошла. Обычно обходят, поиском этого самого запроса в файлах сайта и затем эмуляции этого запроса для получения нужного значения для всех аккаунтов. В последний момент создатели сейла могут поменять сервер, используемый для запросов, что обесценит ваши труды.
- Сокрытие кода контракта. Создатели специально нигде не светят любые части кода, что не даёт возможности кодерами заранее подготовиться и написать нужные функции для генерации транзакций.
- Запрет минта для смарт-контрактов. Это обрезает создателей смарт-контрактов на солидити, которые хотят этими контрактами заминтить много нфт сразу, что даст существенную скидку за каждую нфт, но не обрезает кодеров, которые создают транзакции с помощью языков программирования.
Это были основные методы защиты оффчейн и ончейн, а также методы их обхода.
Как стать таким же
Во-первых, вам нужно определиться с выбором языка. На первых этапах, не стоит делать упор только на скорость языка, поэтому я советую выбрать go, js или python.
Несколько советов, которые я бы хотел знать до начала изучения программирования:
- Вначале изучения ЯП-а 70% теории, 30% практики. Постепенно доводить до 80% практики и 20% теории. Ведь ничего не обучает лучше, чем необходимость решить задачу самому
- Вашим первым изученным языком должен стать английский. Если вы не уверенны в нём, советую отдавать 60% своего времени обучения на него
- Гугл - твой лучший друг. Без него мы никто и надо уметь им пользоваться. Задавать лаконичные запросы и уметь находить ответы. А как научиться гуглить можно узнать в самом гугле)
Общие советы по изучению всех языков:
- Читаем первые доки или книги.
- Параллельно практикуемся на простых задачах. Их предоставят курсы (например stepik) или сайты: codewars, euler algorithm. Ру версия задач — https://euler.jakumo.org/.
Читаем книгу грокаем алгоритмы и проходим первые 10-20 задач на сайте алгоритмов Эйлера. - После того, как вы уверенно ориентируетесь в азах, можно начать изучать стандартную библиотеку. Библиотеки: random, time, os и т.д. Изучаем работу с webdriver, requests.
- Затем изучаем асинхронное программирование и ООП. Если вы не идёте на завод — ООП вам особо не понадобится, но основы знать надо.
- Делаем pet-проекты с использованием этих технологий.
- Изучаем работу с веб3.
Книги и курсы по языкам программирования
- Python: начинаем с Byte of Python или курсов на Stepik: https://stepik.org/course/58852/ и https://stepik.org/course/68343/.
Затем идём по общим советам. Если хотите выучить все аспекты — читаем Марка Луца - JavaScript:
learn.javascript.ru - считается основой, то с чего обычно начинают изучать JS. Есть задачи и примеры кода
MDN, Mozilla Developer Network - Основной справочник по JS.
Codewars - тут закрепляем знания, решаем задачи.
Youtube видео - основы по ноде, там все просто, можно начинать параллельно с изучением JS. Крайне годный канал, там и остальные видосы полезны.
Youtube видео - бесплатный курс JS на ютубе, основы.
Интерактивный курс - где для перехода к следующей главе, нужно выполнить тестовое задание. Начинается с самого простого и можно начинать с нуля. На английском языке.
https://devhints.io/es6 - ES2015+ cheatsheet, справочник
https://shortcode.dev/javascript-cheatsheet - шпаргалка - Go:
Видео от FreecodeCamp: https://www.youtube.com/watch?v=YS4e4q9oBaU и https://www.youtube.com/watch?v=jFfo23yIWac.
Оф. доки: https://go.dev/doc/ - Rust:
Оф. доки: https://doc.rust-lang.ru/book/
По расту так мало инфы, потому что оф. доки затрагивают почти все аспекты. Дальше, после этой книги можете найти другие такие же доки по async программированию и подобному. - Веб3:
Python оф. доки: https://web3py.readthedocs.io/en/stable/
Rust: https://ethereum.org/ru/developers/docs/programming-languages/rust/
JS: https://web3js.readthedocs.io/en/v1.7.5/
Go: https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e
Solidity:
Freecodecamp 16-часовое видео: https://www.youtube.com/watch?v=M576WGiDBdQ
Оф. доки: https://docs.soliditylang.org/en/v0.8.16/
Огромная статья о изучении солидити и других ЯП-ов от Max Wayld: https://teletype.in/@maxycrypto/i_love_code