not-so-smart-contracts

Blockchain / Web3

Репозиторий Trail of Bits с примерами реальных уязвимостей смарт-контрактов: reentrancy, integer overflow, denial of service, bad randomness, front-running, forced ether. Каждый паттерн — отдельный контракт с описанием, эксплойтом и исправлением.

Добавлен 15.07.2026 · Обновлён 15.07.2026 · Blockchain / Web3
Установка
git clone https://github.com/crytic/not-so-smart-contracts
cd not-so-smart-contracts

# Изучить паттерны уязвимостей:
# reentrancy/, integer_overflow/, denial_of_service/,
# bad_randomness/, front_running/, forced_ether/

# Развернуть для обучения через Foundry
forge test --match-path "*/reentrancy/*"
переведено ИИ

No-so-smart-contracts теперь находится в building-secure-contracts (см. https://secure-contracts.com/)

(Не) Умные контракты

Этот репозиторий содержит примеры типичных уязвимостей смарт-контрактов Ethereum, включая код из реальных смарт-контрактов. Используйте «(Не) Умные контракты» для изучения уязвимостей EVM и Solidity, в качестве справки при проведении аудита безопасности, а также в качестве эталона для инструментов анализа безопасности.

Возможности

Каждый «Не Умный Контракт» включает стандартный набор информации:

  • Описание уникального типа уязвимости
  • Сценарии атак для эксплуатации уязвимости
  • Рекомендации по устранению или смягчению уязвимости
  • Контракты из реального мира, демонстрирующие этот недостаток
  • Ссылки на сторонние ресурсы с дополнительной информацией

Бонус! Мы также включили репозиторий и анализ нескольких ловушек (ханипотсов).

Уязвимости

Не Умный Контракт Описание
Плохая случайность Контракт пытается получить случайность на блокчейне, которой могут манипулировать пользователи
Отказ в обслуживании Атакующий приостанавливает выполнение контракта, намеренно вызывая ошибку в стратегический момент
Принудительный прием Ether Контракты можно принудительно заставить получить Ether
Неправильный интерфейс Реализация использует другие сигнатуры функций, чем интерфейс
Целочисленное переполнение Арифметика в Solidity (или EVM) по умолчанию не является безопасной
Гонка состояний Транзакции могут быть перехвачены на блокчейне
Внедрение заново (Рентрантность) Вызов внешних контрактов дает им контроль над выполнением
Непроверенный внешний вызов Некоторые операции в Solidity молча завершаются неудачей
Незащищенная функция Отсутствие использования модификатора функции позволяет атакующему манипулировать контрактом
Затенение переменных Локальное имя переменной совпадает с именем во внешней области видимости
Неправильное имя конструктора Любой может стать владельцем контракта из-за отсутствия конструктора

Авторство

Эти примеры разрабатываются и поддерживаются компанией Trail of Bits. Мы поощряем вклад, который покрывается нашей программой наград.

Если у вас есть вопросы, проблемы или вы просто хотите узнать больше, присоединяйтесь к каналу #ethereum в Empire Hacking Slack или свяжитесь с нами напрямую.

Комментарии
Войдите, чтобы оставить комментарий