關於keytool和jarsigner工具簽名的使用小結


在我們日常Android應用開發中,我們都要對我們開發的apk做簽名處理,或者加固,增強我們apk的安全性,防止被逆向反編譯,在apk簽名這塊,我們一般采用JDK自動工具來簽名,下面就對相關工具做個簡要說明和小結。

首先、我們需要先在電腦上安裝JDK和環境變量配置:

JDK下載地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,在一系列的安裝后,確保可以使用keytool 和 jarsigner兩個工具能有使用,例如具體位置如下:

1.制作簽名工具

C:\>where keytool

C:\Program Files\Java\jdk1.7.0_45\bin\keytool.exe

2.進行簽名工具

C:\>where jarsigner

C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe

 

其次,簽名分兩個部分,即生成簽名簽名密鑰和對apk做簽名:

第一步:生成私鑰,使用工具 - keytool:

Keytool 選項描述

-genkey產生一個鍵值對(公鑰和私鑰)

-v允許動作輸出

-alias<alias_name>鍵的別名。只有前八位字符有效。

-keyalg產生鍵的加密算法。支持DSA和RSA。

-keysize產生鍵的長度。如果不支持,keytool用默認值1024 bits.通常我們用2048 bits 或更長的key。

-dname專有名稱,描述誰創建的密鑰。該值被用作自簽名證書的頒發者和主題字段。注意你可以不在命令行指定。如果沒有指定keytool會提示你(CN, OU, and so on)。

-keypass鍵的密碼。

主要為了安全起見,如果沒提供,keytool會提示你輸入。

-validity鍵的有效期,單位:天

Note:A value of 10000 or greater is recommended.

-keystore.keystore用於存儲私鑰的文件。

-storepass私鑰存儲文件的密碼。

主要為了安全起見,如果沒提供,keytool會提示你輸入。這個密碼不會存儲在你的shell歷史記錄中。

keytool -genkey -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA  -validity 20000  -keystore MyDevel.keystore -alias devel   -keypass MyDevel -storepass MyDevel

(圖片來源網絡)

第二步:用私鑰進行簽名 - jarsigner:

Jarsigner 選項描述

-keystore.keystore包含你私鑰的存儲文件

-verbose顯示輸出動作。

-sigalg簽名算法,用 SHA1withRSA.

-digestalg消息摘要算法,用 SHA1.

-storepass存儲文件的密碼。

主要為了安全起見,如果沒提供,jarsigner會提示你輸入。這個密碼不會存儲在你的shell歷史記錄中。

-keypass私鑰的密碼。

主要為了安全起見,如果沒提供,jarsigner會提示你輸入。這個密碼不會存儲在你的shell歷史記錄中。

jarsigner  -verbose -sigalg SHA1withDSA -digestalg SHA1  -keystore myDevel.keystore -storepass MyDevel test.apk devel

(圖片來源網絡)

至此,我們就可以把重簽名后的apk安裝包安裝到模擬器或手機上面使用,另外,如果是對已有apk做過逆向分析或反編譯修改過圖標、代碼的,再采用回編譯后我們仍然要用上面的工具對生成的新apk做重簽名,這樣才能安裝到手機,因為通過apktool回編譯后的apk已經破壞了原有簽名,即不帶簽名,那么這個時候就不能安裝到真機或模擬器,我們只能通過keytool和jarsigner工具來重簽名,對於逆向反編譯感興趣的朋友,可以參考51CTO的這門課程:Android逆向反編譯代碼注入 - 邁入安卓APP逆向安全大門,學習更多相關知識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM