Bu sayfada, Pixel cihazınızda Pixel imajının meşru bir sürümünü çalıştırabilmenizi sağlayacak bir yöntem (en yüksek güvenilirlik düzeyine sahip) açıklanmaktadır. Bu işlemde, bilgisayarınıza bir fabrika ayarı görüntüsü indirilir ve cihazınıza yüklemeden önce indirilen yapıda günlük dahil etme kanıtı gerçekleştirilir.
Pixel Fabrika Ayarı Görüntünüzü Doğrulama
Doğrulama Ön Koşulları
Yapının (donanım yazılımı veya APK) iddiaya 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 dilinde yazılmıştır. Aracı derlemek 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, resimleri incelemek veya APK'ları ayıklamak için Android cihazlarla iletişim kuran bir araçtır.
Dahil edilme kanıtı doğrulayıcı
Dahil edilme 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.
android-binary-transparency GitHub deposunda yayınlanı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 uygulamasının kaynaklarını derlemek ve paketlemek için kullanılan bir derleme aracıdır. Android SDK Derleme Araçları'nın 26.0.2 ve sonraki sürümlerinde bağımsız bir araç olarak bulunabilir.
bundletool
bundletool, Android App Bundle (AAB) oluşturmak için kullanılan bir araçtır. APK kod imzalarını doğrulamak için de kullanılabilir.
GitHub'dan indirilebilir.
wget veya curl
wget ve curl, internetten 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 ayarı görüntülerinin VBMeta özetini hesaplamak ve ikili programları 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 dosyasındaki bağımsız bileşenleri açmak için kullanılan bir Python komut dosyasıdır.
APK'ları doğruluyorsanız buna ihtiyacınız yoktur.
Bu araç, avbtool.py uygulamasının doğrulama için gerekli resimleri bulmasını sağladığından önemlidir.
fbpacktool, Python 3.6 veya sonraki bir sürümü ve PyYAML paketini gerektirir (ör. python3 -m pip install pyyaml).
Bu aracı kullanmak için aşağıdaki altı Python komut dosyasını avbtool.py öğenizin bulunduğu dizine indirmeniz, fbpacktool.py öğesini yürütülebilir hale getirmeniz ve kolaylık sağlamak için fbpacktool.py öğesine fbpacktool adlı bir sembolik bağlantı oluşturmanız gerekir.
wget varsa:
computer:dir_to_avbtool$ wget https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.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 -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.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şlemler yapmanıza yardımcı olur. Sisteminizde yüklü olduğundan emin olun. Aşağıdaki komutu çalıştırıp döndürülen sonucun boş olmadığından emin olarak terminalinizi 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 derleme parmak izi 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 ayarı 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 ayarı görüntülerinin farklı parçalarını birbirine bağlayan SHA-256 şifreleme özeti
- Örnek:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Örnek:
Manuel Yük Oluşturma
Doğrulama için yükü manuel olarak oluşturmak istiyorsanız bir metin dosyası (payload.txt) oluşturmanız gerekir. Bu dosyanın bir satırında derleme parmak izi, sonraki satırında ise VBMeta özeti yer almalı ve boş bir yeni satır bulunmalıdır (Tam biçim için lütfen Günlük İçeriği bölümüne bakın).
Fabrika Ayarı Görüntüsü 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
Pixel fabrika ayarı görüntüsü web sitesinden VBMeta özetini ve derleme parmak izini ayıklama
Pixel fabrika ayarı görüntüsü web sitesinden bir fabrika ayarı görüntüsü indirdiğinizde, indirilen dosyanın sıkıştırmasını açmanız gerekir. Bu işlem, aynı yerde başka bir klasör oluşturur. Yeni oluşturulan klasöre gidin ve ilgili image-*.zip dosyasını açarak ayrı *.img dosyalarını elde edin. Bu ikili dosyalar bölüm resimleridir. 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
İndirilen tüm dosyalardan derleme parmak izini çıkarabilir ve VBMeta özetini hesaplayabilirsiniz.
avbtool.py, $PATH tarafından kullanılabilir hale getirildikten sonra terminalinizden aşağıdaki komutları çalıştırarak cihaza özgü derleme parmak izini çıkarabilir ve az önce indirdiğiniz fabrika ayarı görüntüsünün VBMeta özetini hesaplayabilirsiniz:
computer:dir_containing_unzipped_factory_image~$ grep -a 'ro\.product\.build\.fingerprint=google/.*/release-keys' product.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 Ayarı Görüntüsünü Manuel Olarak Doğrulama
İndirilen fabrika ayarı görüntüsünü doğru şekilde doğrulamak için
fbpacktool.py
ve bağımlı olduğu diğer Python dosyalarını indirmeniz gerekir (Tam liste ve indirme komutları için ön koşullardaki
Fbpacktool bölümüne bakın).
Bu dosyalar, bootloader.img içindeki bileşenleri VBMeta yapısında ayrı ayrı açıklanan şekilde açmak için kullanılır. Paket açıcıyı aldıktan sonra bootloader görüntüsünü açmak için fbpacktool.py aracını kullanabilirsiniz. Örneğin:
computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img
Bu dizinde ek .img dosyalarının göründüğünü görebilirsiniz.
Artık çeşitli bölümlerin imzalarının eşleştiğini manuel olarak doğrulamak için avbtool.py aracını kullanabilirsiniz.
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 ekledik. Bu araç sayesinde, dosyaları manuel olarak getirip sıkıştırmayı açmak yerine yalnızca fabrika ayarı görüntüsünün URL'sini belirtmeniz yeterlidir.
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 komut yürütüldüğünde fabrika ayarı görüntüsü paketi indirilir, paketin sıkıştırması açılır ve imzalı bölümlerin imzaları doğrulanır. Doğrulama işlemi başarıyla tamamlandıktan sonra payload.txt adlı yeni bir dosya oluşturulur ve dosyanın içeriği aşağıdakine benzer:
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 ekleme doğrulaması (ekleme 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ı. Uygulamak 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ı, kontrol noktasını ve günlük içeriklerini (karolar dizininde bulunur) kullanarak resim yükünüzün şeffaflık günlüğünde olduğunu, yani Google tarafından yayınlandığını kontrol eder.
Komutun çıkışı stdout'a yazılır:
- Resim günlüğe dahil edilmişse
OK. inclusion check success!, - Aksi takdirde
FAILURE.