Как создать bin файл прошивки

Обновлено: 07.07.2024


Те кто касался прошивок двигателя, а точнее PCM-модуля знаком с файлами прошивок в формате VBF. Вообще VBF файлы используют многие производители автомобилей: Volvo, Ford, Mazda, Land Rover и др. Однако, для загрузки прошивки сторонними загрузчиками/флешерами используется другой формат файла, а именно BIN. Многие загрузчики (kess, pcmflash, mmcflash и др.) работают именно с ним.

Как же преобразовать VBF-файл в BIN-файл? Какова структура VBF-файла?

Думаю, что некоторые из Вас задавалися этим вопросом. Скрывать тут особо нечего. Вся информация доступна в интернете, нужно лишь правильно задавать вопросы поисковой системе.


Как мы видим vbf файл состоит из двух частей:
1. Header — заголовок
2. Blocks — блоки данных

Где последние имеют следующую структуру (например, когда в vbf всего 3 блока):
[4 byte — address block1]
[4 byte — length block1]
[x byte — data block1]
[2 byte — CRC16 CCITT of block1]

[4 byte — address block3]
[4 byte — length block3]
[x byte — data block3]
[2 byte — CRC16 CCITT of block3]

Блоки следует один за другим.

Также поисковые системы выдают ещё интересную программу — VBF Tool.



А как это было сделано смотрите в следующем видео.

Update 26.07.2017:
Про просьбе seregawoof выкладываю видео работы программы VBF Tool. Программа позволяет просматривать VBF-файлы, а также создавать свои.
Кстати, VBF расшифровывается как Versatile Binary Format = Универсальный Бинарный Формат

PS:
Сразу оговорюсь, что я не программист. Скорей любитель. Посему буду благодарен любой критике.

PPS:
Исходники проекта в открытый доступ выкладывать не буду.
Кому интересно — пишите в личку.

PPPS:
Цель поста — немного приоткрыть завесу тайны по теме VBF-файлов.
Как и везде VBF-файлы имеют некоторые нюансы. Например, блоки данных могут быть сжаты или зашифрованы. Об этом нам скажет параметр data_format_identifier в заголовочной части.


Несколько дней назад, я решил провести реверс-инжиниринг прошивки своего роутера используя binwalk.

Я купил себе TP-Link Archer C7 home router. Не самый лучший роутер, но для моих нужд вполне хватает.

Каждый раз когда я покупаю новый роутер, я устанавливаю OpenWRT. Зачем? Как правило производители не сильно заботятся о поддержке своих роутеров и со временем софт устаревает, появляются уязвимости и так далее, в общем вы поняли. Поэтому я предпочитаю хорошо поддерживаемую сообществом open-source прошивку OpenWRT.

Скачав себе OpenWRT, я так же скачал последний образ прошивки под мой новый Archer C7 с официального сайта и решил проанализировать его. Чисто ради фана и рассказать о binwalk.

Что такое binwalk?

Binwalk — это инструмент с открытым исходным кодом для анализа, реверс-инжиниринга и извлечения образов прошивок.

Созданный в 2010 году Крейгом Хеффнером, binwalk может сканировать образы прошивок и находить файлы, идентифицировать и извлекать образы файловой системы, исполняемый код, сжатые архивы, загрузчики и ядра, форматы файлов, такие как JPEG и PDF, и многое другое.

Вы можете использовать binwalk для реверс-инжиниринга прошивки для того, что бы понять как она устроена. Искать в бинарных файлах уязвимости, извлекать файлы и искать бекдоры или цифровые сертификаты. Можно так же найти opcodes для кучи разных CPU.

Вы можете распаковать образы файловой системы для поиска определенных файлов паролей (passwd, shadow и т.д.) И попытаться сломать хэши паролей. Вы можете выполнить двоичный анализ между двумя или более файлами. Вы можете выполнить анализ энтропии данных для поиска сжатых данных или закодированных ключей шифрования. Все это без необходимости доступа к исходному коду.

В общем все, что необходимо, есть :)

Как работает binwalk?

Основной особенностью binwalk является его сигнатурное сканирование. Binwalk может сканировать образ прошивки для поиска различных встроенных типов файлов и файловых систем.

