安卓apk簽名及相關工具(keytool纪挎、jarsigner 、zipalign)的使用

keytool

keytool工具 是一個Java 數(shù)據(jù)證書的管理工具跟匆,它是JDK自帶的一個在命令行下執(zhí)行的程序异袄。

常用命令:

genkey 生成密鑰對(公鑰和私鑰)
-v 顯示密鑰庫中的證書詳細信息
-alias <alias_name> 秘鑰的別名,只有前8個字符有效
-keyalg <alg> 生成秘鑰的算法玛臂,支持DSA和RSA
-keysize <size> 生成秘鑰的位數(shù)隙轻,默認1024位,建議使用2048以上的位數(shù)
-dname <name> 發(fā)布者名稱垢揩,如未指定玖绿,在使用jarsigner簽名時會提示輸入
-keypass <password> 秘鑰的密碼
-validity <valDays> 密鑰的有效期是多少天
-storepass <password> keystore的密碼

如下是使用Keytool生成keystore文件,使用RSA算法叁巨,秘鑰長度為4096位

    keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000 
運行結果

生成的過程中會讓我們填寫一些信息斑匪,如密碼、城市等锋勺,生成的keystore文件默認在當前目錄下蚀瘸。


jarsigner

Android系統(tǒng)中的簽名算法使用MD5作為哈希算法并使用RSA進行加密和解密,計算apk的哈希算法使用SHA-1

常用命令:

-keystore <keystore-name>.keystore keystore路徑
-signedjar <signed-apk-name>.apk 簽名后apk文件輸出路徑
-verbose 輸出詳細信息
-sigalg <算法> 簽名算法
-digestalg <算法> 處理apk使用的哈希算法
-verify 驗證已簽名的jar文件

我們通過工具導出一個未經(jīng)過簽名的apk文件庶橱,為其簽名

  • 通過Eclipse:
    右鍵單擊項目名稱贮勃,選擇AndroidTools→Export Unsinged Application Package

  • 通過AndroidStudio
    在找到項目右側的Gradle按鈕,點擊打開
    在打開的窗口中找到項目名對應的Gradle,依次進入Tasks→build苏章,點擊assemble進行生成
    生成后的apk文件在moudle的build/outputs/apk目錄下寂嘉,文件名包含unsigned的apk文件即是生成的未簽名apk文件

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore  -signedjar my_application_signed.apk my_application_unsigned.apk my_alias
簽名結果

如圖所示,雖然我們簽名成功了枫绅。但是會提示警告:

警告:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2045-10-02) or after any future revocation date.

大概意思是說泉孩,未提供 -tsa 或 -tsacert, 此 jar 沒有時間戳。如果沒有時間戳, 則在簽名者證書的到期或以后的任何撤銷日期之后并淋,用戶可能無法驗證此jar寓搬。

解決此問題的方法就是在命令后面添加時間戳網(wǎng)址,完整命令如下:

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore  -signedjar my_application_signed.apk my_application_unsigned.apk my_alias -tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp 

網(wǎng)上大部分讓加的-tsa https://timestamp.geotrust.com/tsa 會提示無法對 jar 進行簽名: 時間戳頒發(fā)機構沒有響應县耽。
原因是這個時間戳網(wǎng)址已經(jīng)過期了

我們可以通過如下命令進行驗證簽名是否成功:

jarsigner -verify my_application_signed.apk

如果你使用的是一個簽過名的apk文件句喷,執(zhí)行重簽名會報如下錯誤:

jarsigner: 無法對 jar 進行簽名: java.util.zip.ZipException: invalid entry compressed size
如果有重簽名(與之前簽名不同)的需求,可以把要重簽名的apk后綴改成zip兔毙,打開后刪除里面的META-INF目錄唾琼,然后重新改成apk后綴,再次進行簽名


zipalign

簽名之后瞒御,我們還可以使用zipalign工具對安裝包進行對齊優(yōu)化父叙,這樣能夠讓應用程序和整個系統(tǒng)運行得更快

