安卓系統(tǒng)簽名修改

1.安卓簽名和密鑰

Android OS 映像在兩個(gè)地方使用加密簽名:

  1. 映像中的所有 .apk 文件都必須經(jīng)過(guò)簽名。Android 軟件包管理器通過(guò)下列兩種方式使用 .apk 簽名:
    • 更換應(yīng)用時(shí),必須使用與舊應(yīng)用相同的密鑰對(duì)其簽名,才能存取舊應(yīng)用的數(shù)據(jù)。無(wú)論是通過(guò)覆蓋 .apk 來(lái)更新用戶(hù)應(yīng)用,還是使用安裝在 /data 下的新版本應(yīng)用來(lái)覆蓋系統(tǒng)應(yīng)用,這一點(diǎn)都適用。
    • 如果兩個(gè)或多個(gè)應(yīng)用想要共享同一個(gè)用戶(hù) ID(方便共享數(shù)據(jù)等),則必須使用相同的密鑰對(duì)它們進(jìn)行簽名。
  2. 必須使用符合系統(tǒng)預(yù)期的密鑰對(duì) OTA 更新包進(jìn)行簽名,否則在安裝過(guò)程中 OTA 更新包將被拒絕。

標(biāo)準(zhǔn)安卓使用四對(duì)密鑰,分別是:

testkey: 適用于未另外指定密鑰的 apk 包的通用默認(rèn)密鑰。(如果app的Android.mk中LOCAL_CERTIFICATE未設(shè)置,則默認(rèn)會(huì)采用testkey)

platform: 適用于核心平臺(tái)所包含的 apk 包的測(cè)試密鑰。

shared: 適用于家庭/聯(lián)系人進(jìn)程中的共享內(nèi)容的測(cè)試密鑰。(apk需要和home/contacts共享數(shù)據(jù))

Meida: 適用于媒體/下載系統(tǒng)所包含的 apk 包的測(cè)試密鑰。(apk是media/download系統(tǒng)中的一環(huán))

除testkey以外,其他密鑰需要在App的Android.mk中明確指定LOCAL_CERTIFICATE。

以上提到的四對(duì)密鑰默認(rèn)在build/target/product/security目錄,每種密鑰包含兩個(gè)文件:一個(gè)擴(kuò)展名為.x509.pem的證書(shū),一個(gè)擴(kuò)展名為.pk8的私鑰。以platform為例,則會(huì)有platform.x509.pem和platform.pk8兩個(gè)文件。

需要注意的是:以上密鑰都是默認(rèn)密鑰,也就是說(shuō)用戶(hù)需要自己生成密鑰才能保證安全性。

根據(jù)安卓官方的聲明,還可使用以下方式對(duì)單個(gè)apk通過(guò)路徑名指定不同的密鑰,比如:
device/yoyodyne/apps/SpecialApp/Android.mk
[...]
LOCAL_CERTIFICATE := device/yoyodyne/security/special

現(xiàn)在,此版本使用 device/yoyodyne/security/special.{x509.pem,pk8} 密鑰來(lái)對(duì) SpecialApp.apk 進(jìn)行簽名。此版本僅可使用不受密碼保護(hù)的私鑰

2.密鑰生成

根據(jù)安卓官方推薦,使用以下命令生成新的密鑰:

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
我們可將subject中的內(nèi)容替換為公司的信息。這樣在android-certs中會(huì)生成四對(duì)密鑰:releasekey/platform/share/media。

生成key的過(guò)程中會(huì)提示輸入password, 可以不輸入,避免編譯過(guò)程中要求密碼輸入。

可將生成的密鑰拷貝到build/target/product/security目錄覆蓋掉原有的默認(rèn)密鑰。

3. Makefile修改

為了使用releasekey替換掉testkey,需要修改以下Makefile文件:

  1. 在buid/core/config.mk中定義變量:DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey
  2. ./system/sepolicy/prebuilts/api/26.0/private/keys.conf
    ./system/sepolicy/private/keys.conf中將testkey修改為releasekey。

4. 手動(dòng)簽名image

如果需要對(duì)OTA image手動(dòng)簽名,可以使用以下命令:
./build/tools/releasetools/ota_from_target_files
-k ~/.android-certs/releasekey \ --簽名key
signed-target_files.zip \ --輸入文件,已經(jīng)簽過(guò)名
signed-ota_update.zip --輸出文件,重簽名文件

那么,如何得到OTA image對(duì)應(yīng)的ROM image呢?可以使用以下命令生成:
./build/tools/releasetools/img_from_target_files signed-target-files.zip signed-img.zip
生成的signed-img.zip就包含所有的.img文件??捎胒astboot加載到設(shè)備:
fastboot update singed-img.zip

更多信息可參考安卓官方介紹:https://source.android.com/devices/tech/ota/sign_builds.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評(píng)論 25 709
  • 也有提到怎么單獨(dú)給一個(gè)apk簽名,這里補(bǔ)充一下android的簽名權(quán)限控制機(jī)制。 android的標(biāo)準(zhǔn)簽名key有...
    WorkFamily閱讀 9,334評(píng)論 1 5
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,994評(píng)論 2 59
  • android簽名的應(yīng)用-- 禁止未經(jīng)授權(quán)簽名的apk安裝 最近項(xiàng)目有需求: 只有使用特定簽名簽的apk才可以安裝...
    mahongyin閱讀 775評(píng)論 0 0
  • 一片葉子枯黃 在晨風(fēng)中 悠閑地打轉(zhuǎn) 他從樹(shù)上掉下來(lái) 離開(kāi)綠葉的群體 純靠一根蛛絲 牽連 他是一片秋葉啊 承載整個(gè)秋...
    悲憫人生閱讀 226評(píng)論 0 0

友情鏈接更多精彩內(nèi)容