Вы знаете утилиту командной строки file ?

Команда file смотрит на заголовок файла и ищет подпись (магическое число), чтобы определить тип файла. Например, если файл начинается с последовательности байтов 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A , она знает, что это файл PNG. На Википедии есть список распространенных подписей файлов.

Binwalk работает так же. Но вместо того, чтобы искать подписи только в начале файла, binwalk будет сканировать весь файл. Кроме того, binwalk может извлечь файлы, найденные в образе.

Инструменты file и binwalk используют библиотеку libmagic для идентификации подписей файлов. Но binwalk дополнительно поддерживает список пользовательских магических сигнатур для поиска сжатых / заархивированных файлов, заголовков прошивок, ядер Linux, загрузчиков, файловых систем и так далее.

Установка binwalk

Binwalk поддерживается на нескольких платформах, включая Linux, OSX, FreeBSD и Windows.

Чтобы установить последнюю версию binwalk, вы можете загрузить исходный код и следовать инструкции установки или краткому руководству, доступному на веб-сайте проекта.

У Binwalk много разных параметров:

Сканирования образов

Начнем с поиска сигнатур файлов внутри образа (образ с сайта TP-Link).

Теперь у нас много информации об этом образе.

Образ использует U-Boot в качестве загрузчика (заголовок образа по адресу 0x5AC0 и сжатый образ загрузчика по адресу 0x5B00 ). Основываясь на заголовке uImage по адресу 0x13270, мы знаем, что архитектура процессора — MIPS, а ядро Linux — версия 3.3.8. И на основании образа, найденного по адресу 0x11CEA5 , мы можем видеть, что rootfs является файловой системой squashfs .

Давайте теперь распакуем загрузчик (U-Boot) с помощью команды dd :

Поскольку образ сжат с помощью LZMA, нам нужно распаковать его:

Теперь у нас есть образ U-Boot:

Как насчет поиска дефолтного значения для bootargs ?

Переменная окружения U-Boot bootargs используется для передачи параметров ядру Linux. И из вышеприведенного мы лучше понимаем флэш-память устройства.

Как насчет извлечения образа ядра Linux?

Мы можем проверить, что образ был успешно извлечен с помощью команды file :

Формат файла uImage — это в основном образ ядра Linux с дополнительным заголовком. Давайте удалим этот заголовок, чтобы получить окончательный образ ядра Linux:

Образ сжат, поэтому давайте распакуем его:

Теперь у нас есть образ ядра Linux:

Что мы можем сделать с образом ядра? Мы могли бы, например, сделать поиск по строкам в образе и найти версию ядра Linux и узнать об окружающей среде, используемой для сборки ядра:

Несмотря на то, что прошивка была выпущена в прошлом году (2019 г.), когда я пишу эту статью, она использует старую версию ядра Linux (3.3.8), выпущенную в 2012 г., скомпилированную с очень старой версией GCC (4.6) также с 2012 г.!
(прим. перев. еще доверяете своим роутерам в офисе и дома?)

С опцией --opcodes мы также можем использовать binwalk для поиска машинных инструкций и определения архитектуры процессора образа:

Как насчет корневой файловой системы? Вместо того, чтобы извлекать образ вручную, давайте воспользуемся опцией binwalk --extract :

Полная корневая файловая система будет извлечена в подкаталог:

Теперь мы можем сделать много разного.

Мы можем искать файлы конфигурации, хэши паролей, криптографические ключи и цифровые сертификаты. Мы можем проанализировать бинарные файлы для поиска ошибок и уязвимостей.

С помощью qemu и chroot мы можем даже запустить (эмулировать) исполняемый файл из образа:

Здорово! Но обратите внимание, что версия BusyBox — 1.19.4. Это очень старая версия BusyBox, выпущенная в апреле 2012 года.

Таким образом, TP-Link выпускает образ прошивки в 2019 году с использованием программного обеспечения (GCC toolchain, kernel, BusyBox и т. Д.) 2012 года!

Теперь вы понимаете, почему я всегда устанавливаю OpenWRT на свои роутеры?

Это еще не все

