Полная декомпиляция Android приложений | [Декомпиляция приложений в исходный Java код]



Реп: (152)
Полная декомпиляция Android приложений, декомпиляция приложений в исходный Java код

Порой при разработке не понимаешь как реализовать определенную функцию, которую видел в чужом приложении, или просто изучить стороннее приложение охота, для этого существует декомпиляция приложений.
В данной статье я покажу как декомпилировать Андроид приложения из *.apk файла в исходный код.

И так, нам потребуется:
dex2jar
Java Decompiler
ApkTool

Все приложения являются бесплатными, мультиплатформенными и открытыми (кроме Java Decompiler, у него закрыт исходный код).
Их можно скачать с официального сайта.

Инструкцию буду проводить для ОС Windows.
  1. Качаем dex2jar-0.0.9.8.zip (номер версии может изменяться) и извлекаем все файлы в желаемую папку, например D:\Decompile .
  2. Качаем Java Decompiler, я использовал JD-GUI и извлекаем файлы для удобства в ту же папку, куда и dex2jar.
  3. Качаем apktool и apktool-install-windows-r04-brut1.tar.bz2 и извлекаем файлы уже в системную папку. По умолчанию C:\Windows. (Не забываем скачать второй архив)
  4. Берем нужный apk файл и кладем в папку с dex2jar и Java Decompiler. В примере приведу декомпиляцию приложения Прикрепленный файлCalculator.zip ( 66.18 КБ )
    . (надо извлечь из архива).
  5. Открываем Командную строку (Обработчик команд Windows) в вышеупомянутой папке (В папке по пустому месте при зажатой кнопке Shift нажимаем правую кнопку мыши и выбираем Обработчик команд Windows).
  6. Вводим команду dex2jar Calculator.apk и если все прошло хорошо, в той же папке появится файл Calculator.apk.dex2jar.jar
  7. Запускаем jd-gui и открываем полученный на предыдущем шаге файл. (На Windows 7 открывать с правами администратора и с совместимостью Windows XP SP3)
  8. Выбираем пункт меню File-Save All Sources и сохраняем.
  9. Извлекаем полученный zip архив.
  10. Помещаем полученную папку в папку src (надо предварительно создать).(Что бы получилась примерно такая структура D:\Decompile\Calculator\src\com\android)
  11. Опять же в командной строке вводим команду apktool d Calculator.apk Calculator, где Calculator.apk-имя пакета, Calculator-папка для декомпиляции
  12. Если все хорошо, тогда в указанной папке будут исходники в двух форматах (java и smali), ресурсы и файлы AndroidManifest.xml, apktool.yml
  13. Все готово, исходники получены. Правда после декомпиляции в коде есть, можно сказать, ошибки, я заметил пока только что вместо true и false стоят 1 и 0 соответственно.


P.S. Если хочется импортировать полученный код в IDE Eclipse (File-Import), тогда положите содержимое этого архива(Прикрепленный файлEclipse.zip ( 1.44 КБ )
) в папку с проектом, предварительно изменив на третьей строке <name>PROJECT NAME</name> PROJECT NAME на желаемое название, в моем примере «Calculator» в файле .project
P.P.S. Если apk файл был пропущен при компиляции через обфускатор (proguard), тогда полученный код будет плохо читаем.
Источник: http://boomik.ru/polnaya-dekompilyaciya-android-prilozhenij

Сообщение отредактировал KEEPERekb - 09.06.15, 14:51
Причина редактирования: ссылка



Реп: (152)
Axell @ 04.06.2012, 12:14 *
А можно его еще и через APKtool декомпильнуть..?А то у меня вот что вылазит

Прикрепленный файлcom.teslacoilsw.widgetlocker.33000.rar ( 2.67 МБ )



Реп: (3)
при попытке декомпиляции приложения с помощью APK_Tool получаю вот такие сообщения об ошибках:

I: Baksmaling...
I: Loading resource table...
I: Decoding resources...
I: Loading resource table from file: C:\........\framework\1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=resizeMode, value=0x00000003
W: Could not decode attr value, using undecoded value instead: ns=android, name=minResizeWidth, value=0x00002801
W: Could not decode attr value, using undecoded value instead: ns=android, name=minResizeHeight, value=0x00002801
Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec:0x01010306
at brut.androlib.res.data.ResPackage.getResSpec(Unknown Source)
at brut.androlib.res.data.ResTable.getResSpec(Unknown Source)
at brut.androlib.res.data.ResTable.getResSpec(Unknown Source)
at brut.androlib.res.data.value.ResReferenceValue.getReferent(Unknown Source)
at brut.androlib.res.data.value.ResReferenceValue.toResXmlFormat(Unknown Source)
at brut.androlib.res.data.value.ResAttr.convertToResXmlFormat(Unknown Source)
at brut.androlib.res.data.value.ResStyleValue.serializeToXml(Unknown Source)
at brut.androlib.res.AndrolibResources.generateValuesFile(Unknown Source)
at brut.androlib.res.AndrolibResources.decode(Unknown Source)
at brut.androlib.Androlib.decodeResourcesFull(Unknown Source)
at brut.androlib.ApkDecoder.decode(Unknown Source)
at brut.apktool.Main.cmdDecode(Unknown Source)
at brut.apktool.Main.main(Unknown Source)

