На этой странице описан метод, который с высокой степенью достоверности позволяет убедиться, что на устройстве Pixel установлена официальная версия образа Pixel. Для этого нужно скачать заводской образ на компьютер и выполнить доказательство включения в журнал для скачанного объекта, прежде чем прошить его на устройство.
Как проверить заводской образ Pixel
Что нужно, чтобы получить статус YouTube Live Verified
Прежде чем проверять, соответствует ли объект (встроенное ПО или APK) заявлению, убедитесь, что на компьютере, подключенном к сети, доступны следующие инструменты: В зависимости от того, что вы хотите подтвердить, вам могут понадобиться не все документы.
Golang
Инструмент проверки написан на языке Go. Чтобы создать его, установите Go 1.24 или более позднюю версию с сайта Go.
Android Debug Bridge (ADB)
ADB – это инструмент, который взаимодействует с устройством Android, чтобы проверить изображение или извлечь APK-файлы. Он доступен на сайте Android SDK Platform Tools.
Инструмент проверки доказательства включения
Проверяющий доказательства включения – это модуль Go, который запрашивает журнал прозрачности и сообщает, включен ли в него артефакт.
Он опубликован в хранилище GitHub android-binary-transparency по адресу https://github.com/android/android-binary-transparency/tree/main.
Чтобы клонировать хранилище AOSP avb:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
Чтобы клонировать репозиторий android-binary-transparency на GitHub, выполните следующие действия:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool) – это инструмент сборки, который используется для компиляции и упаковки ресурсов приложения Android. Его можно найти в Android SDK Build Tools версии 26.0.2 и выше как отдельный инструмент.
bundletool
bundletool – это инструмент для создания наборов Android App Bundle (AAB). Его также можно использовать для проверки подписей кода APK.
Его можно скачать с сайта GitHub.
wget или curl;
wget и curl – это инструменты, которые можно использовать для получения или скачивания файлов из интернета. Убедитесь, что у вас установлен один из этих инструментов, так как скрипты проверки могут зависеть от них.
Avbtool
avbtool используется для вычисления дайджеста VBMeta заводских образов и проверки двоичных файлов.
После клонирования репозитория avb (как показано в разделе "Проверка подтверждения включения") avbtool.py можно найти в клонированном каталоге avb.
Добавьте этот каталог в переменную среды $PATH.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool – это скрипт Python, который используется для распаковки отдельных компонентов в bootloader.img Pixel.
Если вы проверяете APK-файлы, это не нужно.
Этот инструмент важен, поскольку позволяет avbtool.py находить необходимые изображения для проверки.
Для работы fbpacktool требуется Python 3.6 или более поздней версии и пакет PyYAML (например, python3 -m pip install pyyaml).
Чтобы использовать этот инструмент, скачайте следующие шесть скриптов Python в каталог, где находится avbtool.py, сделайте fbpacktool.py исполняемым файлом и для удобства создайте символическую ссылку с именем fbpacktool на fbpacktool.py.
Если у вас wget:
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:
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 помогает выполнять различные криптографические операции с помощью терминала в процессе проверки. Убедитесь, что он установлен в вашей системе. Чтобы проверить это в терминале, выполните следующую команду и убедитесь, что результат не пустой:
computer:~$ which openssl
/usr/bin/openssl
Как создать полезную нагрузку для проверки
Чтобы проверить образ, который есть на вашем устройстве или был скачан с сайта Pixel Factory Image, сначала нужно создать полезную нагрузку, соответствующую этому образу, на основе отпечатка сборки и дайджеста VBMeta. Есть два варианта: вручную или автоматически.
- Цифровой отпечаток сборки: строковый идентификатор заводского образа
- Пример:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
- Пример:
- Дайджест VBMeta – криптографический дайджест SHA-256, который связывает разные части заводских образов.
- Пример:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Пример:
Создание полезной нагрузки вручную
Чтобы вручную создать полезную нагрузку для проверки, вам нужно создать текстовый файл payload.txt, в котором цифровой отпечаток сборки будет указан в одной строке, а дайджест VBMeta – в следующей. Между ними должна быть пустая строка (точный формат приведен в разделе Содержимое журнала).
После выполнения инструкций на сайте с заводскими образами содержимое файла payload.txt должно выглядеть следующим образом:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Как извлечь дайджест VBMeta и цифровой отпечаток сборки с сайта заводских образов Pixel
Когда вы скачаете заводской образ с сайта, вам нужно будет распаковать архив. В результате будет создана папка. Перейдите в созданную папку и распакуйте связанный с ней файл image-*.zip, чтобы получить отдельные файлы *.img. Эти двоичные файлы представляют собой образы разделов. Убедитесь, что среди файлов img есть файл vbmeta.img.
Вы увидите примерно следующее:
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
Вы можете извлечь цифровой отпечаток сборки и вычислить дайджест VBMeta из всех скачанных файлов.
После того как avbtool.py станет доступен для $PATH, вы сможете выполнить в терминале следующие команды, чтобы извлечь цифровой отпечаток сборки для конкретного устройства и вычислить дайджест VBMeta для только что скачанного заводского образа:
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
Как вручную проверить скачанный заводской образ
Чтобы проверить скачанный заводской образ, вам нужно скачать fbpacktool.py и другие файлы Python, от которых он зависит (полный список и команды для скачивания приведены в разделе Fbpacktool). Это позволит распаковать компоненты в bootloader.img, так как они по отдельности описаны в структуре VBMeta. После этого вы сможете распаковать образ загрузчика операционной системы с помощью команды fbpacktool.py. Пример:
computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img
В этом каталоге должны появиться дополнительные файлы IMG.
Теперь вы можете использовать avbtool.py, чтобы вручную проверить, совпадают ли подписи разных разделов.
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
Если вы не видите сообщений об ошибках или сбоях, значит, VBMeta скачанного образа успешно проверен.
Автоматическое создание полезной нагрузки
Для вашего удобства мы также предоставили скрипт Python, который вы можете использовать. Вам не придется вручную скачивать и распаковывать файлы – достаточно указать URL заводского образа.
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.
После выполнения команды, указанной выше, будет скачан пакет с образом заводской версии, распакован и проверен на наличие подписей в подписанных разделах. После успешной проверки будет создан новый файл с названием payload.txt. Его содержимое должно выглядеть примерно так:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
После того как файл payload.txt будет создан, вы можете начать проверку наличия изображений.
Проверка включения образа (доказательство включения)
После того как вы создадите полезную нагрузку, задайте переменную оболочки (например,$PAYLOAD_PATH), которая будет указывать на путь к ней.
В репозитории avb проекта Android Open Source Project опубликован инструмент для проверки включения. Чтобы запустить его:
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
Проверяющий использует контрольную точку и содержимое журнала (находится в каталоге фрагментов), чтобы убедиться, что полезная нагрузка образа находится в журнале прозрачности, то есть опубликована Google.
Выходные данные команды записываются в стандартный поток вывода:
OK. inclusion check success!, если изображение включено в журнал;FAILURE, если это не так.