Как избежать обратного проектирования файла ресурсов ресурсов папок APK?

Я разрабатываю приложение для Android, в этой папке с assets приложения содержится некоторый пароль и некоторая информация об ошибках. Я хочу, чтобы хакер не получал доступ к any resources, assets or source code from the APK file , главным образом, к assets resources .

Как я могу достичь этой цели?

Я нашел и подумал о следующих решениях. Пожалуйста, внесите меня в правильность и дайте свои предложения по этому поводу.

 1) Put every data or files in assets folder in encrypted way. 

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

 2) To secure resources, don't include all important resources in the assets folder with APK. Download these resources at the time of application first start up. 

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

 3) obfuscation would not protect assets folder data so we can not use that. 

Просьба представить свои предложения и материалы по этому же вопросу.

Любая помощь будет оценена по достоинству.

С уважением

Обратная инженерия на Android ДЕЙСТВИТЕЛЬНО проста! Вы не можете этого предотвратить. Вы не должны хранить конфиденциальную информацию в своем APK, потому что кто-то может их легко найти.

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

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

EDIT Если вы хотите поместить в свой код симметричный ключ шифрования, не устанавливайте его так:

 String myKey = "myEncryptionKey"; byte[] key = myKey.getBytes(); 

Потому что обратный инженер может перечислить все строки в вашем apk с помощью одной команды … Поэтому используйте что-то вроде:

 StringBuilder sb = new StringBuilder(); sb.append(m); sb.append(y); ... byte[] key = sb.toString().getBytes(); 

или

 byte[] key = Base64.decode("esfas09f8as90f8").getBytes(); 

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

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

Существует еще один инструмент под названием DexGuard, который может шифровать строки. Однако это еще не доказанная защита и только замедлит атакующего.

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

Если вы хотите узнать, насколько это просто, ознакомьтесь со следующими инструментами:

https://code.google.com/p/dex2jar/

&

http://jd.benow.ca/