# Как воруют приватники из вашего Метамаска

By [Разнорабочий × 9kDAO](https://paragraph.com/@raznorabochiy) · 2023-07-16

---

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

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

Метамаск (для Google Chrome) хранит базу данных с приватниками в файлах, которые находятся в папках:

**Mac**: `/Users/USER_NAME/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn`

**Windows**: `C:\Users\USER_NAME\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn`

Файл с хранилищем имеет минимальный номер и расширение `.ldb`, он зашифрован, ключ для расшифровки файла - ваш пароль от Метамаска.

Давайте попробуем установить свежий Метамаск и настроить новый аккаунт. Устанавливаем новый пароль, для примера это будет `9kdaolfg`

Создаём новую сид-фразу:

`emotion honey what lens hand harbor wide humor select oppose perfect way`

Наш основной аккаунт: `0x67f4ADFc62211867d65d7FdB06Eaf28FBd9EEB73`

Добавим второй аккаунт с именем Second который будет выведен из нашей сид-фразы: `0x301Df961c3522A99fE7E8A6723FB3D49678B3D01`

И добавим приватник, сгенерированный [https://cointool.app/createWallet/eth](https://cointool.app/createWallet/eth)Это так называемый импортированный аккаунт, он не выводится из базовой сид-фразы. Приватник: `0x9d0cd31ecaf0a1f876b96b8c0e8674ce32d2d07199b00f51512be1eee86d2685` Назовём его Third, его адрес: `0xf0e93c050e8448bec3cde46af402a7a453a385a6`

![](https://storage.googleapis.com/papyrus_images/469179fd3a3fa1343e0b1b8a4b2490bcb53ef507b7cbb7c6ff51b251b1a82589.png)

Переходим в папку `~/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn`

![](https://storage.googleapis.com/papyrus_images/18159b9a13e0229d3d4f138805946da522e4cb2d32d0ac4854beb909bbd0ba53.png)

Файл `000005.ldb` это наше хранилище. Вот так выглядит его содержимое:

![](https://storage.googleapis.com/papyrus_images/5d904b7f8a378da43aa42167751461ce02fa7c1ae19b81203c3a058a37706a69.png)

Попробуем расшифровать его при помощи веб-утилиты [https://metamask.github.io/vault-decryptor/](https://metamask.github.io/vault-decryptor/) для расшифровки потребуется наш пароль

![](https://storage.googleapis.com/papyrus_images/f3d0da068a4008face2f8b7070d48c41cdb0b368246399b85189fecfd887e2c6.png)

Как мы видим, в этом файле есть наша сид-фраза, но нет информации о втором аккаунте и нет информации об импортированном по приватному ключу аккаунте.

Давайте откроем файл с расширением `.log`, в нашем случае это `000063.log` и найдём в нём строку `KeyringController`, скопируем выделенную часть:

![](https://storage.googleapis.com/papyrus_images/ce63bc4f31e057f1303b7f186c1ddccc19b1587a2291332b27d4800fcdf20972.png)

Почистим от ненужных обратных слешей, чтобы это был валидный json

![](https://storage.googleapis.com/papyrus_images/85210a84c7d57473c51357a319d974045a8ac8fad70058a7e4ca2a1b50af5e55.png)

Вставим этот json на страницу [Vault Decryptor](https://metamask.github.io/vault-decryptor/) и введём пароль:

![](https://storage.googleapis.com/papyrus_images/b133bf1c4e21faf8e9e56e7256fc984565e517b92d4dc75ac31f341099515a4d.png)

Как видите, мы опять получили сид-фразу, информацию о том, что у нас 2 аккаунта, первый будет выведен из сид-фразы по пути `m/44'/60'/0'/0`, второй по пути `m/44'/60'/0'/1`, так же мы видим наш приватник от импортированного аккауна.

Если у вас нет пароля или вы забыли пароль от Метамаска, его можно подобрать при помощи утилит:

*   [BTCRecover](https://btcrecover.readthedocs.io) проще в использовании, написана на питоне
    
*   [Hashcat](https://hashcat.net/hashcat) немного сложнее в использовании, написана на Си, очень быстрая, можно задействовать GPU
    

У меня нет тестового стенда с Hashcat и ригом из N видеокарт, но подозреваю, что у тех, кто ворует пароли он есть и такой пароль как `9kdaolfg` подбирается если не за считанные минуты, то за часы.

Вот почему стойкий пароль является обязательным условием безопасного использования Метамаска. Меня самого сильно утомляет ввод сложного пароля в Метамаск и я хотел бы как-то упростить этот процесс.

Я вижу такое решение, так как Метамаск это опенсорсный кошелёк, можно скачать исходники и пропатчить их, добавив префикс к паролю. Пользователь продолжает вводить 9kdaolfg, но внутри кода этот пароль превращается в {P~Nyqa@bj\[j0gP\_\]\[@NTb\]$/Tb9&!46H(Lp/:'t_9kdaolfg_ Такой пароль подобрать нереально, а текущие инструменты для кражи данных не выгружают с компьютеров пользователей исходные коды браузерных расширений.

Если развить эту мысль далее, то можно сделать специальные пропатченные версии Метамаска, которые можно относительно безопасно устанавливать на компьютеры воркеров. Можно отправлять уведомления, если воркер пытается посмотреть сид-фразу или экспортировать приватник, можно показывать неправильный приватник/сид. Опять таки, можно дополнять пароль и тогда воркер знает часть пароля, которая даёт пользоваться Метамаском, но не расшифрует логи, если он выгрузит их с компьютера.

На этом я заканчиваю первую статью, если тема окажется интересной и я получу достаточно позитивных откликов, напишу продолжение, про то как пропатчить и собрать Метамаск.

### Дополнительные материалы

*   [How to recover your Secret Recovery Phrase](https://support.metamask.io/hc/en-us/articles/360018766351-How-to-use-the-Vault-Decryptor-with-the-MetaMask-Vault-Data)
    
*   [MetaMask Vault Decryptor](https://metamask.github.io/vault-decryptor/)
    

_Статья написана специально для приватки_ [FACKBLOCK RESEARCH](https://t.me/fackblockchat)

[subscriber-edition://0x002413B988860a0D14BeAAb004bf562CF837d2b4?tokenId=0&size=small](subscriber-edition://0x002413B988860a0D14BeAAb004bf562CF837d2b4?tokenId=0&size=small)

---

*Originally published on [Разнорабочий × 9kDAO](https://paragraph.com/@raznorabochiy/knKhRVg34QDiDwVyehOO)*
