Як можна декомпілювати файли Android DEX (байт-код VM) у відповідний вихідний код Java?
Як можна декомпілювати файли Android DEX (байт-код VM) у відповідний вихідний код Java?
Відповіді:
Отримайте ці інструменти:
1) dex2jar для перекладу файлів dex у файли jar
2) jd-gui для перегляду файлів java в банку
Вихідний код досить читабельний, оскільки dex2jar робить деякі оптимізації.
А ось процедура декомпіляції:
Перетворити class.dex в test_apk-debug.apk у test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
Примітка 1. У машинах Windows всі
.sh
сценарії замінюються.bat
скриптамиПримітка 2: Про Linux / mac не забувайте про
sh
абоbash
. Повна команда повинна бути:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Примітка 3: Також не забудьте додати дозвіл на виконання,
dex2jar-X.X
наприклад, у каталогsudo chmod -R +x dex2jar-2.0
Відкрийте банку в JD-GUI
Щоб уточнити, є два основні шляхи, які ви можете пройти тут залежно від того, що ви хочете досягти:
Декомпілюйте байт-код Dalvik (dex) у читабельне джерело Java. Це легко зробити за допомогою dex2jar та jd-gui , як це зазначає fred. Отримане джерело корисно для читання та розуміння функціональності програми, але, швидше за все, не створює 100% корисного коду. Іншими словами, ви можете прочитати джерело, але ви не можете дійсно його модифікувати та перепакувати. Зауважте, що якщо джерело було затуманено захистом, отриманий вихідний код буде значно складніше розплутати.
Інша основна альтернатива - це розібрати байт-код на smali , мову складання, розроблену саме для цієї мети. Я виявив, що найпростіший спосіб зробити це за допомогою apktool . Після встановлення apktool ви можете просто вказати його на файл apk, і ви отримаєте файл smali для кожного класу, що міститься в програмі. Ви можете читати та змінювати smali або навіть повністю замінювати класи, генеруючи smali з нового джерела Java (для цього ви можете зібрати свій .java джерело у .class файли з javac, а потім конвертувати ваші .class файли в .dex файли з Android dx-компілятор, а потім використовуйте baksmali (smali demonsembler) для перетворення .dex в .smali файли, як описано в цьому запитанні. Тут може бути ярлик). Як тільки ви закінчите, ви можете легко упакувати резервну копію apk знову з apktool. Зауважте, що apktool не підписує отриманий apk, тому вам потрібно буде подбати про це так само, як і будь-який інший додаток для Android .
Якщо ви йдете по маршруту smali, ви можете спробувати APK Studio , IDE, який автоматизує деякі з перерахованих вище кроків, щоб допомогти вам декомпілювати та перекомпілювати apk та встановити його на пристрої.
Коротше кажучи, ваш вибір майже або для декомпіляції на Java, яка є більш читаною, але, ймовірно, незворотною, або для того, щоб розібрати на smali, що важче читати, але набагато гнучкіше вносити зміни та перепаковувати модифікований додаток. Який підхід ви обираєте, залежатиме від того, що ви хочете досягти.
І нарешті, пропозиція наважитися також є важливою. Це інструмент перенацілювання для перетворення файлів .dex та .apk в файли java .class, щоб їх можна було проаналізувати за допомогою типових інструментів статичного аналізу Java.
Я фактично рекомендую зайти сюди: https://github.com/JesusFreke/smali
Він надає BAKSMALI, який є найкращим інструментом зворотної інженерії для файлів DEX. Це зробив JesusFreke, хлопець, який створив відомі ROM для Android.
./apktool d myprogram.apk
. Дивіться мою відповідь .
Більш повна версія Фреда «S відповідь :
Спочатку вам потрібен інструмент для вилучення всіх (складених) класів на DEX до JAR.
Є такий під назвою dex2jar , який виготовляє китайський студент.
Потім ви можете використовувати jd-gui для декомпіляції класів на JAR у вихідний код.
Отримане джерело має бути досить читабельним, оскільки dex2jar застосовує деякі оптимізації.
Можна використовувати APKTool . Він автоматично витягує всі класи ( .dex
), ресурси ( .asrc
), потім перетворює бінарний XML в читаний людиною XML , а також розбирає класи для вас.
Демонтаж завжди буде більш надійним, ніж декомпіляція, особливо з
JARs, затуманеними Pro Pro Guard!
Просто скажіть APKTool, щоб розшифрувати APK в каталог, потім змінити те, що ви хочете,
і, нарешті, закодувати його назад в APK. Це все.
Важливо: APKTool dissassembles . Він не декомпілюється .
Створений код не буде джерелом Java.
Але ви повинні мати можливість прочитати його та навіть редагувати, якщо ви знайомі з жасмином .
Якщо ви хочете джерело Java, перейдіть вручну .
Іноді ви отримуєте зламаний код під час використання dex2jar
/ apktool
, особливо в циклі. Щоб уникнути цього, використовуйте jadx , який декомпілює байткод dalvik у вихідний код Java, не створюючи спочатку файл .jar
/ .class
файл (як dex2jar
я вважаю, apktool використовує dex2jar). Він також є відкритим кодом та в активному розвитку. Він навіть має графічний інтерфейс, призначений для GUI-фанатиків. Спробуй це!
javac "$(find . -name '*.java')"
?
Я звик
Але ніхто не перемагає власні інструменти Google
Оскільки про це ніхто не згадував, є ще один інструмент: домашня сторінка DED
Встановіть інструкції та деякі пояснення: Встановлення .
Він був використаний у досить цікавому дослідженні безпеки верхніх додатків на ринку (не дуже пов’язаних, лише якщо вам цікаво): Огляд безпеки додатків Android
Так Dheeraj Bhaskar
як відповідь Росія відносно стара, як і багато років тому.
Ось моя остання (2019 рік) відповідь:
від dex
до java sourcecode
, на даний момент є два типи рішення:
One Step
: безпосередньо перетворити dex
вjava sourcecode
Two Step
: перший перетворити dex
в jar
, другий перетворити jar
вjava sourcecode
dex
безпосередньо доjava sourcecode
bin
папці можна побачити командний рядок jadx
або версію GUI jadx-gui
, двічі клацніть для запуску версії GUI:jadx-gui
dex
файлтоді можна показати вихідний код Java:
File
-> save as gradle project
потім отримав вихідний код Java:
dex
доjar
завантажте zip dex2jar , розпакуйте отримане d2j-dex2jar.sh
, а потім:
apk
до jar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
до jar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
приклад:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
jar
доjava sourcecode
many
код декомпілює помилкуminor
код декомпілює помилкуno
помилка декомпіляції коду
Procyon
тут демо Procyon
конвертувати банку в вихідний код Java:
скачайте procyon-decompiler-0.5.34.jar
то використовуючи синтаксис:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
приклад:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
використовуючи редактор VSCode для відкриття експортованого вихідного коду, виглядайте так:
Конверсія коректність: Jadx
> Procyon
> CRF
>JD-GUI
Рекомендую використовувати: (Етапне рішення) Jadx
Для більш детального пояснення, будь ласка, зверніться до моєї електронної книги з китайської мови : 安卓 应用 的 安全 和 破解
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
отримав виключення:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
це нормально чи ні?
>d2j-dex2jar.bat file.dex
але це не нормально. можливо, це тому, що з мого .dex
файлу було скопійовано dalvik-cache
?
dex is copied from dalvik-cache
, має бутиdex is decompiled from apk
Завантаживши файл APK, вам потрібно виконати наступні дії, щоб отримати редагуваний код / документ java.
За допомогою Dedexer ви можете розібрати .dex
файл на байткод dalvik ( .ddx
).
Наскільки я знаю, декомпіляція до Java неможлива.
Про байт-код дальвіка ви можете прочитати тут .
Android Reverse Engineering можлива . Виконайте ці дії, щоб отримати .java файл з apk-файла.
Крок 1 . Використання dex2jar
dex2jar sampleApp.apk
Крок2. Декомпіляція .jar за допомогою JD-GUI
Останні Debian мають пакет Python androguard
:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
Встановіть відповідні пакети:
sudo apt-get install androguard python-networkx
Декомпілюйте файл DEX:
$ androdd -i classes.dex -o ./dir-for-output
Витяг classes.dex
з Apk + Decompile:
$ androdd -i app.apk -o ./dir-for-output
Apk-файл - це не що інше, як архів Java (JAR), ви можете витягувати файли з архіву за допомогою:
$ unzip app.apk -d ./dir-for-output
Багато що змінилося з моменту опублікування більшості цих відповідей. Зараз є кілька простих інструментів з графічним інтерфейсом, таких як:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Найкраще знайти їх на форумі розробників XDA.
Ви можете спробувати JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), це ідеальний інструмент для декомпіляції DEX.
І так, він також доступний в Інтернеті на (мій: 0) новий сайт: http://www.javadecompilers.com/apk/
Це можна зробити за допомогою наступних п'яти кроків:
Цей самоцвіт робить це для вас автоматично, навіть встановлюючи необхідні інструменти
Найпростіший спосіб декомпілювати додаток для Android - це завантажити додаток з назвою ShowJava з playstore. Просто виберіть програму, яку потрібно декомпілювати зі списку програм. Є три різні декомпілятори, які ви можете використовувати для декомпіляції програми, а саме -
CFR 0.110, JaDX 0.6.1 або FernFlower (аналітичний декомпілятор).
Якщо ви не хочете завантажити dex2jar, просто використовуйте apk_grabber
сценарій python, щоб декомпілювати будь-який apk у jar-файли. Потім ви читаєте їх з jd-gui.