• XSS.stack #1 – первый литературный журнал от юзеров форума

Как обезопасить себя от flash крипты?

Пожалуйста, обратите внимание, что пользователь заблокирован
сравнивать все переводы по смарт-контракту, у фейковых юсдт будет другой контракт. можно для этого дела написать смарт-контракт, который не даст возможности перепутать токены. а можно и скрипт на питоне, который будет наблюдать за контрактом отправителя.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
сравнивать все переводы по смарт-контракту, у фейковых юсдт будет другой контракт. можно для этого дела написать смарт-контракт, который не даст возможности перепутать токены. а можно и скрипт на питоне, который будет наблюдать за контрактом отправителя.
Написал пример такого скрипта на Python. Авторство AGN, специально для https://xss.pro/.

Устанавливаем Python 3.13.1. После установки Python устанавливаем нужные библиотеки.
pip install aiogram python-dotenv tronpy requests

После установки нужных библиотек создадим папку с любым названием на англ. языке. Далее, внутри этой папки создадим два файла: файл со скриптом + файл .env (конфиг для бота).
Наполнение файла .env:
BOT_TOKEN=ваш_telegram_бот_токен
WATCH_ADDRESS=ваш_адрес_кошелька
OFFICIAL_USDT_CONTRACT=TXLAQ63Xg1NAzckPwKHvzwE7JjRbAXkB4y
CHAT_ID=ваш_telegram_chat_id
Исходный код скрипта:
Python:
import os
import json
import time
from dotenv import load_dotenv
from tronpy import Tron
from aiogram import Bot, Dispatcher, types
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
from aiogram.utils import executor

# Загрузка переменных из .env
load_dotenv()

# Конфиденциальные настройки
BOT_TOKEN = os.getenv("BOT_TOKEN")
WATCH_ADDRESS = os.getenv("WATCH_ADDRESS")
OFFICIAL_USDT_CONTRACT = os.getenv("OFFICIAL_USDT_CONTRACT")
CHAT_ID = os.getenv("CHAT_ID")
BLACKLIST_FILE = "blacklist.json"

# Инициализация клиентов
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot)
tron_client = Tron()

# Загрузка черного списка
try:
    with open(BLACKLIST_FILE, "r") as file:
        blacklist = json.load(file)
except (FileNotFoundError, json.JSONDecodeError):
    blacklist = {}

def save_blacklist():
    """Сохраняет черный список в файл."""
    with open(BLACKLIST_FILE, "w") as file:
        json.dump(blacklist, file, indent=4)

def add_to_blacklist(address, reason):
    """Добавляет адрес в черный список."""
    if address not in blacklist:
        blacklist[address] = {"reason": reason, "transactions": 0, "total_amount": 0}
        save_blacklist()

async def send_telegram_alert(message):
    """Отправляет уведомление в Telegram."""
    await bot.send_message(CHAT_ID, message)

def get_confirmations(tx_id):
    """Возвращает количество подтверждений для транзакции."""
    tx_info = tron_client.get_transaction(tx_id)
    if tx_info and 'block' in tx_info:
        block_number = tx_info['block']['number']
        current_block = tron_client.get_block_number()
        confirmations = current_block - block_number
        return confirmations
    return 0

async def monitor_wallet():
    """Мониторинг входящих транзакций."""
    print("Запущен мониторинг транзакций...")
    while True:
        try:
            events = tron_client.get_contract(OFFICIAL_USDT_CONTRACT).functions.Transfer()
            for event in events:
                if event['to'] == WATCH_ADDRESS:
                    tx_id = event['transaction']
                    sender = event['from']
                    amount = event['value']

                    print(f"Обнаружен перевод от {sender}: {amount / 10**6} USDT (TxID: {tx_id})")

                    # Проверка транзакции
                    tx_info = tron_client.get_transaction(tx_id)
                    if await is_valid_transaction(tx_info, sender):
                        await send_telegram_alert(
                            f"✅ Оригинальная транзакция от {sender} на сумму {amount / 10**6} USDT. "
                            f"Ожидание подтверждений..."
                        )
                    else:
                        reason = "Фейковый контракт или подозрительная активность"
                        add_to_blacklist(sender, reason)
                        await send_telegram_alert(
                            f"⚠️ Обнаружена фейковая транзакция от {sender}. Адрес добавлен в черный список."
                        )
            await asyncio.sleep(10)  # Пауза перед следующим циклом проверки
        except Exception as e:
            print(f"Ошибка мониторинга: {e}")

