1、Java层验证获取签名信息和验证的方法都写在android的java层。这种保护方法保护的意义并不大,因为反编译出源码后通过关键字搜索很快就能够找到验证的代码块,稍微一修改这验证保护就完全无效了。APK加密保护方法之运行时验证目前市场上使用此方法验证的应用:神庙逃亡2,qq电池管家,微信,360手机管家等
2、服务器验证在android的java层获取签名信息,上传服务器在服务端进行签名然后返回验证结果。这种保护还不如在纯java层验证有用,一旦没有网络验证保护就无效了。用android方法获取的签名信息用java方法也可以获取,验证存放在服务器上也是为了把保护正确的签名信息值,但是保护的意义其实没有任何作用。同样破解后全局搜索关键字然后伪造一个正确的签名信息就可以完美破解了。APK加密保护方法之运行时验证目前市场上使用此方法验证的应用:地铁跑酷等
3、NDK技术底层获取签名和验证通过把Context,Activity,PackageManager,PackageInfo四个对象中的一个作为参数参入底层,在底层获取签名信息并验证。因为获取和验证的方法都封闭在更安全的so库里面,能够起到一定意义上的保护作用。不过通过java层的hook技术一样可以把这种保护完美破解。但是相比于前两种,此保护的意义和价值就更大了。APK加密保护方法之运行时验证目前市场上使用此方法验证的应用:植物大战僵尸2等