Во-первых, хочу отчитаться по прошлому RSoC'14, поблагодарить аудиторию хабра за ту помощь, позволившую нам организовать это мероприятие.
Благодаря тому, что не было необходимости следовать правилам Google, мы смогли изменить двух «официальных» участников «на лету».
В прошлом году мы выбрали двух официальных участников и 6 «неофициальных» (без денежного вознаграждения). Однако, в процессе продвижения кодинга осталось лишь трое неофициальных участников. Но, так как им успешно удалось завершить свои задания, мы поделили собранные деньги поровну между ними (порядка $700 на человека). Рассмотрим задания поподробнее:
Два задания не были выполнены/завершены — это полный перевод всего фреймворка на использование базы данных sdb и доводка до ума webui.
С другой стороны, три задания были завершены успешно, и на данный момент весь код находится в основной ветке.
Во-первых, это поддержка парсинга сложных структур и отображение их в необходимом формате, с помощью команды pf и парсера описания данных на языке Си (struct/union, etc).
Во-вторых, это поддержка загрузки и использования сигнатур формата FLIRT (из IDA Pro), а также интеграция с Yara. Благодаря тому, что это задание было успешно выполнено, radare2 может быть использован для анализа malware с использованием существующих баз сигнатур, накопленных за годы работы с IDA Pro и Yara. Код интеграции с Yara вынесен в отдельный репозиторий.
Ну и последнее успешно выполненное задание — это поддержка PDB. Основное отличие от многих отладчиков и дизассемблеров (кроме IDA Pro) — это парсинг формата самостоятельно, без использования вызовов системных библиотек Windows.
Кроме того, с прошлого года значительно улучшилась ситуация с документацией: radare.today/radare2-is-documented/
В этом году radare2 не прошел отбор в Google Summer of Code как самостоятельная организация, что не остановило нас, и мы решили повторить опыт прошлого года и снова запустить собственную кампанию. Более того, огромное спасибо небезысвестному solardiz и его проекту Openwall, под чьим патронажем мы будем участвовать в GSoC'15 в рамках одного задания. Для проведения же собственного RSoC'15 нам потребуется 3000 EUR для привлечения трех участников.
Итак, суммирую информацию по обоим Summer of Code:
Google Summer of Code:
- Есть место для одного участника
- Заявки можно подавать с 16 до 27 марта
- Оплата в размере $5000
- Стандартные ограничения программы (только студенты и строго соответствие регламентам мероприятия)
Radare Summer of Code:
- Заявления принимаются с 11 марта до 3 мая
- Оглашение принятых участников 8 мая
- Программирование с 17 июня по 16 сентября
- Оплата в размере 1000 EUR (предположительно, зависит от количества собранных средств)
- Никаких ограничений накладываемых на участников
В этом году мы представили следующие задания для студентов GSoC и участников RSoC:
Веб-интерфейс
Создание виджетов для:
- Hex-редактор с настраиваемым форматом столбцов
- Граф: интерактивные графы для блоков, функций и возможностью сравнения
- Секции
- Поиск строк, опкодов и паттернов
- Структуры: просмотр, создание и изменение
Кроме того, требуется обеспечить «резиновый» интерфейс, применимый для десктопа и планшета, а также минимизировать количество запросов к сети, для ускорения работы через интернет
Улучшение возможностей ESIL
Поддержка эмуляции на основе ESIL
Во-первых, необходимо добавить (и улучшить) поддержку ESIL для большего количества архитектур (см libr/anal/p/*).
Во-вторых, потребуется добавить следующие возможности для самого ESIL-движка:
- Упростить команды для работы с ESIL
- Возможность эмуляции выбранной функции (через ESIL)
- Вычисление значения выбранного регистра в выбранной точке программы по запросу
- Встроенная эмуляция стандартных библиотечных функций
- Поддержка трассировки
- «Обратная» отладка
Динамический анализ на основе эмуляции через ESIL
Тут, я думаю, следует уточнить, что же имеется ввиду. Это задание тесно пересекается с предыдущим, так как позволяет на его основе реализовать автоматический анализ кода по ходу его исполнения.
- Автообнаружение switch ()
- Обнаружение значений динамических прыжков (ссылок)
- Автоанализ параметров функций
- Улучшение распознавания кросс-ссылок (xrefs)
Автоматическое преобразование кода ESIL в SSA (Single Static Assignment form)
Как многие знают, это является первым шагом к полноценной декомпиляции. В данном задании студенту потребуется создать трехторонний обмен информацией между тремя уровнями — бинарным кодом (и дизасмом), представлением ESIL и представлением SSA.
Работа над интерфейсом и возможностями отладчика
Данное задание потребуется выполнять на основе сравнения возможностей существующих отладкиков: gdb, lldb, voltron, mona.py, peda, immunity. Список того, что необходимо будет сделать:
- UI с панелями код/стек/регистры (как в peda/voltron)
- Отображение прошлой и будущей точек останова
- Горячие клавиши
- Настройка работы с ASLR
- Показ значений параметров функции, если точка останова стоит на вызове этой функции (как в OllyDbg)
- Показ значений (типизированных) на стеке и в регистрах
Написание универсальной библиотеки-парсера для ассемблеров (rasm2)
Это потребуется для выделения её в отдельный проект, как capstone или sdb, для унификации синтаксиса между ассемблерами и для поддержки макрокоманд. Мы полагаем, что идеальным вариантом будет поддержка синтаксиса и макроязыка fasm.
Улучшение возможностей radare2 по созданию графов и визуализации данных и кода
Здесь участнику потребуется улучшить алгоритмы отрисовки перекрывающихся блоков, добавить полную поддержку юникода и красивых нод, поддержу цветов и подсветки синтаксиса, группировку нод и их комментирование.
Я не стал описывать все задания, лишь подчеркнул самые «системообразующие», более полную информацию можно получить на соответсвующей странице.
План на лето с подробным описанием заданий находится тут: rada.re/rsoc
Официальный сайт проекта: rada.re/
Стать спонсором кампании RSoC или просто отправить пожертвование.
P.S. В этом году (в отрыве от GSoC/RSoC) мы собираемся: улучшить поддержку Windows (в том числе лучше интегрировать поддержку WinDbg и PDB), закончить полный переезд на SDB, закончить ревизию лицензий (для удобства линковки с коммерческими продуктами без лишних раздумий, что можно включать в сборку, а что нет; улучшить поддержку мобильных платформ (ARM, MIPS), упростить написание плагинов и сделать сборку и использование байндингов более очевидными, увеличить количество регрессионных тестов и привлечь новых разработчиков.
Автор: xvilka