1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cfig-Android_boot_image_editor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 16.03.2025 15:48 e73b68f

Редактор изображений загрузки Android

CI Лицензия

Инструмент для обратной инженерии изображений ROM Android.

Требования

Убедитесь, что у вас установлен JDK11+ (Java SE Development Kit) и Python3 (Python).

  • Linux / WSL: sudo apt install git device-tree-compiler lz4 xz-utils zlib1g-dev openjdk-17-jdk gcc g++ python3 python-is-python3 p7zip-full android-sdk-libsparse-utils erofs-utils

  • Mac: brew install lz4 xz dtc

  • Windows: Установите OpenSSL и компилятор деревьев устройств с помощью Chocolatey choco install openssl dtc-msys2

Начало работы

Поместите ваш boot.img в текущую директорию, затем запустите задачу Gradle 'unpack':

cp <original_boot_image> boot.img
./gradlew unpack

Вы получите разглаженный ядро и файловую систему /root под ./build/unzip_boot:

build/unzip_boot/
├── boot.json     (информация об изображении загрузки)
├── boot.avb.json (только AVB)
├── kernel
├── second        (второе загрузочное программное обеспечение, если существует)
├── dtb           (dtb, если существует)
├── dtbo          (dtbo, если существует)
└── root          (извлечённая initramfs)

Затем вы можете редактировать фактическое содержимое файлов, таких как rootfs или ядро. Теперь соберите boot.img снова

./gradlew pack

Вы получите собранное boot.img в $(CURDIR): boot.img.signed

Отлично, вы сделали это! Последний шаг — звезда этого репозитория :smile

живая демонстрация

Поддерживаемые типы изображений ROM | Тип изображения | Имена файлов | Платформы | Примечание |

