যাচাই পদ্ধতি

এই পৃষ্ঠায় এমন একটি পদ্ধতির রূপরেখা দেওয়া হয়েছে (যা সর্বোচ্চ নিশ্চয়তার সাথে) যার মাধ্যমে আপনি আপনার পিক্সেল ডিভাইসে পিক্সেল ইমেজের একটি বৈধ সংস্করণ চালাতে পারবেন। এর জন্য আপনাকে আপনার কম্পিউটারে একটি ফ্যাক্টরি ইমেজ ডাউনলোড করতে হবে এবং ডিভাইসে ফ্ল্যাশ করার আগে ডাউনলোড করা আর্টিফ্যাক্টটির উপর একটি লগ ইনক্লুশন প্রুফ সম্পাদন করতে হবে

আপনার পিক্সেল ফ্যাক্টরি ইমেজ কীভাবে যাচাই করবেন

যাচাইকরণের পূর্বশর্ত

আর্টিফ্যাক্টটি (ফার্মওয়্যার বা এপিকে) দাবি অনুযায়ী আছে কিনা তা যাচাই করার আগে, নিশ্চিত করুন যে নেটওয়ার্ক-সংযুক্ত কম্পিউটারে নিম্নলিখিত টুলগুলো উপলব্ধ আছে। যাচাইয়ের লক্ষ্যের উপর নির্ভর করে, আপনার এগুলোর সবগুলোর প্রয়োজন নাও হতে পারে।

গোলাং

যাচাইকরণ টুলটি Go ভাষায় লেখা হয়েছে। এটি বিল্ড করার জন্য Go সাইট থেকে Go 1.24 বা তার পরবর্তী সংস্করণ ইনস্টল করুন।

অ্যান্ড্রয়েড ডিবাগ ব্রিজ (ADB)

ADB হলো এমন একটি টুল যা অ্যান্ড্রয়েড ডিভাইসের সাথে যোগাযোগ করে ইমেজ পরীক্ষা করতে বা APK ফাইল এক্সট্র্যাক্ট করতে ব্যবহৃত হয় এবং এটি অ্যান্ড্রয়েড SDK প্ল্যাটফর্ম টুলস ওয়েবসাইটে পাওয়া যায়।

অন্তর্ভুক্তি প্রমাণ যাচাইকারী

ইনক্লুশন প্রুফ ভেরিফায়ার হলো একটি গো মডিউল, যা ট্রান্সপারেন্সি লগ কোয়েরি করে এবং কোনো আর্টিফ্যাক্ট সেই লগে অন্তর্ভুক্ত আছে কিনা তা আউটপুট হিসেবে জানায়। এটি 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 গিটহাব রিপোজিটরিটি ক্লোন করতে:

computer:~$ git clone https://github.com/android/android-binary-transparency

AAPT2

AAPT2 (অ্যান্ড্রয়েড অ্যাসেট প্যাকেজিং টুল) হলো একটি বিল্ড টুল যা একটি অ্যান্ড্রয়েড অ্যাপের রিসোর্সসমূহ কম্পাইল এবং প্যাকেজ করতে ব্যবহৃত হয়। এটি অ্যান্ড্রয়েড এসডিকে বিল্ড টুলস সংস্করণ ২৬.০.২ এবং তার পরবর্তী সংস্করণগুলোতে একটি স্বতন্ত্র টুল হিসেবে পাওয়া যায়।

বান্ডেলটুল

bundletool হলো একটি টুল যা অ্যান্ড্রয়েড অ্যাপ বান্ডেল (AAB) তৈরি করতে ব্যবহৃত হয়। এটি এপিকে (APK) কোড সিগনেচার যাচাই করতেও ব্যবহার করা যায়। এটি গিটহাব (GitHub) থেকে ডাউনলোড করা যায়।

wget অথবা curl

wget এবং curl হলো এমন টুল যা ইন্টারনেট থেকে ফাইল পুনরুদ্ধার বা ডাউনলোড করতে ব্যবহার করা যায়। এই টুলগুলোর যেকোনো একটি আপনার সিস্টেমে ইনস্টল করা আছে কিনা তা নিশ্চিত করুন, কারণ ভেরিফিকেশন স্ক্রিপ্টগুলো এগুলোর ওপর নির্ভর করতে পারে।

Avbtool

avbtool ফ্যাক্টরি ইমেজের VBMeta ডাইজেস্ট গণনা করতে এবং বাইনারি যাচাই করতে ব্যবহৃত হয়। avb রিপোজিটরি ক্লোন করার পর (যেমনটি ইনক্লুশন প্রুফ ভেরিফায়ার বিভাগে দেখানো হয়েছে), ক্লোন করা avb ডিরেক্টরির মধ্যে avbtool.py পাওয়া যাবে। আপনাকে এই ডিরেক্টরিটি আপনার $PATH এনভায়রনমেন্ট ভেরিয়েবলে যোগ করতে হবে।

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Fbpacktool

