Mozgolom1980 написал(а):А можно вот этот момент поподробней? Как вы это сделали?
Инструкция камрада Mi81 с тэйкер-форума от 23 августа 2013 года:
1. Прошивка (bin) состоит из заголовка и следующих за ним разделов (обычно их пять, но теоретически может быть и больше).
2. Разделы прошивки выровнены на 0х00000800 и каждый раздел имеет свой заголовок.
3. В заголовке прошивки нас, грубо говоря, интересуют два массива DWORD каждый длиной 0х80 (128) байт,
которые выглядят примерно так (в последней прошивке для QL3 Old):
Массивы на рисунке разделены красной чертой.
Первый массив это смещения начала каждого раздела в файле прошивки, т.е смещение первого байта раздела относительно начала файла. Обратите внимание, что первый байт прошивки имеет нулевое смещение 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 и попадаем на первый байт раздела:
Как уже отмечалось, каждый раздел состоит и заголовка длиной 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, как прописано для этого раздела в заголовке прошивки. Это потому, что как я писал выше, в заголовке конец раздела обозначен смещением первого байта, следующего за последним байтом раздела. Нас же в данном случае именно последний байт раздела и интересует.
Удачи и будьте внимательны, трижды внимательны, семирижды внимательны при редактировании прошивок.
- Подпись автора
[html]
<div>
<a href="http://videoreg.forum2.net"><img src="https://forumstatic.ru/files/0018/21/d5/26807.gif">
</div>
<br>
<div>
<a href="https://clck.ru/NGf3a"><img src="https://forumstatic.ru/files/0018/21/d5/23980.gif" title="Additional version of the forum">
</div>
[/html]