motofan logo
       
> 

Заголовок Shx Файла, И Всё что с ним связано.

n0wheremany
сообщение 21.5.2006, 6:35


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Заголовок HEX Файла. И Всё что с ним связано.

Сами данные были уже разобраны в различных темах и выведены результаты:

От Vilko:

формат строки:
SxAABBBBBBBBXXXXXXXX....XXYY
где x - тип блока
x=0 - заголовок(начало) блока данных.
x=3 - блок данных
x=7 - конец блока данных.
AA - длина строки данных
BBBBBBBB - абсолютный адрес данных в телефоне.
XX - данные.
YY чексум.

Все числа представлены в HEX формате.

Заголовок HEX файла представляет данные размером 1FEB.

Разделён на несколько частей:
1. 000-0FF Название файла: "P2K Superfile", размером 100 байт
2. 100-11F Непонятно что: "3.00", 20
3. 120-13F Непонятно что: "2.00", 20
4. 140-1BF Дата: "Mon November 14 05:46:01 2005", 70
5. 1C0-30F Наверно прога с помощью чего генерируется SHX "CSF protected UNIX Generates Superfile", 140
6. 310-3AF Непонятно что (Наверно версия проги): "2.20", 90

А теперь самое интересное:

7. 3B0-1FEB Структура SHX файла, т.е. кодовые группы, 1C3B

ВНИМАНИЕ! У мотора своё представление о том, как должно выглядить число: в перевёрнутом виде. Умом мотор ...

Формат заголовка:
1. Количество кодовых групп: 4 байта. Допустим "08 00 00 00" т.е. "00 00 00 08" - 8 код групп
2. Идут сами кодовые группы:
XXXXYYYYZZ..ZZ, где
ХХХХ - 4 байта - абсолютный начальный адресс в телефоне
YYYY - 4 байта - абсолютный конечный адресс в телефоне
ZZ..ZZ - 20 байт - наверно чекксум. Но скорее всего 16 байт - это чексум, а остальное не понятно.

Замечание:
В рассматриваемых мною прошивках у Загрузчика почледние 2 байта в ZZ..ZZ - 00, а у кодовых групп - 0800.
После загрузчика (Он первый в списке CG) идёт 24 байта нулей.

Вот мой пример: (кодовые группы)

Код
[FONT=Impact]Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

000003B0   08 00 00 00 00 00 FD 03  F7 FF FE 03 03 FE F8 00   ......э.чзю..ю°.
000003C0   B1 72 19 E9 00 0C 02 03  01 00 07 E0 C6 C7 00 00   ±r.щ.......р+А..
000003D0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000003E0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 08 10   ................
000003F0   C7 00 08 10 10 9F D6 4D  00 00 00 B1 00 0C 02 06   А....я+M...±....
00000400   FF FF 0E 30 54 8C 08 00  C8 00 08 10 FF FF CF 10   зз.0TЮ..+...ззМ.
00000410   10 9F D6 4D 00 00 00 B1  00 0C 02 06 FF FF 0E 30   .я+M...±....зз.0
00000420   93 FB 08 00 00 00 14 11  FF FF FD 11 B4 B4 FF FF   Фы......ззэ.ЫЫзз
00000430   C0 FF FF FF FF FF FF FF  FF FF FF FF DB C2 08 00   КзззззззззззЯР..
00000440   00 00 04 10 FF FF 07 10  10 9F D6 4D 00 00 00 B1   ....зз...я+M...±
00000450   01 0C 02 06 FF FF 0E 30  C0 95 08 00 00 00 F4 10   ....зз.0КТ....ф.
00000460   FF FF 13 11 10 F4 00 10  00 00 00 B1 01 0C 02 06   зз...ф.....±....
00000470   FF FF 0E 30 30 8D 08 00  00 00 00 00 00 00 00 00   зз.00Н..........

00000590   00 00 D0 10 FF FF F3 10  00 00 00 00 00 00 00 00   ..+.ззу.........
000005A0   10 D0 00 1C 00 00 00 B1  7E 6C 08 00 00 00 00 00   .+.....±~l......

