Разбор андроида apk?

Возможный дубликат:
Android: Получение исходного кода из файла APK

Возможно ли, чтобы кто-то декомпилировал мой файл apk android и посмотрел общедоступные переменные или константы, объявленные в моих пакетах?

Мой общий ключ, который я определил как открытая статическая константа, будет затем раскрыт...

Ответ 1

Когда вы деобфусите код (здесь видеоурок, который может дать представление: Как читать обфускационный код), вы сможете увидеть все жестко закодированные значения, такие как

private String key = "Au8aujEWS(jol#9jSd9";

Кроме того, они не будут видеть имена переменных:

private String a = "Au8aujEWS(jol#9jSd9";

Используя такие инструменты, как Sunny, упомянутый, вы сможете получить весь код рядом с исходным состоянием.

Я приведу пример; Если у вас есть следующий исходный код:

public class MainActivity extends Activity { 
    private String key = "Au8aujEWS(jol#9jSd9";

    public void onCreate(Bundle savedInstance) {
        //Some code here
    }
}

public class OtherActivity extends Activity { ... }

После компиляции и декомпиляции обратно в java-код он будет выглядеть примерно так:

public class A extends B {
    private String a = "Au8aujEWS(jol#9jSd9";

    public void a (C b) {
        //Some code here
    }
}
public class D extends B { ... }

и с помощью догадок и инструменты рефакторинга, вы будете иметь возможность deobfuscate код, поэтому достаточно самоотверженность и трудолюбие людей смогут увидеть весь код.


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

Ответ 2

Да, можно декомпилировать apk.

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

Вы можете попробовать такие инструменты, как

Источник: http://geeknizer.com/decompile-reverse-engineer-android-apk/

ОБНОВЛЕНИЕ 1

Вот еще 2 варианта для вас:

предложенный @AndrewRukin

ОБНОВЛЕНИЕ 2

Еще один инструмент: jadx

Ответ 3

Да, Android APK можно легко декомпилировать. Публичные переменные, константы и их значения можно увидеть при декомпиляции, даже если код запутан.

При запутывании кода имена переменных переименовываются. Значение ваших переменных остается неизменным. Обфускация отличается от шифрования. Таким образом, ваш код не зашифровывается при запутывании вашего кода.

Пример нормального кода:

String str = "This is a string.";

Пример обфускации кода:

String a = "This is a string.";

Как вы можете видеть выше, имя переменной было переименовано из "str" в "a", но его значение остается неизменным. Обфускация работает, переименовывая имена переменных в короткие нелогичные имена, уменьшая размер файла и делая код более понятным.

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

Ответ 4

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

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

Кроме того, не забудьте сделать жизнь хакеров более сложной, используя упомянутые инструменты обфускации, такие как ProGuard: http://developer.android.com/tools/help/proguard.html.