روش تایید

این صفحه روشی را (با بالاترین درجه اطمینان) نشان می‌دهد تا اطمینان حاصل شود که می‌توانید یک نسخه قانونی از تصویر Pixel را در دستگاه Pixel خود اجرا کنید. این شامل بارگیری یک تصویر کارخانه بر روی رایانه شما و انجام یک اثبات ثبت گزارش روی مصنوع دانلود شده قبل از فلش کردن آن بر روی دستگاه شما است.

چگونه تصویر کارخانه پیکسل خود را تأیید کنید

پیش نیازهای تایید

قبل از اینکه تأیید کنید تصویر کارخانه ای که به تازگی دانلود کرده اید مطابق با ادعای ما است، باید موارد زیر را از یک رایانه متصل به شبکه انجام دهید.

گولنگ

ابزار تأیید در Go نوشته شده است. برای ساخت آن، Go 1.17 یا جدیدتر را از سایت Go نصب کنید.

wget یا curl

wget و curl ابزارهایی هستند که می توانند برای بازیابی یا دانلود فایل ها از اینترنت استفاده شوند. مطمئن شوید که یکی از این ابزارها را روی سیستم خود نصب کرده باشید، زیرا بقیه این راهنما و اسکریپتی که ما ارائه می کنیم متکی است که یکی از آنها وجود دارد.

Avbtool

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 یک اسکریپت پایتون است که برای باز کردن اجزای جداگانه در bootloader.img Pixel استفاده می‌شود. این ابزار برای اینکه به avbtool.py اجازه دهد تصاویر مورد نیاز برای تأیید را پیدا کند، مهم است.

برای استفاده از این ابزار، باید سه اسکریپت پایتون زیر را در دایرکتوری که 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 بسازید. همانطور که در زیر توضیح داده شده دو گزینه وجود دارد، دستی یا خودکار.

  • Build Fingerprint: شناسه رشته ای از تصویر کارخانه
    • مثال: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
  • VBMeta Digest: خلاصه رمزنگاری SHA-256 که قطعات مختلف تصاویر کارخانه را به هم متصل می کند.
    • مثال: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

ساخت بار دستی

برای تولید دستی بار برای تأیید، باید یک فایل متنی به نام payload.txt ایجاد کنید که حاوی اثر انگشت ساخت در یک خط و سپس خلاصه VBMeta در خط بعدی، با یک خط جدید خالی است (لطفاً به بخش Log Content مراجعه کنید. فرمت دقیق).

پس از انجام مراحل وب سایت Factory Image ، محتوای فایل payload.txt باید به شکل زیر باشد:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
استخراج VBMeta Digest و ساخت اثر انگشت از وب سایت Pixel Factory Image

هنگامی که یک تصویر کارخانه را از وب سایت Pixel Factory Image دانلود می کنید، باید فایل دانلود شده را از حالت فشرده خارج کنید، که پوشه دیگری در محل ایجاد می شود. به پوشه جدید ایجاد شده بروید و image-*.zip مرتبط را از حالت فشرده خارج کنید تا فایل های *.img را به دست آورید. این باینری ها تصاویر پارتیشن هستند. مطمئن شوید که یک فایل vbmeta.img در بین فایل های 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 و دو فایل پایتون دیگر را دانلود کنید ( fbpack.py و packedstruct.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 تصویر دانلود شده اکنون با موفقیت تأیید شده است.

ساخت بار خودکار

برای راحتی شما، ما همچنین یک اسکریپت پایتون ارائه کرده ایم که می توانید از آن استفاده کنید. با استفاده از این ابزار، به جای واکشی و باز کردن فایل‌ها به صورت دستی، فقط باید 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 منتشر شده است.

خروجی دستور در stdout نوشته می شود:

  • OK اگر تصویر در گزارش گنجانده شده باشد،
  • FAILURE اگر نیست.