原理
APK簽名的要點(diǎn)
a.所有的應(yīng)用程序都必須有數(shù)字證書 ,Android系統(tǒng)不會(huì)安裝一個(gè)沒有數(shù)字證書的應(yīng)用程序;
b.Android程序包使用的數(shù)字證書可以是自簽名的颖御,不需要一個(gè)權(quán)威的數(shù)字證書機(jī)構(gòu)簽名認(rèn)證末贾;
c.數(shù)字證書都是存在有效期的揩晴,Android只是在應(yīng)用程序安裝的時(shí)候才會(huì)檢查證書的有效期勋陪。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會(huì)影響程序的正常功能硫兰。
d.Android使用標(biāo)準(zhǔn)的java工具 Keytool 诅愚、Jarsigner 來生成數(shù)字證書,并給應(yīng)用程序包簽名劫映。
APK簽名的好處
a违孝、應(yīng)用程序升級(jí):如果想升級(jí)應(yīng)用程序,簽名證書要相同苏研,包名稱要相同等浊! b腮郊、應(yīng)用程序模塊化:Android 系統(tǒng)可以允許同一個(gè)證書簽名的多個(gè)應(yīng)用程序在一個(gè)進(jìn)程里運(yùn)行摹蘑,系統(tǒng)實(shí)際把他們作為一個(gè)單個(gè)的應(yīng)用程序,此時(shí)就可以把我們的應(yīng)用程序以模塊的方式進(jìn)行部署轧飞,而用戶可以獨(dú)立的升級(jí)其中的一個(gè)模塊衅鹿。
c、代碼或者數(shù)據(jù)共享:Android 提供了基于簽名的權(quán)限機(jī)制过咬,那么一個(gè)應(yīng)用程序就可以為另一個(gè)以相同證書簽名的應(yīng)用程序公開自己的功能大渤。以同一個(gè)證書對(duì)多個(gè)應(yīng)用程序進(jìn)行簽名,利用基于簽名的權(quán)限檢查掸绞,你就可以在應(yīng)用程序間以安全的方式共享代碼和數(shù)據(jù)了泵三。
APK重簽名原理
a、Android系統(tǒng)簽名主要有ROM簽名和應(yīng)用程序APK簽名兩種形式衔掸。ROM簽名是針對(duì)已經(jīng)生成的Android系統(tǒng)ROM包進(jìn)行簽名烫幕。應(yīng)用程序APK簽名是針對(duì)開發(fā)者開發(fā)的應(yīng)用程序APK進(jìn)行簽名。
b敞映、APK實(shí)際上是一個(gè)jar或者說是一個(gè)zip壓縮文件较曼,META-INF目錄下存放的是壓縮包中所有文件的簽名信息,用來保證apk包的完整性和系統(tǒng)的安全振愿。
c捷犹、重簽名:實(shí)際上就是刪除META-INF目錄(刪除已有簽名),使用自已數(shù)據(jù)證書再次重簽名冕末。
生成數(shù)字證書
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000 /*解釋: keytool是工具名稱萍歉,-genkey意味著執(zhí)行的是生成數(shù)字證書操作,-v表示將生成證書的詳細(xì)信息打印出來档桃,顯示在dos窗口中翠桦; -keystore debug.keystore 表示生成的數(shù)字證書的文件名為“ debug.keystore”; -alias androiddebugkey 表示證書的別名為“ androiddebugkey ”,可以與Keystore一樣销凑; -keyalg RSA 表示生成密鑰文件所采用的算法為RSA丛晌; -validity 10000 表示該數(shù)字證書的有效期為10000天,意味著10000天之后該證書將失效 **/
重簽名
jarsigner -verbose -keystore debug.keystore -storepass android -keypass android -signedjar Thinkdrivesigned.apk Thinkdrivetemp.apk androiddebugkey
/*解釋: jarsigner是Java的簽名工具
-verbose參數(shù)表示:顯示出簽名詳細(xì)信息
-keystore表示使用當(dāng)前目錄中的debug.keystore簽名證書文件斗幼。
-storepass 密鑰口令
-signedjar ThinkDrive_signed.apk表示簽名后生成的APK名稱澎蛛,
ThinkDrive_temp.apk 表示未簽名的APK,
androiddebugkey表示debug.keystore的別名
jarsigner -verbose -keystore /Users/longer/Desktop/work/project-space/fm820/keystore/fm820.keystore -signedjar /Users/longer/Desktop/fm820c3602.1.1.encrypteds.apk /Users/longer/Desktop/fm820c360_2.1.1.encrypted.apk android