Intereting Posts
Android – Как получить выбранное значение элемента из счетчика и поместить его в строку? Получить статус главной учетной записи gmail Дизайнер макетов Eclipse Android – добавьте новые размеры экрана для предварительного просмотра Как играть в GIF в android Android Google Directions Service можно использовать изначально? С оболочкой? Доступны общественные транспортные / велосипедные маршруты? Кнопка Android. Как настроить фокусировку на истину и все еще принимать onClick прослушиватель при первом нажатии? Значок панели действий, скрытый после того, как SearchView расширяется Класс java.util.Map имеет общие параметры типа, вместо этого используйте GenericTypeIndicator Как программно установить атрибут layout_align_parent_right кнопки в относительной компоновке? JQuery Перетаскивание на сенсорных устройствах (iPad, Android) Файл констант Java Программно стереть данные из базы данных sqlite с использованием библиотеки ormlite Android: отображение пунктов меню панели действий в зависимости от ViewPager Исключение в макете загрузки: java.util.LinkedHashMap.eldest () Ljava / util / Map $ Entry; Установить текст TextView из html-форматированного строкового ресурса в XML

Кажется, что декомпиляция Android Apk

Я просто возился. Я загрузил dex2jar http://code.google.com/p/dex2jar/ и Java Decompiler JD-GUI http://java.decompiler.free.fr/?q=jdgui

Я получил свой собственный файл apk (подписанный, запечатанный и в Google Play), использовал dex2jar, чтобы превратить его в репозиторий jar.

Командной строки (пользователи Windows используют .bat, все остальные .sh):

d2j-dex2jar.bat -f MyAwesomeApp.apk 

Я перетащил вывод в JD-GUI и все файлы классов, появился исходный код. Меня немного смутило. Является ли мой код java / Android этим? Как ProGuard защищает мой apk, если он может быть декомпилирован и регенерирован так легко? Это не кажется запутанным вообще …

Заранее спасибо.

Solutions Collecting From Web of "Кажется, что декомпиляция Android Apk"

Обфускаторы обычно просто меняют классы, методы и имена полей на имена, которые не имеют значения. Итак, если у вас есть «ScoreCalculator.computeScore (Player p, Match m)», вы получите «A.zk (F f, R r)». Это похоже на то, что компилятор Uglify или Closure делает для javascript, за исключением того, что в javascript необходимо уменьшить длину источника.

Можно понять, что метод все равно, это сложнее.

Aslo, Java использует позднюю привязку (как DLL или SO-файлы). Таким образом, вызовы, выходящие за пределы вашего кода (например, java.util, java.lang и т. Д. Пакеты), не могут быть запутаны. Кроме того, если вашему коду необходимо принимать вызовы извне (типичный пример, зарегистрировать прослушиватель на кнопке), этот код не может быть запутан. То же самое происходит для DLL, где вы можете четко видеть название метода, который нужно вызывать вне внешней библиотеки DLL и вызывает другие DLL.

Тем не менее, отображение между определенным исходным кодом и скомпилированным кодом не обязательно одно к одному. Старые компиляторы C, используемые для создания того же кода для заданной директивы источника, поэтому декомпиляторы были очень эффективными. Затем компиляторы C добавили много оптимизаций к результату op-кода, и эти оптимизации сделали декомпилятор в основном неэффективным [1]

Java никогда не реализовывала (много) оптимизаций во время компиляции, потому что для запуска на разных платформах (включая различные устройства Android), Java решила применить серьезные оптимизации позднее во время выполнения на основе архитектурных и аппаратных свойств работающего устройства (Это то, что «HotSpot» в основном о [2] ).

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

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

Как показывают многие программные средства для взлома, обратная инженерия всегда возможна, даже с C или другими языками, даже на прошивке (подумайте о прошивках iPhone), потому что клиент, на котором работает ваш код, всегда ненадежен и всегда может быть подделан.

Если у вас очень критический код миссии, что-то стоит больших денег, чтобы кто-то другой мог украсть, я бы предложил запустить его на стороне сервера или каким-то образом проверить его на стороне сервера.

Я также могу добавить, что существует современная альтернатива этому маршруту APKTool-> dex2jar-> JD-GUI!

Просто попробуйте декомпилятор APK и DEX с открытым исходным кодом под названием Jadx: https://sourceforge.net/projects/jadx/files/. Здесь также есть онлайн-версия: http://www.javadecompilers.com/apk