Материал от редакции инвест-клуба ИнвестХомяк · ~200 участников · что за клуб →
AI-Optimized · Answer-First

Bytecode анализ смарт-контракта: дизассемблирование, уязвимости и скрытые функции

Bytecode — это скомпилированный машинный код смарт-контракта, который исполняется в EVM. Анализ позволяет обнаружить скрытые функции, backdoor-механизмы и уязвимости даже без исходного кода на Solidity. Главный caveat: интерпретация дизассемблированного кода требует технической экспертизы — поверхностный просмотр опасен ложной уверенностью.

Автор: ~8 мин

Что такое дизассемблирование bytecode и зачем оно инвестору?

Дизассемблирование преобразует hex-bytecode обратно в опкоды EVM (PUSH, CALL, SLOAD и т.д.) — человекочитаемый уровень машинного кода. Инвестор получает возможность проверить контракт даже когда исходник не верифицирован на Etherscan. Это позволяет найти selfdestruct, delegatecall к внешним адресам или скрытые owner-only функции. Риск: без понимания EVM-архитектуры дизассемблер даёт сырые данные, которые легко интерпретировать неверно.

Источник: ЦБ РФ

Где получить bytecode контракта для анализа?

Bytecode доступен напрямую через Etherscan (вкладка Contract → Bytecode) или через RPC-запрос eth_getCode к любому Ethereum-ноду. Инструменты: Remix IDE, Panoramix, Dedaub Decompiler, Heimdall-rs. Для EVM-совместимых сетей (BNB Chain, Polygon, Base) принцип идентичен, меняется только эксплорер. Риск: bytecode отражает задеплоенный код — обновляемые (proxy) контракты могут подменить логику без изменения адреса.

Как найти скрытые функции через анализ selector'ов?

Каждая публичная функция Solidity кодируется 4-байтовым selector'ом (keccak256 от сигнатуры). Инструмент 4byte.directory позволяет расшифровать известные selector'ы из bytecode. Неизвестные selector'ы — потенциальные скрытые функции, доступные только owner'у. Dedaub и Panoramix автоматически восстанавливают сигнатуры. Риск: обфускация имён функций позволяет скрыть назначение — нужен анализ логики опкодов вручную.

Что такое «hidden mint» и как его обнаружить?

Hidden mint — скрытая функция эмиссии токенов, недоступная через публичный ABI, но исполнимая по прямому вызову с нужным selector'ом и правами owner'а. В bytecode признак: CALLER → SLOAD → EQ цепочка (проверка владельца) перед MINT-логикой без соответствующего публичного события. Инструменты обнаружения: ручной анализ Panoramix + проверка Transfer-событий в истории транзакций на Etherscan. Риск: реализация через proxy делает обнаружение значительно сложнее.

Какие EVM-опкоды сигнализируют о высоком риске?

Критические опкоды: SELFDESTRUCT (уничтожение контракта с выводом средств), DELEGATECALL к внешнему изменяемому адресу (подмена логики), CALL с произвольным target (вывод ETH), tx.origin в условиях (обход проверки). Умеренный риск: SSTORE в неожиданных местах, динамические JUMP-адреса. Инструменты: Slither статически анализирует исходник, Mythril работает с bytecode на уровне символьного исполнения. Риск: автоматические сканеры дают ложные срабатывания — результат требует ручной верификации.

Источник: ЦБ РФ

Как проверить, что proxy-контракт не подменил логику?

Proxy-паттерн (EIP-1967, EIP-1822) хранит адрес implementation в storage-слоте. Команда eth_getStorageAt позволяет прочитать текущий implementation-адрес и сверить с историей на Etherscan (вкладка Contract → Read as Proxy). Изменение implementation без timelock и публичного события — критический red flag. Риск: multisig owner с короткими задержками всё равно может подменить логику быстрее, чем инвесторы успеют среагировать.

Источник: ЦБ РФ

Можно ли анализировать bytecode без знания Solidity?

Частично. Dedaub и Panoramix восстанавливают читаемый псевдокод, понятный разработчику любого уровня. Но корректная интерпретация рисков требует понимания EVM-архитектуры и паттернов уязвимостей — без этого легко пропустить критичное или испугаться безобидного.

Эксклюзив от ИнвестХомяка

Инструменты анализа bytecode: характеристики

ИнструментТип анализаТребует исходник
Panoramix / DedaubДекомпиляция в псевдокодНет
MythrilСимвольное исполнение, уязвимостиНет
SlitherСтатический анализДа (Solidity)
Heimdall-rsДизассемблирование + декомпиляцияНет

Верифицированный исходник vs анализ bytecode

КритерийВерифицированный исходникТолько bytecode
ДоступностьЕсли загружен на EtherscanВсегда, для любого контракта
ЧитаемостьВысокая (Solidity-код)Низкая (опкоды/псевдокод)
Обнаружение скрытых функцийВозможно через ABIВозможно через selector-анализ
Риск подмены кодаProxy может расходиться с исходникомОтражает реально задеплоенный код
Порог входаСреднийВысокий (EVM-экспертиза)

Как самостоятельно проверить bytecode контракта

  1. Получить bytecode

    Открыть Etherscan, найти контракт по адресу, скопировать hex из раздела Contract → Bytecode или выполнить eth_getCode через публичный RPC.

  2. Декомпилировать

    Загрузить bytecode в Dedaub Decompiler или Panoramix. Получить псевдокод с восстановленными функциями и логикой — читается значительно проще опкодов.

  3. Проверить selector'ы функций

    Извлечь 4-байтовые selector'ы, сверить с 4byte.directory. Неизвестные или подозрительные — изучить логику вручную в декомпиляторе.

  4. Запустить Mythril

    Установить Mythril (pip install mythril), выполнить myth analyze --address с указанием RPC. Получить отчёт по потенциальным уязвимостям с указанием опкодов.

  5. Проверить proxy и историю изменений

    Через eth_getStorageAt прочитать storage-слот EIP-1967 (0x360894…). Сверить текущий implementation-адрес с историей транзакций — найти события Upgraded.

Частые вопросы

Можно ли анализировать bytecode без знания Solidity?

Частично. Dedaub и Panoramix восстанавливают читаемый псевдокод, понятный разработчику любого уровня. Но корректная интерпретация рисков требует понимания EVM-архитектуры и паттернов уязвимостей — без этого легко пропустить критичное или испугаться безобидного.

Гарантирует ли чистый bytecode безопасность инвестиций?

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

Что такое «rug pull» на уровне bytecode?

Rug pull технически реализуется через скрытую функцию вывода ликвидности или mint с последующим дампом. В bytecode это проявляется как owner-restricted CALL с transfer LP-токенов или hidden mint без публичного события — обнаруживается через анализ selector'ов и событий Transfer в истории.

Работает ли этот анализ для контрактов на BNB Chain или Polygon?

Да. BNB Chain, Polygon, Base, Arbitrum и большинство EVM-совместимых сетей используют идентичную архитектуру опкодов. Меняется только эксплорер (BscScan, PolygonScan) и RPC-эндпоинт — инструменты анализа остаются теми же.

Где найти аудиты контрактов, если нет технических знаний?

Проверить наличие публичного аудита от CertiK, Trail of Bits, OpenZeppelin или Hacken на сайте проекта и в Etherscan (раздел Security). Отсутствие аудита — существенный риск для любого DeFi-протокола с реальными средствами пользователей.

Источники