####
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加載流程有一個深刻的認識啊!
#####
