ShowJava
An APK (android application), JAR & Dex decompiler for android. This is a Decompiler that extracts the source code of an Android application (including XML files and image assets), JAR Packages, and dex files. Works directly from your android device.
Features
- Select either CFR 0.140, JaDX 0.9.0, or FernFlower (analytical decompiler) to use as the decompiler.
- Runs directly on an android device (4.1.x and above).
- Select apk/jar/dex from sdcard (or) from a list of installed applications.
- Decompiles android resources (layouts, Drawables, Menus, AndroidManifest, image assets, values, etc).
- Easy to use source navigator with built-in media & code viewer.
- Displays code in a clean-syntax-highlighted form with zoom & line-wrap.
- The decompiled source can easily be copied from the sdcard (the source is stored in show-java folder in the sdcard).
- Share the decompiled source easily with the built-in archive + share mechanism.
Препарирование. Отключаем рекламу
Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет Virtual Torch — виртуальный факел. Для нас эта софтина подойдет идеально, потому что она под завязку набита раздражающей рекламой и к тому же достаточно проста, чтобы не потеряться в дебрях кода.
Итак, с помощью одного из приведенных способов скачай приложение из маркета . Если ты решил использовать Virtuous Ten Studio, просто открой APK-файл в приложении и распакуй его, для чего создай проект (File -> New project), затем в контекстном меню проекта выбери Import File. Если же твой выбор пал на apktool, то достаточно выполнить одну команду:
$ apktool d com.kauf.particle.virtualtorch.apk
После этого в каталоге com.kauf.particle.virtualtorch появится файловое дерево, похожее на описанное в предыдущем разделе, но с дополнительным каталогом smali вместо dex-файлов и файлом apktool.yml. Первый содержит дизассемблированный код исполняемого dex-файла приложения, второй — служебную информацию, необходимую apktool для сборки пакета обратно.
Первое место, куда мы должны заглянуть, — это, конечно же, AndroidManifest.xml. И здесь мы сразу встречаем следующую строку:
Нетрудно догадаться, что она отвечает за предоставление приложению полномочий на использование интернет-соединения. По сути, если мы хотим просто избавиться от рекламы, нам, скорее всего, достаточно будет запретить приложению интернет. Попытаемся это сделать. Удаляем указанную строку и пробуем собрать софтину с помощью apktool:
$ apktool b com.kauf.particle.virtualtorch
В каталоге com.kauf.particle.virtualtorch/build/ появится результирующий APK-файл. Однако установить его не получится, так как он не имеет цифровой подписи и контрольных сумм файлов (в нем просто нет каталога META-INF/). Мы должны подписать пакет с помощью утилиты apk-signer. Запустили. Интерфейс состоит из двух вкладок — на первой (Key Generator) создаем ключи, на второй (APK Signer) подписываем. Чтобы создать наш приватный ключ, заполняем следующие поля:
-
Target File
— выходной файл хранилища ключей; в нем обычно хранится одна пара ключей; -
Password
и Confirm
— пароль для хранилища; -
Alias
— имя ключа в хранилище; -
Alias password
и Confirm
— пароль секретного ключа; -
Validity
— срок действия (в годах). Значение по умолчанию оптимально.
Остальные поля, в общем-то, необязательны — но необходимо заполнить хотя бы одно.
Просмотр и модификация
Допустим, ты нашел интересующий тебя пакет, скачал, распаковал… и при попытке просмотра какого-нибудь XML-файла с удивлением обнаружил, что файл не текстовый. Чем же его декомпилировать и как вообще работать с пакетами? Неужели необходимо ставить SDK? Нет, SDK ставить вовсе не обязательно. На самом деле для всех шагов по распаковке, модификации и упаковке пакетов APK нужны следующие инструменты:
- архиватор ZIP для распаковки и запаковки;
- smali — ассемблер/дизассемблер байт-кода виртуальной машины Dalvik (code.google.com/p/smali);
- aapt — инструмент для запаковки ресурсов (по умолчанию ресурсы хранятся в бинарном виде для оптимизации производительности приложения). Входит в состав Android SDK, но может быть получен и отдельно;
- signer — инструмент для цифровой подписи модифицированного пакета (bit.ly/Rmrv4M).
Использовать все эти инструменты можно и по отдельности, но это неудобно, поэтому лучше воспользоваться более высокоуровневым софтом, построенным на их основе. Если ты работаешь в Linux или Mac OS X, то тут есть инструмент под названием apktool. Он позволяет распаковывать ресурсы в оригинальный вид (в том числе бинарные XML- и arsc-файлы), пересобирать пакет с измененными ресурсами, но не умеет подписывать пакеты, так что запускать утилиту signer придется вручную. Несмотря на то что утилита написана на Java, ее установка достаточно нестандартна. Сначала следует получить сам jar-файл:
Далее нам понадобится скрипт-обвязка для запуска apktool (он, кстати, доступен и для Windows), включающий в себя еще и утилиту aapt, которая понадобится для запаковки пакета:
Далее просто сваливаем содержимое обоих архивов в каталог ~/bin и добавляем его в $PATH:
Если же ты работаешь в Windows, то для нее есть превосходный инструмент под названиемVirtuous Ten Studio, который также аккумулирует в себе все эти инструменты (включая сам apktool), но вместо CLI-интерфейса предоставляет пользователю интуитивно понятный графический интерфейс, с помощью которого можно выполнять операции по распаковке, дизассемблированию и декомпиляции в несколько кликов. Инструмент этот Donation-ware, то есть иногда появляются окошки с предложением получить лицензию, но это, в конце концов, можно и потерпеть. Описывать его не имеет никакого смысла, потому что разобраться в интерфейсе можно за несколько минут. А вот apktool, вследствие его консольной природы, следует обсудить подробнее.
Импорт APK в Virtuous Ten Studio
Рассмотрим опции apktool. Если вкратце, то имеются три основные команды: d (decode), b (build) и if (install framework). Если с первыми двумя командами все понятно, то что делает третья, условный оператор? Она распаковывает указанный UI-фреймворк, который необходим в тех случаях, когда ты препарируешь какой-либо системный пакет.
Рассмотрим наиболее интересные опции первой команды:
- -s — не дизассемблировать файлы dex;
- -r — не распаковывать ресурсы;
- -b — не вставлять отладочную информацию в результаты дизассемблирования файла dex;
- —frame-path — использовать указанный UI-фреймворк вместо встроенного в apktool. Теперь рассмотрим пару опций для команды b:
- -f — форсированная сборка без проверки изменений;
- -a — указываем путь к aapt (средство для сборки APK-архива), если ты по какой-то причине хочешь использовать его из другого источника.
Пользоваться apktool очень просто, для этого достаточно указать одну из команд и путь до APK, например:
После этого в каталоге mail появятся все извлеченные и дизассемблированные файлы пакета.
APK Decompiler
This project makes it easy to convert an installed Android app that was built with the Android SDK into readable source files.
How to use
- Ensure you have ADB installed
- Attach your Android device
- Run dist/decompile.bat
That’s it! The output will be a zip file of the passed-in package or keyword that contains as much of the decompiled code as possible.
NOTE: There will be no .java files, but .class files will be generated. I’d recommend using something like JD-Gui (https://github.com/java-decompiler/jd-gui/releases) to convert it into Java code.
Some of the dependent projects are not able to parse all APKs, so it isn’t guaranteed to be complete decompilation. If you see any problems during the run of APK Decompiler, I would encourage you to file a bug report with the appropriate project author!
APK Decompiler wraps the following projects:
- dex2jar (https://bitbucket.org/pxb1988/dex2jar) – Generates Java .class files
- apktool (https://ibotpeaches.github.io/Apktool/) – Generates readable resource files
Что такое APK файл?
Смотрим что внутри
По сути.apk это ZIP архив, поэтому посмотреть на внутреннее устройство можно воспользовавшись любым файловым менеджером или архиватором, например WinRAR или мобильным приложением X-plore.
Рассмотрим структуру
- AndroidManifest.xml — это своего рода «паспорт» приложения из которого можно узнать все основные моменты, требования, версию, разрешения и прочее.
- META-INF этот фаил содержит метаданные, то есть данные о данных, контрольные суммы, пути к данным, пути и контрольные суммы ресурсов, сертификаты. Открыть этот фаил можно любым текстовым редактором, но рекомендуется использовать Notepad++.
- Папка res содержит все ресурсы программы, графические, такие как иконки, картинки, текстовые, элементы графического интерфейса. Получить доступ к папке так же можно без труда.
- classes.dex — непосредственный программный код приложения, выполняемый виртуальной машиной Dalvik VM, увидеть что внутри этого файла можно лишь декомпилировав.apk, об этом мы расскажем в других статьях. resources.arsc -скомпилированный файл XML, данный фаил содержит данные о всех ресурсах задействованных в программе.
- lib — папка с нативными библиотеками, получить доступ к ресурсам которой можно лишь при использовании специализированных программ. Так же в APK могут встречаться такие файлы и папки как com, org, udk, но далеко не всегда.
Теперь рассмотрим внутреннюю структуру более подробно для этого нам понадобиться программа для декомпиляции, Java и АПК-файл. Основным инструментом для разборки.apk является Apktool, но данная программа работает только со строки, что не очень удобно. Для более быстрого и удобного разбора можно использовать APKing, это все та же Apktool, но с возможностью работы из контекстного меню.И так устанавливаем APKing как любое приложение для Windows и выбрав.apk нажимаем на него правой клавишей мыши и одновременно Shift, после чего увидим следующее:
Apk editor pro, которую Вы можете скачать на андроид на нашем сайте, позволит Вам взломать/изменить содержимое файлов любого приложения для мобильных устройств и настроить его на свое усмотрение.
Защита от декомпиляции apk
Декомпиляция apk-файлов может представлять серьезную угрозу для безопасности и охраны интеллектуальной собственности, поэтому разработчики программ и платформ постоянно прилагают усилия для защиты своих приложений от нежелательной декомпиляции. Вот несколько методов и инструментов, которые могут помочь вам защитить ваше apk-приложение.
- Шифрование и обфускация кода: Одним из наиболее эффективных способов защиты от декомпиляции является шифрование и обфускация кода. Шифрование кода делает его труднодоступным для внешнего наблюдателя, что затрудняет процесс декомпиляции. Обфускация кода, с другой стороны, усложняет понимание символьных имен функций и переменных, что делает декомпиляцию еще более сложной.
- Использование защищенных API: Иногда важные функции или сервисы приложения могут быть вынесены за пределы основного кода приложения и реализованы через API. Это может помочь в предотвращении декомпиляции, поскольку критический код не будет находиться непосредственно в apk-файле и потому будет сложнее достичь его. Это также позволяет вам легко обновлять защищенный код, не требуя пересборки всего приложения.
- Использование аппаратных средств защиты: Некоторые производители устройств предлагают аппаратные средства защиты, которые могут помочь в защите приложения от декомпиляции. Например, аппаратные модули для шифрования или цифровые подписи могут быть использованы для обеспечения интегритета кода и его недоступности для декомпиляции.
- Проверка подписи приложения: Приложения для Android могут быть подписаны с помощью ключей, которые гарантируют подлинность и авторство приложения. Одним из способов защиты от декомпиляции является проверка подписи приложения при запуске. Если подпись приложения не соответствует ожидаемой, приложение может быть запрещено или приведено в недействительное состояние.
Использование комбинации этих методов и инструментов может значительно повысить уровень безопасности вашего apk-приложения и сделать его менее уязвимым к декомпиляции. Всегда помните, что нет абсолютно непроницаемых систем защиты, но с правильными мерами вы можете сделать процесс декомпиляции более сложным и менее привлекательным для злоумышленников.
Декомпиляция apk
Декомпиляция apk может быть выполнена с помощью утилиты apktool. bat файл для её запуска Вы можете скачать внизу статьи. Самую последнюю версию утилиты можно взять на сайте авторов.
В Ubuntu apktool устанавливается командами:
Код bash:
- export apktool_version=2.3.1
- sudo -E sh -c ‘wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_$apktool_version.jar -O /usr/local/bin/apktool.jar’
- sudo chmod +r usrlocalbinapktool.jar
- sudo sh -c ‘wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool -O /usr/local/bin/apktool’
- sudo chmod +x usrlocalbinapktool
Утилита apktool написана на языке Java и требует установки на компьютер Java 8 (JRE 1.8).
После установки JRE необходимо переименовать файл утилиты в apktool.jar (убрать из имени версию, только в случае, если Вы скачивали файл с официального сайта) и перенести jar и bat файлы в папку, которая описана в системной переменной path.
По сути, после этого мы можем уже начать декомпилировать apk.
Способов получения файла APK много.
Кто-то для этого Android Device Bridge (ADB).
Кто-то файл на компьютер непосредственно из Google Play.
Но лично я использую другой способ. Многие файловые менеджеры позволяют создавать резервные копии приложений. Я, например, использую «Cx Проводник», создаю резервную копию, а потом с его же помощью перебрасываю файл на компьютер через сеть, либо Яндекс диск.
Итак, у нас есть apk-файл, который мы планируем исследовать и поменять. Также у нас есть инструмент, необходимый для его декомпиляции.
Выполняем команду:
Код bash:
- apktool d <имя файла. apk>
После этого у нас в том же каталоге, где находится apk, появится папка с тем же именем, внутри которого находится декомпилированная структура файла apk.
Данная структура совпадает с тем, что видели с помощью архиватора, если открывали apk как архив.
Но в ней появилась директория smali, где лежит дезассемблированный код dex-файла, плюс в корне появился файл apktool.yml. Этот файл является служебным файлом apktool и понадобится утилите при обратной сборке проекта.
С этим всем нам и предстоит работать.
В данном способе есть один минус: исходный код получается в small (аналог ассемблера).
Чтобы получить более читаемый код, используют связку dex2jar и jd-gui (В качестве его альтернативы можно использовать Jad, а можно даже использовать облачную декомпиляцию).
Первый позволяет получить из apk файл jar, а второй — собственно дезассемблировать jar.
Также могут пригодиться:
- smali — ассемблер/дизассемблер smali / dex.
- apksigner — программа для подписывания apk (входит в состав Android SDK и требует его установки)
- Android Studio — не помешает, если мы планируем разрабатывать код для Android. Можно сказать, что это целый «комбайн».
- uber-apk-signer — еще вариант для подписывания apk
- Virtuous Ten Studio — программа, с функционалом, аналогичным apktool, но имеющая графический интерфейс и работающая под Windows.
Скачивание файла с помощью ADB
В Windows потребуется предварительно установить USB драйвера для вашего Андроид устройства (если Вы не устанавливали его ранее). В Linux этого скорее всего не потребуется.
Установите Android Device Bridge (ADB). Скачать установочный пакет для Windows можно здесь.
Для установки в Ubuntu используется команда:
Код bash:
- sudo apt install android-tools-adb
Подключите Android устройство к компьютеру через USB кабелю.
Вывести список всех установленных на устройстве пакетов можно командой:
Код bash:
- adb shell pm list packages
Естественно, если Вы используете Ubuntu, то можете использовать grep для фильтрации вывода и поиска искомого пакета (в Windows команда не сработает).
Код bash:
- adb shell pm list packages -f | grep <название_пакета>
Теперь мы можем узнать полный путь к пакету при помощи команды
Код bash:
- adb shell pm path <название_пакета (без приставки «package:») >
Теперь мы можем скачать файл с устройства на компьютер:
Код bash:
- adb pull <путь к пакету на устройстве> <имя файла на компьютере.apk>
Второй параметр является не обязательным.
Скачивание файла из Google Play
На сайте Google Play необходимо найти требуемое приложение и скопировать его адрес (в строке адреса браузера).
С помощью специальных сервисов, например, этого, скачать файл на компьютер, используя ранее скопированный адрес.
Dexplorer
Explore the Dex / Apk files of all your installed apps and downloaded apk’s.
A simple decompiler is included but is not able to show method bodies.
Features
- Fully optimized for Android 6.0 Marshmallow and Runtime Permissions
- Browse through java packages and files
- Show Class definition, fields, and method signatures
- Browse through assets, lib and res folders, and files
- View the AndroidManifest.xml
- Use root if necessary (not mandatory)
- Tablet (2 panes) support
- Several source tree icon styles
- Several syntax highlight styles
- Option to ignore ActionbarSherlock and AppCompat resources
- Previews of commonly used file types:
- XML files, with syntax highlighting
- Image files, with adjustable background colors
- Audio files, with playback
- Font files, with a text editor
- General text files
- These files can also be viewed in your application of choice
- Can be used to open apk files from a file explorer app
Bytecode Viewer
Bytecode Viewer (BCV) is a Reverse Engineering Suite for Java/Android apps.
Basically, BCV helps us in the reversing process while it also uses some other open source tools to complete the app decompilation task.
It is written entirely in Java and has a light footprint compared to other Apk decompilers. BCV is released under GPL-3.0 license which means that it is completely open source and you are free to use it in personal or commercial projects.
Bytecode Viewer is packed with 6 decompilers, 2 APK converters, 2 assemblers, 3 disassemblers, debugging, advanced searching, & more.
Newly Added Features
- Patched CVE-2022-21675 (Make sure to upgrade to v2.11.X)
- Dark mode with multiple themes
- Translated into over 30 languages including Arabic, German, Japanese, Mandarin, Russian, Spanish
- Plugin Writer – create and edit external plugins from within BCV
- Fixed Java & Bytecode editing/compiling
- Tabbed plugin console
- Right-click menus on the resource and search panels
- Javap disassembler
- XAPK support
- Updated nearly all dependencies (incl. decompilers like CFR, JD-GUI, etc.)
- Updated ASM library to version 9.1
- Added support to Java files compiled using JDK > 13
- Migrated to Maven
Important Features
- Simply drag and drop to decompile and search Java Jars & Android APKs
- File format support for Class, Jar, XAPK, APK, DEX, WAR, JSP, Image Resources, Text Resources & More
- 6 Built-in Java decompilers: Krakatau, CFR, Procyon, FernFlower, JADX, JD-GUI
- 3 Built-in Bytecode disassemblers, including 2 assemblers: Krakatau and Smali/BakSmali
- APK/DEX Support from Dex2Jar and Enjarify
- Built-in Java Compiler
- Advanced static-search functionality
- Customizable UI
- Plugins + Script Engine Design
- Malicious code scanning API
- Translated Into over 30 Languages Including Arabic, German, Japanese, Mandarin, Russian, and Spanish)
- Export functionality as Runnable Jar, Zip, APK, Decompile All As Zip, Etc.
Pros
- Written to run on Java 7, but also supports Java 8.
- Compile Decompiled Java classes with Ranino Compiler.
- Quickly decompile classes using JD-Core.
- Easily edit APKs via Smali/Baksmali integration.
- Decompile Java with 6 different decompilers (Fernflower, JADX-Core, DJ-GUI/Core, CFR, Krakatau, and Procyon).
- Bytecode Decompiling with CFIDE.
- Android APK integrated with Dex2Jar.
- Securely launch Java applications and insert hooks via EZ-Injection.
- Scan for malicious code with the Malicious Code Scanner plugin.
- Export as DEX, Jar, Class, Zip, or Java Source File.
- Open Android APKs, Android DEX, Java Class Files, and Java Jars. (WAR & JSP Support!)
- Extensively configurable, over 100+ settings!
- Works seamlessly with all Operating Systems.
- Integrate BCV into Windows by installing it, it’ll associate all .class, .dex and .apk to open with BCV.
- View Jar & APK Resources with ease by APKTool.jar integration.
- 100% free and open sourced under GPL v3 CopyLeft.
Cons
- The developer of Bytecode Viewer does not provide any online apk decompiler. But, we can upload it on a server and deliver Bytecode Viewer as a service.
- Analyze file slower
Decompiler – Visual Studio Code Extension
Let’s be honest, there is no reason to remember how to decompile stuff with the various tools available. Wouldn’t it be nice to just decompile the $h*! out of things right off the fingertips in Visual Studio Code? Well, here we go:
This extension decompiles …
- Binary executables for various platforms
- as supported by ; Windows PE, Linux ELF, IOS, etc..
- or IDAPro (Experimental, Windows Only for now)
- Java Jar archives and compiled Classes
- Android APK’s
- Python and
- Ethereum/EVM based Smart Contracts
Just on a supported executable and wait for the magic to happen.
The decompilation result is added to a temporary sub-workspace. You can files to your local file system right from the sub-workspace.
APK Decompiler by Unbox APK
The UnboxAPK de-compiler is one of the best tools for uncovering the contents of an APK file and understanding how an APK allows the application to operate correctly. To decompile any APK file, all you have to do is upload your APK file to the platform above, where it says ‘Upload’. The de-compiler will take care of the rest, and start unraveling the contents of the APK file. Depending on the size and the contents inside the APK file, the time required to complete the de-compilation process varies. If the size of the APK file is small, the de-compilation process will take only a few seconds. The maximum size limit (at the moment) for the de-compiler is 100 MB.
Once the APK has been de-compiled, you can download the zipped file containing the de-compiled files through the UnboxAPK API. There are various ways to view the de-compiled files, and one of the best ways is to use Android Studio.
Currently, the UnboxAPK website only supports de-compiling Android applications. The capability to de-compile iOS applications will soon follow. The UnboxAPK decompile is powered by jadx.
Топ-3 инструмента для декомпиляции apk-файлов и реинжиниринга android-приложений
Декомпиляция и реинжиниринг android-приложений может быть полезным процессом при разработке и тестировании приложений, а также при анализе безопасности. Существуют различные инструменты, которые позволяют проводить данную процедуру. В этом разделе мы рассмотрим топ-3 инструмента для декомпиляции apk-файлов и реинжиниринга android-приложений.
1. Apktool
Apktool является одним из самых популярных инструментов для декомпиляции и пересборки android-приложений. Он позволяет извлекать исходный код, ресурсы и другую информацию из apk-файлов. Apktool поддерживает множество форматов ресурсов, включая XML, DEX, JAR и т. д. Он также позволяет изменять и пересобирать приложения с измененным кодом и ресурсами.
Apktool предоставляет командную строку для работы с apk-файлами. Он поддерживает декомпиляцию, пересборку и подписывание apk-файлов. Apktool также предоставляет возможность анализировать исходный код приложения и исследовать его структуру, что делает его полезным инструментом для анализа безопасности.
2. JADX
Высокопроизводительный и простой в использовании инструмент для декомпиляции android-приложений. JADX предоставляет интерфейс пользователя, позволяющий изучать исходный код приложения, анализировать его структуру и искать потенциальные уязвимости. Интегрированный декомпилятор помогает извлекать исходный код из apk-файлов и предоставляет удобный способ просмотра классов и методов приложения. Высокая производительность и простота использования делают его отличным инструментом для анализа android-приложений.
3. JADX-GUI
JADX-GUI — это графический интерфейс для инструмента JADX. Он предоставляет удобный способ работы с JADX и позволяет визуально изучать исходный код приложений. При помощи данного инструмента можно ознакомиться с основными функциями, классами и структурой приложения. Удобный пользовательский интерфейс и интеграция с другими инструментами делают его привлекательным выбором для декомпиляции apk-файлов и анализа android-приложений.
Заключение
Декомпиляция apk-файлов и реинжиниринг android-приложений являются важными процессами при разработке и тестировании приложений, а также при анализе исходного кода и безопасности. Топ-3 инструмента, которые были рассмотрены в этом разделе, предоставляют удобные и эффективные способы работы с apk-файлами и анализа android-приложений.
Выбор инструмента зависит от ваших потребностей и предпочтений. Apktool, JADX и JADX-GUI предоставляют различные функции и интерфейсы для работы с apk-файлами и исходным кодом приложений. Рекомендуется опробовать все три инструмента и выбрать тот, который наилучшим образом соответствует вашим потребностям.
Apk Changer
Apk changer is a command line program for modifying apk files. It is similar to apk manager, but has more options.
Features
- Normal and Advanced Mode.
- Multicore support(much faster than other tools in batch operations and image optimization)
- Decompile/Compile selected part of apk files.(Batch mode supported, framework dependent decompiling supported too)
- Optimize pngs inside apk files(including .9.pngs).(Batch mode supported)
- Zipalign apk files
- Sign apk files(Batch mode supported)
- Recompress apk
- Protect Apk resources
- Dex to java decompilation
- Adb logcat with logcat options(via WiFi or usb cable)
- Four versions of apktool(1.4.3, 1.5.3, 2.3.2, latest development) – if an error occurs while decompilation, the program will try to use an alternative version and will compile your apk with a version that was used for decompilation
- Four languages at the moment(Russian, English, Dutch, Deutch) – if you want to translate the program into another language just inform the developer on GitHub.
- Settings (Compression level, Heap size, optimization level, apktool version, smali version, language…).
- Error detection. If an error occurs, the program reports about it.
- Logs (For batch Decompilation/Compilation program creates two logs. First is full and second shows only with what apks occurred errors).
- Decompile/Compile jar files(framework files)
Дебажим библиотеки
Иногда появляется потребность пройтись дебагером по коду в библиотеке. Для этого нам потребуется физический андроид девайс, рутованый на arm32 (armeabi-v7a). Эти требования являются необязательными, но желательными.
Отдельный физический девайс — так как встроенный эмулятор в Android Studio очень плохо работает на ARM32, а остальные мне просто лень скачивать.
Рутованый — так как надо будет запустить дебаг сервер от рута.
arm32 — потому что он проще, чем arm64.
Почему мы не рассматриваем x86 или x86_64? Потому что данная статья в том числе и образовательная и не все приложения имеют библиотеки под данные архитектуры, а значит наш метод можно распространять на практически любое реальное андроид приложение, не только crackme.
Приложение находится на телефоне, дебажить мы будем со своего компа. Значит мы будем использовать remote debugging. Remote debugging — это когда мы подключаемся дебагером удаленно. Чтобы этого достичь, на устройстве, где мы будем дебажить, надо запустить дебаг-сервер. Дебагер на компе будет выступать в роли клиента. В папке IDA PRO, есть папка dbgsrv, копируем оттуда файл на телефон и запускаем
Если вы все сделали правильно, то вывод будет говорить о том, что дебаг сервер ожидает подключения. Если у вас не получается:
- Вы скорее всего скопировали не тот дебаг сервер
- Вы не выставили файлу правильные права
- Ваш телефон не arm32
Теперь настраиваем port forwarding, одной командой adb, с указанием порта нашего дебаг сервера
Следующий шаг — включение дебаг режима в самом приложении. Это необходимо для того, чтобы мы могли подключиться идой. Распаковываем apktool’ом и добавляем в манифест
Собираем приложение и подписываем.
Как подписать?
Устанавливаем JDK (Java development kit), добавляем его в PATH. Там лежит jarsigner и keytool.
Генерируем keystore:
«`
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
«`
Подписываем приложение
«`
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
«`
Устанавливаем приложение на телефон. Теперь, что его дебажить, активируем опцию разработчика и в меню “Отслеживаемые приложения” выбираем наше
Включаем “Подождать отладчик”, чтобы приложение не стартовало без нашего дебагера
Всё, теперь наш телефон полностью готов.