1. 咱們平時用eclipse或Android Studio開發獲得的android應用程序,其實已經添加有默認的debug簽名了。 html
Android系統要求全部的程序通過數字簽名才能安裝,若是沒有可用的數字簽名,系統將不準安裝運行此程序,不論是模擬器仍是真實手機。所以,在設備或者是模擬器上運行調試程序以前,必須爲應用程序設置數字簽名。Android系統僅僅會在安裝的時候測試簽名證書的有效期,若是應用程序的簽名是在安裝以後纔到期,那麼應用程序仍然能夠正常啓用。 java
Android經過數字簽名來 標識應用程序的做者和在應用程序之間創建信任關係,不是用來決定用戶可不能夠安裝該應用程序。android的這個簽名由應用程序的做者完成,並不須要權 威的數字證書籤名機構認證,他只是用來讓應用程序包自我認證的。Android系統默認自動給應用程序簽名,ADT會自動使用debug密鑰爲應用程序簽名,debug密鑰是一個名爲debug.keystore的文件,位置位於電腦的:android
/Documents and Settings/liuhua/.Android/debug.keystore,其中的liuhua是電腦的用戶名。算法
2. 因爲Android應用程序資源的組織方式能夠達到18個維度,所以就要求Android資源管理框架可以快速定位最匹配設備當前配置信息的資源來展示在UI上,不然的話,就會影響用戶體驗。爲了支持Android資源管理框架快速定位最匹配資源,Android資源打包工具aapt在編譯和打包資源的過程當中,會執行如下兩個額外的操做:網絡
1). 賦予每個非assets資源一個ID值,這些ID值以常量的形式定義在一個R.java文件中。框架
2). 生成一個resources.arsc文件,用來描述那些具備ID值的資源的配置信息,它的內容就至關因而一個資源索引表。eclipse
有了資源ID以及資源索引表以後,Android資源管理框架就能夠迅速將根據設備當前配置信息來定位最匹配的資源了。函數
aapt即Android Asset Packaging Tool,在SDK的build-tools目錄下。該工具能夠查看,建立, 更新ZIP格式的文檔附件(zip, jar, apk)。也可將資源文件編譯成二進制文件,儘管你可能沒有直接使用過aapt工具,可是build scripts和IDE插件會使用這個工具打包apk文件構成一個Android 應用程序。在使用aapt以前須要在環境變量裏面配置SDK-tools路徑,或者是路徑+aapt的方式進入aapt。工具
3.簽名機制的原理
3.1基本知識
消息摘要 -Message Digest
簡稱摘要,請看英文翻譯,是摘要,不是簽名,網上幾乎全部APK簽名分析的文章都混淆了這兩個概念。簡單的說消息摘要就是在消息數據上,執行一個單向的Hash函數,生成一個固定長度的Hash值,這個Hash值便是消息摘要也稱爲數字指紋,消息摘要有如下特色:
1. 經過摘要沒法推算得出消息自己
2. 若是修改了消息,那麼摘要必定會變化(實際上,因爲長明文生成短摘要的Hash必然會產生碰撞),因此這句話並不許確,咱們能夠改成:很難找到一種模式,修改了消息,而它的摘要不會變化(抗衝突性)。
消息摘要的這種特性,很適合來驗證數據的完整性,好比在網絡傳輸過程當中下載一個大文件BigFile,咱們會同時從網絡下載BigFile和BigFile.md5,BigFile.md5保存BigFile的摘要,咱們在本地生成BigFile的消息摘要,和BigFile.md5比較,若是內容相同,則表示下載過程正確。
注意,消息摘要只能保證消息的完整性,並不能保證消息的不可篡改性。
MD5/SHA-0 SHA-1
這些都是摘要生成算法,和簽名沒有關係。若是非要說他們和簽名有關係,那就是簽名是要藉助於摘要技術。
數字簽名 - Signature
數字簽名,百度百科對數字簽名有很是清楚的介紹。數字簽名就是信息的發送者用本身的私鑰對消息摘要加密產生一個字符串,加密算法確保別人沒法僞造生成這段字符串,這段數字串也是對信息的發送者發送信息真實性的一個有效證實。數字簽名是 非對稱密鑰加密技術 + 數字摘要技術 的結合。
數字簽名技術是將信息摘要用發送者的私鑰加密,與原文一塊兒傳送給接收者。接收者只有用發送者的公鑰才能解密被加密的信息摘要,而後接收者用相同的Hash函數對收到的原文產生一個信息摘要,與解密的信息摘要作比對。若是相同,則說明收到的信息是完整的,在傳輸過程當中沒有被修改;不一樣則說明信息被修改過,所以數字簽名能保證信息的完整性。而且因爲只有發送者纔有加密摘要的私鑰,因此咱們能夠肯定信息必定是發送者發送的。
數字證書 - Certificate
數字證書是一個經證書受權 中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。CERT.RSA包含了一個數字簽名以及一個數字證書。
須要注意的是Android APK中的CERT.RSA證書是自簽名的,並不須要這個證書是第三方權威機構發佈或者認證的,用戶能夠在本地機器自行生成這個自簽名證書。
3.2 Android簽名分析
咱們將DF_SDM_1008.apk(本身任選)文件改成DF_SDM_1008.zip文件,打開DF_SDM_1008.zip文件,如圖1所示。
圖1 DF_SDM_1008.zip文件
1. META-INF\ (注:簽名後的信息);
2. res\ (注:存放資源文件的目錄) ;
3. AndroidManifest.xml (注:程序全局配置文件) ;
4. classes.dex (注:Dalvik字節碼);
5. resources.arsc (注:編譯後的二進制資源文件)。
接下來針對META-INF\文件進行分析。
3.3META-INF\文件
META-INF\文件中有三個文件,分別是MANIFEST.MF, CERT.SF, CERT.RSA,如圖2所示。
如今有一個問題就是,三個文件怎麼產生的的——簽名產生的,第二個問題簽名是怎麼作的呢?這裏Android提供了APK的簽名工具signapk,經過xxx.keystore(java的密鑰庫、用來進行通訊加密用的、好比數字簽名。keystore就是用來保存密鑰對的,好比公鑰和私鑰)提供的信息,對APK進行簽名,生成的META-INF\文件
轉自:http://blog.csdn.net/feiyangxiaomi/article/details/40298155測試
http://www.cnblogs.com/mfryf/archive/2013/05/21/3090844.html
http://blog.csdn.net/penglijiang/article/details/8626108