вторник, 6 декабря 2011 г.

Декомпилируем Android приложение

Разберем файл apk.
Создадим новый проект Android приложения. Все оставляем по умолчанию. Запустим его, ну и как обычно видим TextView с надписью "Hello World, ExampleAppActivity!". Теперь разложим приложения.
1) Структура приложения. Для этого нам нужен пакет apktool - http://code.google.com/p/android-apktool. Отсюда качаем файлы apktool-install-windows-r04-brut1.tar.bz2 (или под другую ОСь) и apktool1.4.2.tar.bz2. Распаковываем их в одну папку и настроим путь в нее. Далее используем консоль. Копируем из нашего приложения/bin файл apk (ExampleApp.apk) и даем команду:
apktool d ExampleApp.apk ExampleApp.

Ну теперь имеем  папку ExampleApp - это структура программы. Что мы тут видим -  почти все кроме исходного кода, так как декомпилируем его в smali.
2) Исходный код - нам нужно dex2jar
dex2jar -  http://code.google.com/p/dex2jar/ нужно скачать dex2jar-0.0.9.2-SNAPSHOT.zip (это последняя версия на данный момент). Распаковываем это все в 1-ну папку и настраиваем путь. Далее даем команду dex2jar ExampleApp.apk На выходе имеем jar файл. Ну а дальше делаем с ним что душе угодно
3) Разлаживаем jar
Качаем jd-gui - http://java.decompiler.free.fr/?q=jdgui. Запускаем его и открываем полученный ранее jar файл.

Тут есть одна особенность - на картинке видно что в процедуре setContentView стоит непонятное число, у меня 2130903040. Это идентификатор - зайдите в class R и увидите что под данным числом стоит:
 public static final class layout
  {
    public static final int main = 2130903040;
  }

Вот в принципе и все. Я считаю декомпилирование прекрасным способом учиться. Но при это не забываем про авторское право.



Комментариев нет:

Отправить комментарий