Альтернативный метод обращения, чем чтение кода Smali? - PullRequest
0 голосов
/ 15 марта 2019

Я переворачиваю приложение для Android. Я хочу изменить и восстановить его. Я использовал APK Studio (который в значительной степени является версией apktool для GUI), чтобы получить файлы внутри apk. Сейчас читать смалийский код очень сложно.

Я также попытался разархивировать его, получить classes.dex , затем получил файлы jar (используя dex2jar ) и открыл его в jd-gui , но этот метод не получает полный исходный код, и да, очевидно, отсутствует некоторый код Java. Поэтому я не могу использовать это, чтобы восстановить его.

Таким образом, любой альтернативный метод, который я могу использовать, чтобы перестроить приложение, не проходя через код smali ??

Я точно знаю, какой класс и какой код мне нужно изменить. Но я не могу получить тот же код в файлах smali.

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Двухэтапное преобразование с помощью dex2jar и последующая декомпиляция файлов классов Java, как известно, создает проблемы.Основная причина этого заключается в том, что DEX - это архитектура на основе регистров, а Java - это архитектура на основе стека.Преобразование между обеими системами является сложным и подверженным ошибкам.

Поэтому я предпочитаю «одношаговую» декомпиляцию (непосредственно DEX для исходного кода Java), как это делает Jadx - декомпилятор Dex to Java .

Jadx обычно может декомпилировать большинство методов.Однако для очень сложных методов или методов, которые изначально не были скомпилированы из исходного кода Java, декомпиляция может завершиться неудачно.

1 голос
/ 15 марта 2019

Невозможно декомпилировать проект в 100% правильном Java-коде.Это означает, что вам нужно настроить / изменить большую часть декомпилированных источников, чтобы перекомпилировать ее обратно, что практически невозможно (или очень дорого) сделать для больших проектов.Лучший способ - внести изменения в код smali, его можно легко перекомпилировать обратно без каких-либо проблем.Просто потратьте 1-2 часа на изучение смали, это очень просто.

...