什么是签名包校验?
签名包校验就是重新打包apk以后,签名会发生变化。原始apk安装到手机上可以正常打开,通过androidkiller重新打包成apk以后,无法打开。
使用到的apk:
链接:https://pan.baidu.com/s/1IOqySzBazEgqpejzIzFDDA
提取码:z6tt
--来自百度网盘超级会员V1的分享
如何破解java层签名包校验?
Step 1: 搜索关键字
一般来说定位方法是搜索以下关键字:
1. signatures (结果最多)
2. getPackageManager (结果较多)
3.getPackageInfo (结果较多)
4.killProcess (最少)
Step 2:插入print trace
通过比较结果,kill process最少,可以逐个查看逻辑,当然最简单的方法是插入print trace
new-instance v0, Ljava/lang/Exception;
const-string v1, "print trace"
invoke-direct {v0, v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
找到每个kill process所处的函数,在函数定义的.prologue后面添加如print trace代码,比较多,耐心的都添加上。
Step 3: 重新打包apk,在手机上运行查看apk日志
在手机上apk如约崩溃,ddms上打印的log,找到最后一个print trace, 可以看到, 最后调用killprocess的是shuqi.app.ShuqiApplication$3.handleToken.
Step 4: 分析该函数逻辑
从函数中我们看到了其他要搜索的内容,因此佐证保护逻辑一定在这个函数中。
invoke-virtual {v1}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
.invoke-virtual {v0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
invoke-virtual {v0, v1, v2}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo
iget-object v0, v0, Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;
smali中的判断主要有以下几种:
if-eq, if-ne,if-lt, if-ge,if-gt... 我就不一一解释了,基本看到了就知道啥意思,g是great, l是less
"if-eq vA, vB, :cond_" 如果vA等于vB则跳转到:cond_
"if-ne vA, vB, :cond_" 如果vA不等于vB则跳转到:cond_
"if-lt vA, vB, :cond_" 如果vA小于vB则跳转到:cond_
"if-ge vA, vB, :cond_" 如果vA大于等于vB则跳转到:cond_
"if-gt vA, vB, :cond_" 如果vA大于vB则跳转到:cond_
"if-le vA, vB, :cond_" 如果vA小于等于vB则跳转到:cond_
"if-eqz vA, :cond_" 如果vA等于0则跳转到:cond_
"if-nez vA, :cond_" 如果vA不等于0则跳转到:cond_
"if-ltz vA, :cond_" 如果vA小于0则跳转到:cond_
"if-gez vA, :cond_" 如果vA大于等于0则跳转到:cond_
"if-gtz vA, :cond_" 如果vA大于0则跳转到:cond_
"if-lez vA, :cond_" 如果vA小于等于0则跳转到:cond_
作者:WilburLi
链接:https://www.jianshu.com/p/2f2fa49c1f53
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
killProcess前面有一个判断,现在v1中写了一个值,这个值就是签名的值,比较v1 与v0,如果相同跳到cond_0. 如果不同就继续执行到killprocess。
Step 5:破解逻辑
基于Step 4的分析,只要将eq改成ne就行,这样就不会跳到kill了,因为我们肯定会改变签名。
Step 6: 大功告成,感谢!
重新打包,安装,程序并没有因为重签名崩溃。完结,撒花!