На этой странице описан метод (с высочайшей степенью достоверности), позволяющий гарантировать, что вы сможете запустить законную версию образа Pixel на своем устройстве Pixel. Это включает в себя загрузку заводского образа на ваш компьютер и выполнение проверки включения журнала для загруженного артефакта перед его прошивкой на ваше устройство.
Как проверить образ Pixel Factory
Предварительные условия для проверки
Прежде чем приступить к проверке соответствия только что загруженного заводского образа нашему заявлению, вам необходимо выполнить следующие действия на компьютере, подключенном к сети.
Голанг
Инструмент проверки написан на Go. Для его сборки установите Go 1.17 или новее с сайта Go .
wget или скручивание
wget и Curl — это инструменты, которые можно использовать для получения или загрузки файлов из Интернета. Обязательно установите любой из этих инструментов в вашей системе, поскольку остальная часть этого руководства и предоставляемый нами скрипт полагаются на наличие одного из них.
Авбтул
avbtool используется для вычисления дайджеста VBMeta заводских образов и проверки двоичных файлов.
Вы можете скачать его из репозитория AOSP с помощью команды ниже, а более подробную информацию найти в связанной документации .
computer:~$ git clone https://android.googlesource.com/platform/external/avb
После клонирования этого репозитория avbtool.py
можно будет найти в каталоге клонированного репозитория avb
. Кроме того, вам следует добавить этот каталог в переменную среды $PATH
.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Верификатор доказательства включения
Верификатор доказательства включения — это модуль Go, который запрашивает журнал прозрачности изображений Pixel Factory и выводит информацию о том, включено ли изображение в журнал.
После клонирования репозитория AVB, указанного выше, исходный код верификатора находится в tools/transparency/verify/
Fbpacktool
fbpacktool — это скрипт Python, который используется для распаковки отдельных компонентов в bootloader.img
Pixel. Этот инструмент важен для того, чтобы avbtool.py
мог обнаружить необходимые изображения для проверки.
Чтобы использовать этот инструмент, вам необходимо загрузить следующие три сценария Python в каталог, где находится ваш avbtool.py
, сделать fbpacktool.py
исполняемым и для удобства создать символическую ссылку с именем fbpacktool
на fbpacktool.py
.
Если у вас есть 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
Если у вас есть 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, который поможет выполнять различные криптографические операции с использованием терминала в рабочем процессе проверки. Убедитесь, что он установлен в вашей системе. Вы можете проверить свой терминал, выполнив следующую команду, и убедиться, что возвращаемый результат не пуст. Например:
computer:~$ which openssl
/usr/bin/openssl
Создайте полезную нагрузку для проверки
Чтобы проверить изображение, которое есть на вашем устройстве или загруженное с веб-сайта Pixel Factory Image, вы должны сначала создать полезную нагрузку, соответствующую этому изображению, из Build Fingerprint и VBMeta Digest. Существует два варианта: ручной или автоматический, как описано ниже.
- Отпечаток сборки: строковый идентификатор заводского образа.
- Пример:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
- Пример:
- VBMeta Digest: криптографический дайджест SHA-256, который связывает вместе различные части заводских образов.
- Пример:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Пример:
Ручное построение полезной нагрузки
Чтобы вручную сгенерировать полезные данные для проверки, вам необходимо создать текстовый файл payload.txt
, который содержит отпечаток сборки в одной строке, а затем дайджест VBMeta в следующей строке с пустой новой строкой (см. раздел «Содержимое журнала» для получения дополнительной информации). точный формат).
После выполнения шагов с веб-сайта Factory Image содержимое файла payload.txt
должно выглядеть следующим образом:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Извлечение дайджеста VBMeta и отпечатка сборки с веб-сайта Pixel Factory Image
Когда вы загружаете заводской образ с веб-сайта Pixel Factory Image , вам нужно будет разархивировать загруженный файл, в результате чего на его месте будет создана еще одна папка. Перейдите во вновь созданную папку и разархивируйте связанный 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\..*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
Ручная проверка загруженного заводского образа
Чтобы правильно проверить загруженный заводской образ, вам необходимо загрузить fbpacktool.py и два других файла Python, от которых он зависит ( fbpack.py и packagedstruct.py ), чтобы распаковать компоненты в 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 с открытым исходным кодом. Чтобы запустить его:
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}
Верификатор использует контрольную точку и содержимое журнала (находится в каталоге плиток ), чтобы проверить, что полезная нагрузка вашего изображения находится в журнале прозрачности, то есть опубликована ли она Google.
Вывод команды записывается в стандартный вывод:
-
OK
, если изображение включено в журнал, -
FAILURE
если это не так.