000005E0   00 00 00 00 00 00 FE 11  FF 07 FE 11 11 FE 00 10   ......ю.з.ю..ю..
000005F0   00 00 00 B1 01 0C 02 06  FF FF 0E 30 2C 72 08 00   ...±....зз.0,r..[/FONT]



Индификатором для кодовой группы является ещё номер, т.е. он фиксированный.
По моим подсчётам их около 250 с копейками.

Свой пример с 8 CG я Разобрал в SHXCoDec и получилось 7 файлов: Загрузчик, CG1, 2, 3, 4, 15, 18.
Но должно получиться 8. Решил разобраться:
Прошёлся поиском по HEX редактору с S0 (выше сказано что такое) и к моему удивлению их было 7.
Методом исключения установил что "лишним" мгут быть промежутки:
10080000-100800С7 100800С8-10CFFFFF

Как известно 10080000-10CFFFFF это Флеш.

Пробовыл разобрать SDL. Получает 8 файлов: CG 0,1,2,3,4,15,18

Посмотрел что находится данных SHX, получил:

Код
[FONT=Impact]Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

0004A1C0   53 33 30 44 31 30 30 38  30 30 43 30 46 46 46 46   S30D100800C0FFFF
0004A1D0   46 46 46 46 31 31 46 45  30 30 30 30 30 46 0D 0A   FFFF11FE00000F..
0004A1E0   53 33 34 35 31 30 30 38  30 30 43 38 30 30 30 30   S345100800C80000
0004A1F0   30 30 42 31 30 31 30 43  30 32 30 36 46 46 46 46   00B1010C0206FFFF
0004A200   30 45 33 30 34 35 36 31  35 32 37 39 30 30 30 30   0E30456152790000
0004A210   30 30 30 32 31 30 39 45  33 42 34 37 42 35 46 38   0002109E3B47B5F8
0004A220   31 43 30 34 31 43 30 45  31 43 31 35 38 38 33 37   1C041C0E1C158837
0004A230   34 38 42 44 37 38 30 30  32 38 30 42 44 31 30 39   48BD7800280BD109
0004A240   32 30 37 30 38 30 32 30  38 38 32 30 30 37 34 30   2070802088200740
0004A250   44 35 30 31 32 30 44 30  38 30 32 30 32 30 37 30   D50120D080202070
0004A260   38 30 32 30 45 30 33 32  34 38 42 37 46 45 0D 0A   8020E03248B7FE..[/FONT]


Разбираем:
S3 + 0D + 100800C0 + Данные + ЧС
S3 + 45 + 100800C8 + Данные + ЧС

Меня заинтересовало вот что:
По идее 100800C8 = 100800C0 + 0D. Чёта это равенство не получается.

Следуют вопросы:
1. Либо прошивка собрана не правильно (к сожалению стандартных нет - нет возможности посмотреть это), либо ведётся наложение, а зачем это надо?
2. Почему мы используем 7 CG cвместо 8. Т.е. без CG0 - не разделяем флеш?
3. Зачем выделять этот промежуток?


У кого какие мыли?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
azt59
сообщение 21.5.2006, 8:57


Мастер
****

Группа: Пользователи
Сообщений: 258
Регистрация: 26.9.2005
Из: Perm
Пользователь №: 52 732
Модель телефона: E398/V3x/C650/Z6
Прошивка: ---

Рейтинг: 140



n0wheremany,
На счёт CG0(Memory Map) в некоторых случаях склеивается с самой прошивкой(CG1) получается один файл он потом и пакуется. Толком неизвестно зачем это но для изучения прошивки в IDA всё равно их приходится склеивать...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 21.5.2006, 14:36


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431
Модель телефона: iPhone
Прошивка: 2.2.1

Рейтинг: 627.5



Цитата(n0wheremany @ Воскресенье, 21 Май 2006, 9:35)
ВНИМАНИЕ! У мотора своё представление о том, как должно выглядить число: в перевёрнутом виде. Умом мотор ...
*


В процессорах Motorola традиционно числа записаны в порядке "младший байт, старший байт" (Big-Endian).
Например, число 1234 (DEC) = {04 D2}

А в десктопных процессорах архитектуры x86 применяется порядок "старший байт, младший байт" (Little-Endian).
Например, число 1234 (DEC) = {D2 04}

Подробнее: http://en.wikipedia.org/wiki/Endianness


Формат Motorola S-record: http://www.amelek.gda.pl/avr/uisp/srecord.htm

Сообщение отредактировал blackbox - 21.5.2006, 14:41
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 22.5.2006, 7:45


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



azt59

Цитата
По идее 100800C8 = 100800C0 + 0D. Чёта это равенство не получается.


Меня больше интересует почему происходит наложение адресов.

blackbox

Пасибо за инфу. Но меня заголовок больше интересует.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
azt59
сообщение 23.5.2006, 9:52


Мастер
****

Группа: Пользователи
Сообщений: 258
Регистрация: 26.9.2005
Из: Perm
Пользователь №: 52 732
Модель телефона: E398/V3x/C650/Z6
Прошивка: ---

Рейтинг: 140



n0wheremany,

Цитата
Разбираем:
S3 + 0D + 100800C0 + Данные + ЧС
S3 + 45 + 100800C8 + Данные + ЧС


SHX-текстовый формат(открой в блокноте и сам поймёшь) в нём для кодировки одного байта используется две буквы (00,0F, 0A и тд) поэтому если теперь пересчитать то получим

0Dh/2=06h
06h+2(чексум)=08h

100800C8 = 100800C0 + 08

ИМХО....не отвечаю но верю
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 24.5.2006, 14:09


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Цитата
SHX-текстовый формат(открой в блокноте и сам поймёшь) в нём для кодировки одного байта используется две буквы (00,0F, 0A и тд) поэтому если теперь пересчитать то получим

0Dh/2=06h
06h+2(чексум)=08h

100800C8 = 100800C0 + 08

ИМХО....не отвечаю но верю


0D - это и есть значение байта. на 2 делить не надо. Тем более что размер - это размер данных без ЧС.

Проверте на др прошивках - такое ещё есть?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Random
сообщение 24.5.2006, 18:07


Музыкант
******

Группа: Почётные мотофаны
Сообщений: 1 066
Регистрация: 28.1.2005
Пользователь №: 36 054
Модель телефона: iPhone 4S

Рейтинг: 921



Кодовая группа CG1 в оригинальных прошивках ВСЕГДА разделена на части - на т.н. CG0 и CG1
При разборе прошивки это не нужно и мой алгоритм (и puper-а тоже) просто склеивает эти части.
Зачем это надо?
Точно не известно, но т.к. CG0 - это карта памяти прошивки, то может быть из-за этого ее отделили от самой прошивки.
Т.е. она пригождается прошивальщику например для каких-нибудь целей.
А может это рудимент какой :)

p.s. С суммой адресов ты напутал. Там указывается не только длина кода в строке, но еще и учитывается длина ее контрольной суммы, и адрес тоже. Поэтому и длиньше выходит как бы.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 26.5.2006, 9:41


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Цитата
Точно не известно, но т.к. CG0 - это карта памяти прошивки, то может быть из-за этого ее отделили от самой прошивки.
Т.е. она пригождается прошивальщику например для каких-нибудь целей.
А может это рудимент какой :)


Неа. Прошивальщику он не нужен. Т.к. он его заливает и как CG1 и тп.

Почему бы не назвать
CG0 - карта памяти
CG1 - Флеш
и тп?

Но зачем мы их склеиваем?

ЗЫ
1. в FlashBackup плохо (иногда какаой нибудь нет) определяются кодовые группы в прошивальщике (просмотр) blink.gif .
2. Можешь скинуть на мыло алгоритм разбора.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
UNLM-Trojan
сообщение 26.5.2006, 12:58


МотоТроян
***

Группа: Пользователи
Сообщений: 143
Регистрация: 15.10.2005
Из: Украина, Ровно
Пользователь №: 54 658
Модель телефона: V3r
Прошивка: R4515..74R

Рейтинг: 42.5



OFFTOPIC:
Как подсчитывать checksum блока и всего файла?

Я читал на сайте(ссылку дал blackbox) о Motorola S-Records. Но даже с моим высоким баллом с английского, я понять там почти ничего не смог...

Help plz...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Заголовок Shx Файла, И Всё что с ним связано. · Ломаем и строим! · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 15.6.2025, 5:43

Форум живёт: