1. 程式人生 > >android APK簽名過程之MANIFEST.MF分析

android APK簽名過程之MANIFEST.MF分析

一、手工驗證 用winrar開啟簽名過的apk包,發現多了一個META-INF資料夾: 解壓縮後開啟META-INF目錄,有三個檔案:MANIFEST.MF,CERT.SF,CERT.RSA
本文只講解MANIFEST.MF的生成,用記事本開啟MANIFEST.MF檔案:
Manifest-Version: 1.0
Created-By: 1.0 (Android)

Name: res/drawable-xhdpi/ic_launcher.png
SHA1-Digest: AfPh3OJoypH966MludSW6f1RHg4=

Name: res/menu/main.xml
SHA1-Digest: wXc4zBe0Q2LPi4bMr25yy5JJQig=

Name: AndroidManifest.xml
SHA1-Digest: k3QiLyii25nxkE9q59pXGWI2aTo=

Name: res/drawable-mdpi/ic_launcher.png
SHA1-Digest: RRxOSvpmhVfCwiprVV/wZlaqQpw=

Name: res/drawable-hdpi/ic_launcher.png
SHA1-Digest: Nq8q3HeTluE5JNCBpVvNy3BXtJI=

Name: res/layout/activity_main.xml
SHA1-Digest: qVW+nHovqmEmKpssXKUBidrNDDA=

Name: resources.arsc
SHA1-Digest: luJu2wwHeH7XAJwms2gIq/pco40=

Name: lib/armeabi/libhello-jni.so
SHA1-Digest: uFb6Vfi3T/Rq0dvjgCqW7fKKrzM=

Name: classes.dex
SHA1-Digest: zaipAFvc+AzMSc2nJJG9zIrrfqE=

Name: res/drawable-xxhdpi/ic_launcher.png
SHA1-Digest: GVIfdEOBv4gEny2T1jDhGGsZOBo=

以檔案res/menu/main.xml做驗證,用HashTab檢視該檔案的SHA-1值是C17738CC17B44362CF8B86CCAF6E72CB92494228
複製該二進位制串到WINHEX中:
使用“Base64編碼解碼工具”對此二進位制檔案計算base64編碼:
開啟輸出檔案中的base64編碼為: wXc4zBe0Q2LPi4bMr25yy5JJQig= 是和MANIFEST.MF檔案中res/menu/main.xml對應的SHA1-Digest值是一樣的。 也就是說MANIFEST.MF中儲存了所有其他檔案的SHA-1並base64編碼後的值。 二、android原始碼驗證
            // MANIFEST.MF
            Manifest manifest = addDigestsToManifest(inputJar);
            je = new JarEntry(JarFile.MANIFEST_NAME);
            je.setTime(timestamp);
            outputJar.putNextEntry(je);
            manifest.write(outputJar);
    /** Add the SHA1 of every file to the manifest, creating it if necessary. 
*/ private static Manifest addDigestsToManifest(JarFile jar) throws IOException, GeneralSecurityException { Manifest input = jar.getManifest(); Manifest output = new Manifest(); Attributes main = output.getMainAttributes(); if (input != null) { main.putAll(input.getMainAttributes()); } else { main.putValue("Manifest-Version", "1.0"); main.putValue("Created-By", "1.0 (Android SignApk)"); } BASE64Encoder base64 = new BASE64Encoder(); MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] buffer = new byte[4096]; int num; // We sort the input entries by name, and add them to the // output manifest in sorted order. We expect that the output // map will be deterministic. TreeMap<String, JarEntry> byName = new TreeMap<String, JarEntry>(); for (Enumeration<JarEntry> e = jar.entries(); e.hasMoreElements(); ) { JarEntry entry = e.nextElement(); byName.put(entry.getName(), entry); } for (JarEntry entry: byName.values()) { String name = entry.getName(); if (!entry.isDirectory() && !name.equals(JarFile.MANIFEST_NAME) && !name.equals(CERT_SF_NAME) && !name.equals(CERT_RSA_NAME) && (stripPattern == null || !stripPattern.matcher(name).matches())) { InputStream data = jar.getInputStream(entry); while ((num = data.read(buffer)) > 0) { md.update(buffer, 0, num); } Attributes attr = null; if (input != null) attr = input.getAttributes(name); attr = attr != null ? new Attributes(attr) : new Attributes(); attr.putValue("SHA1-Digest", base64.encode(md.digest())); output.getEntries().put(name, attr); } } return output; }

也可以看出MANIFEST.MF中儲存了所有其他檔案的SHA-1並base64編碼後的值。

相關推薦

android APK簽名過程MANIFEST.MF分析

一、手工驗證 用winrar開啟簽名過的apk包,發現多了一個META-INF資料夾: 解壓縮後開啟META-INF目錄,有三個檔案:MANIFEST.MF,CERT.SF,CERT.RSA 本文只講解MANIFEST.MF的生成,用記事本開啟MA

AndroidAPK簽名工具jarsigner和apksigner詳解

內容 value signature align light 文件簽名 item als release 一.工具介紹 jarsigner是JDK提供的針對jar包簽名的通用工具, 位於JDK/bin/jarsigner.exe apksigner是Google官方提

android apk 簽名 在原始碼環境裡如何完成

假設Android原始碼路徑為 ProPath/ 且cd到此路徑下,之後執行 1. cp  ./build/target/product/security/releasekey.x509.pem  ./ 2. cp  ./build/target/pr

