Ответ 1
Я опишу, как вы можете эффективно защищать от модификации и переупаковки, а не как самостоятельно защитить свои активы, хотя в конечном итоге вы можете применить один и тот же метод для их шифрования. Это несовершенно, но вы можете сделать изменение значительно сложнее.
Вы подписываете приложение с сертификатом. Несмотря на то, что они могут удалить ваши, никто не может выдавать один и тот же сертификат, когда он будет вместе. Поэтому вы можете проверить подпись приложения во время выполнения, чтобы убедиться, что вы ожидаете.
Вот какой дешевый и неприятный код для этого:
PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNATURES );
if ( info.signatures[ 0 ].toCharsString().equals( YOUR_SIGNATURE ) )
{
//signature is OK
}
где YOUR_SIGNATURE является константой, полученной при запуске этого кода в подписанном приложении.
Теперь есть две оставшиеся проблемы, о которых вы уже намекали:
-
как вы можете остановить кого-то, просто изменяя константу в исходном коде, чтобы соответствовать их сертификату, затем переупаковывать и повторно подписывать приложение?
-
как вы можете остановить кого-то, находящего метод проверки и удалив его?
Отвечайте на оба: вы не можете, не совсем, но вы можете сделать довольно хорошую работу путем обфускации. Бесплатный Proguard, но более полезный коммерческий Dexguard, - это инструменты для этого. Вы можете столкнуться с текущей стоимостью 350 евро; с другой стороны, я попытался перепроектировать приложения, которые защищены таким образом, и если ставки не были очень высокими, это не стоит проблем.
В какой-то степени вы также можете сделать обфускацию для (1); имеют подпись "константа", собранная во время выполнения через сложный программный метод, который затрудняет поиск и замену.
(2) - действительно проблема разработки программного обеспечения; делая его достаточно сложным или раздражающим, чтобы удалить чек. Обфускация просто затрудняет поиск в первую очередь.
В качестве еще одного примечания вы можете посмотреть, действительно ли такие вещи, как Лицензирование Google, предоставляют вам любую защиту в этой области. У меня нет никакого опыта, хотя, поэтому вы сами по себе.