В этом году мы решили возобновить публикации результатов предыдущего и анонсировать новый GSoC для проекта с открытым исходным кодом radare2 на ресурсе Habrahabr.
Текущие результаты
Как уже писали ранее, в 2015 radare2 ещё не был принят как отдельный проект, но благодаря solardiz и его проекту Openwall, одна из задач для radare2 была взята под его крыло. После этого, начиная с 2016 года, фреймворк участвует уже как отдельная компания. За прошедшие годы с момента последней публикации в рамках GSoC были выполнены следующие важные задачи:
- radeco decompiler (до сих пор в разработке)
- улучшенная поддержка ОС Windows
- реверсивная отладка (reversible debugging)
- поддержка удаленной отладки GDB и LLDB
- определение аргументов функций
- улучшение WebUI
Дополнительно, проект проводил собственный аналог GSoC — RSoC (Radare Summer of Code). Одно из отличий в том, что заявки могли отправлять не только студенты. В рамках уже этого проекта были выполнены следующие задачи:
- поддержка FLIRT и YARA сигнатур
- загрузка отладочной информации PDB
- поддержка структур(схожая с 010 Editor)
- парсинг метаданных ObjC из Mach-0 для определения классов и символьной информации
Возможно в этом году RSoC проводиться не будет, но пока решение не принято окончательно.
Методология разработки проекта
Все репозитории располагаются на github и в качестве баг-трэкера используется github issues. Тесты выделены в отдельный репозиторий и выполняются на Travis CI, AppVeyor и нашем Jenkins. Мы также используем Coverity для поиска ошибок, а для различных демонстраций — asciinema сервер.
Помимо этого, были составлены несколько документов для тех, кто хочет стать одним из разработчиков проекта:
Для начала, чтобы ознакомиться с кодовой базой проекта, мы рекомендуем желающим исправить одну из issue с пометкой good first issue.
Необходимые умения
Большая часть проекта radare2 написана на языке C, поэтому мы ожидаем, что кандидаты будут знакомы с этим ЯП. Но при этом некоторые задания потребуют Go для создания платформы по взаимодействию, Rust для radeco и Qt с C++ для Cutter. Если про Radeco уже было сказано ранее, то Cutter (до "недавних" пор он назывался Iaito) был представлен относительно недавно и представляет из себя GUI для radare2.
Участие в GSoC
Что нужно сделать для участия:
- Ознакомиться с правилами участия от Google.
- Взять одну из задач или предложить свою.
- Написать черновик заявки, используя Google Docs и наш шаблон, и попросить одного из наставников проверить его.
- Отправить заявку, используя интерфейс Google.
Для участия, помимо заявки, потребуется отправить небольшой Pull Request для решения одной из микрозадач:
- Анализ
- Графы #6967
- Дизассемблеры и ассемблеры
- RAGG2 #6949
- Рефакторинг
- Улучшение поддержки Unicode (UTF-8)
- Форматы файлов
- Отладка
- Разное
- Radeco
- Rune
- Cutter
Или можно исправить одну из github issues, подходящей по сложности с микротасками.
Рекомендации по написанию заявки:
- Заявка не должна быть большой, достаточно пары страниц.
- Попробуйте разбить период участия в GSoC по задачам, а каждую задачу на подзадачи. Это поможет не только нам понять на сколько вы заинтересованы в выполнении задачи, но и вам — оценить задачу более глубже перед началом выполнения и расставить приоритеты.
- Запишите сколько времени в день / неделю вы планируете тратить на проект.
- Укажите свой часовой пояс, чтобы мы смогли подобрать наставника с похожим для упрощения общения.
- Пожалуйста, отправьте свою заявку заранее, а не в последнюю минуту.
- Вы также можете выбрать "запасную" задачу, чтобы в случае конфликта интересов (два студента выбрали одну задачу) нам было проще решить это.
Список задач
В рамках проекта Radare2 существуют ещё несколько подпроектов: Radeco, Rune и Cutter. Поэтому для каждого было выделено по одной задачи.
- [Radeco] Псевдо-С бэкенд для декомпиляции — предполагается, что в этом году наконец-то завершится возможность декомпилировать код в Псевдо-С, используя возможности анализа Radeco
- [Rune] Интеграция с radeco-lib и radare2 — Rune библиотека создана для анализа секций бинарных файлов с помощью символьного исполнения (symbolic execution)
- [Cutter] Добавить поддержку отладки и эмуляции — на данный момент в Cutter поддерживается только статический анализ, а взаимодействие с ESIL (эмулирование) и отладка возможны только через CLI-интерфейс
Задачи, связанные непосредственно с фреймворком:
- Консольный интерфейс — улучшить текущие возможности CLI-интерфейса (к примеру, один из подтасков добавить split-режим для сравнения файлов через radiff2)
- Типы — улучшить поддержку типов и структур (struct/union)
- Разбор EXE/DLL как FAT файл — улучшить поддержку macho-формата и разделение PE (dos, win, .net)
- Поддержка Windows платформы — включает в себе как исправление багов при отладке через различные протоколы (нативно, gdb:// и windbg://), так и улучшение текущих возможностей
- Платформа для взаимодействия в реальном времени — по аналогии с проектами collabREate, YaCo и solIDArity добавить возможность для совместного реверсинга файлов, что поможет как для анализа больших файлов, так и решения CTF-задач в команде
- ROPchain генератор с помощью ragg2 — улучшить составление ROP-гаджетов и добавить автоматическое создание ROP-цепочек (рекомендуется использование SMT-решателей, к примеру Z3), как это сделано в ROPgadget
Более подробный план на лето представлен на нашей странице GSoC: rada.re/gsoc
Официальный сайт проекта: rada.re
Вопросы по задачам или использованию фреймворка также можно задавать на IRC-канале #radare в сети Freenode или telegram-канале https://t.me/radare (между ними настроен транспорт).