OTA (Over-the-Air) — способ удаленной загрузки и установки обновлений прошивки или программного обеспечения устройства через сети беспроводной связи (например, Wi-Fi, сотовые сети). Этот метод широко используется в смартфонах, устройствах Интернета вещей, автомобильной электронике и других областях.
Энтузиасты Xiaomi, вероятно, знакомы с этими пакетами пролистывания строк, перелистывания карт и прошивки для различных систем. Не знаю, пробовали ли вы прошить недавнюю ОС ThePaper. Конечно, существуют также различные умные дома, такие как маршрутизаторы, автомобили и даже настольные лампы, которые обновляются через OTA.
Здесь автор передает две прошивки Разархивировать Анализ упаковки Случай,Приходите узнать о безопасности прошивки.
Двоичное изображение (.bin):Наиболее распространенные форматы прошивок,Включать содержит весь код и данные, необходимые для запуска устройства.,Обычно используется в маршрутизаторах、Камера、IoT-устройства и т. д.
Сжатый пакет (.zip, .tar, .gz, .xz):Конвертировать несколькодокумент Упакованы и сжаты в одиндокумент。
Файл изображения (.img):Включатьвесьдокументобраз системы,Обычно используется для встроенных устройств и образов операционных систем (Linux, Android).
Файл Intel HEX (.hex):Текстовый формат прошивкидокумент,Обычно используется в микроконтроллерах и встроенных системах.
Motorola Файл S-записи (.srec, .s19):Похоже на:Intel Текстовый файл прошивки в формате HEX.
ELF-файл (.elf):исполняемый файлисвязываемый формат,Включить исполняемый код и сегмент данных,Обычно используется при разработке встроенных систем.
Как показано ниже, поставщики услуг будут предоставлять встроенное ПО в нескольких форматах, чтобы облегчить анализ клиентов.
Структура каталогов после распаковки выглядит следующим образом. В настоящее время мы занимаемся bin-файлом.
В качестве примера мы берем прошивку в формате .bin. Поскольку здесь нет очевидных границ и структур файлов, анализировать их здесь относительно сложно. Здесь мы используем binwalk для извлечения и анализа содержимого.
sudo apt-get install binwalk // ubuntu
brew install binwalk // macos
# Определить структуру файла и данных Включать
binwalk firmware.bin
# Рекурсивное извлечение содержимого
binwalk -Me firmware.bin
После извлечения файла формата ubi в двоичный файл
Что такое файл формата UBI? UBI (Unsorted Block Image) — это файловая система для флэш-памяти NAND, которая обеспечивает выравнивание износа и управление поврежденными блоками во флэш-памяти. Файловые системы UBI распространены во встроенных устройствах, особенно там, где требуются надежность и долговечность. ==Почему это в формате ubi? == Понятно, что bin — это универсальный двоичный формат. В процессе упаковки прошивки различные файловые системы и форматы данных единообразно упаковываются в файлы .bin, чтобы упростить процесс передачи и обновления. Файлы прошивки могут содержать несколько форматов файловых систем, таких как UBI, EXT4, FAT32 и т. д. Эти форматы файловых систем используются для хранения операционных систем, приложений, драйверов, файлов конфигурации и т. д.
Разархивированный файл UBI
ubi_reader — набор инструментов для работы с файловыми системами UBI. Он включает в себя несколько инструментов командной строки для чтения и извлечения файлов изображений UBI и UBIFS.
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install python3 python3-pip mtd-utils
# Centos
sudo yum install python3 python3-pip mtd-utils
# установка пипа
pip3 install ubi_reader
# Проверять UBI Информация о файле изображения
ubireader_display_info 12D4.ubi
# извлекать UBI Все, что есть в файле изображения
ubireader_extract_images 12D4.ubi
Конечно, есть и другие команды, поэтому я не буду демонстрировать их здесь по отдельности.
# список UBI файлы в файле изображения
ubireader_list_files 12D4.ubi
# извлекатьспецифическийдокументили块
ubireader_extract_files 12D4.ubi
unsquashfs — инструмент для распаковки и извлечения образов файловой системы SquashFS. SquashFS — это формат файловой системы с высокой степенью сжатия, доступный только для чтения, обычно используемый во встроенных устройствах и дистрибутивах Linux.
# ubuntu
sudo apt-get update
sudo apt-get install squashfs-tools
# centos
sudo yum install squashfs-tools
# macos
brew install squashfs
Используйте инструмент unsquashfs для распаковки файлов ubifs один за другим.
Разработчики прошивки могут использовать сочетание нескольких файловых систем и форматов сжатия при создании прошивки.
unsquashfs -d output img-2022911448_vol-ubi_rootfs.ubifs
Как видите, исходный код прошивки в принципе доступен...
После серии процессов распаковки был получен файл payload.bin (аналог флэш-пакета Android)
Здесь я сначала использовал binwalk для распаковки, но в итоге попал в бесконечный цикл.
Окончательно распакованный пакет xz имел величину пол Т! Это показало, что метод декомпрессии был неправильным, поэтому я сдался.
Распакованный файл OTA генерирует множество файлов .img, которые соответствуют различным разделам устройства, и каждый раздел имеет свои определенные функции.
Классификация | Имя раздела | описывать |
---|---|---|
Загрузитесь и начните | boot.img | Содержит ядро и исходную файловую систему (ramdisk) для загрузки системы Android. |
dtbo.img | Содержит файлы наложения дерева устройств для абстракции оборудования. | |
vendor_boot.img | Содержит загрузочные драйверы и файлы конфигурации, связанные с поставщиком. Используется для инициализации драйверов устройств производителя. | |
xbl.img | Прошивка, содержащая расширяемый загрузчик. | |
xbl_config.img | Содержит данные конфигурации загрузчика. | |
abl.img | Содержит загрузчик Android, который загружает и запускает операционную систему. | |
Драйверы и прошивка оборудования | aop.img | Содержит прошивку для управления режимами пониженного энергопотребления и датчиками. |
bluetooth.img | Содержит драйвер и прошивку Bluetooth. | |
cpucp.img | Содержит встроенное ПО для процессора управления ЦП. | |
devcfg.img | Содержит данные конфигурации устройства и драйверы. | |
dsp.img | Содержит встроенное ПО для процессора цифровых сигналов (DSP), используемого для таких задач, как обработка звука. | |
featenabler.img | Содержит профили включения функций для включения или отключения определенных функций. | |
hyp.img | Содержит прошивку для гипервизора для поддержки виртуализации. | |
imagefv.img | Содержит том прошивки UEFI, используемый для загрузки и инициализации оборудования. | |
modem.img | Содержит прошивку модема для связи в сотовой сети. | |
qupfw.img | Содержит прошивку Qualcomm для обработки радиосигналов. | |
shrm.img | Содержит драйвер общей памяти. | |
tz.img | Прошивка, содержащая ARM TrustZone для безопасной обработки и криптографических операций. | |
uefisecapp.img | Содержит приложения для безопасной загрузки UEFI. | |
==Система и приложения== | system.img | Содержит основные части операционной системы Android, включая системные приложения, файлы библиотек, фреймворки и т. д. |
system_ext.img | Хранит системные расширения, в основном используемые для расширения определенных функций или услуг. Представлено в Android 10 для повышения модульности системы. | |
product.img | Содержит конкретные функции и приложения продукта. Для настройки различных моделей устройств или рыночных версий. | |
vendor.img | Содержит драйверы для оборудования и файлы библиотек, предоставленные производителем устройства. Относится к уровню абстракции оборудования (HAL) и интерфейсу поставщика (VINTF). | |
odm.img | Содержит определенные драйверы оборудования и файлы конфигурации, предоставленные производителем устройства (ODM). Для поддержки конкретного оборудования. | |
multiimgoem.img | Содержит несколько образов и конфигураций, специфичных для OEM-производителей. | |
Безопасность и проверка | keymaster.img | Содержит встроенное ПО диспетчера ключей для операций шифрования и дешифрования. |
vbmeta.img | Содержит метаданные для Android Verified Boot. | |
vbmeta_system.img | Содержит системные метаданные для Android Verified Boot. |
Второй уровень относительно прост. В системах Windows или Linux вы можете использовать инструмент 7-Zip для распаковки файлов .img и написания сценария пакетной распаковки.
#!/bin/bash
# Создать выходной каталог
output_dir="./output"
mkdir -p "$output_dir"
# Пройти все файлы в текущем каталоге .img документ
for img_file in *.img; do
# Получить имя документа (без расширения)
file_name=$(basename "$img_file" .img)
# Создайте распакованный выходной каталог.
extracted_dir="$output_dir/${file_name}_extracted"
mkdir -p "$extracted_dir"
# использовать 7z Разархивировать img документ в соответствующий выходной каталог
7z x "$img_file" -o"$extracted_dir"
# Проверить Разархивировать результаты
if [ $? -eq 0 ]; then
echo "Successfully extracted $img_file to $extracted_dir"
else
echo "Failed to extract $img_file"
fi
done
Здесь следует отметить, что файл .img может быть конвертирован из разных форматов (ext4, ubi, elf), поэтому конкретные шаги распаковки будут зависеть от ситуации...