<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Разнорабочий × 9kDAO</title>
        <link>https://paragraph.com/@raznorabochiy</link>
        <description>undefined</description>
        <lastBuildDate>Sun, 07 Jun 2026 22:24:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Разнорабочий × 9kDAO</title>
            <url>https://storage.googleapis.com/papyrus_images/7d330426d302f58f51bf9415e75903512fc9a474828c382979aeb99a0bc93ec3.png</url>
            <link>https://paragraph.com/@raznorabochiy</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Как узнать ABI неверифицированного контракта]]></title>
            <link>https://paragraph.com/@raznorabochiy/abi</link>
            <guid>UD6VVMyEOkmwKttflHq2</guid>
            <pubDate>Tue, 15 Aug 2023 20:21:48 GMT</pubDate>
            <description><![CDATA[Если вам попался контракт у которого на сайте скана пусто во вкладке Contract / Code и вы видите только байткод, ещё не всё так плохо, есть способ восстановить ABI из кода контракта. Немного расскажу, как это работает. При компиляции контракта имена всех методов становятся утерянными, они не нужны EVM, вместо них в байткоде можно увидеть четырёхбайтовый MethodID, который выглядит примерно так 0x8433e7f3 Этот MethodID не что иное, как первые 4 байта от хеша Keccak-256 взятого от строки «имяМет...]]></description>
            <content:encoded><![CDATA[<p>Если вам попался контракт у которого на сайте скана пусто во вкладке Contract / Code и вы видите только байткод, ещё не всё так плохо, есть способ восстановить ABI из кода контракта.</p><p>Немного расскажу, как это работает.</p><p>При компиляции контракта имена всех методов становятся утерянными, они не нужны EVM, вместо них в байткоде можно увидеть четырёхбайтовый MethodID, который выглядит примерно так <code>0x8433e7f3</code></p><p>Этот MethodID не что иное, как первые 4 байта от хеша Keccak-256 взятого от строки «имяМетода(типАргумента)»</p><p>Например Keccak-256(&quot;activateOrRefund(address)&quot;) даст нам хеш <code>0x8433e7f315e0fb49ae73d262618ba3d4540a76cf19bd515eceada64d21f6c6b9</code></p><p>Возьмём от него первые 4 байта и получим <code>0x8433e7f3</code>, можете сами <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://emn178.github.io/online-tools/keccak_256.html">поиграться и проверить</a></p><p>Существует большая база данных четырёхбайтных кусочков, по которой можно восстанавливать сигнатуры методов:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethereum-lists/4bytes">ethereum-lists/4bytes</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.4byte.directory">4byte.directory</a></p></li></ul><p>Есть один минус, так как четыре байта это не так много информации для точной идентификации, это приводит к коллизиям на большой выборке. Вот пример, когда для MethodID <code>a9059cbb</code> находятся <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.4byte.directory/signatures/?bytes4_signature=a9059cbb">5 разных сигнатур</a></p><p>Существуют более удобные инструменты, которые вытаскивают из байткода все MethodID и ищут известные сигнатуры методов и формируют код ABI.</p><p>Одна из таких утилит <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://abi.w1nt3r.xyz/">https://abi.w1nt3r.xyz/</a> её минус в том, что она работает только для контрактов Ethereum</p><p>Попробуем проверить этот контракт: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xf008eaad3760e2f0175f47a4d1d87e5c468bfd6d#code">0xf008eaad3760e2f0175f47a4d1d87e5c468bfd6d</a></p><p>Открываем <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://abi.w1nt3r.xyz/mainnet/0xf008eaad3760e2f0175f47a4d1d87e5c468bfd6d">abi.w1nt3r.xyz</a> и видим только одну расшифрованную сигнатуру: <code>0x56973ee5 IMPL()</code></p><p>Скорее всего это прокси-контракт, открываем <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/proxycontractchecker?a=0xf008eaad3760e2f0175f47a4d1d87e5c468bfd6d">https://etherscan.io/proxycontractchecker?a=0xf008eaad3760e2f0175f47a4d1d87e5c468bfd6d</a></p><p>Находим реальную реализацию <code>0x8e357490dc8e94e9594ae910ba261163631a6a3a</code></p><p>Опять пробуем и получаем все сигнатуры: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://abi.w1nt3r.xyz/mainnet/0x8e357490dc8e94e9594ae910ba261163631a6a3a">https://abi.w1nt3r.xyz/mainnet/0x8e357490dc8e94e9594ae910ba261163631a6a3a</a></p><p>Что делать если это не Ethereum, а какая-нибудь другая EVM-сеть?</p><p>Смотрим, что abi.w1nt3r.xyz под капотом использует библиотеку whatsabi - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/shazow/whatsabi">https://github.com/shazow/whatsabi</a></p><p>Можем написать простой код, в который нужно будет вставить только RPC и адрес контракта, а на выходе получим ABI:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/add6cf72be329c46967b5d6fccbb385700b9e0c291d9bd135e8d3989964444fc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>После написания этой статьи я решил написать веб-утилиту, похожую на abi.w1nt3r.xyz, но работающую с любыми EVM сетями, нужно только указать rpc url и адрес контракта — <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://whatsabi.surge.sh/">https://whatsabi.surge.sh/</a></p>]]></content:encoded>
            <author>raznorabochiy@newsletter.paragraph.com (Разнорабочий × 9kDAO)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/6bcef732057451d6830d05300bc50ae3e35c1ebbe0776e689e21352ec3e9d471.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Как усилить пароль в Метамаске]]></title>
            <link>https://paragraph.com/@raznorabochiy/W3bbfyxPGWtUmCUPA3Y4</link>
            <guid>W3bbfyxPGWtUmCUPA3Y4</guid>
            <pubDate>Sun, 06 Aug 2023 13:45:27 GMT</pubDate>
            <description><![CDATA[Если вы не читали мою предыдущую статью «Как воруют приватники из вашего Метамаска» очень советую её прочитать, там мы выясняем, что пароль Метамаска является ключом к базе данных. В этой статье я покажу как пропатчить Метамаск, чтобы при работе с ним вы использовали короткий пароль, а файл с хранилищем был зашифрован более длинным паролем, который сложно подобрать. У вас на компьютере должен быть установлен git. Заходим на страницу github Метамаска, копируем урл.Открываем терминал и говорим:...]]></description>
            <content:encoded><![CDATA[<p>Если вы не читали мою предыдущую статью «<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/raznorabochiy.eth/bDahqPl8m2lpho6RLY69cUFS1pNjQPYKfS0A-gtl9z0">Как воруют приватники из вашего Метамаска</a>» очень советую её прочитать, там мы выясняем, что пароль Метамаска является ключом к базе данных.</p><p>В этой статье я покажу как пропатчить Метамаск, чтобы при работе с ним вы использовали короткий пароль, а файл с хранилищем был зашифрован более длинным паролем, который сложно подобрать.</p><p>У вас на компьютере должен быть <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://git-scm.com/book/ru/v2/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-Git">установлен git</a>.</p><p>Заходим на страницу <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/MetaMask/metamask-extension">github Метамаска</a>, копируем урл.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dcc224d89c563c6feacf2a48208688f519855b0aada97a0bfd36029b6a7f6112.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Открываем терминал и говорим:</p><p><code>git clone git@github.com:MetaMask/metamask-extension.git</code></p><p>через пару минут в папке <code>metamask-extension</code> будут лежать исходники</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ed7a4f6ed87bd433e3fda27e3b6ffcdddf3a30ba46347c055ebb222baf75455e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Далее нам нужно установить Node.js, для Метамаска это должна быть версия 16</p><p>Тут есть 2 варианта, либо поставить 16 версию с сайта <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nodejs.org/ru/download/releases">https://nodejs.org/ru/download/releases</a> либо, если у вас уже установлена более свежая версия, можно установить менеджер версий Node.js и переключиться на версию 16.</p><p>У меня установлен менеджер версий n - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/n">https://www.npmjs.com/package/n</a></p><p>В результате, после установки, если вы в терминале наберёте <code>node --version </code>должен быть ответ <code>v16.20.0</code></p><p>Далее необходимо установить yarn, это менеджер npm-пакетов, который Метамаск использует для сборки</p><p><code>npm install --global yarn</code></p><p>Переходим в папку с Метамаском:</p><p><code>cd metamask-extension</code></p><p>следующая команда нужна, чтобы переключиться на самую свежую на данный момент стабильную версию Метамаска:</p><p><code>git checkout v10.34.3</code></p><p>Устанавливаем необходимые пакеты:</p><p><code>yarn install</code></p><p>Дублируем файл <code>.metamaskrc.dist</code> под именем <code>.metamaskrc</code> вот этой командой:</p><p><code>cp .metamaskrc.dist .metamaskrc</code></p><p>В файле <code>.metamaskrc</code> меняем строку <code>INFURA_PROJECT_ID=00000000000</code> на <code>INFURA_PROJECT_ID=b6bf7d3508c941499b10025c0776eaf8</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/948ef84148aab46922f584c2a22f08c24afedea5200a002f7f32ce6533c3550c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Значение <code>INFURA_PROJECT_ID</code> я подсмотрел расшифровав трафик оригинального Метамаска</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c20023df346933d68708598d1f13de75855f7d962a3e4de1198fef2181e74f33.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Я внёс все необходимые правки и сделал <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gist.github.com/raznorabochiy/f94b41fb32dfbdfd6bdf245c71cda2fe">patch-файл</a>, его можно скачать <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gist.githubusercontent.com/raznorabochiy/f94b41fb32dfbdfd6bdf245c71cda2fe/raw/1885d4be02b381249e665af824d7945ddf62092d/long-password.patch">отсюда</a>, он выглядит вот так:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/25f63506c663d3bcb21efa33ff855cb435c106d97e1778c2957583a077b69c25.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Строки которые начинаются с символа «+» это добавленные строки, те что начинаются с символа «-» это удалённые строки.</p><p>Этот патч можно наложить командой:</p><p><code>git apply long-password.patch</code></p><p>Патч наложился, теперь командой <code>git status</code> мы можем увидеть, что изменился файл <code>app/scripts/metamask-controller.js</code></p><p>А если ввести команду <code>git diff app/scripts/metamask-controller.js</code> мы увидим какие изменения были внесены (кнопка q выход из режима просмотра)</p><p>Меняем префикс у длинного пароля на какую-то свою уникальную строку</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/31e80f5b5b8787369029d6f7877438739cc185df653bec958ac9c77c2d8d5459.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Теперь давайте запустим автоматические тесты, которые проверят, что мы ничего не сломали своими правками. Этот шаг не обязательный, его можно пропустить.</p><p><code>yarn test</code></p><p>Это может занять нескольких минут. Смотрим отчёт, что все тесты проеденый и ошибок нет.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e62f19e9df95a9f6376a9b25a4ea54700bf8f4eec943b504c3081a1f5bc0bc7e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Запускаем сборку:</p><p><code>yarn dist</code></p><p>В папке builds появились файлы:</p><ul><li><p>metamask-chrome-10.34.3.zip</p></li><li><p>metamask-firefox-10.34.3.zip</p></li></ul><p>Заходим в Хроме на страницу <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">chrome://extensions/</a></p><p>Включаем режим разработчика, переключатель в правом верхнем углу.</p><p>Перетаскиваем и дропаем в браузер файл <code>metamask-chrome-10.34.3.zip</code></p><p>Настраиваем сид-фразу и пароль из предыдущей статьи:</p><p>seed: <code>emotion honey what lens hand harbor wide humor select oppose perfect way</code></p><p>password: <code>9kdaolfg</code></p><p>Теперь для обычной работы с Метамаском мы используем короткий пароль <code>9kdaolfg</code></p><p>Пробуем расшифровать файл с базой данных в которой хранится seed-фраза паролем <code>9kdaolfg</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0600394e9fc2c2d4910c51a125d1d5138fa3557a37e758919cc727293e03e772.png" alt="Не получается" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Не получается</figcaption></figure><p>Пробуем расшифровать длинным паролем <code>A@x(q8WZ#h]6$)`q=Ij]9kdaolfg</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f1f05d62db6f7ab1432c4ca524930b8c28138bc19d2ebf71eacffb75e47a765e.png" alt="Всё получилось!" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Всё получилось!</figcaption></figure><p>Теперь если стиллер украдёт только лог с данными Метамаска, то расшифровать его будет очень сложно. Для того, чтобы восстановить весь пароль придётся своровать также код расширения, на сколько я знаю, такое стиллеры сейчас не делают.</p><p>На этом всё.</p><p><em>Статья написана специально для приватки</em> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/fackblockchat">FACKBLOCK RESEARCH</a></p>]]></content:encoded>
            <author>raznorabochiy@newsletter.paragraph.com (Разнорабочий × 9kDAO)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/a1ac4a12e45c86a822cd81ce9a5a554480181c1cc061145c538b386a7b753a7f.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Как обезопасить себя при запуске чужого софта]]></title>
            <link>https://paragraph.com/@raznorabochiy/e3xwEB68bWTriLpFoiAj</link>
            <guid>e3xwEB68bWTriLpFoiAj</guid>
            <pubDate>Thu, 20 Jul 2023 12:38:05 GMT</pubDate>
            <description><![CDATA[В последнее время на рынке появилось огромное количество сибил-софта, как публичного так и приватного. Обычно это скрипты на Python или JavaScript. Иногда они поставляются в виде исходников и это упрощает аудит для тех, кто немного умеет читать код, иногда скомпилированы и исходники не доступны, что сильно усложняет жизнь. Как скрипты воруют приватники? В большинстве случаев их отправляют по протоколу http/https на заранее настроенный сервер или телеграмм-боту. Я написал примитивный тестовый ...]]></description>
            <content:encoded><![CDATA[<p>В последнее время на рынке появилось огромное количество сибил-софта, как публичного так и приватного. Обычно это скрипты на Python или JavaScript. Иногда они поставляются в виде исходников и это упрощает аудит для тех, кто немного умеет читать код, иногда скомпилированы и исходники не доступны, что сильно усложняет жизнь.</p><p>Как скрипты воруют приватники? В большинстве случаев их отправляют по протоколу http/https на заранее настроенный сервер или телеграмм-боту.</p><p>Я написал примитивный тестовый скрипт, который делает что-то полезное - запрашивает баланс в Ethereum и попутно ворует приватники, отправляя их в телеграм своему боту.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/082c2e9752f36ea30a791ec8b2fa6fcccfd1c40b7313604d1d7f32f1c2faba14.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Исходники: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gitfront.io/r/raznorabochiy/xQNc17xmu9G1/rekt-soft-example/">rekt-soft-example</a></p><p>Давайте запустим скрипт в терминале.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a0e49c95358a0c17a729eaf63fc000b2481ed9ed1c1e03229dffa3baf6225d55.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Как видите скрипт отработал <br>... и у меня в телеге оказались приватники</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fe291feacb5abc09c2ea03926bc5d0e0953aed9e3d9280f94f86c25bd6ebe10a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Теперь установим приложение <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.obdev.at/products/littlesnitch/index.html">Little Snitch</a><br>Оно платное, но есть пробный период.</p><p>Разрешаем запуск системного ПО</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a467af3fba1cba64aba05ea98e416926196fa547314a74c2a9c14b9ddcc47b02.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Разрешаем фильтровать сетевой трафик</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/501d9bfae91eb386e6ab99ccbe0e55f85bd9d5f28dc406239a0dac1c58aee986.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Перед повторным запуском скрипта запускаем Alert Mode</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0447431fc2a7cb8fbe90d548696518880d899171c79ee89680e6f8c27b7411e1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Запускаем скрипт, он приостанавливается и появляется уведомление, где нужно одобрить или отклонить соединение.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ec0d1e212516d0f7897b11d16a6a54594e20cd45d2ed8e7a16eb3108f7181ad1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>В этом случае одобряем, так как видим, что соединение с <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://eth.llamarpc.com">eth.llamarpc.com</a>, это RPC Ethereum, которое использует наш скрипт.</p><p>Далее появляется второе уведомление связанное с терминалом, на этот раз соединение с <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://api.telegram.org">api.telegram.org</a> это выглядит подозрительно, отклоняем его.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/363de420c43042f6ba893503ab1d2ca8152466a9fc30a97ed2a53480097a1cf8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Скрипт выполняется, приватники не утекают.</p><p>Я думаю, вы поняли логику работы с Little Snitch.</p><p>Единственное неудобство, что в режиме Alert Mode вас будут спамить другие запросы на подключение, не только от терминала, но и от браузера и других программ. Так что лучше во время запуска скрипта не запускать программы, которые создают трафик.</p><p>Кроме Little Snitch есть другие программы со схожим функционалом, например <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://radiosilenceapp.com/">Radio Silence</a> и <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://objective-see.org/">LuLu</a> они тоже могут блокировать трафик от определённых приложений, но я не нашёл в них режим похожий на Alert Mode.</p><p>На этом всё, берегите свои приватники.</p><p><em>Статья написана специально для приватки</em> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/fackblockchat">FACKBLOCK RESEARCH</a></p>]]></content:encoded>
            <author>raznorabochiy@newsletter.paragraph.com (Разнорабочий × 9kDAO)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/64580e50efd5123674ad2e6c9dd7a927a15fe32c3fd7f82bfc9de1bb64af4960.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Как воруют приватники из вашего Метамаска]]></title>
            <link>https://paragraph.com/@raznorabochiy/knKhRVg34QDiDwVyehOO</link>
            <guid>knKhRVg34QDiDwVyehOO</guid>
            <pubDate>Sun, 16 Jul 2023 19:09:42 GMT</pubDate>
            <description><![CDATA[Давно хотел заглянуть под капот Метамаска, посмотреть как он устроен, очень любопытно было узнать как и в каком виде хранятся сид-фразы и приватники. Нужно это для того, чтобы понять как обезопасить себя и попутно извлечь некоторую пользу, но об этом позже. Вы наверное уже встречали сообщения в чатах, когда люди жаловались на то, что у них угнали приватник и все средства с кошелька вывели или оставили часть активов и установили дрейней. Чаще всего это происходит после того, как пользователь с...]]></description>
            <content:encoded><![CDATA[<p>Давно хотел заглянуть под капот Метамаска, посмотреть как он устроен, очень любопытно было узнать как и в каком виде хранятся сид-фразы и приватники. Нужно это для того, чтобы понять как обезопасить себя и попутно извлечь некоторую пользу, но об этом позже.</p><p>Вы наверное уже встречали сообщения в чатах, когда люди жаловались на то, что у них угнали приватник и все средства с кошелька вывели или оставили часть активов и установили дрейней. Чаще всего это происходит после того, как пользователь скачивает какой-нибудь пиратский софт или крек для какого-нибудь коммерческого софта или через социальную инженерию пользователя обманом вынуждают запустить какой-нибудь файл, который собирает чувствительную информацию с компьютера.</p><p>Метамаск (для Google Chrome) хранит базу данных с приватниками в файлах, которые находятся в папках:</p><p><strong>Mac</strong>: <code>/Users/USER_NAME/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn</code></p><p><strong>Windows</strong>: <code>C:\Users\USER_NAME\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn</code></p><p>Файл с хранилищем имеет минимальный номер и расширение <code>.ldb</code>, он зашифрован, ключ для расшифровки файла - ваш пароль от Метамаска.</p><p>Давайте попробуем установить свежий Метамаск и настроить новый аккаунт. Устанавливаем новый пароль, для примера это будет <code>9kdaolfg</code></p><p>Создаём новую сид-фразу:</p><p><code>emotion honey what lens hand harbor wide humor select oppose perfect way</code></p><p>Наш основной аккаунт: <code>0x67f4ADFc62211867d65d7FdB06Eaf28FBd9EEB73</code></p><p>Добавим второй аккаунт с именем Second который будет выведен из нашей сид-фразы: <code>0x301Df961c3522A99fE7E8A6723FB3D49678B3D01</code></p><p>И добавим приватник, сгенерированный <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://cointool.app/createWallet/eth">https://cointool.app/createWallet/eth</a>Это так называемый импортированный аккаунт, он не выводится из базовой сид-фразы. Приватник: <code>0x9d0cd31ecaf0a1f876b96b8c0e8674ce32d2d07199b00f51512be1eee86d2685</code> Назовём его Third, его адрес: <code>0xf0e93c050e8448bec3cde46af402a7a453a385a6</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/469179fd3a3fa1343e0b1b8a4b2490bcb53ef507b7cbb7c6ff51b251b1a82589.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Переходим в папку <code>~/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/18159b9a13e0229d3d4f138805946da522e4cb2d32d0ac4854beb909bbd0ba53.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Файл <code>000005.ldb</code> это наше хранилище. Вот так выглядит его содержимое:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5d904b7f8a378da43aa42167751461ce02fa7c1ae19b81203c3a058a37706a69.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Попробуем расшифровать его при помощи веб-утилиты <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metamask.github.io/vault-decryptor/">https://metamask.github.io/vault-decryptor/</a> для расшифровки потребуется наш пароль</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f3d0da068a4008face2f8b7070d48c41cdb0b368246399b85189fecfd887e2c6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Как мы видим, в этом файле есть наша сид-фраза, но нет информации о втором аккаунте и нет информации об импортированном по приватному ключу аккаунте.</p><p>Давайте откроем файл с расширением <code>.log</code>, в нашем случае это <code>000063.log</code> и найдём в нём строку <code>KeyringController</code>, скопируем выделенную часть:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ce63bc4f31e057f1303b7f186c1ddccc19b1587a2291332b27d4800fcdf20972.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Почистим от ненужных обратных слешей, чтобы это был валидный json</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/85210a84c7d57473c51357a319d974045a8ac8fad70058a7e4ca2a1b50af5e55.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Вставим этот json на страницу <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metamask.github.io/vault-decryptor/">Vault Decryptor</a> и введём пароль:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b133bf1c4e21faf8e9e56e7256fc984565e517b92d4dc75ac31f341099515a4d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Как видите, мы опять получили сид-фразу, информацию о том, что у нас 2 аккаунта, первый будет выведен из сид-фразы по пути <code>m/44&apos;/60&apos;/0&apos;/0</code>, второй по пути <code>m/44&apos;/60&apos;/0&apos;/1</code>, так же мы видим наш приватник от импортированного аккауна.</p><p>Если у вас нет пароля или вы забыли пароль от Метамаска, его можно подобрать при помощи утилит:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://btcrecover.readthedocs.io">BTCRecover</a> проще в использовании, написана на питоне</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hashcat.net/hashcat">Hashcat</a> немного сложнее в использовании, написана на Си, очень быстрая, можно задействовать GPU</p></li></ul><p>У меня нет тестового стенда с Hashcat и ригом из N видеокарт, но подозреваю, что у тех, кто ворует пароли он есть и такой пароль как <code>9kdaolfg</code> подбирается если не за считанные минуты, то за часы.</p><p>Вот почему стойкий пароль является обязательным условием безопасного использования Метамаска. Меня самого сильно утомляет ввод сложного пароля в Метамаск и я хотел бы как-то упростить этот процесс.</p><p>Я вижу такое решение, так как Метамаск это опенсорсный кошелёк, можно скачать исходники и пропатчить их, добавив префикс к паролю. Пользователь продолжает вводить 9kdaolfg, но внутри кода этот пароль превращается в {P~Nyqa@bj[j0gP_][@NTb]$/Tb9&amp;!46H(Lp/:&apos;t<em>9kdaolfg</em> Такой пароль подобрать нереально, а текущие инструменты для кражи данных не выгружают с компьютеров пользователей исходные коды браузерных расширений.</p><p>Если развить эту мысль далее, то можно сделать специальные пропатченные версии Метамаска, которые можно относительно безопасно устанавливать на компьютеры воркеров. Можно отправлять уведомления, если воркер пытается посмотреть сид-фразу или экспортировать приватник, можно показывать неправильный приватник/сид. Опять таки, можно дополнять пароль и тогда воркер знает часть пароля, которая даёт пользоваться Метамаском, но не расшифрует логи, если он выгрузит их с компьютера.</p><p>На этом я заканчиваю первую статью, если тема окажется интересной и я получу достаточно позитивных откликов, напишу продолжение, про то как пропатчить и собрать Метамаск.</p><h3 id="h-dopolnitelnye-materialy" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Дополнительные материалы</h3><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://support.metamask.io/hc/en-us/articles/360018766351-How-to-use-the-Vault-Decryptor-with-the-MetaMask-Vault-Data">How to recover your Secret Recovery Phrase</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metamask.github.io/vault-decryptor/">MetaMask Vault Decryptor</a></p></li></ul><p><em>Статья написана специально для приватки</em> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/fackblockchat">FACKBLOCK RESEARCH</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="subscriber-edition://0x002413B988860a0D14BeAAb004bf562CF837d2b4?tokenId=0&amp;size=small">subscriber-edition://0x002413B988860a0D14BeAAb004bf562CF837d2b4?tokenId=0&amp;size=small</a></p>]]></content:encoded>
            <author>raznorabochiy@newsletter.paragraph.com (Разнорабочий × 9kDAO)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7966f2fbfa161c010384ba1127c38e955d5ea01984f260a09d1ea4daf2594588.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>