ลงชื่อสร้างสำหรับการเปิดตัว

อิมเมจระบบปฏิบัติการ Android ใช้ลายเซ็นเข้ารหัสในสองแห่ง:

  1. ไฟล์ .apk แต่ละไฟล์ภายในรูปภาพจะต้องมีการลงนาม Package Manager ของ Android ใช้ลายเซ็น .apk ในสองวิธี:
    • เมื่อแอปพลิเคชันถูกแทนที่ จะต้องลงนามด้วยคีย์เดียวกันกับแอปพลิเคชันเก่าจึงจะสามารถเข้าถึงข้อมูลของแอปพลิเคชันเก่าได้ สิ่งนี้ถือเป็นจริงทั้งสำหรับการอัปเดตแอปผู้ใช้โดยการเขียนทับ .apk และสำหรับการแทนที่แอประบบด้วยเวอร์ชันที่ใหม่กว่าที่ติดตั้งไว้ภายใต้ /data
    • หากแอปพลิเคชันตั้งแต่สองตัวขึ้นไปต้องการแชร์ ID ผู้ใช้ (เพื่อให้สามารถแชร์ข้อมูลได้ ฯลฯ) แอปพลิเคชันเหล่านั้นจะต้องลงนามด้วยคีย์เดียวกัน
  2. แพ็คเกจการอัปเดต OTA จะต้องลงนามด้วยคีย์ใดคีย์หนึ่งที่ระบบคาดหวัง ไม่เช่นนั้นกระบวนการติดตั้งจะปฏิเสธคีย์เหล่านั้น

ปล่อยกุญแจ

แผนผัง Android มี คีย์การทดสอบ ภายใต้ build/target/product/security การสร้างอิมเมจระบบปฏิบัติการ Android โดยใช้ make จะลงนามไฟล์ .apk ทั้งหมดโดยใช้คีย์ทดสอบ เนื่องจากคีย์ทดสอบเป็นที่รู้จักอย่างเปิดเผย ใครๆ ก็สามารถเซ็นชื่อไฟล์ .apk ของตนเองด้วยคีย์เดียวกันได้ ซึ่งอาจอนุญาตให้พวกเขาแทนที่หรือแย่งชิงแอประบบที่สร้างไว้ในอิมเมจ OS ของคุณได้ ด้วยเหตุนี้ จึงจำเป็นอย่างยิ่งที่จะต้องลงนามอิมเมจ Android OS ที่เผยแพร่ต่อสาธารณะหรือปรับใช้ด้วยชุด คีย์การเผยแพร่ พิเศษที่คุณเท่านั้นที่สามารถเข้าถึงได้

หากต้องการสร้างชุดคีย์การเปิดตัวเฉพาะของคุณเอง ให้รันคำสั่งเหล่านี้จากรากของแผนผัง Android ของคุณ:

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media networkstack; do \
    ./development/tools/make_key ~/.android-certs/$x "$subject"; \
  done

$subject ควรมีการเปลี่ยนแปลงเพื่อให้สะท้อนถึงข้อมูลขององค์กรของคุณ คุณสามารถใช้ไดเร็กทอรีใดก็ได้ แต่ควรระมัดระวังในการเลือกตำแหน่งที่สำรองข้อมูลและปลอดภัย ผู้จำหน่ายบางรายเลือกที่จะเข้ารหัสคีย์ส่วนตัวด้วยข้อความรหัสผ่านที่รัดกุม และจัดเก็บคีย์ที่เข้ารหัสไว้ในการควบคุมแหล่งที่มา บางรายเก็บกุญแจปลดล็อคไว้ที่อื่นทั้งหมด เช่น บนคอมพิวเตอร์ที่มีช่องว่างอากาศ

หากต้องการสร้างอิมเมจการเปิดตัว ให้ใช้:

