Auf dieser Seite wird eine Methode beschrieben, mit der Sie mit höchster Wahrscheinlichkeit sicherstellen können, dass Sie eine legitime Version des Pixel-Images auf Ihrem Pixel-Gerät ausführen. Dazu müssen Sie ein Factory-Image auf Ihren Computer herunterladen und einen Log-Inclusion-Proof für das heruntergeladene Artefakt durchführen, bevor Sie es auf Ihr Gerät flashen.
Pixel-Factory-Image überprüfen
Bestätigungsgrundlagen
Bevor Sie überprüfen, ob das Artefakt (Firmware oder APK) mit der Behauptung übereinstimmt, müssen die folgenden Tools auf einem mit dem Netzwerk verbundenen Computer verfügbar sein. Je nach Prüfziel benötigen Sie möglicherweise nicht alle.
Golang
Das Überprüfungstool ist in Go geschrieben. Um es zu erstellen, installieren Sie Go 1.24 oder höher von der Go-Website.
Android Debug Bridge (ADB)
ADB ist ein Tool, das mit einem Android-Gerät kommuniziert, um das Image zu prüfen oder
APKs zu extrahieren. Es ist auf der Website Android SDK Platform Tools verfügbar.
Inclusion-Proof-Prüfung
Die Inclusion-Proof-Prüfung ist ein Go-Modul, das das Transparenzlog abfragt und ausgibt, ob ein Artefakt im Log enthalten ist.
Es wird im android-binary-transparency GitHub-Repository unter
https://github.com/android/android-binary-transparency/tree/main veröffentlicht.
So klonen Sie das AOSP-Repository avb:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
So klonen Sie das GitHub-Repository android-binary-transparency:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool) ist ein Build-Tool, mit dem die Ressourcen einer Android-App kompiliert und verpackt werden. Es ist als eigenständiges Tool in Android SDK Build Tools Version 26.0.2 und höher verfügbar.
bundletool
bundletool ist ein Tool zum Erstellen eines Android App Bundle (AAB). Es kann auch verwendet werden, um APK-Codesignaturen zu überprüfen.
Es kann von GitHub heruntergeladen werden.
wget oder curl
wget und curl sind Tools, mit denen Sie Dateien aus dem Internet abrufen oder herunterladen können. Achten Sie darauf, dass eines dieser Tools installiert ist, da die Überprüfungsskripts möglicherweise darauf angewiesen sind.
Avbtool
avbtool
wird verwendet, um den VBMeta-Digest der Factory-Images zu berechnen und
Binärdateien zu überprüfen.
Nach dem Klonen des avb-Repositorys (wie im Abschnitt Inclusion-Proof-Prüfung
gezeigt) finden Sie avbtool.py im geklonten avb-Verzeichnis.
Sie sollten dieses Verzeichnis der Umgebungsvariablen $PATH hinzufügen.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
ist ein Python-Skript, mit dem einzelne Komponenten in Pixel's
bootloader.img entpackt werden.
Wenn Sie APKs überprüfen, benötigen Sie es nicht.
Dieses Tool ist wichtig, da avbtool.py damit die für die Überprüfung erforderlichen Images ermitteln kann.
fbpacktool erfordert Python 3.6 oder höher und das
PyYAML-Paket
(z. B. python3 -m pip install pyyaml).
Um dieses Tool zu verwenden, laden Sie die folgenden sechs Python-Skripts
in das Verzeichnis herunter, in dem sich avbtool.py befindet,
machen Sie fbpacktool.py ausführbar,
und erstellen Sie einen Symlink mit dem Namen fbpacktool zu fbpacktool.py.
Wenn Sie wget haben:
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
Wenn Sie curl haben:
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 hilft bei der Durchführung verschiedener kryptografischer Vorgänge über das Terminal im Überprüfungsablauf. Achten Sie darauf, dass es auf Ihrem System installiert ist. Sie können das in Ihrem Terminal prüfen, indem Sie den folgenden Befehl ausführen und darauf achten, dass das zurückgegebene Ergebnis nicht leer ist:
computer:~$ which openssl
/usr/bin/openssl
Nutzlast für die Überprüfung erstellen
Wenn Sie das Image auf Ihrem Gerät oder einen Download von der Website Pixel Factory Image überprüfen möchten, müssen Sie zuerst die entsprechende Nutzlast aus dem Build-Fingerabdruck und dem VBMeta-Digest erstellen. Es gibt zwei Optionen: manuell oder automatisch, wie unten beschrieben.
- Build-Fingerabdruck: Eine String-Kennung des Factory-Image
- Beispiel:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
- Beispiel:
- VBMeta-Digest: Ein kryptografischer SHA-256-Digest, der die verschiedenen Teile der Factory-Images miteinander verbindet
- Beispiel:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Beispiel:
Manuelle Nutzlast-Erstellung
Um die Nutzlast für die Überprüfung manuell zu generieren, müssen Sie eine Text
datei, payload.txt erstellen, die den Build-Fingerabdruck in einer Zeile und dann den
VBMeta-Digest in der nächsten Zeile enthält. Zwischen den Zeilen muss eine leere Zeile sein (das genaue Format finden Sie im Abschnitt
Log-Inhalt).
Wenn Sie die Schritte auf der Website
Pixel Factory Image ausgeführt haben,
sollte der Inhalt der Datei payload.txt so aussehen:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
VBMeta-Digest und Build-Fingerabdruck von der Website Pixel Factory Image extrahieren
Wenn Sie ein Factory-Image von der Website
Pixel Factory Imageherunterladen, müssen Sie die heruntergeladene Datei entzippen. Dadurch wird ein weiterer Ordner erstellt. Rufen Sie den neu erstellten Ordner auf und entzippen Sie die zugehörige Datei image-*.zip, um einzelne *.img-Dateien zu erhalten. Diese Binärdateien sind Partition-Images. Achten Sie darauf, dass unter den IMG-Dateien eine Datei vbmeta.img vorhanden ist.
Auf dem Bildschirm sollte Folgendes zu sehen sein:
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
Sie können den Build-Fingerabdruck extrahieren und den VBMeta-Digest aus allen heruntergeladenen Dateien berechnen.
Nachdem avbtool.py für $PATH verfügbar gemacht wurde, können Sie die folgenden Befehle über das Terminal ausführen, um den gerätespezifischen Build-Fingerabdruck zu extrahieren und den VBMeta-Digest des gerade heruntergeladenen Factory-Image zu berechnen:
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
Heruntergeladenes Factory-Image manuell überprüfen
Um das heruntergeladene Factory-Image richtig zu überprüfen, müssen Sie
download
fbpacktool.py
und die anderen Python-Dateien herunterladen, von denen es abhängt (eine vollständige Liste und Download
befehle finden Sie unter
Fbpacktool in den Voraussetzungen)
um die Komponenten in bootloader.img zu entpacken, da sie einzeln
in der VBMeta-Struktur beschrieben werden. Sobald Sie das Entpackungstool haben, können Sie fbpacktool.py verwenden, um das Bootloader-Image zu entpacken. Beispiel:
computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img
In diesem Verzeichnis sollten weitere IMG-Dateien zu sehen sein.
Jetzt können Sie avbtool.py verwenden, um manuell zu überprüfen, ob die Signaturen der verschiedenen Partitionen übereinstimmen.
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
Wenn keine Fehler- oder Fehlermeldungen angezeigt werden, wurde die VBMeta des heruntergeladenen Image jetzt erfolgreich überprüft.
Automatische Nutzlast-Erstellung
Zur Vereinfachung haben wir auch ein Python-Skript bereitgestellt, das Sie verwenden können. Mit diesem Tool müssen Sie nicht manuell Dateien abrufen und entzippen, sondern nur die URL zum Factory-Image angeben.
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.
Wenn Sie den obigen Befehl ausführen, wird das Factory-Image-Bundle heruntergeladen, entzippt und die Signaturen der signierten Partitionen werden überprüft. Nach erfolgreicher Überprüfung wird eine neue Datei mit dem Namen payload.txt erstellt. Der Inhalt sollte in etwa so aussehen:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Nachdem `payload.txt` erfolgreich erstellt wurde, können Sie mit der Überprüfung der Image-Inclusion Schritte beginnen.
Image-Inclusion überprüfen (Inclusion-Proof)
Nachdem Sie die Nutzlast erstellt haben, legen Sie eine Shell-Variable (z.B. $PAYLOAD_PATH) fest, die auf den Pfad zur Nutzlast verweist.
Im Repository
avb `avb`
im Open-Source-Projekt für Android wurde ein Inclusion-Proof-Tool veröffentlicht. So führen Sie es aus:
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
Die Prüfung verwendet den Prüfpunkt und die Log-Inhalte (im Verzeichnis des Titels), um zu prüfen, ob sich die Image-Nutzlast im Transparenzlog befindet, d. h. ob sie von Google veröffentlicht wurde.
Die Ausgabe des Befehls wird in „stdout“ geschrieben:
OK. inclusion check success!, wenn das Image im Log enthalten istFAILURE, wenn das nicht der Fall ist