一、什么是签名校验
签名验证,就是在APP中写入自己私钥的hash值,和一个获取当前签名中的私钥hash值的函数两个值相一致,那么就说明APP没有被改动允许APP运行。 如果两值不一致那么说明APP是被二次打包的,APP就自我销毁进程。 签名验证可以在两个地方做,一个是在MainActivity.java的OnCreate函数中做,一个是在原生代码文件的JNI_OnLoad函数中做。
二、验证是否是签名校验
用Android killer随意改下smail代码然后重新打包,发现APP闪退。
三、Jadx查看JAVA代码/IDA查看so
签名校验一般都是在MainActivity.java的OnCreate函数中做,或者是在原生代码文件的JNI_OnLoad函数中做,首先查看OnCreate,里面有个qian,跟进去看看。
qian里面就是查看APP哈希值是否改变,这是第一个地方。
这里调用了一个bug,而bug写在了so里面,有很大嫌疑,ida看见这个so。
IDA查看bug这个函数采用的是静态注册,里面调用了一个getSignHashCode,跟进去看看。
四、过签名校验
首先处理So文件,把exit换成nop,然后到处替换原来的so。
然后修改smail代码,把调用qian的地方给注释掉然后重新打包。
重打包后签名校验已经过掉了。
|