fbpacktool হলো একটি পাইথন স্ক্রিপ্ট যা পিক্সেলের bootloader.img এর ভেতরের উপাদানগুলো আনপ্যাক করতে ব্যবহৃত হয়। আপনি যদি APK ভেরিফাই করেন, তবে এটির প্রয়োজন নেই। এই টুলটি গুরুত্বপূর্ণ কারণ এটি avbtool.py ভেরিফিকেশনের জন্য প্রয়োজনীয় ইমেজগুলো খুঁজে পেতে সাহায্য করে।

এই টুলটি ব্যবহার করার জন্য, আপনার avbtool.py যে ডিরেক্টরিতে রয়েছে সেখানে নিম্নলিখিত তিনটি পাইথন স্ক্রিপ্ট ডাউনলোড করুন, fbpacktool.py এক্সিকিউটেবল করুন এবং সুবিধার জন্য fbpacktool.py তে fbpacktool নামে একটি সিমলিঙ্ক তৈরি করুন।

আপনার যদি 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 সাহায্য করে। নিশ্চিত করুন যে এটি আপনার সিস্টেমে ইনস্টল করা আছে। আপনি আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালিয়ে এবং ফেরত আসা ফলাফলটি খালি নয় তা নিশ্চিত করে এটি পরীক্ষা করতে পারেন:

computer:~$ which openssl
/usr/bin/openssl

যাচাইকরণের জন্য পেলোড তৈরি করুন

আপনার ডিভাইসে থাকা ইমেজ অথবা পিক্সেল ফ্যাক্টরি ইমেজ ওয়েবসাইট থেকে ডাউনলোড করা কোনো ইমেজ যাচাই করার জন্য, আপনাকে প্রথমে বিল্ড ফিঙ্গারপ্রিন্ট এবং ভিবিমেটা ডাইজেস্ট থেকে সেই ইমেজের সাথে সঙ্গতিপূর্ণ পেলোডটি তৈরি করতে হবে। এর জন্য দুটি বিকল্প রয়েছে, ম্যানুয়াল বা অটোমেটিক, যা নিচে বর্ণনা করা হলো।

  • বিল্ড ফিঙ্গারপ্রিন্ট: ফ্যাক্টরি ইমেজের একটি স্ট্রিং শনাক্তকারী।
    • উদাহরণ: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
  • ভিবিমেটা ডাইজেস্ট: একটি SHA-256 ক্রিপ্টোগ্রাফিক ডাইজেস্ট যা ফ্যাক্টরি ইমেজের বিভিন্ন অংশকে একত্রিত করে।
    • উদাহরণ: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

ম্যানুয়াল পেলোড নির্মাণ

যাচাইকরণের জন্য ম্যানুয়ালি পেলোড তৈরি করতে, আপনাকে payload.txt একটি টেক্সট ফাইল তৈরি করতে হবে, যার এক লাইনে বিল্ড ফিঙ্গারপ্রিন্ট এবং তার পরের লাইনে একটি খালি নতুন লাইনসহ VBMeta ডাইজেস্ট থাকবে (সঠিক ফরম্যাটের জন্য অনুগ্রহ করে লগ কন্টেন্ট বিভাগটি দেখুন)।

ফ্যাক্টরি ইমেজ ওয়েবসাইটের ধাপগুলো অনুসরণ করার পর, payload.txt ফাইলের বিষয়বস্তু দেখতে এইরকম হবে:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
পিক্সেল ফ্যাক্টরি ইমেজ ওয়েবসাইট থেকে ভিবিমেটা ডাইজেস্ট এবং বিল্ড ফিঙ্গারপ্রিন্ট বের করা

আপনি যখন পিক্সেল ফ্যাক্টরি ইমেজ ওয়েবসাইট থেকে একটি ফ্যাক্টরি ইমেজ ডাউনলোড করবেন, তখন আপনাকে ডাউনলোড করা ফাইলটি আনজিপ করতে হবে, যা সেই স্থানে আরেকটি ফোল্ডার তৈরি করবে। নতুন তৈরি হওয়া ফোল্ডারটিতে যান এবং স্বতন্ত্র *.img ফাইলগুলো পাওয়ার জন্য সংশ্লিষ্ট image-*.zip ফাইলটি আনজিপ করুন। এই বাইনারিগুলো হলো পার্টিশন ইমেজ। নিশ্চিত করুন যে 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 ডাইজেস্ট গণনা করতে পারেন।

আপনার $PATHavbtool.py যুক্ত করার পর, আপনি এইমাত্র ডাউনলোড করা ফ্যাক্টরি ইমেজটির বিল্ড ফিঙ্গারপ্রিন্ট বের করতে এবং 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 রিপোজিটরিতে একটি ইনক্লুশন প্রুফ টুল প্রকাশ করা হয়েছে। এটি চালানোর জন্য:

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

আপনার ইমেজ পেলোডটি ট্রান্সপারেন্সি লগে আছে কিনা, অর্থাৎ সেটি গুগল দ্বারা প্রকাশিত কিনা, তা যাচাই করার জন্য ভেরিফায়ার চেকপয়েন্ট এবং লগের বিষয়বস্তু (যা টাইল ডিরেক্টরিতে পাওয়া যায়) ব্যবহার করে।

কমান্ডের আউটপুট stdout-এ লেখা হয়:

  • OK. inclusion check success! যদি ছবিটি লগে অন্তর্ভুক্ত থাকে,
  • তা না হলে FAILURE