make dist
sign_target_files_apks \
-o \    # explained in the next section
--default_key_mappings ~/.android-certs out/dist/*-target_files-*.zip \
signed-target_files.zip

สคริปต์ sign_target_files_apks รับไฟล์เป้าหมาย .zip เป็นอินพุตและสร้างไฟล์เป้าหมายใหม่ .zip ซึ่งไฟล์ .apk ทั้งหมดได้รับการลงนามด้วยคีย์ใหม่ รูปภาพที่ลงนามใหม่สามารถพบได้ภายใต้ IMAGES/ ใน signed-target_files.zip

ลงนามแพ็คเกจ OTA

zip ไฟล์เป้าหมายที่ลงนามแล้วสามารถแปลงเป็น zip อัพเดต OTA ที่ลงนามได้โดยใช้ขั้นตอนต่อไปนี้:
ota_from_target_files \
-k  (--package_key) 
signed-target_files.zip \
signed-ota_update.zip

ลายเซ็นและการไซด์โหลด

Sideloading จะไม่ข้ามกลไกการตรวจสอบลายเซ็นแพ็คเกจปกติของการกู้คืน ก่อนที่จะติดตั้งแพ็คเกจ การกู้คืนจะตรวจสอบว่ามีการเซ็นชื่อด้วยคีย์ส่วนตัวตัวใดตัวหนึ่งที่ตรงกับคีย์สาธารณะที่จัดเก็บไว้ในพาร์ติชั่นการกู้คืน เช่นเดียวกับที่ทำกับแพ็คเกจที่จัดส่งผ่าน -อากาศ.

โดยทั่วไปแพ็คเกจการอัปเดตที่ได้รับจากระบบหลักจะได้รับการตรวจสอบสองครั้ง: หนึ่งครั้งโดยระบบหลัก โดยใช้วิธี RecoverySystem.verifyPackage() ใน Android API และอีกครั้งโดยการกู้คืน RecoverySystem API ตรวจสอบลายเซ็นกับคีย์สาธารณะที่จัดเก็บไว้ในระบบหลักในไฟล์ /system/etc/security/otacerts.zip (ตามค่าเริ่มต้น) การกู้คืนจะตรวจสอบลายเซ็นเทียบกับคีย์สาธารณะที่จัดเก็บไว้ในดิสก์ RAM ของพาร์ติชันการกู้คืนในไฟล์ /res/keys

ตามค่าเริ่มต้น ไฟล์เป้าหมาย .zip ที่สร้างโดยบิลด์จะตั้งค่าใบรับรอง OTA ให้ตรงกับคีย์ทดสอบ ในอิมเมจที่เผยแพร่ ต้องใช้ใบรับรองอื่นเพื่อให้อุปกรณ์สามารถตรวจสอบความถูกต้องของแพ็คเกจอัพเดตได้ การส่งแฟล็ก -o ไปที่ sign_target_files_apks ดังที่แสดงในส่วนก่อนหน้า จะแทนที่ใบรับรองคีย์การทดสอบด้วยใบรับรองคีย์ release จากไดเร็กทอรีใบรับรองของคุณ

โดยปกติอิมเมจระบบและอิมเมจการกู้คืนจะจัดเก็บคีย์สาธารณะ OTA ชุดเดียวกัน ด้วยการเพิ่มคีย์ให้กับชุดการกู้คืนของคีย์ เท่านั้น จึงเป็นไปได้ที่จะลงนามแพ็คเกจที่สามารถติดตั้งผ่านไซด์โหลดเท่านั้น (สมมติว่ากลไกการดาวน์โหลดการอัปเดตของระบบหลักทำการตรวจสอบความถูกต้องกับ otacerts.zip อย่างถูกต้อง) คุณสามารถระบุคีย์พิเศษที่จะรวมไว้ในการกู้คืนเท่านั้นโดยการตั้งค่าตัวแปร PRODUCT_EXTRA_RECOVERY_KEYS ในคำจำกัดความผลิตภัณฑ์ของคุณ:

vendor/yoyodyne/tardis/products/tardis.mk
 [...]

PRODUCT_EXTRA_RECOVERY_KEYS := vendor/yoyodyne/security/tardis/sideload

ซึ่งรวมถึง vendor/yoyodyne/security/tardis/sideload.x509.pem ในไฟล์คีย์การกู้คืน เพื่อให้สามารถติดตั้งแพ็คเกจที่ลงนามด้วยได้ คีย์พิเศษจะ ไม่ รวมอยู่ใน otacerts.zip ดังนั้นระบบที่ตรวจสอบแพ็กเกจที่ดาวน์โหลดอย่างถูกต้องจะไม่เรียกใช้การกู้คืนสำหรับแพ็กเกจที่เซ็นชื่อด้วยคีย์นี้

ใบรับรองและคีย์ส่วนตัว

แต่ละคีย์มาในสองไฟล์: ใบรับรอง ซึ่งมีนามสกุล .x509.pem และ คีย์ส่วนตัว ซึ่งมีนามสกุล .pk8 รหัสส่วนตัวควรถูกเก็บเป็นความลับและจำเป็นสำหรับการลงนามในแพ็คเกจ ตัวกุญแจอาจได้รับการป้องกันด้วยรหัสผ่าน ในทางตรงกันข้าม ใบรับรองจะมีเพียงครึ่งหนึ่งของคีย์สาธารณะ จึงสามารถเผยแพร่ในวงกว้างได้ ใช้เพื่อตรวจสอบว่าแพ็กเกจได้รับการลงนามโดยคีย์ส่วนตัวที่เกี่ยวข้อง

บิลด์ Android มาตรฐานใช้ห้าคีย์ ซึ่งทั้งหมดอยู่ใน build/target/product/security :

คีย์ทดสอบ
คีย์เริ่มต้นทั่วไปสำหรับแพ็คเกจที่ไม่ได้ระบุคีย์เป็นอย่างอื่น
แพลตฟอร์ม
รหัสทดสอบสำหรับแพ็คเกจที่เป็นส่วนหนึ่งของแพลตฟอร์มหลัก
แบ่งปัน
ทดสอบคีย์สำหรับสิ่งต่าง ๆ ที่ใช้ร่วมกันในกระบวนการโฮม/ผู้ติดต่อ
สื่อ
รหัสทดสอบสำหรับแพ็คเกจที่เป็นส่วนหนึ่งของสื่อ/ระบบดาวน์โหลด
เน็ตเวิร์กสแต็ก
รหัสทดสอบสำหรับแพ็คเกจที่เป็นส่วนหนึ่งของระบบเครือข่าย คีย์ Networkstack ใช้เพื่อลงนามไบนารีที่ออกแบบมาเป็น ส่วนประกอบของระบบโมดูลาร์ หากการอัปเดตโมดูลของคุณสร้างแยกกันและรวมเข้าด้วยกันเป็นที่สร้างไว้ล่วงหน้าในอิมเมจอุปกรณ์ของคุณ คุณอาจไม่จำเป็นต้องสร้างคีย์ Networkstack ในแผนผังต้นทางของ Android

แต่ละแพ็คเกจจะระบุหนึ่งในคีย์เหล่านี้โดยการตั้งค่า LOCAL_CERTIFICATE ในไฟล์ Android.mk (ใช้คีย์ทดสอบหากไม่ได้ตั้งค่าตัวแปรนี้) คุณยังสามารถระบุคีย์ที่แตกต่างอย่างสิ้นเชิงด้วยชื่อพาธ เช่น:

device/yoyodyne/apps/SpecialApp/Android.mk
 [...]

LOCAL_CERTIFICATE := device/yoyodyne/security/special

ตอนนี้บิลด์ใช้คีย์ device/yoyodyne/security/special.{x509.pem,pk8} เพื่อลงนาม SpecialApp.apk โครงสร้างสามารถใช้ได้เฉพาะคีย์ส่วนตัวที่ ไม่มี การป้องกันด้วยรหัสผ่าน

ตัวเลือกการลงนามขั้นสูง

การเปลี่ยนคีย์การลงนาม APK

สคริปต์การลงนาม sign_target_files_apks ทำงานบนไฟล์เป้าหมายที่สร้างขึ้นสำหรับบิลด์ ข้อมูลทั้งหมดเกี่ยวกับใบรับรองและคีย์ส่วนตัวที่ใช้ในขณะสร้างจะรวมอยู่ในไฟล์เป้าหมาย เมื่อเรียกใช้สคริปต์ลงนามเพื่อลงนามเพื่อเผยแพร่ คีย์การลงนามสามารถถูกแทนที่ตามชื่อคีย์หรือชื่อ APK

ใช้แฟล็ก --key_mapping และ --default_key_mappings เพื่อระบุการแทนที่คีย์ตามชื่อคีย์:

  • ธง --key_mapping src_key = dest_key ระบุการแทนที่คีย์เดียวในแต่ละครั้ง
  • แฟล็ก --default_key_mappings dir ระบุไดเร็กทอรีที่มีคีย์ห้าคีย์เพื่อแทนที่คีย์ทั้งหมดใน build/target/product/security เทียบเท่ากับการใช้ --key_mapping ห้าครั้งเพื่อระบุการแมป
build/target/product/security/testkey      = dir/releasekey
build/target/product/security/platform     = dir/platform
build/target/product/security/shared       = dir/shared
build/target/product/security/media        = dir/media
build/target/product/security/networkstack = dir/networkstack

ใช้ --extra_apks apk_name1,apk_name2,... = key คีย์ เพื่อระบุการแทนที่คีย์การเซ็นชื่อตามชื่อ APK หากปล่อย key ว่างไว้ สคริปต์จะถือว่า APK ที่ระบุเป็นแบบลงนามล่วงหน้า

สำหรับผลิตภัณฑ์ควานหาสมมุติ คุณต้องมีคีย์ที่มีการป้องกันด้วยรหัสผ่านหกคีย์: ห้าคีย์เพื่อแทนที่ห้าคีย์ใน build/target/product/security และอีกหนึ่งคีย์เพื่อแทนที่ device/yoyodyne/security/special SpecialApp ต้องการในตัวอย่างข้างต้น หากคีย์อยู่ในไฟล์ต่อไปนี้:

vendor/yoyodyne/security/tardis/releasekey.x509.pem
vendor/yoyodyne/security/tardis/releasekey.pk8
vendor/yoyodyne/security/tardis/platform.x509.pem
vendor/yoyodyne/security/tardis/platform.pk8
vendor/yoyodyne/security/tardis/shared.x509.pem
vendor/yoyodyne/security/tardis/shared.pk8
vendor/yoyodyne/security/tardis/media.x509.pem
vendor/yoyodyne/security/tardis/media.pk8
vendor/yoyodyne/security/tardis/networkstack.x509.pem
vendor/yoyodyne/security/tardis/networkstack.pk8
vendor/yoyodyne/security/special.x509.pem
vendor/yoyodyne/security/special.pk8           # NOT password protected
vendor/yoyodyne/security/special-release.x509.pem
vendor/yoyodyne/security/special-release.pk8   # password protected

จากนั้นคุณจะต้องเซ็นชื่อแอปทั้งหมดดังนี้:

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings vendor/yoyodyne/security/tardis \
    --key_mapping vendor/yoyodyne/security/special=vendor/yoyodyne/security/special-release \
    --extra_apks PresignedApp= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

สิ่งนี้จะแสดงสิ่งต่อไปนี้:

Enter password for vendor/yoyodyne/security/special-release key>
Enter password for vendor/yoyodyne/security/tardis/networkstack key>
Enter password for vendor/yoyodyne/security/tardis/media key>
Enter password for vendor/yoyodyne/security/tardis/platform key>
Enter password for vendor/yoyodyne/security/tardis/releasekey key>
Enter password for vendor/yoyodyne/security/tardis/shared key>
    signing: Phone.apk (vendor/yoyodyne/security/tardis/platform)
    signing: Camera.apk (vendor/yoyodyne/security/tardis/media)
    signing: NetworkStack.apk (vendor/yoyodyne/security/tardis/networkstack)
    signing: Special.apk (vendor/yoyodyne/security/special-release)
    signing: Email.apk (vendor/yoyodyne/security/tardis/releasekey)
        [...]
    signing: ContactsProvider.apk (vendor/yoyodyne/security/tardis/shared)
    signing: Launcher.apk (vendor/yoyodyne/security/tardis/shared)
NOT signing: PresignedApp.apk
        (skipped due to special cert string)
rewriting SYSTEM/build.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
    signing: framework-res.apk (vendor/yoyodyne/security/tardis/platform)
rewriting RECOVERY/RAMDISK/default.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
using:
    vendor/yoyodyne/security/tardis/releasekey.x509.pem
for OTA package verification
done.

หลังจากแจ้งให้ผู้ใช้ป้อนรหัสผ่านสำหรับคีย์ที่มีการป้องกันด้วยรหัสผ่านแล้ว สคริปต์จะลงนามไฟล์ APK ทั้งหมดในเป้าหมายอินพุต .zip ด้วยคีย์ปลดล็อค ก่อนที่จะรันคำสั่ง คุณยังสามารถตั้งค่าตัวแปรสภาพแวดล้อม ANDROID_PW_FILE เป็นชื่อไฟล์ชั่วคราวได้ จากนั้นสคริปต์จะเรียกใช้โปรแกรมแก้ไขของคุณเพื่อให้คุณสามารถป้อนรหัสผ่านสำหรับคีย์ทั้งหมด (ซึ่งอาจเป็นวิธีที่สะดวกกว่าในการป้อนรหัสผ่าน)

การเปลี่ยนกุญแจลงนาม APEX

Android 10 แนะนำ รูปแบบไฟล์ APEX สำหรับการติดตั้งโมดูลระบบระดับล่าง ตามที่อธิบายไว้ใน APEX Signing ไฟล์ APEX แต่ละไฟล์จะถูกเซ็นชื่อด้วยสองคีย์: อันหนึ่งสำหรับอิมเมจระบบไฟล์ขนาดเล็กภายใน APEX และอีกอันสำหรับ APEX ทั้งหมด

เมื่อเซ็นชื่อเพื่อรีลีส คีย์การลงนามทั้งสองคีย์สำหรับไฟล์ APEX จะถูกแทนที่ด้วยคีย์รีลีส คีย์เพย์โหลดระบบไฟล์ถูกระบุด้วยแฟล็ก --extra_apex_payload และคีย์การเซ็นชื่อไฟล์ APEX ทั้งหมดถูกระบุด้วยแฟล็ก --extra_apks

สำหรับผลิตภัณฑ์ควานหา สมมติว่าคุณมีการกำหนดค่าคีย์ต่อไปนี้สำหรับไฟล์ com.android.conscrypt.apex , com.android.media.apex และ com.android.runtime.release.apex APEX

name="com.android.conscrypt.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.media.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.runtime.release.apex" public_key="vendor/yoyodyne/security/testkeys/com.android.runtime.avbpubkey" private_key="vendor/yoyodyne/security/testkeys/com.android.runtime.pem" container_certificate="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.x509.pem" container_private_key="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.pk8"

และคุณมีไฟล์ต่อไปนี้ที่มีปุ่มปลดล็อค:

vendor/yoyodyne/security/runtime_apex_container.x509.pem
vendor/yoyodyne/security/runtime_apex_container.pk8
vendor/yoyodyne/security/runtime_apex_payload.pem

คำสั่งต่อไปนี้จะแทนที่คีย์การเซ็นชื่อสำหรับ com.android.runtime.release.apex และ com.android.tzdata.apex ระหว่างการลงนามรีลีส โดยเฉพาะอย่างยิ่ง com.android.runtime.release.apex ได้รับการลงนามด้วยคีย์รีลีสที่ระบุ ( runtime_apex_container สำหรับไฟล์ APEX และ runtime_apex_payload สำหรับเพย์โหลดอิมเมจของไฟล์) com.android.tzdata.apex ถือเป็นการลงนามล่วงหน้า ไฟล์ APEX อื่นๆ ทั้งหมดได้รับการจัดการโดยการกำหนดค่าเริ่มต้นตามที่ระบุไว้ในไฟล์เป้าหมาย

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings   vendor/yoyodyne/security/tardis \
    --extra_apks             com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_container \
    --extra_apex_payload_key com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_payload.pem \
    --extra_apks             com.android.media.apex= \
    --extra_apex_payload_key com.android.media.apex= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

การรันคำสั่งด้านบนจะให้บันทึกต่อไปนี้:

        [...]
    signing: com.android.runtime.release.apex                  container (vendor/yoyodyne/security/runtime_apex_container)
           : com.android.runtime.release.apex                  payload   (vendor/yoyodyne/security/runtime_apex_payload.pem)
NOT signing: com.android.conscrypt.apex
        (skipped due to special cert string)
NOT signing: com.android.media.apex
        (skipped due to special cert string)
        [...]

ตัวเลือกอื่น

สคริปต์การเซ็นชื่อ sign_target_files_apks จะเขียนคำอธิบายบิลด์และลายนิ้วมือใหม่ในไฟล์คุณสมบัติบิลด์เพื่อแสดงว่าบิลด์นั้นเป็นบิลด์ที่ลงนาม ธง --tag_changes ควบคุมการแก้ไขที่ทำกับลายนิ้วมือ รันสคริปต์ด้วย -h เพื่อดูเอกสารเกี่ยวกับแฟล็กทั้งหมด

สร้างคีย์ด้วยตนเอง

Android ใช้คีย์ RSA 2048 บิตพร้อมเลขชี้กำลังสาธารณะ 3 คุณสามารถสร้างคู่ใบรับรอง/คีย์ส่วนตัวโดยใช้เครื่องมือ openssl จาก openssl.org :

# generate RSA key
openssl genrsa -3 -out temp.pem 2048
Generating RSA private key, 2048 bit long modulus
....+++
.....................+++
e is 3 (0x3)

# create a certificate with the public part of the key
openssl req -new -x509 -key temp.pem -out releasekey.x509.pem -days 10000 -subj '/C=US/ST=California/L=San Narciso/O=Yoyodyne, Inc./OU=Yoyodyne Mobility/CN=Yoyodyne/emailAddress=yoyodyne@example.com'

# create a PKCS#8-formatted version of the private key
openssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt

# securely delete the temp.pem file
shred --remove temp.pem

คำสั่ง openssl pkcs8 ที่ให้ไว้ข้างต้นจะสร้างไฟล์ .pk8 ที่ ไม่มี รหัสผ่าน เหมาะสำหรับใช้กับระบบบิลด์ หากต้องการสร้าง .pk8 ที่ปลอดภัยด้วยรหัสผ่าน (ซึ่งคุณควรทำกับคีย์รีลีสจริงทั้งหมด) ให้แทนที่อาร์กิวเมนต์ -nocrypt ด้วย -passout stdin ; จากนั้น openssl จะเข้ารหัสคีย์ส่วนตัวด้วยรหัสผ่านที่อ่านจากอินพุตมาตรฐาน ไม่มีการพิมพ์พรอมต์ ดังนั้นหาก stdin เป็นเทอร์มินัล โปรแกรมจะปรากฏขึ้นเพื่อหยุดทำงานทั้งๆ ที่จริงๆ แล้วเป็นเพียงการรอให้คุณป้อนรหัสผ่าน ค่าอื่นๆ สามารถใช้สำหรับอาร์กิวเมนต์-passout เพื่ออ่านรหัสผ่านจากตำแหน่งอื่น สำหรับรายละเอียด โปรดดู เอกสารประกอบ openssl

ไฟล์ระดับกลาง temp.pem มีคีย์ส่วนตัวที่ไม่มีการป้องกันด้วยรหัสผ่าน ดังนั้นควรกำจัดทิ้งอย่างระมัดระวังเมื่อสร้างคีย์ปลดล็อค โดยเฉพาะอย่างยิ่งยูทิลิตี้ GNUshred อาจไม่มีผลกับเครือข่ายหรือระบบไฟล์ที่ถูกเจอร์นัล คุณสามารถใช้ไดเร็กทอรีการทำงานที่อยู่ในดิสก์ RAM (เช่น พาร์ติชัน tmpfs) เมื่อสร้างคีย์เพื่อให้แน่ใจว่าตัวกลางจะไม่ถูกเปิดเผยโดยไม่ได้ตั้งใจ

สร้างไฟล์รูปภาพ

เมื่อคุณได้ signed-target_files.zip แล้ว คุณจะต้องสร้างภาพเพื่อให้สามารถใส่ลงในอุปกรณ์ได้ หากต้องการสร้างอิมเมจที่เซ็นชื่อจากไฟล์เป้าหมาย ให้รันคำสั่งต่อไปนี้จากรากของแผนผัง Android:

img_from_target_files signed-target_files.zip signed-img.zip
ไฟล์ผลลัพธ์ signed-img.zip มีไฟล์ .img ทั้งหมด หากต้องการโหลดรูปภาพลงในอุปกรณ์ ให้ใช้ fastboot ดังนี้:
fastboot update signed-img.zip