開發(fā)工具進行zipalign非常方便:

  • Eclipse中的ADT插件(0.9.3及以上版本)可以自動zipalign對齊:
    右鍵單擊項目名稱,選擇AndroidTools→Export Signed Application Package

  • Android studio在build.gradle文件中加入zipAlignEnabled true 開啟zipalign對齊:

    buildTypes {
        release {
            ...
            zipAlignEnabled true
            ...
        }
    }
  • 手動zipalign對齊:
    Android 1.6及以后的SDK的 build-tools/版本/ 文件夾下都有zipalign工具肴裙。例如我的路徑是:

C:\Users\hanpeng\AppData\Local\Android\Sdk\build-tools\23.0.1\zipalign.exe

在簽名后使用以下命令進行zipalign對齊:

zipalign -v 4 my_application_signed.apk my_application_signed_zipaligned.apk

對齊驗證:

zipalign -c -v 4 my_application_signed_zipaligned.apk
zipalign對齊結果

參考:
《Android安全機制解析與應用實踐》 第八章 Android應用安全實用解決方案

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趾唱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜻懦,更是在濱河造成了極大的恐慌甜癞,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宛乃,死亡現(xiàn)場離奇詭異悠咱,居然都是意外死亡,警方通過查閱死者的電腦和手機征炼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門析既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谆奥,你說我怎么就攤上這事眼坏。” “怎么了酸些?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵宰译,是天一觀的道長。 經(jīng)常有香客問我魄懂,道長沿侈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任市栗,我火速辦了婚禮缀拭,結果婚禮上,老公的妹妹穿的比我還像新娘填帽。我一直安慰自己智厌,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布盲赊。 她就那樣靜靜地躺著铣鹏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哀蘑。 梳的紋絲不亂的頭發(fā)上诚卸,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音绘迁,去河邊找鬼合溺。 笑死,一個胖子當著我的面吹牛缀台,可吹牛的內(nèi)容都是我干的棠赛。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睛约!你這毒婦竟也來了鼎俘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤辩涝,失蹤者是張志新(化名)和其女友劉穎贸伐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怔揩,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡捉邢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了商膊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伏伐。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晕拆,靈堂內(nèi)的尸體忽然破棺而出藐翎,到底是詐尸還是另有隱情,我是刑警寧澤潦匈,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布阱高,位于F島的核電站,受9級特大地震影響茬缩,放射性物質(zhì)發(fā)生泄漏赤惊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一凰锡、第九天 我趴在偏房一處隱蔽的房頂上張望未舟。 院中可真熱鬧,春花似錦掂为、人聲如沸裕膀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昼扛。三九已至,卻和暖如春欲诺,著一層夾襖步出監(jiān)牢的瞬間抄谐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工扰法, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛹含,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓塞颁,卻偏偏與公主長得像浦箱,于是被迫代替她去往敵國和親吸耿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 最近突然有個需求酷窥,將很久前的某個版本重新發(fā)布到線上咽安,經(jīng)過長時間的迭代,gradle plugin的變遷以及插件化和...
    sheepm閱讀 20,686評論 3 14
  • 概述 這個玩意簡單說起來很簡單竖幔,詳細描述起來很復雜板乙,復雜在什么地方呢是偷,首先有一塊陌生的知識點拳氢,包括但不限于證書,數(shù)...
    千山萬水迷了鹿閱讀 7,427評論 3 18
  • 為了保證每個應用程序開發(fā)商合法ID蛋铆,防止部分開放商可能通過使用相同的Package Name來混淆替換已經(jīng)安裝的程...
    Sunny君907閱讀 363評論 0 1
  • 關于作者: 李濤馋评,騰訊Android工程師,14年加入騰訊SNG增值產(chǎn)品部刺啦,期間主要負責手Q動漫留特、企鵝電競等項目的...
    稻草人_3e17閱讀 3,601評論 0 10
  • 參考什么是 Android 簽名機制,Bluebox Security 發(fā)現(xiàn)的漏洞有何威脅玛瘸? Android應用程...
    合肥黑閱讀 2,067評論 1 16