Чи можна декомпілювати файл .apk для Android?


86

Чи можуть користувачі перетворити файл apk моєї програми назад у фактичний код? Якщо вони це роблять - чи є спосіб запобігти цьому?


1
Існує кілька методів декомпіляції APK . Я просто APKTool частіше, це найкращий і найпотужніший. З його допомогою дуже легко змінювати файли apk .
Taranfx

Я написав тут допис у блозі: codexplo.wordpress.com/2012/03/15/…, але знову ж таки, для заплутаного коду буде важко ...
rokonoid


Відповіді:


80

По-перше, файл apk - це просто модифікований файл jar. Тож справжнє питання полягає в тому, чи можуть вони декомпілювати файли dex всередині. Відповідь така. Вже існують розбирачі, такі як дедексер та смалі . Ви можете очікувати, що вони лише покращаться, і теоретично з часом може бути можливо декомпілювати до фактичного джерела Java (принаймні іноді). Див. Попереднє запитання про декомпіляцію DEX у вихідний код Java .

Пам’ятайте, що затуманення ніколи не працює. Виберіть хорошу ліцензію та зробіть все можливе, щоб забезпечити її виконання згідно із законом. Не витрачайте час на ненадійні технічні заходи.


45
Ніколи не кажи ніколи. Затуманення не зупинить рішучого злодія, але сповільнить або стримує багатьох інших. Обробка за допомогою Proguard - це простий і НАДІЙНИЙ спосіб заплутати ваш код, і в якості бонусу він також його оптимізує. І він включений в Android SDK, тому схвалений Google.
Barry Fruitman

3
Затуманення безумовно працює, але ви повинні чіткіше визначити, яка ваша мета. Очевидно, єдиний спосіб, яким ви могли коли-небудь зберегти свій вихідний код по-справжньому безпечним, - це ніколи не надавати нікому доступ до нього, серверу чи клієнту. Зверніть увагу, що Proguard погано працює з класами, які мають посилання у файлах XML. Вам потрібно використовувати ручну затуману, щоб обійти це.
MattC

35

Можлива декомпіляція файлу .apk. Але може бути важко зрозуміти код, якщо він затуманений.

ApkTool для перегляду ресурсів у файлі APK

  • Витягує AndroidManifest.xml та все у папці res (розміщення xml-файлів, зображень, htmls, що використовуються у веб-перегляді тощо)
  • команда: apktool.bat d sampleApp.apk
  • ПРИМІТКА: Ви можете досягти цього за допомогою утиліти zip, наприклад 7-zip. Але він також витягує файл .smali з усіх файлів .class.

Використання dex2jar

  • Генерує файл .jar із файлу .apk, нам потрібен JD-GUI для перегляду вихідного коду з цього .jar.
  • команда: dex2jar sampleApp.apk

Декомпіляція .jar за допомогою JD-GUI

  • декомпілює файли .class (затуманено - у випадку програми для Android, але читаючий оригінальний код отримується у випадку з іншим файлом .jar). тобто ми отримуємо .java назад із програми.

apktool не виплюває вихідні файли Java! Тільки смалі
ІгорГанапольський

1
як я вже говорив у відповіді, apktool створює .jar з .apk, і ми повинні використовувати JD-GUI-подібний інструмент для декомпіляції .jar для досягнення вихідних файлів .java.
gtiwari333

1
ти жахливий врятував мені життя! який дивовижний пост! Я втратив останні два дні коду через невдалий SSD (на жаль, я не взяв на себе зобов'язання git). Однак у мене був apk, і тепер у мене є своє джерело, зауважте, трохи інше, але джерело!
фаркрати

3

Я також можу додати, що на сьогоднішній день можна декомпілювати програму для Android в Інтернеті, не потребуючи програмного забезпечення!

Ось 2 варіанти для вас:


decompileandroid.com перебуває в автономному режимі (коли ви завантажуєте apk, у вас будуть проблеми з його повторним завантаженням), і javadecompilers.com/apk довгий час ставить мій apk в чергу. Я переходив в офлайн, потім в Інтернет, це все ще було в черзі. Я очистив всю історію перегляду, і тепер файл, який я завантажив вдруге, знаходиться в черзі.
iOSAndroidWindowsMobileAppsDev

1

Завантажте цей інструмент jadx https://sourceforge.net/projects/jadx/files/

Розпакуйте його, а потім у папці lib запустіть файл jadx-gui-0.6.1.jar, тепер перегляньте файл apk. Зроблено. Автоматично apk буде декомпілювати та зберегти його, натиснувши кнопку збереження. Сподіваюся, це буде працювати у вас. Дякую


0

Іноді ви отримуєте непрацюючий код, використовуючи dex2jar/ apktool, особливо у циклах. Щоб уникнути цього, використовуйте jadx , який декомпілює байт-код dalvik у вихідний код Java, не створюючи спочатку файл .jar/, .classяк dex2jarце робиться (я думаю, apktool використовує dex2jar). Він також є з відкритим кодом і знаходиться в активному розвитку. Він навіть має графічний інтерфейс для фанатиків графічного інтерфейсу. Спробуй це!


0

Чи можуть користувачі перетворити файл apk моєї програми назад у фактичний код?

так.

Люди можуть використовувати різні інструменти, щоб:

  • аналіз: ваш apk
  • розшифрувати / зламати ваш apk
    • використання FDex2для вивантаження dexфайлу
      • потім за допомогою dex2jarконвертувати вjar
        • потім використовуйте jadxдля перетворення у javaвихідний код

Якщо вони це роблять - чи є спосіб запобігти цьому?

так. Кілька (можна комбінованих) способів запобігти (певною мірою) цьому:

  • низький рівень: затуманення коду
    • за допомогою Android ProGuard
  • високий рівень: використовувати сценарій затвердіння Android

Більш детально можна ознайомитись із моїм підручником з китайської мови :安卓 应用 的 安全 和 破解


0

Так, існує безліч програмного забезпечення для декомпіляції файлу .apk.

Нещодавно я склав остаточний список 47 найкращих декомпіляторів APK на своєму веб-сайті. Я розклав їх на 4 різні секції.

  1. Декомпілятори APK з відкритим кодом
  2. Інтернет-декомпілятори APK
  3. Декомпілятор APK для Windows, Mac або Linux
  4. Додатки для декомпіляції APK

Сподіваюсь, ця колекція буде для вас корисною.

Посилання: https://www.edopedia.com/blog/best-apk-decompilers/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.