####
shuqi.apk
mumu模拟器
###
正常的shuqi.apk,是在模拟器可以正常运行的,
###
首先第一步使用apktool.sh d shuqi.apk
反编译出来这个apk,
###
然后再次打包这个apk,
使用命令,apktool.sh b shuqi
会在产生一个dist文件夹,里面有一个shuqi.apk
####
进入这个dist文件夹,cd 进入,
开始生成签名,
使用命令:keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
输入密码123456
签名就生成了
###
使用生成的签名文件,对apk进行签名,
使用命令:jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias
会生成一个签名的apk
####
在模拟器再次安装这个apk
发现安装失败了,
分析
第一步,因为你启动的时候就退出了,所以应该是在启动的某一个阶段, 做了签名的校验,所以你要找到是在启动的哪一个阶段做的校验,
因为app启动是会去读取,Androidmanifest.xml的,一个apk只有一个这个文件,里面有一个,application,这个加载完,app的生命周期就启动了,
所以应该是还没有加载完这个application,就退出了,
第二步,所以我们去找application,找到Android.name的地方,这个就是app启动的入口,
大概率是会在这个启动的入口文件里,做一些事情,然后校验了签名的,我们要做的就是找到这个校验 签名的地方,
这个地方的文件是不会混淆的,因为混淆了app就找不到了,
###
这个就是对签名进行了校验,
开发签名了之后是记录到代码里面的, 每次app启动,会读取这个签名,如果不对就会有问题,
我们下一步要找到这个签名的地方在哪里,
###
使用jadx打开shuqi.apk
是启动的时候就退出了,可以猜测是启动的时候做了校验,
找到启动application页面,
找到书旗的application,
可以通过右键的方式,找到这个函数的具体位置,
我们猜测是做了校验,就要重点关注if,check,verify,这样的词,
就是这个地方做了校验了,我们要做的就是把这一句注释掉,然后重新打包,
###
我们找到对应的路径,修改smali文件,
把对应的四行删除,然后再去打包,
###
重新签名,打包,
注意把之前生成的build和dist删除掉,
首先重新打包
使用命令,apktool.sh b shuqi
会在产生一个dist文件夹,里面有一个shuqi.apk
####
进入这个dist文件夹,cd 进入,
开始生成签名,
使用命令:
输入密码123456
签名就生成了
###
使用生成的签名文件,对apk进行签名,
使用命令:jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias
会生成一个签名的apk
###
再次安装这个签名之后的apk,
哈哈,就可以正常安装了,绕过了他的签名校验!!!!
####
为什么能够绕过这个签名,
本质还是对安卓系统,对app加载流程有一个深刻的认识啊!
#####