Случаи бывают разные, и иногда есть острая необходимость достать java код из собранной apk. Возможно, Вы потеряли исходники или просто интересуетесь, как была написана программа.
Алгоритм следующий:
1. Достать байт-код Java из apk;
2. Преобразовать байт-код в код на языке Java.
Нажимаем Enter.
Алгоритм следующий:
1. Достать байт-код Java из apk;
2. Преобразовать байт-код в код на языке Java.
Для этого нам понадобятся:
1. Конвертер dex и apk файлов в jar;
2. Декомпилятор jar файлов;
3. Везение и боевой настрой =)
Последнюю версию конвертера можно скачать отсюда:
А отсюда можно скачать версию 0.0.9.15, если ссылка выше не работает:
Из перепробованных мной декомпиляторов самым удачным мне показался fernflower.
Качаем с интернета, или по этой ссылке:
И так, начнем:
1. Распаковываем архив с dex2jar, закидываем apk файл в папку с файлом dex2jar.sh и в командной строке, находясь в этой же директории, печатаем:
./dex2jar.sh имя_вашего_apk.apk
Нажимаем Enter.
Будет много текста, но вскоре в папке появится файл с названием "имя_вашего_apk_dex2jar.jar".
2. В этом файле уже содержатся java классы, но в нечитаемом двоичном виде. Для этого нужно декомпилировать их. Для этого применим fernflower.jar. При условии, что появившийся на первом шаге файл и fernflower.jar находятся в одной директории, набираем в командной строке:
java -jar fernflower.jar имя_вашего_apk_dex2jar.jar имя_директории
Нажимаем Enter. Создастся папка с названием "имя_директории", в которой будет лежать файл с таким же именем, как и исходный. Но в этот раз все java файлы будут иметь читаемый вид.
Пам парам, все готово) Можете изучать полученный код или восстанавливать потерянный.
Проблемы:
Первая проблема в том, что все константы, прописанные в коде, заменяются на заданные им значения в момент компиляции. А следовательно, вместо них в полученном после декомпиляции коде будут значения, а не имена.
Вторая проблема - в полученном коде не будет комментариев. Причина такая же, как и в первой проблеме. Они удаляются при сборке apk.
Третья проблема, тоже не очень приятная. Код восстанавливается из бинарников с некоторой точностью, а не в первозданном виде. И эта точность зависит от декомпилятора. Fernflower самый точный, из проверенных мной. Например, один из декомпиляторов не умел восстанавливать switch, вместо него получался бесконечный цикл с кучей break и contunue.
Комментариев нет:
Отправить комментарий