Полная декомпиляция 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
Причина редактирования: ссылка



Реп: (0)
Если можно, пожалуйста напиши по подробней если можно в картинках, здесь или у себя в блоге.
Я буду очень тебе благодарен, это очень важная тема для новичков.



Реп: (46)
AngelOfMors, та никак он не компилируется:) Первый метод второго спойлера - str всегда null или не инициализирована. Второй метод того же спойлера даже не обращается ни к какому полю... Ценность такой декомпиляции весьма сомнительная...



Реп: (0)
Может кто знает 100% способ декомпиляции и импортирования в Eclipse, для того чтобы переделать apk файл?



Реп: (147)
лучшеб написал кто нить gui-оболочку для всего этого добра. а то каждый раз туда сюда перегонять нудновато.



Реп: (392)
G@sh!sh,
Виндузятники...

Там и так все падает чуть-ли не каждые 20 секунд, зачем туда еще гуи крутить?

Сообщение отредактировал Prototoik - 07.05.12, 05:54



Реп: (0)
Может все таки кто нибудь поможет и покажет?
Как импортировать уже готовый (декомпилированный *.apk) проект в ECLIPSE.



Реп: (182)
oskarlaik22 @ 06.05.2012, 00:34 *
А как потом сделать импорт в самом ECLIPSE и какую именно папку указать в Eclipse, ведь в дириктории "android" у меня их две?

Все просто-объедени содержимое этих двух папок в одной ;)
crashtua @ 06.05.2012, 08:47 *
AngelOfMors, та никак он не компилируется:) Первый метод второго спойлера - str всегда null или не инициализирована. Второй метод того же спойлера даже не обращается ни к какому полю... Ценность такой декомпиляции весьма сомнительная...

Ценность только что бы посмотреть алгоритм как реализованна какая-либо фича и написать по алгоритму самому.
oskarlaik22 @ 06.05.2012, 14:20 *
Может кто знает 100% способ декомпиляции и импортирования в Eclipse, для того чтобы переделать apk файл?

Все по инструкции но через jd-gui прогонять не надо, то бишь редактировать код smali.
oskarlaik22 @ 07.05.2012, 12:05 *
Может все таки кто нибудь поможет и покажет?
Как импортировать уже готовый (декомпилированный *.apk) проект в ECLIPSE.

По инструкции же.



Реп: (0)
BOOM.vrn @ 08.05.2012, 18:07 *
Все просто-объедени содержимое этих двух папок в одной


Ты имеешь в виду, объединить содержимое этих двух папок в одной папке (SRC)?



Реп: (29)
odalst @ 21.03.2012, 17:47 *
Ага и в половине случаев JD-GUI вываливается - не может записать все файлы


У меня тоже вываливался, но я сделал так:
Прикрепленное изображение

Попробуйте :yes2:



Реп: (182)
oskarlaik22,
В конечной папке должны быть папки res, src и файл AndroidManifest.xml ну еще может папка smali (это исходники в другом формате, которые можно исправить и скомпилировать)



Реп: (0)
Спасибо, сейчас пойду тесть. ;)



Реп: (0)
Все сделал как ты написал, импортировать в Eclipse получилось, но в проекте полно ошибок. Я как понимаю, этот вариант не работает.
Выходит что-то поменять и скомпилировать обратно в Eclipse не получится.
Не ужеле нет другово способа?
Я пробовал декомпилировать APK, а затем редактировать "xml" и скомпилировать обратно, все получалось.
Но как только редактирую ".smali" APK-Tool не дает скомпилировать обратно.

Сообщение отредактировал oskarlaik22 - 09.05.12, 02:02



Реп: (592)
Может ли кто декомпелировать, изменить пару строк и обратно сделать его в apk?
У меня не получается настроить декомпиляцию, что я только не делал.
Вот ошибка вылазит и на ubuntu и на W7
|03.06.2012 -- 17:12:23,07|
--------------------------------------------------------------------------
java version "1.6.0_32"
Java(TM) SE Runtime Environment (build 1.6.0_32-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.7-b02, mixed mode)
Не удается найти C:\Users\Mkarzanov W7\Desktop\Новая папка (3)\place-apk-here-fo
r-modding\../place-apk-here-for-modding/signedHtcCOTAClient.apk
Не удается найти C:\Users\Mkarzanov W7\Desktop\Новая папка (3)\place-apk-here-fo
r-modding\../place-apk-here-for-modding/unsignedHtcCOTAClient.apk
I: Baksmaling...
Exception in thread "main" java.lang.RuntimeException: bad magic value: 64 65 78
0a 30 33 36 00
at org.jf.dexlib.DexFile.<init>(DexFile.java:377)
at org.jf.dexlib.DexFile.<init>(DexFile.java:274)
at brut.androlib.src.SmaliDecoder.decode(SmaliDecoder.java:48)
at brut.androlib.src.SmaliDecoder.decode(SmaliDecoder.java:33)
at brut.androlib.Androlib.decodeSourcesSmali(Androlib.java:68)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:85)
at brut.apktool.Main.cmdDecode(Main.java:120)
at brut.apktool.Main.main(Main.java:57)
Для продолжения нажмите любую клавишу . . .



