Я хотел бы перевести исполняемые файлы X86_64, x86, ARM в LLVM IR (разборку).
Какое решение вы предлагаете?
Я хотел бы перевести исполняемые файлы X86_64, x86, ARM в LLVM IR (разборку).
Какое решение вы предлагаете?
Попробуйте использовать инструмент RevGen, разработанный в рамках проекта S2E. Это позволяет преобразовывать двоичные файлы x86 в LLVM IR. Исходный код может быть получен из ветки Revgen GIT-репозитория, доступной по URL https://dslabgit.epfl.ch/git/s2e/s2e.git.
Что касается инструмента RevGen, упомянутого @bsa2000, эта последняя статья Система двоичного анализа и переписывания на основе промежуточного представления на уровне компилятора указал на некоторые ограничения в S2E и Revinc.
Я вытаскиваю их здесь.
недостаток динамического перевода:
S2E [16] и Ревник [14] представляют метод динамического перевода x86 - LLVM с использованием QEMU. В отличие от нашего подхода, эти методы конвертируют блоков кода в LLVM на лету, что ограничивает применение LLVM анализирует только один блок за раз.
IR неполный:
Revnic [14] и RevGen [15] восстанавливают IR путем слияния переведенных блоков, но восстановленный IR является неполным и действителен только для текущее исполнение; следовательно, различные анализы всей программы будут предоставить неполную информацию.
нет абстрактного стека или рекламной информации
Кроме того, переведенный код сохраняет все предположения оригинальная бинарная информация о расположении стека. Они не предоставляют никаких методы для получения абстрактного стека или продвижения местоположений памяти к символам, которые необходимы для применения нескольких анализ исходного уровня.
mcsema - это бинарный подъемник качества производства. Он принимает x86 и x86-64 и статически "поднимает" его на LLVM IR. Он активно поддерживается, BSD лицензирован и имеет обширные тесты и документацию.
Я сомневаюсь, что будет универсальное решение (подумайте об косвенных ветвях и т.д.), LLVM IR намного "более высокий уровень", чем любой ассемблер. Хотя это можно перевести на основе ВВ. Возможно, вы захотите проверить проекты llvm-qemu и libcpu среди других.
Существует новый проект, находящийся на ранних этапах, libbeauty
:
https://github.com/jcdutton/libbeauty
Статья о проекте: Libbeauty: еще один инструмент обратного проектирования, 24 декабря 2013 года, Майкл Ларабель - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU
Теперь он поддерживает только подмножество x86_64
. Одна из целей проекта - это возможность скомпилировать сгенерированный LLVM IR обратно в сборку, чтобы получить двоичный код с одинаковой функциональностью.
Просто опубликуйте несколько ссылок на перевод ARM-двоичного кода на LLVM IR:
разоружить - создать двоичный файл для llvm и дизассемблера
https://code.google.com/p/disarm/
Однако я не пробовал, поэтому не уверен в его качестве и стабильности. Кто-нибудь еще может опубликовать дополнительную информацию об этом проекте?