не подскажете, в чем может быть проблема?

Сообщение отредактировал miks69 - 07.06.12, 20:16



Реп: (0)
Ув. форумчане. Помогите декомпильнуть данный фалик classes.dex



Реп: (152)
xaxuxox @ 20.06.2012, 13:05 *
Ув. форумчане. Помогите декомпильнуть данный фалик classes.dex

Держи

Прикрепленные файлы

Прикрепленный файлclasses.dex.zip ( 3.67 КБ )



Реп: (8)
На 11 даже на 10 споткнулся, was not found or was not readable.Все вроде по инструкции и создался.Две папки в нем android и com. Можно ли с 10 пункта разжевать?



Реп: (184)
wurs,
скорее всего неверно вводишь название АРК файла, в его имени не должно быть пробелов.



Реп: (0)
xradas,
Огромное спасибо.

M
Ознакомьтесь с Правилами Форума!
5.1. Если участник форума дал вам хороший совет, который помог вам в решении вашей проблемы не следует помещать сообщение с текстом «Спасибо! Ты супер!!!». На нашем форуме благодарность принято выражать путем поднятия репутации конкретного участника.
5.2. На репутацию других участников может влиять любой пользователь, набравший 15 полезных постов. Если у вас нет 15 полезных постов, попросите модератора поднять репутацию оказавшему вам помощь человеку через кнопку «Жалоба».


Сообщение отредактировал xotta6bl4 - 01.08.12, 11:46



Реп: (0)
Вот блин, когда дело доходит до ApkTool то он пишет что то с каталогами невпорядке. Ну никак не получается!
Могу я попросить Вас декомплировать для меня apk для последующей работы с ним в eclipse? Буду очень благодарен apk для декомплияции
Так же поставлю + в репутацию)



Реп: (392)
beatsspam,
мде, фиговый у третьего мира сервер.
Прикрепленный файлThirdWorld.apk.7z ( 239.27 КБ )


А вот smali в java конвертить не советую, ибо кода много и он обфусцирован.

Сообщение отредактировал Prototoik - 05.08.12, 11:14



Реп: (0)
Спасибо, но у меня уже тоже самое получилось. в res\layout нет main.xml вот я и думаю в чем дело



Реп: (184)
beatsspam, а он и не обязательно должен быть. Смотри манифест что бы понять какое активити главное, а потом код активити и там какой лэйаут использует.



Реп: (0)
Да хрен его.. Там есть строчка <action android:name="android.intent.action.MAIN" />
Вот весь код манифеста:
<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="2" android:versionName="2.0" package="Mine.Main"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application android:label="@string/app_name" android:icon="@drawable/icon">
<activity android:theme="@android:style/Theme.NoTitleBar" android:label="@string/app_name" android:name=".MiniBrowserActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>


Добавлено 08.08.2012, 20:06:

а в res\layout есть только 1 файл text.xml в котором кстати применяется странное (на мой взгляд) применение в качестве корневого контейнера EditText. Почему там не обычный линейный фрейм? Может мне это в ручную исправить на LinearLayout



Реп: (184)
beatsspam,
И вообще лэйаута может и не быть, смотри класс .MiniBrowserActivity
Сам лэйаут может кодом рисоваться, как понимаю по названию класса, там обычный WebView.



Реп: (0)
Не получается. После внесения изменений в еклипсе компиляция происходит с ошибкой. Хоть компилить заставить еклипс, хоть apk tool
как быть? :comando:



Реп: (184)
beatsspam,
Ну сперва рассказать что за ошибка



Реп: (408)
Помогите пожалуйста. Нужно изменить код в файле windowsphonemanager.smali, котрый содержится в android.policy.jar, по инструкции из шапки получил исходный код и благополучно все изменил, а теперь вопрос, как это все обратно запаковать ?

Немного разобрался в smali, отбой =)

Сообщение отредактировал maximum117 - 02.10.12, 08:08



Реп: (509)
Подскажите, а никто еще не придумал как декомпилировать app на самом android?



Реп: (0)
нет.



Реп: (0)
дайте ман на linux осях



Реп: (0)
Всем привет. Как декомпилировать стандартные приложения?
Этим способом не получается..


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 28.05.23, 06:38