Трансляция машинного кода в LLVM IR (разборка / повторная сборка X86_64. X86. ARM в битовый код LLVM)

Я хотел бы перевести исполняемые файлы X86_64, x86, ARM в LLVM IR (разборка).

Какое решение вы предлагаете?

27
задан Grzegorz Wierzowiecki 8 August 2011 в 12:05
поделиться

3 ответа

mcsema - бинарный подъемник производственного качества. Он берет x86 и x86-64 и статически «поднимает» его до IR LLVM. Он активно поддерживается, имеет лицензию BSD и имеет обширные тесты и документацию.

https://github.com/trailofbits/mcsema

13
ответ дан 28 November 2019 в 05:32
поделиться

Что касается инструмента RevGen , упомянутого @ bsa2000, то в этой последней статье «Система двоичного анализа и перезаписи на основе промежуточного представления на уровне компилятора» указываются некоторые ограничения в S2E и Revinc. .

Я вытащил их сюда.

  1. Недостаток динамического перевода:

    S2E [16] и Revnic [14] представляют метод динамического перевода x86 в LLVM с использованием QEMU. В отличие от нашего подхода, эти методы на лету преобразуют блоки кода в LLVM, что ограничивает применение анализа LLVM только одним блоком за один раз.

  2. IR неполный:

    Revnic [14] и RevGen [15] восстанавливают IR, объединяя переведенные блоки, но восстановленный IR неполон и действителен только для текущего исполнения; следовательно, различные анализы всей программы дадут неполную информацию.

  3. нет абстрактного стека или продвижения информации

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

10
ответ дан 28 November 2019 в 05:32
поделиться

Существует новый проект, находящийся на некоторых ранних стадиях, libbeauty: https://github.com/jcdutton/libbeauty

Статья о проекте: Libbeauty : Еще один инструмент обратной инженерии , 24 декабря 2013 г., Майкл Ларабель - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU

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

1
ответ дан 28 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: