Декомпиляция Dalvik на Java, почему так много несоответствий? - PullRequest
3 голосов
/ 07 сентября 2011

Я использовал dex2jar и JD-gui в файле dex приложения, хотя в некоторых частях кода это не имело смысла и были ошибки в терминах декомпиляции.

Хотя когда я использовал backsmali в файле dex, код был правильным, но я бы предпочел читать код Java, чем Smali, чтобы понять, как работает большое приложение.

Прежде всего, почему так много несоответствий в коде Java? Это проблема с dex2jar или JD-gui? Любые другие альтернативы?

1 Ответ

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

Декомпиляция обычно не идеальна даже при переходе от .class файлов к .java файлам.

С одной стороны, это объясняется тем фактом, что компиляция не представляет всю информацию из исходного файла в файле .class. Пробелы и комментарии являются наиболее очевидными примерами информации, которая не представлена ​​в .class файлах. Имена локальных переменных также часто пропускаются, и в зависимости от ваших флагов компиляции даже имена аргументов могут быть потеряны.

С другой стороны, рынок декомпиляторов кажется довольно ограниченным, а отсутствие конкуренции приводит к тому, что декомпиляторы работают не так хорошо, как, вероятно, может . Например, каждый новый выпуск компилятора Java может создавать новый код, который будет нуждаться в эквивалентном обновлении декомпилятора для обнаружения новых шаблонов и создания из них соответствующего источника Java. В отсутствие такого обновления декомпилятор обречен на либо сбой, и вместо этого выводит дизассемблирование байт-кода или создает странные конструкции, которые делают то же самое, но никогда не будут написаны человеком .

А когда вы добавите другой уровень компиляции (Java Byte Code -> Dalvik Byte Code), тогда это может только ухудшиться.

Если вы не можете привести конкретный пример какого рода несоответствий вы имеете в виду, трудно дать лучший ответ.

...