Реп: (182)
oskarlaik22,
теоретически-что-то неправильно изменяешь.
mikrosmile,
C:\Users\Mkarzanov W7\Desktop\Новая папка (3)\place-apk-here-fo
r-modding\../place-apk-here-for-modding/unsignedHtcCOTAClient.apk

А если путь без пробелов и русских букв?



Реп: (944)
Здравствуйте..
Помогите декомпилировать файл, что бы его можно было в Eclipse запихнуть..Ни АРКtool ни вышеописанный способ его не берет..
Скачать:Прикрепленный файлcom.teslacoilsw.widgetlocker.33000.apk ( 3.18 МБ )

Спасибо.



Реп: (152)
Axell @ 04.06.2012, 01:00 *
Здравствуйте..
Помогите декомпилировать файл, что бы его можно было в Eclipse запихнуть..Ни АРКtool ни вышеописанный способ его не берет..
Скачать:com.teslacoilsw.widgetlocker.33000.apk ( 3.18 МБ )Кол-во скачиваний: 0

Спасибо.

Держите
Прикрепленный файл1_dex2jar.jar ( 957.87 КБ )

Прикрепленный файл1_dex2jar.src.zip ( 810.32 КБ )



Реп: (944)
xradas @ 04.06.2012, 09:11 *
Держите
1_dex2jar.jar ( 957.87 КБ )Кол-во скачиваний: 1

1_dex2jar.src.zip ( 810.32 КБ )Кол-во скачиваний: 1

А можно его еще и через APKtool декомпильнуть..?А то у меня вот что вылазит
java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Java HotSpot(TM) Client VM (build 22.0-b10, mixed mode, sharing)
Не удается найти e:\ApkManagerRUS\place-apk-here-for-modding\../place-apk-here-for-modding/signedcom.teslacoilsw.widgetlocker.33000.apk
Не удается найти e:\ApkManagerRUS\place-apk-here-for-modding\../place-apk-here-for-modding/unsignedcom.teslacoilsw.widgetlocker.33000.apk
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Loading resource table from file: C:\Users\Alex\apktool\framework\1.apk
I: Loaded.
W: Could not decode attr value, using undecoded value instead: ns=android, name=hardwareAccelerated, value=0xffffffff
W: Could not decode attr value, using undecoded value instead: ns=android, name=hardwareAccelerated, value=0x00000000
W: Could not decode attr value, using undecoded value instead: ns=android, name=hardwareAccelerated, value=0x00000000
I: Decoding file-resources...
W: Could not decode attr value, using undecoded value instead: ns=android, name=background, value=0x010102fd
W: Could not decode attr value, using undecoded value instead: ns=android, name=fragment, value=0x0000000b
Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.write(Writer.java:157)
at brut.androlib.res.util.ExtMXSerializer.writeAttributeValue(ExtMXSerializer.java:38)
at org.xmlpull.mxp1_serializer.MXSerializer.attribute(MXSerializer.java:673)
at org.xmlpull.v1.wrapper.classic.XmlSerializerDelegate.attribute(XmlSerializerDelegate.java:106)
at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.writeStartTag(StaticXmlSerializerWrapper.java:267)
at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.event(StaticXmlSerializerWrapper.java:211)
at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:46)
at brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamDecoderContainer.java:34)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:100)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:86)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:132)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:93)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:98)
at brut.apktool.Main.cmdDecode(Main.java:128)
at brut.apktool.Main.main(Main.java:65)

Спасибо.

Сообщение отредактировал Axell - 04.06.12, 12:01



Реп: (592)
BOOM.vrn,
не помогает. помогите провернуть с этим приложением Прикрепленный файлHtcCOTAClient.apk ( 19.86 КБ )


Нужно найти composeCheckinMsg() в COTAReceiver.smali

найти строку "ro.build.version.sdk" и заменить ее на "my.rom.version"

немного ниже найти "apiLevel" и заменить на "MKS_version"

компилировать обратно.

Сообщение отредактировал mikrosmile - 04.06.12, 19:13



Реп: (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


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

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

Сейчас: 25.07.24, 03:39