Binwalk также может выполнять энтропийный анализ, печатать необработанные энтропийные данные и генерировать энтропийные графики. Обычно большая энтропия наблюдается, когда байты в образе случайны. Это может означать, что образ содержит зашифрованный, сжатый или обфусцированный файл. Хардкорно прописанный ключ шифрования? Почему бы и нет.


Мы также можем использовать параметр --raw для поиска пользовательской последовательности необработанных байтов в образе или параметр --hexdump для выполнения шестнадцатеричного дампа, сравнивающего два или более входных файла.

Пользовательские сигнатуры могут быть добавлены в binwalk либо через файл пользовательских сигнатур, указанный в командной строке с помощью параметра --magic , либо путем добавления их в каталог $ HOME / .config / binwalk / magic .

Вы можете найти больше информации о binwalk в официальной документации.

Расширение binwalk

Существует API-интерфейс binwalk, реализованный в виде модуля Python, который может использоваться любым скриптом Python для программного выполнения сканирования binwalk, а утилита командной строки binwalk может быть почти полностью продублирована всего двумя строками кода Python!

С помощью Python API вы также можете создавать плагины под Python для настройки и расширения binwalk.

Также существует плагин IDA и облачная версия Binwalk Pro.

Так почему бы вам не скачать образ прошивки из Интернета и не попробовать binwalk? Обещаю, вам будет очень весело :)


Формат файлов BIN – особенный. В отличие от других, он способен содержать в себе самые разнообразные данные. Давайте разберемся, что может находиться в БИН-файлах, и рассмотрим способы их открытия.

Что представляет собой формат BIN

Расширение .bin — это сокращение от слова binary, что означает «двоичный» (код). Объект такого типа может представлять собой исполняемый системный файл, БИОС игровой приставки, прошивку роутера или телефона Андроид и даже обычное видео- или аудиозапись. Но чаще всего пользователи встречаются с файлами БИН в виде образов дисков, подобных образам ISO, IMG и т.д.

Программы для открытия BIN файлов

Предположить, что перед вами бинарный файл образа диска, можно по его размеру. Например, образы дистрибутивов операционных систем «весят» 1-2 Gb и больше, образы CD/DVD/Blu-ray дисков – от десятков Mb до нескольких Gb и т. д.

Образы дисков – это объекты, которые содержат в себе копию содержимого и структуры файловой системы носителя. По своей сути они являются архивами с разнообразными данными.

К бинарнику образа диска часто прилагается еще один файл с расширением .CUE. Это текстовой документ, где хранится информация с описанием содержания архива. Например, если в БИНе находится музыкальный альбом, то документ CUE будет содержать в себе информацию с указанием последовательности треков, имен исполнителей, названий песен и т. д. Видеодиск может содержать информацию о частях фильма или список клипов.

Открыть файл Bin с образом диска можно при помощи различных онлайн-сервисов и приложений. Первых не так уж и много, они далеко не всегда корректно считывают данные, да и загружать на веб-сайт файл большого размера неудобно. Поэтому остановимся на рассмотрении программ, которые умеют работать с объектами этого типа. Большинство таких приложений платные, но чаще всего имеют бесплатный пробный период с некоторыми ограничениями. Рассмотрим в подробностях несколько программ для Windows.

UltraISO

UltraISO — одна из самых популярных программ для работы с образами дисков. Она поддерживает множество форматов и, в том числе, способна разархивировать бинарные файлы.

Программа UltraISO способна производить следующие действия с бинарными образами:

  • редактирование образа;
  • конвертирование в другой формат;
  • извлечение вложенных файлов;
  • создание БИН-а из файлов с жесткого диска;
  • монтирование в виртуальный привод.

Для установки UltraISO, как и остальных описанные ниже приложений, запустите скачанный с сайта разработчика инсталлятор с именем программы. В некоторых случаях установочный файл называется setup или install.

Чтобы открыть БИН при помощи UltraISO, сделайте следующее:

Программа UltraISO платная, в пробной версии имеется ограничение на открытие файлов размером более 300 Mb. Чтобы его убрать, придется приобрести полную версию за $29.95 долларов.

Daemon Tools Lite

Daemon Tools — еще одна популярная программа, которая умеет работать с образами дисков. Ее интерфейс достаточно прост, и разобраться в нем несложно без инструкции.

