Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!
  • Реклама на форуме платная! Обращаться к Admin.
    Произошла смена домена с maza.one на maza1.top!!!

Инструкция Забираем награду с кошелька-ловушки (TRX)

  • Автор темы Автор темы eax
  • Дата начала Дата начала
Инструкция по использованию

eax

New member
LV
0
 
Регистрация
Ноя 17, 2022
Сообщения
11
Реакции
8
Доброго, всем!
Недавно я написал небольшой скрипт, чтобы извлечь средства из ловушки-кошелька.

Вот предыстория:
На один из моих TON кошельков пришла транзакция с 0.001 TON и MEMO, содержащим MEMO с сид-фразой (мнемоникой) и сообщением о том, что это ваш новый кошелек. Эту сид-фразу распространяют под разными предлогами в мошеннических чатах и т.д.

Суть в том, что когда вы импортируете эту мнемонику, на счету уже лежат 180 USDT TRC-20 (так в моем случае, сумма обычно в пределах $100-$200), но при этом количество TRX составляет меньше 10, что специально делается для того, чтобы комиссия для перевода на другой кошелек была недостаточной. Как только вы пополните количество TRX на таком кошельке, сразу же сработает бот и отправит средства на адрес злоумышленника.

Однако, можно обойти этот механизм, если выполнены два условия:
  1. Перевод, который уводит TRX, должен выполняться вручную ботом, а не через контракт.
  2. Владелец закрытого ключа (privkey), который вам "подарили" должен обладать правами на трату средств (spend). Существуют кошельки, которые специально лишают закрытый ключ этих прав, чтобы средства можно было потратить только с помощью другого закрытого ключа. В таком случае, вы увидите уведомление в Tronscan о том, что владелец данного аккаунта - другой пользователь.
index.ts:
JavaScript:
const axios = require('axios');
const TronWeb = require('tronweb');

const yourPrivateKey = 'сюда впишите ключ кошелька-ловушки';
const yourAddress = 'сюда впишите публичный ключ кошелька-ловушки';
const destinationAddress = 'куда отправить токены';

const fullNode = 'https://api.trongrid.io';
const solidityNode = 'https://api.trongrid.io';
const eventServer = 'https://api.trongrid.io';

const tronWeb = new TronWeb(fullNode, solidityNode, eventServer, yourPrivateKey);

const usdtContractAddress = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'; // Адрес контракта токена, который хотите отправить, в данном случае USDT

const transferAbi = [ // Если другой токен, то вам нужен ABI контракта этого токена
  {
    "constant": false,
    "inputs": [
      {
        "name": "_to",
        "type": "address"
      },
      {
        "name": "_value",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "payable": false,
    "stateMutability": "nonpayable",
    "type": "function"
  }
];

async function sendUSDT(to, amount) {
    try {
        const contract = await tronWeb.contract(transferAbi).at(usdtContractAddress);
        const options = {
            feeLimit: 100_000_000, // Установите лимит комиссии в сун (1 TRX = 1000000 сун),  в данном случае не более 100trx
            callValue: 0, // Не отправляйте TRX вместе с вызовом контракта
        };
        const result = await contract.transfer(to, amount).send(options);

        if (result) {
            console.log('Транзакция USDT отправлена успешно:', result);
        } else {
            console.log('Не удалось отправить транзакцию USDT:', result);
        }
    } catch (error) {
        console.log('Ошибка при отправке транзакции USDT:', error);
    }
}

async function fetchLatestBlock() {
  try {
    const response = await axios.get('https://api.trongrid.io/wallet/getnowblock');
    const latestBlock = response.data;
    const transactions = latestBlock.transactions || [];

    if (Array.isArray(transactions)) {
      transactions.forEach((transaction) => {
        const toAddress = tronWeb.address.fromHex(transaction.raw_data.contract[0].parameter.value.to_address);
        const fromAddress = tronWeb.address.fromHex(transaction.raw_data.contract[0].parameter.value.owner_address);
        if (toAddress === yourAddress) {
          console.log('Обнаружена новая входящая транзакция:', transaction);

          // Отправка USDT на другой адрес
          const amountToSend = 187900000; // В данном случае отправляет 187.9USDT
          sendUSDT(destinationAddress, amountToSend);
        }
      });
    } else {
      console.log('Ошибка: получены некорректные данные транзакций:', transactions);
    }
  } catch (error) {
    console.log('Ошибка при получении последнего блока:', error);
  }
}

async function startMonitoring() {
  console.log('Начало мониторинга транзакций...');
  setInterval(fetchLatestBlock, 500); // В данном случае каждые 0.05 сек идет обращение, будьте осторожны, не получите бан на ip
}

startMonitoring();
package.json:
JSON:
{
  "name": "anti-trx-wallet",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.ts"
  },
  "keywords": [],
  "author": "eax",
  "license": "GPL-2",
  "dependencies": {
    "axios": "^1.3.5",
    "tronweb": "^5.1.0"
  }
}

В моем случае, я отправил 120TRX, чтобы успеть вывести USDT пока бот отрабатывает вывод TRX.
Условный флаг забрал, награду отправил на blackhole адрес.

P.S Чтобы ускорить обработку можно использовать подпись на события через web-socket, но в таком случае придется поднимать свою ноду TRON, а это ни к чему, с учетом что все работает и так.
Успешной охоты.
 

Пинг форума и аптайм

Averaged results for https://maza.one

uptime counter
Назад
Сверху