Поднятие двоичного кода в LLVM IR

Задача декомпилирования двоичного кода играет важную роль в задачах анализа кода, повторной оптимизации, деобфускации, рекомпиляции и многих других. В этой области существует несколько инструментов с открытым исходным кодом, обладающих разными возможностями, поддержкой разных платформ и языков, уровнем поддержки и т.п. Одним из популярных целевых языков для декомпилирования является LLVM IR, поэтому данная практика будет ограничена именно этим языком.

В данной работе требуется провести обзор современных технологий и инструментов для решения задачи поднятия. Это подразумевает не только изучение описаний проектов и статей, но и запуск каждого инструмента на отдельно подобранном наборе тестов на разных платформах. Затем предлагается подгружение в один или несколько выбранных инструментов и улучшение их показателей.

  1. Устаревшая табличка с инструментами: https://github.com/lifting-bits/mcsema
  2. Один из проектов: https://github.com/aengelke/rellume
  3. Еще один проект: https://github.com/aengelke/instrew
  4. И еще один проект: https://github.com/Microsoft/llvm-mctoll
  5. Статья для погружения https://monkbai.github.io/files/sp-22.pdf
Требования к студенту

Знание ассемблера любой архитектуры, знакомство с LLVM IR будет большим плюсом

Уровень

2 курс, 3 курс


Руководитель

Смирнов Кирилл Константинович


Консультант

Смирнов Кирилл Константинович


Источник

YADRO