Android防破解重签名方案研究
最近发现有人破解我们的应用,于是研究了一下如何在应用被破解以后,让应用退出的简单实现方案。
很多应用可能会选择加固的方式来实现,但是在海外Google Play上是不允许加固的,因此需要其他策略。
应用被破解以后一般会被修改然后重签名,所以可以在签名上做一些针对性。
这里的方案是通过NDK的方式来把验证过程放到so包里面进行拦截,做了一些特殊的处理,因为应用的这个so是必须依赖的,否则应用里面很多功能都是无法使用的,因此将验证过程进行整合。
static const char *applicationClassPath = "com/demo/zhupeng/app/DemoApplication";
// 应用签名
static const char *appSign = "Java端获取的签名";
// 验证签名是否被修改
jint verifySignature(JavaVM *vm) {
JNIEnv *env;
if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6) != JNI_OK) {
return JNI_ERR;
}
jclass contextClass = env->FindClass("android/content/Context");
jmethodID getPackageManagerMethodID = env->GetMethodID(contextClass, "getPackageManager",
"()Landroid/content/pm/PackageManager;");
jmethodID getPackageNameMethodID = env-></