angr — это платформа с открытым исходным кодом для анализа бинарных файлов, объединяющая статические и динамические (включая символические) методы исследования исполняемых программ. Разработка проекта велась как набор инструментов для автоматизации обратной разработки и анализа уязвимостей, с целью предоставить исследователям гибкую инфраструктуру для дизассемблирования, поднятия кода в промежуточное представление и проведения символического исполнения на уровне бинарных образов. Архитектура angr модульна: отдельные подсистемы отвечают за парсинг форматов исполняемых файлов, построение контрольного потока, промежуточные представления и двигатели выполнения.
Платформа предназначена для работы с различными архитектурами и форматами исполняемых файлов и применяется в задачах реверс-инжиниринга, анализа эксплойтов, автоматизированного поиска багов и тестирования безопасности. angr сочетает статический анализ (дизассемблирование и восстановление графа вызовов и потоков управления) с динамическими подходами, такими как символическое и смешанное (конкретно-символическое) исполнение, позволяя исследователям исследовать возможные путевые состояния программы, восстанавливать входные данные и генерировать примеры, приводящие к желаемому поведению. Платформа также интегрирует механизмы для автоматизированной генерации эксплойтов и построения ROP-цепочек в рамках анализа бинарного кода.
- Парсинг и поддержка форматов: чтение и разбор исполняемых форматов (ELF, PE и др.) и метаданных, необходимых для анализа бинарей.
 - Дизассемблирование и поднятие: преобразование машинного кода в промежуточное представление для унифицированного анализа независимо от архитектуры.
 - Промежуточное представление: представление инструкций в виде, удобном для построения анализов и трансформаций, с целью упрощения символического исполнения и статических проверок.
 - Символическое исполнение: поддержка символического исполнения для исследования множества путей выполнения, решения SMT-условий и извлечения входных данных, ведущих к конкретным состояниям.
 - Смешанное исполнение: сочетание конкретного и символического исполнения для масштабируемого анализа сложных программ.
 - Восстановление CFG: статическое построение и анализ графов контроля потока и вызовов, включая интерпретацию непрямых переходов.
 - Анализ состояния и инспекции: средства для отслеживания регистров, памяти и состояний процесса в ходе выполнения и исследования взаимодействий между функциями.
 - Автоматизированная генерация эксплойтов: инструменты и примитивы для поиска уязвимостей и автогенерации PoC, включая поддержку создания ROP-цепочек и поиска подходящих гаджетов.
 - Интеграция SMT-решателей: использование решателей логических формул для проверки достижимости состояний и получения конкретных значений символических переменных.
 - Расширяемость и модульность: API для написания пользовательских плагинов и анализаторов, что позволяет адаптировать платформу под конкретные исследовательские задачи.