waqur: (Default)
[personal profile] waqur
Поначалу подход к декомпиляции ассемблерного листинга в сишный код сводился к двум основным идеям:
– построение графа потока управления, а далее применение pattern matching в непрерывных блоках кода (так работает плагин HexRays к дизассемблеру IDA, и работает порой откровенно плохо, куда-то теряя существенные куски кода — наверное, когда не может подобрать подходящие паттерны)
– попытка "подобрать" исходный код, из которого бы порождался наперёд заданный бинарный код, путём вызова компилятора и перенаправления дальнейшего подбора в в нужную сторону, в зависимости от сопоставления выхлопа компилятора и заранее заданного бинарного кода (теоретический подход, рассматриваемый в нескольких диссерах по декомпиляции, на практике работает плохо из-за того, что во-первых, нужно точно угадать версию компилятора; во-вторых, из-за того, что такие блуждания неустойчивы с точки зрения обратной связи, и могут быстро зайти "не в те дебри"; в-третьих, компиляторы имеют тенденцию к переименованию регистров и разным другим перестановкам даже при множественной инвокации на одном и том же исходном коде — так что простым сравнением бинарного выхлопа не обойтись).

Декомпилятор FCD демонстрирует новый подход: декомпиляция через оптимизирующую компиляцию. Каждая инструкция архитектуры x86 или x86_64 преобразуется в несколько инструкций промежуточного кода LLVM-IR (включая все сайдэффекты, такие как изменения в регистре флагов), а затем для упрощения всего этого фарша применяется оптимизатор промежуточного кода из проекта LLVM.

Ну а промежуточный код LLVM-IR — это уже практически код на C. Остаётся только сформировать деревья выражений там, где были однократно используемые временные переменные.

Учитывая недавние теоретические успехи в реконструкции if-else-for-while-структур из графа потока управления, позволяющие всегда обойтись без goto, результаты работы FCD выглядят весьма неплохо, даже на фоне коммерческого HexRays.

September 2017

S M T W T F S
     12
34567 89
10111213141516
17181920212223
24252627282930

Автор стиля

Развернуть

No cut tags
Page generated 2017-09-21 03:26 am
Powered by Dreamwidth Studios