Декомпиляция приложений (двоичных, NDK) C и приложений Java (байт-код Dalvik) - PullRequest
4 голосов
/ 01 сентября 2011

Ну,

, так как я заинтересован в реинжиниринге, я до сих пор трачу много времени на реинжиниринг Android.

Тем не менее я дошел до того, что у меня возникла проблема скомпилированиядвоичного C-кода (NDK), и я узнал, что декомпилировать его обратно в C / C ++ очень трудно, чем декомпилировать DEX-файл обратно в более или менее хорошие источники Java.

В чем причинаэтот?Я имею в виду, что байт-код выполняется виртуальной машиной Dalvik, а в случае обычного бинарного файла вместо этого исполняется реальным процессором.Оба довольно похожи, за исключением некоторых дополнительных слоев эмуляции, не так ли?Я не вижу особых различий на данный момент или причины этой проблемы.

У вас есть какая-либо информация для меня, почему сложнее декомпилировать обычный двоичный файл (например, ELF или MS EXE) обратно висточник C?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

Короткий ответ: код C / C ++ не содержит в себе никакой отражающей информации, а C / C ++ имеет встроенные функции, макросы и развернутые циклы, которых компилятор Java просто не делает (так же, как C / C ++ компиляторы делают). Также возможно оптимизировать C / C ++ настолько широко, что все, что вы можете сделать, это декомпилировать в сборку, потому что нет ссылок на собственные функции приложения. (Ссылки на функции системы будут найдены.)

2 голосов
/ 01 сентября 2011

Кстати, Hex-Rays ARM Decompiler значительно облегчает работу по реинжинирингу, проверьте это: http://www.hex -rays.com / hexarm_compare0.shtml

Другой вопрос, что это стоит много ...

...