| ---------------- | ------------------------------------------------------------ | ----------- | ------------------------ | | загрузка | boot.img, init_boot.img, boot-debug.img, boot-test-harness.img | все | | | загрузка производителя | vendor_boot.img, vendor_boot-debug.img, vendor_kernel_boot.img | все | | | восстановление | recovery.img, recovery-two-step.img | все | | | vbmeta | vbmeta.img, vbmeta_system.img и т.д. | все | | | dtbo | dtbo.img | Linux & Mac| | | dtb | *.dtb | Linux & Mac| | | разряженные изображения | system.img, vendor.img, product.img и т.д. | Linux | | | пакет OTA | payload.bin | все | Windows git-bash | Обратите внимание, что boot.img ДОЛЖЕН соответствовать процессу проверенного запуска AOSP, либо Подпись образа загрузки в VBoot OnClickListener 1.0, либо FOOTER_HASH метаданных AVB (также известен как AVB) в VBoot OnClickListener 2.0.## Совместимые устройства| Модель устройства | Производитель | Совместимость | Версия Android | Примечание | |--------------------------------|--------------|----------------------|-------------------------|------------| | Pixel 7 (panther) | Google | Да | 13 (TQ2A. 230505. 002)
(2023)| | | ADT-3 (adt3) | Askey/Google | Да | 12 (spp2. 210219. 010) | Amlogic внутри,
Android TV | | Pixel 3 (blueline) | Google | Да | 12 (spp2. 210219. 008,
(2021)| | | Pixel 3 (blueline) | Google | Да | 11 (RP1A. 200720. 009,
(2020)| ещё . . . | | Pixel 3 (blueline) | Google | Да | Q preview (qpp2. 190228. 023,
(2019)| ещё . . . | | Redmi K30 4G (phoenix[n]) | Xiaomi | Да | 10 | Подтверждено @eebssk1 | | TS10 | Topway | Да | 10 | Штатное радио, @mariodantas | | Pixel XL (marlin) | HTC | Да | 9. 0. 0 (PPR2. 180905. 006,
(Сентябрь 2018)| ещё . . . | | K3 (CPH1955) | Oppo | Да для recovery.img
Нет для boot.img | Pie | ещё | | Z18 (NX606J) | ZTE | Да | 8. 1. 0 | ещё . . . | | Nexus 9 (volantis/flounder) | HTC | Да с некоторыми хаками| 7. 1. 1 (N9F27M, Октябрь 2017)| Хаки| | Nexus 5x (bullhead) | LG | Да | 6. 0. 0_r12 (MDA89E) | | | Moto X (2013) T-Mobile | Motorola | Нет | | | | X7 (PD1602_A_3. 12. 8) | Vivo | Нет | ? | Задача 35com/cfig/Android_boot_image_editor/issues/35) | | Realme GT Neo 3 | Realme | N | 12 | Issue 105 |

Дополнительные примеры

Работа с recovery.imgПожалуйста, запомните, что перед началом работы следует очистить рабочую директорию.
rm *.img
cp <ваш_recovery_образ> recovery.img
./gradlew unpack
./gradlew pack
Работа с vbmeta.img
rm *.img
cp <ваш_vbmeta_образ> vbmeta.img
./gradlew unpack
./gradlew pack
Очистка рабочего пространства Когда вы завершаете текущую работу и хотите очистить рабочее пространство для следующего образа, рекомендуется вызвать команду `./gradlew clear`:
./gradlew clear
Работа с boot.img и vbmeta.img

Если ваш vbmeta.img содержит хэш boot.img, вам НУЖНО обновить образ vbmeta вместе.

rm *.img
cp <ваш_boot_образ> boot.img
cp <ваш_vbmeta_образ> vbmeta.img
./gradlew unpack
./gradlew pack

Ваши boot.img.signed и vbmeta.img.signed будут обновлены вместе, затем вы сможете загрузить их в устройство.

Работа с vendor_boot.img + vbmeta.img (Pixel 5 и т.д.) Большинство устройств включают хэш-описание vendor_boot.img в vbmeta.img, поэтому если вам нужно изменить vendor_boot.img, вам нужно обновить vbmeta.img вместе.
rm *.img
cp <ваш_vendor_boot_образ> vendor_boot.img
cp <ваш_vbmeta_образ> vbmeta.img
./gradlew unpack
./gradlew pack
./gradlew flash

Обратите внимание, что для использования 'gradle flash' ваша машина должна быть подключена к вашему устройству тестирования через adb, и вы уже выполнили 'adb root'.

Как редактировать blob устройства (dtb) внутри vendor_boot.imgЕсли вы хотите редактировать blob устройства на месте:
cp <ваш_vendor_boot_образ> vendor_boot.img
cp <ваш_vbmeta_образ> vbmeta.img
./gradlew unpack
==> теперь вы можете редактировать build/unzip_boot/dtb.dts напрямую
./gradlew pack

На этапе распаковки dtb будет выгружен в файл build/unzip_boot/dtb, а dts будет декомпилирован в build/unzip_boot/dtb.dts. Вы можете редактировать dtb.dts напрямую, и он будет скомпилирован в dtb во время этапа переупаковки.

Если вы просто хотите заменить dtb тем, который был скомпилирован вне этого инструмента, пожалуйста,

cp <ваш_vendor_boot_образ> vendor_boot.img
cp <ваш_vbmeta_образ> vbmeta.img
./gradlew unpack
rm build/unzip_boot/dtb.dts
cp <ваш_dtb> build/unzip_boot/dtb
./gradlew pack
Как вытянуть устройство дерево бинтблоб (dtb) с защищённого устройства

Если у вас есть защищённое устройство и вы хотите вытянуть /proc/device-tree

touch fake.dtb
./gradlew pull

Этот инструмент скопирует dtc на целевое устройство через adb, а затем выгрузит файлы dtb и dts. В конечном итоге вы должны получить что-то вроде этого

+--------+------------------------------+
|  Что   |           Где                |
+--------+------------------------------+
| источник | /proc/device-tree            |
+--------+------------------------------+
| DTB    | panther.dtb                   |
+--------+------------------------------+
| DTS    | build/unzip_boot/panther.dts  |
+--------+------------------------------+
Как редактировать файл устройства дерево бинтблоб (dtb)Если у вас есть файл dtb и вы хотите отредактировать его содержимое, ```bash cp . ./gradlew unpack ``` этот инструмент декомпилит его и помещает декомпилированный исходный код в build/unzip_boot.``` Обзор распаковки файла panther.dtb +------+------------------------------+ | Что | Где | +------+------------------------------+ | DTB | panther.dtb | +------+------------------------------+ | DTS | build/unzip_boot/panther.dts | +------+------------------------------+ ```
Работа с системным образом (system.img)
cp <ваш_системный_образ> system.img
./gradlew unpack

Вы получите system.img.unsparse, это обычные данные файловой системы ext4.

Как отключить проверку подписей AVB

Основная идея заключается в установке флага=2 в основном vbmeta.

rm *.img
cp <ваш_образ_vbmeta> vbmeta.img
./gradlew unpack
vim -u NONE -N build/unzip_boot/vbmeta.avb.json  -c ":19s/0/2/g" -c ":wq"
./gradlew pack

Затем прошейте vbmeta.img.signed на ваше устройство.

Как объединить init_boot.img в boot.img
  • Распакуйте init_boot.img и скопируйте "build/unzip_boot/root".
  • Очистите рабочую область командой gradle clear, затем распакуйте boot.img
  • Верните обратно "build/unzip_boot/root"
  • Измените build/unzip_boot/boot.json
  • Измените ramdisk.size на 1
  • Измените ramdisk.file с "build/unzip_boot/ramdisk.img" на "build/unzip_boot/ramdisk.img.lz4"
Работа с payload.bin
  • извлеките всё

Использование:

    gradle unpack
  • извлеките только один указанный раздел Использование:
    gradle unpack -Dpart=<part_name>

Пример:

    gradle unpack -Dpart=boot
    gradle unpack -Dpart=system

Примечание: "build/payload/" будет удалён перед каждым выполнением задачи "unpack"

Работа с изображениями apex

AOSP уже имеет инструменты, такие как apexer, deapexer, sign_apex.py, которые должны удовлетворять потребности в работе с .apex и .capex. См. Задачу https://github.com/cfig/Android_boot_image_editor/issues/120

  • Для тех, кто может быть заинтересован в процессе генерации apex, есть диаграмма здесь изображение
Как работать с vendor_dlkm.img
cp <ваш vendor_dlkm.img> vendor_dlkm.img
cp <ваши vbmeta_image> vbmeta.img
./gradlew unpack
# замените ваш .ko
./gradlew pack

Затем прошивайте vbmeta.img.signed и vendor_dlkm.img.signed на устройство.

layout boot.img

Чтение layout boot Android boot.img и vendor_boot.img. Чтение layout misc misc.img

Ссылки и благодарность

ещё...

Список версий Android https://source.android.com/source/build-numbers.html
Android build-numbers https://source.android.com/setup/start/build-numbers

cpio & fs_config
https://android.googlesource.com/platform/system/core
https://www.kernel.org/doc/Documentation/early-userspace/buffer-format.txt
AVB
https://android.googlesource.com/platform/external/avb/
boot_signer
https://android.googlesource.com/platform/system/extras
mkbootimg
https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/master/
определение заголовка boot
https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/master/include/bootimg/bootimg.h
инструмент для извлечения информации о ядре
https://android.googlesource.com/platform/build/+/refs/heads/master/tools/extract_kernel.py
mkdtboimg
https://android.googlesource.com/platform/system/libufdt/
libsparse
https://android.googlesource.com/platform/system/core/+/refs/heads/master/libsparse/
Android Nexus/Pixel заводские образы
https://developers.google.cn/android/images

Этот проект был создан с использованием продуктов компании JetBrains. изображение

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/cfig-Android_boot_image_editor.git
git@api.gitlife.ru:oschina-mirror/cfig-Android_boot_image_editor.git
oschina-mirror
cfig-Android_boot_image_editor
cfig-Android_boot_image_editor
master