Если хотите, чтобы Daemon Tools открывал образы BIN по умолчанию, при установке приложения отметьте этот формат, как на скриншоте ниже:

форматы поддерживаемые Daemon Tools

С помощью Daemon Tools вы сможете:

  • монтировать образы в виртуальный привод;
  • просматривать и извлекать из них файлы;
  • редактировать содержимое бинарного архива (в платных версиях).
  • конвертировать в другой формат (в платных версиях).

Чтобы открыть БИН при помощи Daemon Tools, запустите программу и сделайте следующее:

В отличие от UltraISO, программа Daemon Tools Lite не загружает образ в себя, а монтирует его в виртуальный привод. Содержимое последнего открывается в проводнике Windows 7 или Windows 10 как обычная папка или диск.

Daemon Tools имеет одну бесплатную (Lite) и несколько платных версий с дополнительным функционалом – Lite Personal, Ultra и Pro. Помимо перечисленного выше, они добавляют к базовому функционалу возможность записывать диски с данными и музыкой, создавать виртуальные жесткие диски, эмулировать IDE-приводы и многое другое. Цены на платные версии варьируются от $19 до $40.

Power ISO

Приложение PowerISO также умеет работать с различными типами образов дисков, в том числе распаковать архивы BIN. По интерфейсу и функционалу оно похоже на UltraISO, но, как и Daemon Tools, имеет бесплатную и платные версии.

Power ISO позволяет производить с БИН файлами следующие действия:

  • редактирование и извлечение содержимого;
  • создание образов из файлов с жесткого диска;
  • монтирование в виртуальный привод;
  • конвертирование в другой формат.

Чтобы открыть БИН с помощью Power ISO, сделайте следующее:

Бесплатная версия Power ISO имеет ограничение на размер открываемого файла в 300 Mb. Цена платной версии составляет $29.95 долларов.

Открыть BIN на компьютере также можно и при помощи других приложений для работы с образами дисков, таких, как Alcohol 120%, MagicISO, Hex to Bin Utility, Roxio Creator, Nero Burning ROM и т. д.

Другие виды бинарных файлов

Помимо образов дисков, файлы бинарного формата могут быть прошивками устройств, данными игр, видео- или аудиозаписями и многим другим. Рассмотрим несколько самых распространенных после образов типов БИН-файлов в подробностях.

Исполняемый двоичный файл

Исполняемый файл — это часть какого-либо приложения в двоичном виде. Он может содержать в себе данные для запуска программы или её настройки.

Чтобы открыть такой файл для просмотра и редактирования, подойдет любой HEX-редактор, но для корректного выполнения им своих задач потребуется программа, которой он принадлежит.

Некоторые из файлов этого типа можно открыть при помощи приложения Apache OpenOffice, которое работает на компьютерах с операционной системой Windows, Mac OS и Linux.

Исполняемый файл Unix

Файлы двоичного формата в операционных системах Unix – это обычные приложения. Они предназначены для использования в дистрибутивах Linux, FreeBSD и т. д.

Файл прошивки маршрутизатора

Фирмы Linksys, D-Link, ZyXEL, TP-Link, Huawei используют в своих роутерах прошивки в формате БИН. Прошивка – это программа, которая управляет работой устройства.

Для работы с файлами прошивок используются собственные приложения производителей роутеров для различных платформ (Windows, Mac, Android и т. д.), а также веб-сервисы.

Архив Macbinary II

Бинарник Macbinary II — это закодированный, сжатый файл с данными, обычно предназначенный для передачи информации через сеть. Открывается при помощи следующих программ:

Файл обновления конфигураций устройств BlackBerry

Программный пакет BlackBerry Enterprise Server содержит в себе приложение IT Policy Manager, одним из компонентов которого является файл policy.bin. Он содержит в себе данные настроек и используется системными администраторами для обновления программного обеспечения BlackBerry.

Policy.bin можно открыть при помощи программы Research In Motion BlackBerry Desktop Manager.

Файл игр приставки Nintendo DS

Nintendo DS — это карманная игровая консоль. Эмуляторы такой приставки на компьютере используют БИН-файлы для модификации игр. Обычно они находятся в составе образов игр, имеющих формат .NDS.

