Подтвердить что ты не робот

Защита постоянной строки от обратного проектирования

У меня есть приложение для Android, которое имеет жестко закодированные (статические строковые константы) учетные данные (пользователь/пароль) для отправки электронной почты через SMTP.

Проблема заключается в том, что файл .dex в .apk может быть легко реконструирован, и каждый может видеть мой пароль.

Есть ли способ защитить эти учетные данные, в то время как я все еще буду использовать их в своих классах?

4b9b3361

Ответ 1

Мы можем использовать "jni-модуль" для сохранения "чувствительных жестко закодированных строк" ​​в приложении. когда мы пытаемся перепроектировать файл APK, мы получаем папки lib и .so в соответствующих папках процессов. который не может расшифровывать.

Ответ 2

Я думаю, вы можете попробовать обфускатор кода, но на самом деле это не сделает ваш пароль на 100% безопасным, и я не знаю, насколько он совместим с компилятором android. Почему бы не использовать защищенную веб-аутентификацию, такую ​​как Google?

Ответ 3

Вы можете сохранить свою строку, запутанную AES.

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

Ответ 4

  • Хеширование невозможно, так как это не два пути.
  • Любое шифрование, такое как AES, DES, blowfish, etch, не является жизнеспособным решением, так как вы должны включить часть расшифровки в свое приложение и которая может быть декомпилирована с помощью комбинации apktool, dex2jar и JD (java decompiler), которая очень мощная комбо при декомпиляции любого apk.
  • Четкие обфускаторы кода не делают ничего, кроме как сделать жизнь немного сложнее для декомпиляционного парня, который в конечном итоге все равно получит его.

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

Ответ 6

Если у вас нет средств для веб-авторизации, вам нужно будет включить стороннее расшифрование с вашим приложением.

Это то, что вы могли бы попробовать 1) Напишите автономную программу только для создания хэша паролей один раз. (Эта программа не должна быть частью вашего приложения). Запишите хэш, который был сгенерирован. http://www.mindrot.org/projects/jBCrypt/

 // Hash a password for the first time.
    String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));

2) Сохраните этот хэш пароля в качестве константы String в APK.

3) Затем каждый раз, когда вам нужно проверить пароль, сравните с хэшированным паролем, используя bcrypt.

// Check that an unencrypted password matches one that has
// previously been hashed
if (BCrypt.checkpw(candidate, hashed))
    System.out.println("It matches");
else
    System.out.println("It does not match");

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

Прочтите эту статью для подробностей и безопасности bcrypt.
http://codahale.com/how-to-safely-store-a-password/

Опять же, используйте это, только если у вас нет средств для веб-аутентификации.

Ответ 7

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

Ответ 8

Один способ, которым вы можете на 100% защитить свою жестко запрограммированную строку. Во-первых, не используйте pro-guard use allatori Ссылка: http://www.allatori.com/

И во-вторых, не принимайте строго жестко закодированную строку в любой переменной, просто используйте эту строку следующим образом:

if(var=="abc"){}

"abc" отображается строка с жесткой кодировкой.

Allatori полностью обфускает всю строку, которая используется в коде, как указано выше.

Надеюсь, это поможет вам.