Android APK安裝過程學習筆記

屏蔽 組成 學習 二進制 替換 壓縮包 基於 壓縮 方式 1.什麽是APK   APK,即Android Package,Android安裝包。不同平臺的安裝文件格式都不同,類似於Windows的安裝包是二進制的exe格式,Mac的安裝包是dmg格式。APK可以再Andro

(轉)android Apk打包過程概述_android是如何打包apk

最近看了老羅分析android資源管理和apk打包流程的部落格,參考其他一些資料,做了一下整理,脫離繁瑣的打包細節和資料結構,從整體上概述了apk打包的整個流程。 流程概述: 1、打包資原始檔,生成R.java檔案 2、處理aidl檔案,生成相應java

Android apk大小優化自我實踐

前言:第一篇部落格,純屬筆記,以便日後使用。如有不足,請諒解! 一、概述 最近剛做完光大銀行的一款社群生活服務類APP,但是在打包簽名時發現apk太大了,將近18M,如下圖所示: 於是,我便花了一

Android-APK簽名工具-jarsigner和apksigner

一.工具介紹 jarsigner是JDK提供的針對jar包簽名的通用工具, 位於JDK/bin/jarsigner.exe apksigner是Google官方提供的針對Android apk簽名及

android下除錯3GRil庫分析

一、基本架構概述           Android RIL (Radio Interface Layer)提供了Telephony服務和Radio硬體之間的抽象層。RIL負責資料的可靠傳輸、AT命令

Android APK 簽名比對

Android APK 簽名比對 釋出過Android應用的朋友們應該都知道,Android APK的釋出是需要簽名的。簽名機制在Android應用和框架中有著十分重要的作用。 例如,Android系統禁止更新安裝簽名不一致的APK;如果應用需要使用system許可權,必須保證APK簽名與Framewor

Android APK瘦身

從APK的檔案結構說起 APK在安裝和更新之前都需要經過網路將其下載到手機,如果APK越大消耗的流量就會越多,特別是對於使用行動網路的使用者來講,消耗流量越多就代表需要花更多的錢去購買流量。同時一

Android apk 簽名及程式碼混淆、資原始檔混淆、加固整套流程

準備:*.ks  proguard-android.txt', 'proguard-rules.pro(取一) 上述是簽名檔案及混淆檔案 通過AS進行混淆簽名打包apk 將該apk進行解壓可看出只是程式碼進行了混淆但是資原始檔沒有進行混淆 下面進行資原始檔進行混淆,也是通

android Apk打包過程概述_android是如何打包apk

最近看了老羅分析android資源管理和apk打包流程的部落格,參考其他一些資料,做了一下整理,脫離繁瑣的打包細節和資料結構,從整體上概述了apk打包的整個流程。流程概述:1、打包資原始檔,生成R.java檔案2、處理aidl檔案,生成相應java 檔案3、編譯工程原始碼,生成相應class 檔案4、轉換所有

APK簽名機制——JAR簽名機制詳解

在APK簽名機制原理詳解中我們已經瞭解了APK簽名和校驗的基本過程,這一篇我們來分析JAR簽名機制。JAR簽名對對jar包進行簽名的一種機制,由於jar包apk本質上都是zip包,所以可以應用到對apk的簽名。本文從JAR簽名結構、簽名過程,再到簽名校驗的原

Android apk安裝過程及Java、JNI讀取安裝包內assets資原始檔的兩種方法(附原始碼例項)

問題背景:在PC上的程式可以輕鬆使用./或不用指明,預設讀取的就是程式所在路徑內的檔案。但在Android上,應用程式被打包成apk,程式執行時無法直接獲取apk(壓縮包)內的檔案。但在一些特殊場合,如載入影象處理訓練好的分類器、模型等資料,要求每個apk到手機上都能執行,就

APK簽名機制——V2簽名機制詳解

通過前一篇Apk簽名機制之——JAR簽名機制詳解的分析我們知道,JAR簽名需要對apk內所有檔案進行hash校驗,當資源較多時簽名驗證速度較慢。為了加快驗證速度並加強完整性保證,Andorid在7.0引入一種全檔案簽名方案V2。下面來看V2方案的具體設計原理

android apk編譯過程(1)

aapt:andorid 資源打包工具(android asset packaging tool),工具在目錄${ANDROID_SDK_HOME}/platform-tools/appt下; aidl:android介面描述語言轉換為.java檔案的工具(android Interface definit

Android APK反編譯工具篇

平時使用問題 以上的工具,不一定說只選擇一種工具。在拿的一個apk的時候,優先可以使用 Jadx 工具,因為它可以直接開啟apk,並且發編譯出來的程式碼可讀性更高。如果這個工具反編譯出來的內容有問題,或者apk本身做了針對它的處理,再選擇ApkTool工具進行解壓縮,然後分析smali程式碼,這個就需要你對

Android簽名機制---簽名過程具體解釋

先來 文件內容 rfi eating general class stat ket 寫文章 一、前言又是過了好長時間,沒寫文章的雙手都有點難受了。今天是聖誕節,還是得上班。由於前幾天有一個之前的同事,在申請微信SDK的時候,遇到簽名的問題,問了我一下,結果把我難倒了。。我

Android簽名機制---簽名驗證過程詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向旅---靜態分析技術來破解Apk

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!