Открыть файл БИН этого типа можно при помощи следующих программ:

Файл игры Atari

БИН-файл игры Atari содержит в себе образ картриджа для одноименных консолей, которые были популярны в 80-ых годах. Файл используется для загрузки игр в эмулятор приставки, открыть его можно при помощи следующих приложений:

Файл данных Nintendo Wii

Файл данных Nintendo Wii может содержать в себе зашифрованные или обычные текстовые сведения об игре для одноименной игровой консоли. Обычно он хранится на SD-карте устройства и имеет название content.bin. Увидеть, что находится в этом файле, можно при помощи программных инструментов самой приставки.

Образ игры Sega Genesis

Бинарник Sega Genesis – это образ картриджа с игрой для консоли Sega Genesis. На компьютере он открывается при помощи эмуляторов.

BIOSPlayStation

БИН файлы BIOS PlayStation также могут открываться в эмуляторах одноименной консоли на компьютере. Они предназначены для обеспечения работы устройства.

Программы для открытия файлов BIOS PlayStation в Windows, Mac OS и Linux:

Бинарный видео- или аудиофайл

В BINе может находиться и обычная видео- или аудиозапись. Проиграть её смогут такие медиаплееры, как:

Если вы не знаете, чем именно может быть интересующий вас файл BIN, предположить его примерное назначение поможет размер. Объект размером от десятков Mb до нескольких Gb, скорее всего, окажется образом диска, видеозаписью или приложением. Файл небольшого объема, вероятно, будет содержать прошивку устройства или данные для эмуляторов игровых приставок.


Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.

Нужный ZIP можно найти на XDA Developers или 4PDA. Но имей в виду, что нужна прошивка конкретно для твоей модели аппарата, — у того же Galaxy S7 есть несколько модификаций для разных рынков, не всегда совместимых между собой.

Структура ZIP-файла с прошивкой

После загрузки распакуем архив с помощью любого архиватора. Внутри будет следующий набор файлов и папок:

  • META-INF — папка с метаинформацией о прошивке (сертификат автора, манифест со списком файлов, их контрольными суммами), скриптом обновления (updater-script) и инсталлятором (update-binary), который выполняет команды скрипта по монтированию разделов, копированию файлов и другим действиям с NAND-памятью;
  • boot.img — образ с ядром и RAM-диском (он прошивается в раздел boot);
  • system.new.dat — это, грубо говоря, и есть сама прошивка, а точнее образ раздела system, содержащий операционную систему Android за вычетом ядра;
  • system.transfer.list — содержит список команд, которые необходимо выполнить, чтобы поблочно скопировать содержимое system.new.dat в раздел system при установке прошивки;
  • system.patch.dat — используется для OTA-обновлений, то есть выборочного внесения изменений в прошивку; если прошивка «полная», он имеет нулевой размер.

Реверс малвари

Распаковываем system.new.dat

Файлы system.new.dat и system.transfer.list представляют для нас наибольший интерес. Точнее, не они, а содержащаяся в них система. Но добраться до нее не так просто.

Скрипт

Самые ленивые могут разобрать прошивку с помощью скрипта System_Extractor-Linux.

  1. Распаковываем архив с прошивкой в любую папку.
  2. Качаем скрипт по ссылке и разархивируем в любую папку.
  3. Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
  4. Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
  5. Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
  6. После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
  7. Готово. Содержимое system в папке extract_*/output .

Ручной способ

Распаковываем архив с прошивкой в любую папку (например, в rom ):

Скачиваем нужные нам инструменты в эту папку:

Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt :

Содержимое образа system

Содержимое образа system

Структура каталогов Android