async def is_valid_transaction(tx_info, sender, required_confirmations=20):
    """Проверяет валидность транзакции с учетом подтверждений."""
    try:
        # Проверка контракта и черного списка
        contract_address = tx_info['raw_data']['contract'][0]['parameter']['value']['contract_address']
        if contract_address != OFFICIAL_USDT_CONTRACT:
            return False

        if sender in blacklist:
            return False

        amount = int(tx_info['raw_data']['contract'][0]['parameter']['value']['amount'])
        if amount < 1 * 10**6:  # Минимальная сумма в 1 USDT
            return False

        # Ожидание подтверждений
        confirmations = get_confirmations(tx_info['txID'])
        print(f"Транзакция {tx_info['txID']} имеет {confirmations} подтверждений.")
        
        if confirmations < required_confirmations:
            return False

        return True
    except Exception as e:
        print(f"Ошибка проверки транзакции: {e}")
        return False

@dp.message_handler(commands=["blacklist"])
async def show_blacklist(message: types.Message):
    """Показывает черный список в виде инлайн-меню."""
    if not blacklist:
        await message.reply("Черный список пуст.")
        return

    keyboard = InlineKeyboardMarkup()
    for address in blacklist.keys():
        keyboard.add(InlineKeyboardButton(text=address, callback_data=f"address:{address}"))

    await message.reply("Черный список адресов:", reply_markup=keyboard)

@dp.callback_query_handler(lambda call: call.data.startswith("address:"))
async def address_details(call: CallbackQuery):
    """Показывает детали адреса."""
    address = call.data.split(":")[1]
    details = blacklist.get(address, {})
    text = (
        f"📋 **Информация об адресе**\n"
        f"💳 Адрес: {address}\n"
        f"🛑 Причина: {details.get('reason', 'Не указано')}\n"
        f"🔄 Транзакции: {details.get('transactions', 0)}\n"
        f"💰 Общая сумма: {details.get('total_amount', 0)} USDT"
    )
    keyboard = InlineKeyboardMarkup()
    keyboard.add(InlineKeyboardButton(text="🔙 Вернуться", callback_data="back_to_list"))
    await call.message.edit_text(text, reply_markup=keyboard, parse_mode="Markdown")

@dp.callback_query_handler(lambda call: call.data == "back_to_list")
async def back_to_list(call: CallbackQuery):
    """Возвращает к списку адресов."""
    keyboard = InlineKeyboardMarkup()
    for address in blacklist.keys():
        keyboard.add(InlineKeyboardButton(text=address, callback_data=f"address:{address}"))

    await call.message.edit_text("Черный список адресов:", reply_markup=keyboard)

if __name__ == "__main__":
    import asyncio
    loop = asyncio.get_event_loop()
    loop.create_task(monitor_wallet())  # Запуск мониторинга
    executor.start_polling(dp, skip_updates=True)  # Запуск бота

Подробный функционал:
  • Бот подключается к сети TRON и начинает мониторить входящие транзакции на указанный адрес.
  • При поступлении транзакции бот проверяет её валидность.
  • Если транзакция валидна, бот уведомляет об этом через Telegram. Валидность транзакции определяется следующим способом: наличие 20+ подтверждений и отправитель использует оригинальный смарт-контракт.
  • Если транзакция подозрительна, адрес отправителя добавляется в черный список, и бот отправляет уведомление.
  • В любой момент вы можете запросить список адресов в черном списке и получить подробности о каждом адресе через команды в боте.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх