Можно ли декомпилировать файл Android .apk?


86

Могут ли пользователи преобразовать apk-файл моего приложения обратно в реальный код? Если да - есть ли способ предотвратить это?


1
Есть несколько методов декомпиляции APK . Чаще всего просто APKTool, он самый лучший и самый мощный. С его помощью очень легко изменить файлы apk .
Taranfx 06

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

1
yeblon.com/how-to-decompile-android-apk-app-files - Это может прозвучать
Бадр Хари

Ответы:


80

Во-первых, файл apk - это просто измененный файл jar. Итак, реальный вопрос в том, могут ли они декомпилировать файлы dex внутри. Ответ вроде как. Уже есть дизассемблеры, такие как дедексер и смали . Вы можете ожидать, что они станут только лучше, и теоретически в конечном итоге должна быть возможна декомпиляция в реальный исходный код Java (по крайней мере, иногда). См. Предыдущий вопрос о декомпиляции DEX в исходный код Java .

Следует помнить, что обфускация никогда не работает. Выберите хорошую лицензию и сделайте все возможное, чтобы обеспечить ее соблюдение законом. Не тратьте время на ненадежные технические средства.


45
Никогда не говори никогда. Обфускация не остановит решительного вора, но замедлит или отпугнет многих других. Обработка с помощью Proguard - это простой и НАДЕЖНЫЙ способ скрыть ваш код, и в качестве бонуса он также оптимизирует его. И он включен в Android SDK, поэтому одобрен Google.
Barry Fruitman

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

35

Возможна декомпиляция файла APK. Но может быть трудно понять код, если он запутан.

ApkTool для просмотра ресурсов внутри файла APK

  • Извлекает AndroidManifest.xml и все, что находится в папке res (XML-файлы макета, изображения, HTML, используемые в веб-просмотре и т. Д.)
  • команда: 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! Only smali
Игорь Ганапольский

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

1
ты, черт возьми, спас мне жизнь! какой классный пост! Я потерял код за последние два дня из-за неисправного SSD (к сожалению, я не использовал git). Однако у меня был apk, и теперь у меня есть мой источник, заметьте, немного другой, но источник!
farcrats

3

Могу также добавить, что в настоящее время можно декомпилировать Android-приложение онлайн, никакого программного обеспечения не требуется!

Вот вам 2 варианта:


decompileandroid.com не в сети (при загрузке apk у вас возникнут проблемы с его повторной загрузкой), а javadecompilers.com/apk уже давно поставил мой 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.