После распаковки system появится следующая каталоговая структура:

  • app — предустановленные приложения со стандартными привилегиями;
  • priv-app — предустановленные приложения с повышенными привилегиями, в том числе некоторые компоненты системы;
  • bin — бинарные файлы формата ELF, аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы;
  • etc — файлы настроек. Полный аналог /etc в Linux, используемый, однако, только теми самыми системными компонентами. Приложения Android хранят индивидуальные настройки в каталогах /data/data/ ;
  • fonts — шрифты. По умолчанию содержит только фирменные шрифты Roboto;
  • framework — библиотеки Java-классов, используемых системой и приложениями. Тут же лежит файл framework-res.apk , содержащий полное описание интерфейса операционной системы, включая все графические файлы;
  • lib и lib64 — Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включая такие стандартные библиотеки, как libc, libz, libssl. На устройствах с архитектурой ARMv7 и ниже каталог lib64 будет отсутствовать;
  • media — медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и анимация загрузки ОС;
  • tts — файлы, необходимые синтезатору речи;
  • usr — каталог, который обычно содержит файлы, необходимые для работы приложений из каталога bin. По сути, аналог /usr/share ;
  • vendor — файлы, поставляемые производителем устройства. Обычно содержит бинарный firmware для различных железных компонентов, например модуля Wi-Fi;
  • xbin — необязательный каталог; кастомные прошивки используют его для хранения таких вещей, как интерпретатор bash, SSH, PowerTOP, BusyBox, и других полезных инструментов;
  • build.prop — файл, содержащий информацию о сборке, а также различные низкоуровневые настройки;
  • addon.d — содержит скрипты, запускаемые после установки прошивки. Сюда же GApps прописывают свой скрипт, благодаря которому возрождаются после переустановки прошивки.

Ознакомившись с базовой структурой Android, начнем вносить изменения.

Удаляем и добавляем приложения

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

Друг от друга они отличаются привилегиями доступа. Если программы из app имеют такие же полномочия, как сторонние программы (например, установленные из Play Store), то приложения из priv-app могут использовать привилегированные API (права privileged). Подробнее об этом можно узнать из нашей статьи.

Для предустановки приложения в прошивку просто кинь ее APK-файл в /system/app/ . Можно, конечно, создать отдельную папку, но в нашем случае в этом нет смысла, потому что папка служит для хранения библиотек и odex-файлов, которых у нас попросту нет. Для удаления просто удали папку с ним.

Можно пойти дальше и поменять стоковые приложения на аналоги. К примеру, для замены календаря удаляем папку Calendar и копируем в /system/app наш любимый com.rpagyc.simplecalendar.apk . А можно и не копировать. Тогда прошивка будет без календаря.

Главное, помни: стоковые программы могут быть связаны между собой. Поэтому удаление одной проги вполне может привести к полной неработоспособности другой (к примеру, CalendarProvider и Calendar: удалив первый, ты сделаешь неработоспособным не только стоковый, но и любой другой календарь). К счастью, в чистых AOSP-прошивках взаимосвязей не так много.

Меняем анимацию загрузки

Анимация хранится в виде PNG-картинок, упакованных в архив /system/media/bootanimation.zip без сжатия. Внутри архива находятся:

  • desc.txt — файл, описывающий анимацию;
  • part0 — папка с файлами анимаций, которые воспроизводятся первыми;
  • part1 — папка с файлами анимаций, которые воспроизводятся вторыми;
  • .
  • part? — крайняя папка, изображения с которой воспроизводятся в конце.

Файл desc.txt может содержать нечто вроде

Назначение этих строк интуитивно понятно: 1920 × 1080 — разрешение картинки, 60 — число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).

Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.jpg , 00001.jpg , 00002.jpg . Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA.

Четыре части в bootanimation.zip для LineageOS

Четыре части в bootanimation.zip для LineageOS

Изменяем звуковое оформление

Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:

  • alarms — мелодии будильника;
  • notifications — звуки уведомлений;
  • ringtones — мелодии звонка;
  • ui — системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.

В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:

И маленький лайфхак: удаление файлов из папки ui приведет не к сбоям и ошибкам, а к исчезновению системных звуков. Поэтому ты можешь легко отключить звук создания снимка с камеры, снятия скриншота, просто потерев содержащие эти звуки файлы (их имена интуитивно понятны).

Добавляем шрифты

Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA. Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .

Меняем системные настройки (build.prop)

В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для Gigaset ME, а для ME Pro некоторые строки продублированы, но ключи (название смартфона и так далее) в них другие. Это было сделано, чтобы обеспечить более-менее корректную работоспособность одной и той же прошивки на разных аппаратах.

Дополнительный файл для Gigaset ME и ME Pro

Дополнительный файл для Gigaset ME и ME Pro

