Подтвердить что ты не робот

Как я могу программно декомпилировать файлы dex в Android?

Я знаю, как извлекать файлы apk в классы, используя систему на базе Windows, как показано ниже:

Шаг 1: Переименование файла .apk

Переименуйте файл .apk с расширением .zip(например, пусть файл "demofile.apk", после переименования он станет "demofile.apk.zip" )

Шаг 2: Получение java файлов из apk

Теперь извлеките переименованный zip файл в определенную папку, например, пусть эта папка будет "demofolder". Теперь загрузите dex2jar из ссылки для windows и извлеките этот zip файл в папку "demofolder".

Теперь откройте командную строку и перейдите в папку, созданную на предыдущем шаге и введите команду "dex2jar classes.dex" и нажмите enter.This сгенерируйте файл "classes.dex.dex2jar" в той же папке.

Теперь загрузите java-декомпилятор из ссылки и извлеките его и start (двойной щелчок) jd-gui.exe

В окне jd-gui просмотрите сгенерированный файл "classes.dex.dex2jar" в demofolder, это даст все файлы классов по имени src.

Теперь из меню "Файл" выберите "сохранить все источники", это создаст zip файл с именем "classes_dex2jar.src.zip", состоящий из всех пакетов и java файлы.

Извлеките этот zip файл (classes_dex2jar.src.zip), и вы получите все java файлы приложения.

Вышеуказанные шаги будут генерировать java файлы, но чтобы получить файлы xml следующие шаги.

Шаг 3: Получение xml файлов из apk

Загрузите apktool и apktool из ссылки и извлеките оба файлы и поместить его в ту же папку (например, "demoxmlfolder" ).

Поместите файл .apk в ту же папку (например, demoxmlfolder)

Теперь откройте командную строку и перейдите в каталог, в котором хранится apktool (здесь "demoxmlfolder" ) и введите команду "apktool if framework-res.apk" Выше команда должна привести к установке "Framework..." Теперь в командной строке введите команду "apktool d filename.apk" (где filename - это имя файла apk). Это приведет к созданию папки name filename в текущем каталоге (здесь demoxmlfolder), где все xml файлы будут сохранены в папке res\layout.

Но я хотел бы знать, как выполнить вышеуказанный программно в Android. Поэтому мое приложение для Android может просто извлечь другой файл приложения dex. Я не против, если файл dex будет скопирован в другом месте на телефоне, а затем декомпилирован (это просто декомпиляция, в которой я застрял)

В принципе, как показано ниже, у меня есть доступ к каждому окну dex, а не к тому, как декомпилировать его в Android.

Любая помощь будет фантастической.

final PackageManager pm = getPackageManager();
                PackageInfo packageInfo = null;
                try {
                    packageInfo = pm.getPackageInfo("PACKAGE NAME HERE", PackageManager.GET_META_DATA);
                } catch (NameNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                File file = new File(packageInfo.applicationInfo.sourceDir);
                Uri uri = Uri.fromFile(file);
4b9b3361

Ответ 1

Вы можете просмотреть исходный код приложения ShowJava здесь. Похоже, он использует инструмент Dex2Jar. Декомпиляция начинается с BackgroundService, и всякая магия происходит в некоторых специальных классах Jar. Я не знаю, появился ли этот код из библиотеки или если весь этот код создан им. Посмотрите на ExtractJar и DecompileJar, чем он должен " Трудно понять, что происходит.

Ответ 2

Вам нужно выполнить несколько шагов, чтобы заставить его работать:

  • На сайт dex2jar bitbucket и загрузите файлы. Добавьте файлы jar в свой проект.
  • Через DexFileFactory вы можете загрузить apk, преобразовать его в dex (loadDexFile) и сохранить его в файл (writeDexFile).
  • С другой библиотекой, которая преобразует банки в java файлы, вы можете, наконец, прочитать содержимое. Я нашел Procyon, что кажется очень простым. Загрузите файл класса с помощью InputTypeLoader, а затем вызовите Decompiler.decompile().

Конечно, вы можете использовать другие библиотеки на шаге 3, но для шага 1 и 2 я не нашел альтернатив.