Saturday, January 12, 2013

Декомпиляция Android-приложений

В этой статье заметке я хочу рассмотреть два способа "разбора" (reverse engineering'a) Android-приложений.

И так, как мы все знаем, приложения под Android распространяются в виде apk-файлов. Последние в свою очередь являются обычным архивом с скомпилированным кодом (в dex-формате, используемым реализацией JVM для Android - Dalvik) и преобразованными для внутреннего использования ресурсами. Другими словами - "нельзя просто так взять и посмотреть исходники Android-приложения". Однако, способы всё же есть.



Android APK Tool


Первый способ - воспользоваться утилитой apktool. С её помощью можно без труда разобрать, внести некоторые правки и собрать обратно приложение:
apktool decode myapp.apk myapp
apktool build myapp myapp.apk
Однако, есть одно "но". После разбора приложения вы получите не Java-файлы с кодом, а файлы с набором мета-инструкций JVM в формате проекта SMALI. Не смотря на то, что проект SMALI считает себя "human-editable" и "human-readable" - правка байткода есть удовольствие для истинных эстетов. Поэтому данный способ подходит больше для того, что бы выдернуть что-нибудь из ресурсов проекта.


Dex2Jar and JD


Если же ваша цель - исходный код (пусть и восстановленный средствами reverse engineering'a), вам поможет утилита Dex2Jar, которая без труда сделает из вашего apk-файла обычный jar-архив, преобразовав ресурсы и заменив исполняемые файлы Dalvika на обычные классы для JVM.
dex2jar.sh myapp.apk
Теперь, что бы посмотреть код, достаточно воспользоваться любым java-декомпилятором. Например проектом JD-GUI, выгодно отличающимся наличием графического интерфейса.
jd-gui myapp.jar

2 comments:

  1. apktool часто применяют для перевода приложений.
    Например через этот тул переводится прошивка miui

    ReplyDelete
  2. Я,например, заказываю комплексный маркетинг мобильных приложений у компании apppromo.net для получения множества загрузок. Попробуйте и ВЫ.

    ReplyDelete