Build.prop содержит (или может содержать) огромное количество настроек. Некоторые из них ничего не меняют, некоторые улучшают одно за счет ухудшения другого, но есть те, которые действительно полезны:

  • ro.product.model и ro.product.manufacturer — модель смартфона и имя производителя. С помощью замены этих строк можно заставить Play Store думать, будто у тебя другой смартфон, что откроет доступ к большему количеству софта. Для всяких малоизвестных китайских смартфонов эти строчки могут стать спасительными;
  • hw.qemu.mainkeys — принимает только два значения: 0 — показать наэкранные клавиши навигации, 1 — не показывать кнопки. Отсутствие строки соответствует 0;
  • debug.sf.nobootanimation — значение 1 отключает анимацию загрузки, что немного поднимает ее скорость. Установка 0 или удаление строки возвращает анимацию на место;
  • ro.telephony.default_network — говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке;
  • ro.sf.lcd_density — DPI дисплея, наиболее точное значение для дисплея можно посчитать через удобный сайт. Но никто не запрещает поставить и большее или меньшее значение по своему вкусу: более высокие значения делают элементы интерфейса крупнее, низкие — меньше;
  • ro.config.vc_call_vol_steps — количество шагов громкости во время разговора (по умолчанию 8);
  • ro.config.media_vol_steps — количество шагов громкости мультимедиа (по умолчанию 15).

Внедряем в прошивку Google Apps

Почти всегда кастомные прошивки поставляются без сервисов Google и магазина приложений. Разработчики предлагают нам установить их отдельно с помощью пакета GApps. Однако его можно интегрировать прямо в прошивку.

Для начала необходимо скачать пакет GApps. Я рекомендую брать архивы Open GApps. Выбираешь версию Android, архитектуру процессора и вариант комплектации (Pico, Nano, Stock. ), который определяет, сколько различных приложений Google содержит архив. Я рекомендую скачать версию Pico. Она содержит только Play Store и набор необходимых для его работы библиотек.

Интеграция GApps в прошивку выполняется так:

  1. Распаковываем ZIP-архив GApps с помощью любого архиватора.
  2. Переходим в папку Core.
  3. Видим множество архивов с расширением .tar.lz . Извлекаем с помощью lzip.
  4. После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
  5. Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
  6. Все, мы интегрировали GApps в нашу прошивку!

Свободное место

Необходимо понимать, что место для установки прошивок ограниченно. Нельзя установить прошивку, размер которой перевешивает размер раздела system устройства. Посмотреть его значение можно, используя ADB:

Инфа о разделе system

Инфа о разделе system

Второй вариант: поставить на устройство терминал и набрать команду

Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду

Или то же самое с помощью ADB:

Место, занимаемое прошивкой, будет приблизительно равно размеру system в распакованном виде. Вообще, при создании прошивки необходимо учитывать, что юзер также может прошить поверх нее различные модификации (SuperSU, Xposed) или перенести приложения в раздел system. Например, минимальный пакет приложений Google (Pico) требует минимум 150 Мбайт дополнительного пространства для установки.

При необходимости размер файла прошивки можно уменьшить, удалив не только ненужные программы из /system/app ( /system/priv-app ) и звуки вызова из system/media/audio и bootanimation.zip , но и:

  • /system/tts/lang_pico — языки примитивного голосового движка Pico TTS, голосовой движок Google это не затронет;
  • /system/usr/srec/config/ — офлайн-языки. Можно будет скачать потом онлайн, если понадобится.

Сборка

После внесения изменений нужно собрать все обратно. Сначала запакуем раздел system в system.new.dat . Скачиваем нужные нам инструменты:

Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img :

1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:

Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:

Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).

Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner, так и на ПК (потребуется установленная Java):

Подводные камни

Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.

Установка

Для установки кастомной прошивки необходим кастомный рекавери TWRP, позволяющий устанавливать неподписанные или подписанные тестовым ключом прошивки (именно такую мы создали). В журнале мы неоднократно описывали процесс его установки, да и в ветках форума, посвященных твоему устройству, обычно есть достаточно информации для того, чтобы это сделать.

Выводы

Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка — это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей — TouchWiz, ZenUI, HTC Sense и так далее — всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.

Читайте также: