Bu sayfada, Pixel cihazınızda Pixel görüntüsünün yasal bir sürümünü çalıştırabileceğinizden emin olmanızı sağlayacak bir yöntem (en yüksek güvenilirlik derecesiyle) açıklanmaktadır. Bu işlemde, bilgisayarınıza bir fabrika görüntüsü indirmek ve cihazınıza yüklemeden önce indirilen yapıda günlük dahil etme kanıtı oluşturmak yer alır.
Pixel Fabrika Görüntünüzü Doğrulama
Doğrulama Ön Koşulları
Yapıtın (cihaz yazılımı veya APK) hak talebine uygun olduğunu doğrulamaya geçmeden önce, ağa bağlı bir bilgisayarda aşağıdaki araçların bulunduğundan emin olun. Doğrulama hedefine bağlı olarak bunların hepsine ihtiyacınız olmayabilir.
Golang
Doğrulama aracı Go ile yazılmıştır. Aracı oluşturmak için Go sitesinden Go 1.24 veya sonraki bir sürümü yükleyin.
Android Debug Bridge (ADB)
ADB, Android SDK Platform Araçları web sitesinde bulunan, resmi incelemek veya APK'ları çıkarmak için bir Android cihazla iletişim kuran bir araçtır.
Inclusion Proof doğrulayıcı
Dahil etme kanıtı doğrulayıcı, şeffaflık günlüğünü sorgulayan ve bir yapının günlüğe dahil edilip edilmediğini belirten bir Go modülüdür.
Bu kitaplık, android-binary-transparency GitHub deposunda yayınlanmıştır:
https://github.com/android/android-binary-transparency/tree/main
AOSP avb deposunu klonlamak için:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
android-binary-transparency GitHub deposunu klonlamak için:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool), Android uygulamalarının kaynaklarını derlemek ve paketlemek için kullanılan bir derleme aracıdır. Bu araç, Android SDK Derleme Araçları'nın 26.0.2 ve sonraki sürümlerinde bağımsız bir araç olarak bulunur.
bundletool
bundletool, Android App Bundle (AAB) oluşturmak için kullanılan bir araçtır. APK kodu imzalarını doğrulamak için de kullanılabilir.
Bu araç GitHub'dan indirilebilir.
wget veya curl
wget ve curl İnternet'ten dosya almak veya indirmek için kullanılabilen araçlardır. Doğrulama komut dosyaları bu araçlara bağlı olabileceğinden, bu araçlardan birinin yüklü olduğundan emin olun.
Avbtool
avbtool, fabrika görüntülerinin VBMeta özetini hesaplamak ve ikili dosyaları doğrulamak için kullanılır.
avb deposu klonlandıktan sonra (dahil etme kanıtı doğrulayıcı bölümünde gösterildiği gibi) avbtool.py, klonlanan avb dizininde bulunabilir.
Bu dizini $PATH ortam değişkeninize eklemeniz gerekir.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool, Pixel'in bootloader.img içindeki tek tek bileşenleri açmak için kullanılan bir Python komut dosyasıdır.
APK'ları doğruluyorsanız bu bilgiye ihtiyacınız yoktur.
Bu araç, avbtool.py'nın doğrulama için gerekli resimleri bulmasını sağladığı için önemlidir.
Bu aracı kullanmak için aşağıdaki üç Python komut dosyasını avbtool.py dosyanızın bulunduğu dizine indirmeniz, fbpacktool.py dosyasını yürütülebilir hale getirmeniz ve kolaylık sağlamak için fbpacktool adlı bir sembolik bağlantı oluşturarak fbpacktool.py dosyasına bağlamanız gerekir.
wget kullanıyorsanız:
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
curl kullanıyorsanız:
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, doğrulama iş akışında terminali kullanarak çeşitli kriptografik işlemlerin gerçekleştirilmesine yardımcı olur. Sisteminize yüklendiğinden emin olun. Aşağıdaki komutu çalıştırıp döndürülen sonucun boş olmadığından emin olarak terminalinizde kontrol edebilirsiniz:
computer:~$ which openssl
/usr/bin/openssl
Doğrulama için Yükü Oluşturma
Cihazınızdaki görüntüyü veya Pixel Factory Image web sitesinden indirilen bir dosyayı doğrulamak için öncelikle Build Fingerprint ve VBMeta Digest'ten bu görüntüye karşılık gelen yükü oluşturmanız gerekir. Aşağıda açıklandığı gibi iki seçenek vardır: manuel veya otomatik.
- Derleme parmak izi: Fabrika görüntüsünün dize tanımlayıcısı
- Örnek:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
- Örnek:
- VBMeta Özeti: Fabrika görüntülerinin farklı parçalarını birbirine bağlayan bir SHA-256 şifreleme özeti
- Örnek:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Örnek:
Manuel Yük Oluşturma
Doğrulama için yükü manuel olarak oluşturmak üzere, bir satırda derleme parmak izini, bir sonraki satırda ise VBMeta özetini içeren bir metin dosyası payload.txt oluşturmanız gerekir. Satırlar arasında boş bir yeni satır olmalıdır (Lütfen tam biçim için Günlük İçeriği bölümüne bakın).
Fabrika İmajı web sitesindeki adımları uyguladıktan sonra payload.txt dosyasının içeriği şu şekilde görünmelidir:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
VBMeta Digest ve Build Fingerprint'i Pixel Factory Image web sitesinden çıkarma
Pixel Fabrika Görüntüsü web sitesinden fabrika görüntüsü indirdiğinizde, indirilen dosyayı zip'ten çıkarmanız gerekir. Bu işlem, yerinde başka bir klasör oluşturur. Yeni oluşturulan klasöre gidin ve ilişkili image-*.zip dosyasının sıkıştırmasını açarak tek tek *.img dosyalarını elde edin. Bu ikili dosyalar bölüm görüntüleri. img dosyaları arasında bir vbmeta.img dosyasının bulunduğundan emin olun.
Aşağıdakine benzer bir tablo görürsünüz:
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
Derleme parmak izini çıkarabilir ve indirilen tüm dosyalardan VBMeta özetini hesaplayabilirsiniz.
avbtool.py, $PATH için kullanıma sunulduktan sonra, derleme parmak izini ayıklamak ve yeni indirdiğiniz fabrika görüntüsünün VBMeta özetini hesaplamak için terminalinizden aşağıdaki komutları verebilirsiniz:
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
İndirilen fabrika görüntüsünün manuel olarak doğrulanması
İndirilen fabrika görüntüsünü doğru şekilde doğrulamak için bootloader.img içindeki bileşenleri açmak üzere fbpacktool.py ve bağlı olduğu diğer iki Python dosyasını (fbpack.py ve packedstruct.py) indirmeniz gerekir. Bu dosyalar, VBMeta yapısında ayrı ayrı açıklanmıştır. Açma aracını edindikten sonra, bootloader görüntüsünü açmak için fbpacktool.py komutunu kullanabilirsiniz. Örneğin:
computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img
Bu dizinde ek .img dosyaları görmeniz gerekir.
Artık avbtool.py kullanarak çeşitli bölümlerin imzalarının eşleştiğini manuel olarak doğrulayabilirsiniz.
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
Herhangi bir hata veya başarısızlık mesajı görmüyorsanız indirilen görüntünün VBMeta'sı başarıyla doğrulanmış demektir.
Otomatik Yük Oluşturma
Size kolaylık sağlamak için kullanabileceğiniz bir Python komut dosyası da sağladık. Bu araçla, dosyaları manuel olarak getirip sıkıştırmayı açmak yerine yalnızca fabrika görüntüsünün URL'sini belirtmeniz gerekir.
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.
Yukarıdaki komutu yürütmek, fabrika resmi paketini indirir, paketi açar ve imzalı bölümlerin imzalarını doğrular. Doğrulama işlemi başarıyla tamamlandıktan sonra payload.txt adlı yeni bir dosya oluşturulur ve içeriği aşağıdaki gibi görünür:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
payload.txt dosyanız başarıyla oluşturulduktan sonra resim ekleme doğrulama adımlarını başlatabilirsiniz.
Resim dahil etme işlemini doğrulama (dahil etme kanıtı)
Yükünüzü oluşturduktan sonra, yükün yolunu gösterecek bir kabuk değişkeni (ör.
$PAYLOAD_PATH) ayarlayın.
Android Açık Kaynak Projesi'ndeki avb deposunda
bir dahil etme kanıtı aracı yayınlandı. Çalıştırmak için:
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
Doğrulayıcı, resim yükünüzün şeffaflık günlüğünde olup olmadığını (yani Google tarafından yayınlanıp yayınlanmadığını) kontrol etmek için kontrol noktasını ve günlük içeriklerini (tile dizininde bulunur) kullanır.
Komutun çıktısı stdout'a yazılır:
OK. inclusion check success!Resim günlükte yer alıyorsa,FAILUREdeğilse.