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.
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Links will be displayed as unclickable URLs to help prevent spam.

September 2017

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

Автор стиля

Развернуть

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