روش درستی‌سنجی

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

نحوه درستی‌سنجی کردن تصویر تنظیمات کارخانه Pixel

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

قبل‌از اقدام به درستی‌سنجی اینکه محصول جانبی (میان‌افزار یا APK) مطابق با ادعا است، مطمئن شوید ابزارهای زیر در رایانه‌ای متصل به شبکه دردسترس باشد. بسته به هدف درستی‌سنجی، ممکن است به همه آن‌ها نیاز نداشته باشید.

Golang

ابزار درستی‌سنجی به زبان Go نوشته شده است. برای ساختن آن، Go نسخه ۱.۲۴ یا جدیدتر را از سایت Go نصب کنید.

Android Debug Bridge (ADB)

ADB ابزاری است که با دستگاه Android ارتباط برقرار می‌کند تا تصویر را بررسی کند یا فایل‌های APK را استخراج کند، که در وب‌سایت «ابزارهای پلاتفرم کیت توسعه نرم‌افزار Android» دردسترس است.

درستی‌سنجی‌کننده «اثبات گنجاندن»

تأییدکننده اثبات گنجاندن یک ماژول Go است که گزارش شفافیت را پُرسمان می‌کند و برونداد می‌کند که آیا یک آرتیفکت در گزارش گنجانده شده است یا نه. در مخزن android-binary-transparency GitHub در 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

ابزار بسته‌بندی دارایی Android‏ (AAPT2)

‫AAPT2 (ابزار بسته‌بندی دارایی Android) ابزار ساختی است که برای کامپایل و بسته‌بندی منابع برنامه Android استفاده می‌شود. این ابزار را می‌توانید به‌عنوان ابزاری مستقل در ابزارهای ساخت کیت توسعه نرم‌افزار Android نسخه ۲۶.۰.۲ و بالاتر پیدا کنید.

دسته‌ابزار

‫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).

برای استفاده از این ابزار، باید شش اسکریپت پایتون زیر را در دایرکتوری‌ای که 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»، ابتدا باید محتوای اطلاعات مربوط به آن تصویر را از «اثر انگشت ساخت» و «خلاصه VBMeta» بسازید. دو گزینه وجود دارد، دستی یا خودکار، که در زیر شرح داده شده است.

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

ساخت پایه‌بار دستی

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

پس‌از دنبال کردن مراحل در وب‌سایت «تصویر کارخانه‌ای»، محتوای فایل payload.txt باید به این شکل باشد:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
استخراج کردن خلاصه VBMeta و اثرانگشت ساخت از وب‌سایت تصویر تنظیمات کارخانه Pixel

وقتی تصویر کارخانه‌ای را از وب‌سایت «تصویر کارخانه‌ای Pixel» بارگیری می‌کنید، باید فایل بارگیری‌شده را از حالت فشرده خارج کنید که باعث ایجاد پوشه دیگری در مکان می‌شود. به پوشه تازه ایجادشده بروید و فایل 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\.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 و دیگر فایل‌های پایتون موردنیاز آن را بارگیری کنید (برای دیدن فهرست کامل و دستورات بارگیری، Fbpacktool را در پیش‌نیازها ببینید) تا اجزای bootloader.img را ازهم باز کنید، زیرا این اجزا به‌صورت جداگانه در ساختار VBMeta شرح داده شده‌اند. وقتی ابزار باز کردن بسته را داشتید، می‌توانید از fbpacktool.py برای باز کردن بسته تصویر bootloader استفاده کنید. برای مثال:

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 تصویر بارگیری‌شده اکنون با موفقیت تأیید شده است.

ساخت خودکار پایه‌بار

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

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} --log_type=pixel

درستی‌سنج از ایست بازرسی و محتویات گزارش (موجود در دایرکتوری کاشی) برای بررسی اینکه بار محتوای تصویر شما در گزارش شفاف‌سازی است یا نه استفاده می‌کند، یعنی اینکه توسط Google منتشر شده است یا نه.

خروجی فرمان در خروجی استاندارد نوشته می‌شود:

  • OK. inclusion check success! اگر تصویر در گزارش وجود داشته باشد،
  • FAILURE اگر این‌طور نیست.