Halaman ini menguraikan metode (dengan tingkat keyakinan tertinggi) untuk memastikan Anda dapat menjalankan versi image Pixel yang sah di perangkat Pixel Anda. Hal ini mencakup mendownload image pabrik ke komputer Anda, dan melakukan bukti penyertaan log pada artefak yang didownload sebelum mem-flash-nya ke perangkat Anda.
Cara Memverifikasi Image Pabrik Pixel Anda
Prasyarat Verifikasi
Sebelum melanjutkan untuk memverifikasi bahwa artefak (firmware atau APK) sesuai dengan klaim, pastikan alat berikut tersedia di komputer yang terhubung ke jaringan. Bergantung pada target verifikasi, Anda mungkin tidak memerlukan semuanya.
Golang
Alat verifikasi ditulis dalam Go. Untuk mem-build-nya, instal Go 1.24 atau yang lebih baru dari situs Go.
Android Debug Bridge (ADB)
ADB adalah alat yang berkomunikasi dengan perangkat Android untuk memeriksa image atau
mengekstrak APK, yang tersedia di Android SDK Platform Tools situs web.
Pemverifikasi Bukti Penyertaan
Pemverifikasi bukti penyertaan adalah modul Go yang membuat kueri log transparansi dan menampilkan apakah artefak disertakan dalam log.
Modul ini dipublikasikan di repositori GitHub android-binary-transparency di
https://github.com/android/android-binary-transparency/tree/main
Untuk meng-clone repositori avb AOSP:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
Untuk meng-clone repositori GitHub android-binary-transparency:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool) adalah alat build yang digunakan untuk mengompilasi dan memaketkan resource aplikasi Android. Alat ini dapat ditemukan sebagai alat mandiri di Android SDK Build Tools versi 26.0.2 dan yang lebih baru.
bundletool
bundletool adalah alat yang digunakan untuk mem-build Android App Bundle (AAB). Alat ini juga dapat digunakan untuk memverifikasi tanda tangan kode APK.
Alat ini dapat didownload dari GitHub.
wget atau curl
wget dan curl adalah alat yang dapat digunakan untuk mengambil atau mendownload file dari Internet. Pastikan Anda telah menginstal salah satu alat ini, karena skrip verifikasi mungkin bergantung padanya.
Avbtool
avbtool
digunakan untuk menghitung ringkasan VBMeta image pabrik dan verifikasi
biner.
Setelah meng-clone repositori avb (seperti yang ditunjukkan di bagian Pemverifikasi Bukti Penyertaan
bagian), avbtool.py dapat ditemukan dalam direktori avb yang di-clone.
Anda harus menambahkan direktori ini ke variabel lingkungan $PATH.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
adalah skrip Python yang digunakan untuk mengekstrak komponen individual di Pixel's
bootloader.img.
Anda tidak memerlukannya jika memverifikasi APK.
Alat ini penting karena memungkinkan avbtool.py menemukan image yang diperlukan untuk verifikasi.
Untuk menggunakan alat ini, Anda harus mendownload tiga skrip Python berikut
ke direktori tempat avbtool.py berada,
membuat fbpacktool.py dapat dieksekusi,
dan membuat symlink bernama fbpacktool ke fbpacktool.py untuk memudahkan.
Jika Anda memiliki wget:
computer:dir_to_avbtool$ wget https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
Jika Anda memiliki curl:
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
OpenSSL
openssl membantu melakukan berbagai operasi kriptografi menggunakan terminal dalam alur kerja verifikasi. Pastikan alat ini terinstal di sistem Anda. Anda dapat memeriksanya di terminal dengan menjalankan perintah berikut dan memastikan hasil yang ditampilkan tidak kosong:
computer:~$ which openssl
/usr/bin/openssl
Membuat Payload untuk Verifikasi
Untuk memverifikasi image yang Anda miliki di perangkat atau download dari situs Image Pabrik Pixel, Anda harus membuat payload yang sesuai dengan image tersebut dari Sidik Jari Build dan Ringkasan VBMeta. Ada dua opsi, manual atau otomatis, seperti yang dijelaskan di bawah.
- Sidik Jari Build: ID string image pabrik
- Contoh:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
- Contoh:
- Ringkasan VBMeta: Ringkasan kriptografi SHA-256 yang mengikat berbagai bagian image pabrik
- Contoh:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Contoh:
Pembuatan Payload Manual
Untuk membuat payload secara manual untuk verifikasi, Anda harus membuat file teks
, payload.txt yang berisi sidik jari build pada satu baris, lalu
ringkasan VBMeta pada baris berikutnya, dengan baris baru kosong (lihat bagian
Konten Log untuk
format yang tepat).
Setelah mengikuti langkah-langkah dari
situs Image Pabrik,
konten file payload.txt akan terlihat seperti ini:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Mengekstrak Ringkasan VBMeta dan Sidik Jari Build dari situs Image Pabrik Pixel
Saat mendownload image pabrik dari
situs Image Pabrik Pixel, Anda
harus mengekstrak file yang didownload, yang akan membuat folder lain di
tempatnya. Buka folder yang baru dibuat, dan ekstrak file image-*.zip terkait untuk mendapatkan file *.img individual. Biner ini adalah image partisi. Pastikan file vbmeta.img ada di antara file img.
Anda akan melihat yang seperti ini:
computer:oriole-sd1a.210817.015.a4$ unzip image-oriole-sd1a.210817.015.a4.zip
Archive: image-oriole-sd1a.210817.015.a4.zip
inflating: android-info.txt
inflating: boot.img
inflating: vendor_boot.img
inflating: system.img
inflating: vendor.img
inflating: product.img
inflating: system_ext.img
inflating: system_other.img
inflating: dtbo.img
inflating: vbmeta_system.img
inflating: vbmeta.img
inflating: super_empty.img
Anda dapat mengekstrak sidik jari build dan menghitung ringkasan VBMeta dari semua file yang didownload.
Setelah avbtool.py tersedia untuk $PATH, Anda dapat mengeluarkan perintah berikut dari terminal untuk mengekstrak sidik jari build dan menghitung ringkasan VBMeta image pabrik yang baru saja Anda download:
computer:dir_containing_unzipped_factory_image~$ grep -a 'ro\..*build\.fingerprint=google/.*/release-keys' system.img | cut -f2 -d'='
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
computer:dir_containing_unzipped_factory_image$ avbtool.py calculate_vbmeta_digest --image vbmeta.img
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Verifikasi Manual Image Pabrik yang Didownload
Untuk memverifikasi image pabrik yang didownload dengan benar, Anda harus
mendownload
fbpacktool.py
dan dua file Python lainnya yang bergantung padanya
(fbpack.py
dan
packedstruct.py)
untuk mengekstrak komponen di bootloader.img, seperti yang dijelaskan satu per satu
dalam struct VBMeta. Setelah memiliki alat ekstraksi, Anda dapat menggunakan fbpacktool.py untuk mengekstrak image bootloader. Contoh:
computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img
Anda akan dapat melihat file .img tambahan yang muncul di direktori tersebut.
Sekarang, Anda dapat melanjutkan untuk menggunakan avbtool.py guna memverifikasi secara manual bahwa tanda tangan berbagai partisi cocok.
computer:dir_containing_unzipped_images$ avbtool.py verify_image --image vbmeta.img --follow_chain_partitions
Verifying image vbmeta.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta.img
vbmeta_system: Chained but ROLLBACK_SLOT (which is 1) and KEY (which has sha1 df529646b7225015196a714006346f0768b87fcf) not specified
--
Verifying image vbmeta_system.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_system.img
product: Successfully verified sha256 hashtree of product.img for image of 2700468224 bytes
system: Successfully verified sha256 hashtree of system.img for image of 878493696 bytes
system_ext: Successfully verified sha256 hashtree of system_ext.img for image of 251334656 bytes
vbmeta_vendor: Chained but ROLLBACK_SLOT (which is 3) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image vbmeta_vendor.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_vendor.img
vendor: Successfully verified sha256 hashtree of vendor.img for image of 472940544 bytes
boot: Chained but ROLLBACK_SLOT (which is 2) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image boot.img using embedded public key
vbmeta: Successfully verified footer and SHA256_RSA4096 vbmeta struct in boot.img
boot: Successfully verified sha256 hash of boot.img for image of 24481792 bytes
abl: Successfully verified sha256 hash of abl.img for image of 1744896 bytes
bl1: Successfully verified sha256 hash of bl1.img for image of 12288 bytes
bl2: Successfully verified sha256 hash of bl2.img for image of 544768 bytes
bl31: Successfully verified sha256 hash of bl31.img for image of 86016 bytes
dtbo: Successfully verified sha256 hash of dtbo.img for image of 2152234 bytes
gsa: Successfully verified sha256 hash of gsa.img for image of 262144 bytes
ldfw: Successfully verified sha256 hash of ldfw.img for image of 4096000 bytes
pbl: Successfully verified sha256 hash of pbl.img for image of 49152 bytes
tzsw: Successfully verified sha256 hash of tzsw.img for image of 4304896 bytes
vendor_boot: Successfully verified sha256 hash of vendor_boot.img for image of 25718784 bytes
vendor_dlkm: Successfully verified sha256 hashtree of vendor_dlkm.img for image of 54505472 bytes
Jika Anda tidak melihat pesan error atau kegagalan, berarti VBMeta image yang didownload kini telah berhasil diverifikasi.
Pembuatan Payload Otomatis
Untuk memudahkan Anda, kami juga menyediakan skrip Python yang dapat Anda gunakan. Dengan alat ini, Anda hanya perlu menentukan URL ke image pabrik, bukan mengambil dan mengekstrak file secara manual.
computer:dir_to_avb_repo/tools/transparency$ python3 ./pixel_factory_image_verify.py https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Fetching file from: https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Successfully downloaded file.
Successfully unpacked factory image.
Successfully unpacked factory image partitions.
Successfully unpacked bootloader image.
Successfully verified VBmeta.
Successfully extracted build fingerprint.
Successfully calculated VBMeta Digest.
The build fingerprint for factory image is: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
The VBMeta Digest for factory image is: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
A corresponding "payload.txt" file has been created.
Menjalankan perintah di atas akan mendownload paket image pabrik, mengekstrak paket, dan memverifikasi tanda tangan partisi yang ditandatangani. Setelah verifikasi berhasil, file baru bernama payload.txt akan dibuat, dan kontennya akan terlihat mirip dengan di bawah ini:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Setelah payload.txt berhasil dibuat, Anda dapat memulai langkah-langkah verifikasi penyertaan image.
Memverifikasi Penyertaan Image (Bukti Penyertaan)
Setelah membuat payload, tetapkan variabel shell (misalnya, $PAYLOAD_PATH) untuk mengarah ke jalur payload.
Alat bukti penyertaan telah dipublikasikan di
avb repositori
dalam Project Open Source Android. Untuk menjalankannya:
computer:external/avb/tools/transparency/verify$ PAYLOAD_PATH=../payload.txt
computer:external/avb/tools/transparency/verify$ go build cmd/verifier/verifier.go
computer:external/avb/tools/transparency/verify$ ./verifier --payload_path=${PAYLOAD_PATH} --log_type=pixel
Pemverifikasi menggunakan checkpoint dan konten log (yang ditemukan di direktori petak) untuk memeriksa apakah payload image Anda ada di log transparansi, yaitu apakah payload tersebut dipublikasikan oleh Google.
Output perintah ditulis ke stdout:
OK. inclusion check success!jika image disertakan dalam log,FAILUREjika tidak.