• Уважаемые форумчане! При использовании информации, ресурсов и материалов форума, а после и внедрения данных многолетних наработок в "свои" прошивки, не забудьте при выкладывании на третьесторонних ресурсах указывать ссылку на исходный источник, где вы и почерпнули данную информацию. Соблюдение сего простого правила является признаком хорошего тона и позволит развиваться ресурсу, что впоследствии положительно скажется на всех нас и последующих результатах в создании модифицированных прошивок для наших гаджетов. С уважением, Администрация форума.

Структура прошивок

Kaliningrad

Ушол, щасвирнус...
Команда форума
В своё время структуру очень хорошо описал Mi81.
Поэтому приведу прямое цитирование...

Учитывая многочисленные просьбы здесь и в личке:
1. Прошивка (bin) состоит из заголовка и следующих за ним разделов (обычно их пять, но теоретически может быть и больше).
2. Разделы прошивки выровнены на 0х00000800 и каждый раздел имеет свой заголовок.
3. В заголовке прошивки нас, грубо говоря, интересуют два массива DWORD каждый длиной 0х80 (128) байт, которые выглядят примерно так (в последней прошивке для QL3 Old):
Структура прошивки Ambarella (Mi81)-1.jpg
Массивы на рисунке разделены красной чертой.
Первый массив это смещения начала каждого раздела в файле прошивки, т.е смещение первого байта раздела относительно начала файла. Обратите внимание, что первый байт прошивки имеет нулевое смещение 0х00000000.
Второй массив - смещение конца, т.е. байта следующего за последним байтом соответствующего раздела. Естественно тоже относительно начала файла прошивки.
Пройдемся по этим массивам:
1-й раздел: начало - 0х00001000, конец - 0х00001900 (бирюзовый цвет);
2-й раздел: в данной прошивке отсутствует, о чем свидетельствует его нулевой смещение 0х00000000 (зеленый цвет);
3-й раздел: начало - 0х00002000, конец - 0х00035B14 (синий цвет);
4-й и 5-й разделы: отсутствуют;
6-й раздел: начало - 0х00036000, конец - 0х005СE104 (самый интересный с точки зрения редактирования раздел);
7-й раздел снова отсутствует.
Ну и так далее, разберетесь дальше сами.
Всего вы найдете пять действительных разделов, т.е. разделов реально включенных в данную прошивку. Каждый раздел имеет свое имя и назначение, но мы в детали вдаваться не будем, т.к. полученной информации достаточно для первых шагов.
Пока обратите внимание на следующие вещи:
-каждые четыре байта смещения в прошивке записаны задом наперед, так принято и об этом надо всегда помнить;
-конец раздела во втором массиве обозначен смещением байта следующего за последним байтом этого раздела;
-в прошивке теоретически может быть до девяти разделов, но часть из них может отсутствовать, в этом случае смещения забиты нулями ну а сам размер массива сделан с запасом на будущее усложнение прошивок.4. Теперь перейдем к самому интересному разделу, который в этой прошивке начинается со смещения 0х00036000 и чаще других подвергается правке.
Выполним в меню -> Position -> Go to offset... -> вводим 36000 и попадаем на первый байт раздела:
Структура прошивки Ambarella (Mi81)-2.jpg
Как уже отмечалось, каждый раздел состоит и заголовка длиной 0х100 (256) байт за которым непосредственно следует тело раздела, т.е. в нашем случае первый байт тела раздела будет лежать по смещению 0х00036100, что и показано на рисунке черной стрелкой.
5. Рассмотрим наиболее интересные значения заголовка прошивки, они выделены на рисунке различными цветами:
синий - контрольная сумма тела раздела (обратите внимание - только тела, без заголовка) в формате CRC32;
зеленый - длина раздела в байтах, т.е. даже если бы мы не знали из заголовка смещение конца раздела, мы смогли бы его вычислить;
желтый - адрес первого байта тела раздела в памяти прибора.
В заголовке есть и другие контрольные данные, но в данном контексте нас интересует только CRC32, поэтому оних я писать не буду, другие упомянутые привел лишь для сведения.
6. Теперь о контрольной сумме. Во-первых, она как ивсе другие значения записана задом-наперед, т.е. реальное значение в данном примере 0х2295С1С1 и когда вы вычислите свою сумму, вам придется ее побайтово перевернуть.
Во-вторых, напомню - считается только контрольная сумма тела раздела.
Делается это так:
-устанавливаем курсор на начало тела, т.е. по смещению 0х00036100;
-идем в меню: Edit -> Define block...;
-в открывшемся окне устанавливаем значения: для поля Begining в выпадающем комбобоксе выбираем Current position, т.е. байт где установлен курсор или вводим его смещение вручную, а в поле End - вводим вручную значение 5СE103 (т.е. смещение последнего байта раздела), нажимаем OK. В результате будет выделено тело раздела.
Теперь выполняем подсчет контрольной суммы:
-меню -> Tools -> Compute Hash...
-В открывшемся окошке выбираем в комбобоксе вид контрольной суммы, который нас интересует - СRC32 (32bit) и нажимаем OK.
-Записываем полученное значение в обратном порядке на бумажку.
Т.к. мы еще ничего не меняли в этом разделе прошивки, полученная контрольная сумма совпадет с той, что уже записана по смещению 0х00360000.
Если вы измените хоть один байт в теле раздела, его контрольная сумма изменится и вам нужно будет прописать ее в заголовке раздела на свое место не забыв перевернуть ее побайтово задом-наперед (в данном случае по смещению 0х0003600).
И еще, вы уже, наверное, обратили внимание, что при выделении тела раздела я указал конец блока 5CE103, а не 5СE104, как прописано для этого раздела в заголовке прошивки. Это потому, что как я писал выше, в заголовке конец раздела обозначен смещением первого байта, следующего за последним байтом раздела. Нас же в данном случае именно последний байт раздела и интересует.

Удачи и будьте внимательны, трижды внимательны, семирижды внимательны при редактировании прошивок.
 
Последнее редактирование:

cmd55

Команда форума
А просто выдели
ть ПРИ и РФС и поменить?
 

cmd55

Команда форума
Для начала выделяем PRI и RFS в прошивке.
Как кратно кол-во байт в блоке должно быть скажет z.768 или Kaliningrad.
DSP ты знаеш.
Загрузчики найдеш в сравнении.
Останется заголовки и хейдер.
CRC в PRI-проще некуда.Кол-во байт в блоке ты знаеш как найти.Блок+_1.
Ну и поискать в бэкапе остальные данные заголовка.Некоторые изменены.
К примеру изменений-
Тут пример в а12,но принцип один.
Желтое в эльфе и так же в прошивке.
В бэкапе с нанд другое.
Screenshot_1.jpg
Вот что в заголовок найти и написать правильно или подобрать.
Останется флаг..
 
Последнее редактирование:

cmd55

Команда форума
Переписать хейдер по адресам начала и конца блоков.Обычно бст и блд адреса одинаковые.
 

z.768

Команда форума
Ладно вставлю свои 5 копеек.
Начну новую тему в этом разделе форума.
Смотрим здесь...
Из чего сделаны наши девченки ???
 
Последнее редактирование:

JeWell

Лучший гость.
Ну что, спустя год, те же вилы...
Задача - из дампа (A7) сделать прошивку.
Размеры блоков - ладно, а что ниже то после этих смещений? Там какие-то данные живут, а какие - не нашёл описания. :)unk block1.png
 
Последнее редактирование:

On-Line статистика

Пользователи онлайн
1
Гостей онлайн
14
Всего посетителей
15