Продукты «Хакера»

  • Ежеквартальный «Хакер» #3

    Лучшие статьи квартала на бумаге

    2 000 ₽

    Заказать журнал
  • Годовая подписка на Xakep.ru

    Полный доступ к статьям и архиву выпусков

    6 000 ₽ в год

    Подписаться
  • «Пентест WEB» для начинающих

    Совместный курс «Хакера» и лаборатории «Хаксет»

    7 000 ₽

    Купить курс
  • Спецвыпуск «Хакера» #4

    Лучшие статьи за 2021–2022 годы на бумаге

    2 000 ₽

    Заказать журнал
8 янва­ря 2026 года зло­умыш­ленник вывел при­мер­но 8535 ETH (на тот момент око­ло 26,4 мил­лиона дол­ларов) из смарт‑кон­трак­та про­екта Truebit. Ошиб­ка в фун­кции рас­чета цены поз­волила ата­кующе­му мин­тить новые токены поч­ти бес­плат­но. Пос­ле ата­ки цена токена TRU обру­шилась более чем на 99% за нес­коль­ко часов.

Кон­тракт раз­верну­ли в сети Ethereum в 2021 году, и нес­коль­ко лет он не прив­лекал вни­мания. При этом его так и не верифи­циро­вали на Etherscan: авто­ры не заг­рузили исходник на Solidity, поэто­му пос­мотреть мож­но было толь­ко сырой байт‑код, который исполня­ет EVM. Если ты хотел понять, что дела­ет этот кон­тракт, путь был один — ревер­сить.

По оцен­кам ана­лити­ков Chainalysis, за пер­вые шесть месяцев 2026 года из невери­фици­рован­ных смарт‑кон­трак­тов похити­ли как минимум 36,7 мил­лиона дол­ларов. Если код не верифи­циро­ван, это еще не зна­чит, что кон­тракт вре­донос­ный. Но без дос­тупа к исходни­кам на язы­ке высоко­го уров­ня про­водить аудит и раз­бирать­ся в биз­нес‑логике гораз­до слож­нее.

В этой статье пос­мотрим, как выг­лядит байт‑код EVM, какими инс­тру­мен­тами его ана­лизи­ровать и как при­менять этот навык при ауди­те смарт‑кон­трак­тов или рас­сле­дова­нии инци­ден­тов.

 

Контекст

Ethereum Virtual Machine (EVM) — сте­ковая машина: в ней нет регис­тров. Смарт‑кон­тракт на Solidity, Vyper или дру­гом язы­ке для EVM ком­пилиру­ется в пос­ледова­тель­ность опко­дов — одно­бай­товых инс­трук­ций вро­де PUSH1, SSTORE, JUMPI или CALL. Каж­дая инс­трук­ция рас­ходу­ет газ и выпол­няет опре­делен­ную опе­рацию: нап­ример, меня­ет стек, память или хра­нили­ще (storage).

Сто­имость в газе может быть фик­сирован­ной или зависеть от парамет­ров опе­рации и сос­тояния EVM. Набор инс­трук­ций вклю­чает око­ло 140 опко­дов. Они нуж­ны для вычис­лений, срав­нений, побито­вых опе­раций, хеширо­вания, работы со сте­ком, памятью и хра­нили­щем, а так­же вза­имо­дей­ствия с дру­гими кон­трак­тами.

Есть два важ­ных момен­та, которые отли­чают эту задачу от ревер­са обыч­ного бинар­ника. Во‑пер­вых, здесь нет ни имен фун­кций, ни отла­доч­ных сим­волов, ни самого понятия фун­кции на уров­не байт‑кода. Кон­тракт — это кусок кода с таб­лицей перехо­дов в самом начале.

Во‑вто­рых, все пуб­лично. Пос­ле деп­лоя ран­тайм‑байт‑код кон­трак­та нав­сегда оста­ется в откры­том дос­тупе: кто угод­но может получить его с любой ноды или через блок‑экс­пло­рер, даже если автор не пуб­ликовал исходни­ки.

Ве­рифи­кация — заг­рузка исходно­го кода на высоко­уров­невом язы­ке (нап­ример, Solidity) на Etherscan или ана­логич­ный сер­вис и про­вер­ка его соот­ветс­твия байт‑коду кон­трак­та — дело доб­роволь­ное. На ком­пиляцию и работос­пособ­ность кон­трак­та она не вли­яет.

Кон­трак­ты оста­ются невери­фици­рован­ными по раз­ным при­чинам, и не все они свя­заны с про­тивоп­равной деятель­ностью. Минималь­ные прок­си и фаб­рики кон­трак­тов поз­воля­ют деп­лоить тысячи поч­ти иден­тичных кон­трак­тов — верифи­циро­вать каж­дый экзем­пляр неп­рактич­но.

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

Кон­тракт Truebit как раз отно­сит­ся к катего­рии заб­рошен­ных. На момент взло­ма ему было пять лет, на его сче­ту лежали реаль­ные день­ги, но понять его биз­нес‑логику без ревер­са было невоз­можно. При этом тро­гать то, что работа­ет, казалось бес­смыс­ленным.

Имен­но поэто­му реверс‑инжи­ниринг байт‑кода важен и для Red Team, и для Blue Team. Ресер­черы исполь­зуют реверс для ауди­та невери­фици­рован­ных кон­трак­тов, раз­бора экс­пло­итов и рас­сле­дова­ния инци­ден­тов — ведь во вре­мя атак хакеры не пуб­лику­ют исходный код на Solidity. Ауди­торам реверс помога­ет про­верять безопас­ность кода.

 

Инструменты

Для начала тебе понадо­бит­ся нем­ного — и все это бес­плат­но:

  • Обоз­реватель бло­ков (Etherscan или ана­лог для тво­ей сети) — что­бы получить байт‑код задеп­лоен­ного кон­трак­та пря­мо на вклад­ке Contract.
  • evm.codes — инте­рак­тивный спра­воч­ник опко­дов EVM и песоч­ница для раз­бора байт‑кода пря­мо в бра­узе­ре. Здесь ты можешь узнать, что дела­ет каж­дый опкод, и вста­вить сырой байт‑код, что­бы сра­зу уви­деть резуль­тат дизас­сем­бли­рова­ния.
  • Де­ком­пилятор. Heimdall-rs — бес­плат­ный инс­тру­мент на Rust для ана­лиза невери­фици­рован­ных кон­трак­тов. Он дизас­сем­бли­рует байт‑код, декоди­рует calldata без ABI, стро­ит граф кон­трак­та и выда­ет деком­пилиро­ван­ный код в сти­ле Solidity. Де­ком­пилятор Dedaub — бес­плат­ная аль­тер­натива с веб‑интерфей­сом. Он при­нима­ет адрес кон­трак­та или сырой байт‑код и воз­вра­щает чита­емый код на нес­коль­ких уров­нях абс­трак­ции.
  • Оп­циональ­но — Ghidra с рас­ширени­ем Mothra для EVM, если работа­ешь с круп­ными кон­трак­тами и тебе нужен пол­ноцен­ный гра­фичес­кий дизас­сем­блер с перек­рес­тны­ми ссыл­ками. Работу с ним под­робно раз­бирали на Devcon 2025.
 

Реверсим

 

Получаем байт-код

У каж­дого задеп­лоен­ного кон­трак­та есть два важ­ных бло­ка байт‑кода: код соз­дания (creation code) и ран­тайм‑код. Пер­вый выпол­няет­ся один раз при деп­лое: фор­миру­ет и воз­вра­щает ран­тайм‑код.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Фото аватара

ArtemIrgebaev

OSINT-аналитик с 7 годами опыта. Основатель алматинского хакерспейса "Черный Лед". Руковожу аналитическим агентством Hyperfocus.ae. ex-triager в ведущей web3 баг-баунти площадке immunefi.com. Проверяю иностранных контрагентов, отслеживаю криптовалютные транзакции. Не сотрудничаю с компаниями из СНГ (даже не просите).

Читай также

MEGANews. Cамые важные события в мире инфосека за сентябрь

В этом месяце: критические уязвимости RouterOS уже используются в атаках на роутеры MikroT…

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии