這篇博客主要是講如何對(duì)apk應(yīng)用進(jìn)行加固、對(duì)齊和簽名的,會(huì)有詳細(xì)的步驟逐一介紹
前言
隨著各大加固工具都開始逐一收費(fèi)后,個(gè)人開發(fā)中或者中小型企業(yè)如何對(duì)應(yīng)用進(jìn)行加固就成了一個(gè)問題。以前我常用的是360加固助手,雖然每天限制一定的免費(fèi)次數(shù),但起碼能用。
可是最近它也提示我要強(qiáng)制更新,更新后,我要去設(shè)置簽名,就變成了這樣子:
結(jié)果我的測(cè)試,360加固工具現(xiàn)在雖然還能免費(fèi)給你加固,但是加固后,你原來apk的簽名就會(huì)丟失,也就是你要重新簽名了。下面就來看下如何解決這個(gè)問題
加固
加固不用說,我這邊用的還是360加固助手,
360加固官網(wǎng)
主界面如下:
點(diǎn)擊“添加應(yīng)用”把你的apk加入進(jìn)來,或者直接拖進(jìn)來,就可以進(jìn)行加固操作,完成后我們就得到了一個(gè)被剝奪了簽名但是已經(jīng)加固了的apk
字節(jié)對(duì)齊
字節(jié)對(duì)齊的好處是幫助操作系統(tǒng)更高效率的根據(jù)請(qǐng)求索引資源,降低內(nèi)存消耗。
Android SDK自帶字節(jié)對(duì)齊工具zipalign,二次簽名前,最好先進(jìn)行字節(jié)對(duì)齊操作(一般為4字節(jié)對(duì)齊)。雖然Android Studio打包的apk是默認(rèn)經(jīng)過字節(jié)對(duì)齊的,但是由于經(jīng)歷過應(yīng)用加固步驟,不能保證該應(yīng)用中的數(shù)據(jù)還處于對(duì)齊狀態(tài),以防萬一,再進(jìn)行一次字節(jié)對(duì)齊操作。
第一步
要進(jìn)行字節(jié)對(duì)齊,首先修改剛剛加固了的apk文件,把它的的后綴名為 .zip(其它壓縮格式也可以,主要是為了用壓縮軟件打開該文件),修改完成后打開該文件,刪除下圖中紅框選中的“META-INF”文件夾(該文件夾經(jīng)過應(yīng)用加固后,簽名信息已經(jīng)被刪了,多了一些雜七雜八的文件,沒什么用。如果不刪除該文件夾,后續(xù)二次簽名就無法成功);
刪除成功后,將該文件的后綴名重新改為 .apk;
第二步
將該apk文件復(fù)制到zipalign工具所在目錄
該工具位于sdk\build-tools\build版本目錄下
一般選擇你項(xiàng)目中使用到的版本的目錄即可
我這邊用的是30.0.3
上圖所示,紅框中的zipalign.exe即為字節(jié)對(duì)齊工具,ziptest.apk就是需要對(duì)齊的apk文件
第三步
在當(dāng)前目錄的地址欄中輸入cmd,回車
進(jìn)入到命令提示窗口
輸入zipalign.exe -v -p 4 input.apk output.apk
(命令中的input.apk為需要對(duì)齊的apk文件名,output.apk為對(duì)齊完成后輸出的apk文件名)
中間省略一大段運(yùn)行中輸出的代碼…
如上圖所示,運(yùn)行結(jié)束,出現(xiàn)紅框中的代碼,表示字節(jié)對(duì)齊成功,同時(shí)可以在目錄中看到多了個(gè)字節(jié)對(duì)齊成功后的apk文件,如下圖所示:
這樣,對(duì)齊就完成了
我們也可以通過命令驗(yàn)證下apk是否對(duì)齊
還是把要驗(yàn)證是否對(duì)齊的apk放到這個(gè)目錄下,執(zhí)行命令:
zipalign -c -v 4 apk名字
比如驗(yàn)證剛剛沒有對(duì)齊的ziptest.apk
zipalign -c -v 4 ziptest.apk
輸出結(jié)果為succesful就是代表對(duì)齊
FAILED就代表沒有對(duì)齊
得到結(jié)果如下:
二次簽名
完成了字節(jié)對(duì)齊,就要對(duì)apk重新進(jìn)行簽名了
簽名工具SDK也是自帶的,apksigner。該工具位于字節(jié)對(duì)齊工具同級(jí)目錄lib的下一級(jí),
如下圖所示:
接下來要做的就是把我們對(duì)齊的apk和簽名文件jks放入目錄下
接著,在該路徑下打開cmd窗口,輸入命令:
java -jar apksigner.jar sign --ks key.jks --ks-key-alias releasekey output.apk
key.jks為簽名文件,releasekey為簽名文件的別名,output.apk為上圖紅框2所示的apk文件。
例如下圖所示:
命令中的簽名文件別名由于隱私原因,就隱藏了,大家替換成自己簽名文件的別名即可。
如果命令行輸入沒有任何問題,會(huì)在下方顯示輸入Keystore密碼的指令,如上圖最后一行所示Keystore password for signer #1: (這里需要注意:輸入密碼的時(shí)候命令提示窗口是不會(huì)有任何字符顯示的,估計(jì)是為了隱私安全,輸入完成后直接Enter就行了)。
簽名成功,在命令提示窗口不會(huì)有任何提示;反之則有錯(cuò)誤提示。只需查看目錄中的apk文件修改日期是否改變,例如下圖所示:
時(shí)間較之前最初的,變成簽名命令執(zhí)行成功后的時(shí)間。想要確保簽名成功,也可輸入下述命令查看:
java -jar apksigner.jar verify -v output.apk
其中的output.apk為簽名文件的文件名,簽名成功結(jié)果如下圖所示:
至此,從加固到二次簽名整一個(gè)流程就結(jié)束了。
順便推薦一個(gè),愛加密的重簽名工具,實(shí)現(xiàn)原理其實(shí)就是上面的。
這個(gè)工具可以避免手動(dòng)輸入上面哪些命令文章來源:http://www.zghlxwxcb.cn/news/detail-799108.html
不過我自己試了下,還是有問題,就是別名那塊始終出不來
反正如果不能用這個(gè)工具,就按照我上面的步驟來做也是一樣可以的文章來源地址http://www.zghlxwxcb.cn/news/detail-799108.html
到了這里,關(guān)于()Android apk應(yīng)用加固、字節(jié)對(duì)齊、二次簽名全流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!