motofan logo
> 

Реверсионная Лаборатория, Описание форматов и способов хранения данных в телефоне

Ailinor
сообщение 1.10.2007, 20:07


Интересующийся
**

Группа: Разработчики
Сообщений: 86
Регистрация: 27.8.2007
Из: Днепропетровск, Украина
Пользователь №: 145 831
Модель телефона: V3r
Прошивка: R4515_G_0.BD.74R

Рейтинг: 69



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

Начнём с описания структуры файла DL_DMH_File, отвечающего за хранение телефонной книги и календаря.

Я выделил два поколения DL_DMH_File файлов. Первое – файлы без каких-либо заголовков, второе – со следующим заголовком в начале: "DMH_FILE_HEADER_00.00.02".

В начале идёт служебная информация о содержании и/или структуре самого файла, далее идут записи телефонной книжки и в конце - записи календаря. Начальные смещения для календаря и телефонной книжки различны для разных моделей телефона и небыли обнаружены в служебной информации из начала файла. По этой причине предлагается блочное сканирование всего файла, начиная с некоторого смещения.

Размер одной записи телефонной книжки кратен 0x20 байтам, например: 0x20, 0x40, 0x80 и 0x240 байт (эти размеры блоков были встречены в изучаемых файлах). Начинать чтение блоков необходимо с некоторого начального смещения, которое различно для разных моделей. Для решения этой проблемы предлагается следующий алгоритм получения начального смещения:

dwStartPos = dwFileSize % 0x100 - (для файлов первого поколения)
или
dwStartPos = dwFileSize % 0x100 + длинна заголовка (=0x18) - (для файлов второго поколения).

Таким образом, предлагается чтение, начиная с вычисленного смещения, блоков размером большим, чем 0x240 байт и кратным 0x20 байтам. Но при этом блоки читать со смещением в 0x20 байт. Таким образом, не будут пропущены маленькие записи, но в случае, когда записи длиннее 0x20 байт, буфер будет периодически содержать куски данных из разных записей. Эта ситуация должна контролироваться на уровне парсеров, т.е. парсеры не должны пропускать некорректные данные, которых будет намного больше чем корректных записей по причине сканирования всего файла.

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

Первый тип записи:
Код

03 FE 81 0D 08 90 BB B5 BA C1 B5 B9 20 97 B0 B8
BA B0 07 81 08 79 79 83 91 F3 FF FF FF FF FF FF
FF FF FF FF FF 00 00 01 FF 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 FF FE EF FF FE


Первый байт записи должен быть меньше 0xEE, третий байт должен быть равен 0x81, пятый - 0x08. Имя начинается с шестого байта, четвёртый байт – длина имени в байтах. Имя храниться в моторола-кодировке, которая представляет собой «обрезанную» версию UTF8 – храниться лишь последний байт символа, стальные байты отбрасываются и для их восстановления необходима информация о ленг-паке телефона. Далее следует байт длинны номера телефона (в байтах), и за ним следует сам номер в BCD с перевернутыми байтами. Если первый байт номера равен 0x91, то в начале номера идёт символ «+», иначе (обычно 0x81) он просто пропускается.

Второй тип записи:

Код

81 05 08 90 BB 20 98 B2 07 91 97 01 09 62 64 F5
FF FF 04 FE FF FF FF FF FF FF FF FF FF 00 00 28
FF FF FF 00 00 04 FF FF FE EF FF FE EF FF FE EF
FF FE EF FF FE EF FF FE EF FF FE EF FF FE EF FF


Структура второго типа полностью совпадает со структурой первого типа, без первых двух байт.


Третий тип записи:

Код

03 FE 80 22 04 15 04 21 04 22 04 FF FF 07 81 08
79 79 83 91 F3 FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF 00 00 01 FF 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 FF FE EF FF FE


Первый байт записи должен быть меньше 0xEE, третий байт должен быть равен 0x80. Имя начинается с четвёртого байта, длина имени не храниться – если имя короче 0x30 байт, то оно заканчивается словом 0xFFFF, иначе оно занимает ровно 0x30 байт (возможно в разных телефонах эта длина окажется различной) и завершающего слова нет. Имя храниться в LITLEENDIAN UNICODE. Далее (аналогично) следует байт длинны номера телефона (в байтах), и за ним следует сам номер в BCD с перевернутыми байтами. Если первый байт номера равен 0x91, то в начале номера идёт символ «+», иначе (обычно 0x81) он просто пропускается.


Четвёртый тип записи:

Код

00 FE 54 65 73 74 2E FF 05 81 21 45 55 45 FF FF
FF 00 02 00 00 4E 46 45 E2 DF 01 00 0D FF 04 10
04 34 04 38 04 3C 04 40 00 00 00 55 00 6C 00 69
00 63 00 61 00 00 00 55 00 6C 00 69 00 63 00 61
00 32 00 00 00 43 00 69 00 74 00 69 00 00 00 50
00 49 00 6E 00 64 00 65 00 78 00 00 00 4F 00 62
00 6C 00 61 00 73 00 74 00 00 00 43 00 6F 00 75
00 6E 00 74 00 72 00 69 00 00 15 05 07 D6 14 EF
46 DF EB C0 46 E0 90 6F 00 00 00 00 00 03 C0 80
00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00
04 22 04 35 04 41 04 42 00 31 00 00 00 FF FE EF
FF FE EF FF FE EF FF FE EF FF FE EF FF FE EF FF
46 E0 15 F0 46 E0 90 89 00 00 00 00 00 03 C0 80
00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00
04 22 04 35 04 41 04 42 00 32 00 00 00 FE EF FF
FE EF FF FE EF FF FE EF FF FE EF FF FE EF FF FE


Имя начинается с третьего байта, длина имени не храниться – оно заканчивается байтом 0xFF. Имя храниться в ANSI. Далее (аналогично) следует байт длинны номера телефона (в байтах), и за ним следует сам номер в BCD с перевернутыми байтами. Если первый байт номера равен 0x91, то в начале номера идёт символ «+», иначе (обычно 0x81) он просто пропускается.


Пятый тип записи:

Код

54 65 73 74 2E FF 05 81 21 45 55 45 FF FF FF FF
FF 00 02 00 00 4E 46 45 E2 DF 01 00 0D FF 04 10
04 34 04 38 04 3C 04 40 00 00 00 55 00 6C 00 69
00 63 00 61 00 00 00 55 00 6C 00 69 00 63 00 61
00 32 00 00 00 43 00 69 00 74 00 69 00 00 00 50
00 49 00 6E 00 64 00 65 00 78 00 00 00 4F 00 62
00 6C 00 61 00 73 00 74 00 00 00 43 00 6F 00 75
00 6E 00 74 00 72 00 69 00 00 15 05 07 D6 14 EF
46 DF EB C0 46 E0 90 6F 00 00 00 00 00 03 C0 80
00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00
04 22 04 35 04 41 04 42 00 31 00 00 00 FF FE EF
FF FE EF FF FE EF FF FE EF FF FE EF FF FE EF FF
46 E0 15 F0 46 E0 90 89 00 00 00 00 00 03 C0 80
00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00
04 22 04 35 04 41 04 42 00 32 00 00 00 FE EF FF
FE EF FF FE EF FF FE EF FF FE EF FF FE EF FF FE

Структура пятого типа полностью совпадает со структурой четвёртого типа, без первых двух байт.


Шестой тип записи:

Код

80 1C 04 30 04 40 04 38 04 3D 04 30 04 FF FF 07
81 08 66 63 19 93 F3 FF FF 03 FE 3F 58 CC F3 46
CC 00 00 00 00 00 01 FF EF FF FE EF FF FE EF FF
FE EF FF FE EF FF FE EF FF FE EF FF FE EF FF FE
80 1C 04 30 04 40 04 38 04 3D 04 30 04 FF FF 6D
61 72 75 73 79 61 40 61 70 72 69 6F 72 69 74 2E
63 6F 6D 00 06 FE 51 FF FF FF FF FF FF FF FF 00
00 01 FF EF FF FE EF FF FE EF FF FE EF FF FE EF


Первый байт должен быть равен 0x80. Имя начинается со второго байта, длина имени не храниться – если имя короче 0x30 байт, то оно заканчивается словом 0xFFFF, иначе оно занимает ровно 0x30 байт (возможно в разных телефонах эта длина окажется различной) и завершающего слова нет. Имя храниться в BIGENDIAN UNICODE. Далее (аналогично) следует байт длинны номера телефона (в байтах), и за ним следует сам номер в BCD с перевернутыми байтами. Если первый байт номера равен 0x91, то в начале номера идёт символ «+», иначе (обычно 0x81) он просто пропускается. Этот тип похож на третий и отличается от него отсутствием первых двух байт и типом хранения текста.


Файлы второго поколения более универсальны и имеют следующую структуру:
Код

01 81 09 04 1C 30 40 38 3D 3E 47 3A 30 81 00 00
81 00 00 07 81 08 92 85 86 79 F2 FF FF FF FF FF
FF 00 00 00 00 00 00 00 81 00 00 00 00 00 00 00
16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 81 00 00 81 00 00 03 FF FF FF FF FF FF FF FF
FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 81 00 00 81 00 00 81 00
00 81 00 00 81 00 00 81 00 00 81 00 00 81 00 00
81 00 00 81 00 00 81 00 00 81 00 00 81 00 00 81
00 00 81 00 00 81 00 00 00 00 00 00 00 81 00 00
00 00 00 00 00 00 00 00 00 01 03 00 0D 00 00 00
B3 FF FF FF FF FF FF FF FF FE FE FE FE FE FE FE


Первый байт записи должен быть равен 0x01, второй байт должен быть равен 0x81. Имя начинается с пятого байта, длина имени храниться в третьем байте (в байтах). Имя храниться в «упакованном» UNICODE – первый байт, если он одинаков для всего имени, вырезан и храниться в байте перед байтом длинны (четвёртом) имени. Далее снова идёт 0x81, длинна, вырезанный общий байт, имя в такой же кодировке. Далее снова идёт 0x81, длинна, вырезанный общий байт, имя в такой же кодировке. Далее (аналогично) следует байт длинны номера телефона (в байтах), и за ним следует сам номер в BCD с перевернутыми байтами. Если первый байт номера равен 0x91, то в начале номера идёт символ «+», иначе (обычно 0x81) он просто пропускается.

Сообщение отредактировал Ailinor - 20.10.2007, 21:00
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
 
Ответ в темуСоздание новой темы
Ответов
Ailinor
сообщение 17.10.2007, 21:32


Интересующийся
**

Группа: Разработчики
Сообщений: 86
Регистрация: 27.8.2007
Из: Днепропетровск, Украина
Пользователь №: 145 831
Модель телефона: V3r
Прошивка: R4515_G_0.BD.74R

Рейтинг: 69



Немного инфы по симам, найденой здесь же, но после 4 часового поиска (для себя и ещё кому пригодится). Огромный респект всей команде p2kseem.

seem
0074_0001 - отвечает за код блокирования телефона (установленый пользователем)
0069_0001 и 006а_0001- код блокирования телефона (1234 по умолчанию)
0076_0001 - защитный код (000000 по умолчанию)
017f_0001 и 02d3_0001 - номер флекса
02d2_0001 - номер прошивки
0064_0001 - номер SMS центра записаного на SIM карте
011f_0001 и 0120_0001 - номер экстреного вызова забитого в телефоне (у меня 911)
0117_0001 - модель телефона

симы 007d_0001 - 007d_0080 содержат в себе смски (входящие, исходящие, черновики), быстрые заметки и последние вызовы...

полный список кодов Лэнг-паков(выдрано из MSS 3.8 не мной)
0001 US English
0002 UK English
0003 US English, Canadian French, American Spanish, Brazilian Portuguese
0004 UK English, Standard French, Standard German, Standard Italian
0005 UK English, French, German, Dutch
000A UK English, Spanish, Portuguese, Greek
000B UK English, Norwegian, Danish, Swedish
000C UK English, Estonian, Swedish, Finnish
000D UK English, Lithuanian, Latvian, Russian
000E UK English, Polish, Czech, Slovak
000F UK English, Turkish, Bulgarian, Hungarian
0010 UK English, Serbian, Slovenian, Croatian
0011 UK English, Russian, Romanian, German
0012 UK English, Hebrew, Arabic, Russian
0014 UK English, Chinese Complex
0015 US English, Chinese Simple
0016 US English, Chinese Complex
0017 UK English, French
0018 UK English, Spanish
0019 UK English, Portuguese
001A UK English, Spanish, Portuguese
001B American English, Canadian French, American Spanish
0020 UK English, Turkish, French
0021 UK English, Malasian, Tieng Viet, Thai, Vietnamese, Bahasa
0024 UK English, Simplified Chinese
002C UK English, Danish, Swedish, Norwegian, Finnish, German, Russian
002D UK English, Estonian, Latvian, Lithuanian, Finnish, Polish, Russian
002E UK English, German, Russian, Ukrainian, French, Spanish, Portuguese
002F UK English, Hungarian, Polish, Czech, Slovak, Slovenian, Croatian
0030 UK English, Bulgarian, Croatian, Romanian, Serbian, Slovenian, German
0031 UK English, Greek, Romanian, Bulgarian, Italian, German, Russian
0032 UK English, French, Arabic, German, Russian, Spanish, Turkish
0033 UK English, French, Hebrew, Arabic, Russian, Spanish, Turkish
0034 UK English, French, Urdu, Farsi, Arabic, Russian, Spanish
0035 UK English, Swedish, Romanian, Polish, Hungarian, Greek
0036 UK English, Danish, Polish, Russian, Slovak
0037 UK English, German, Dutch, Polish, Hungarian, Czech, Croatian
0038 UK English, French, German, Italian, Spanish, Turkish, Greek
0039 UK English, French, German, Italian, Spanish, Dutch, Turkish, Portuguese
004B UK English, Hindi
004D UK English, Complex Chinese, Simplified Chinese


Сим 0038, записи с 0001 до 000a (10 последних входящих звонков) (не подошло для V3x)
Оффсет 53
Значение байта:
00 - норма
01 - вместо имени и номера звонившего показывается надпись "Частный"
02 - вместо имени и номера звонившего показывается надпись "Ожидание вызова"
Сим 0039, записи с 0001 до 000a (10 последних набранных звонков)
Оффсет 53
Значение байта:
02 - норма
01 - после информации о вызове показывается надпись "Показать код"
00 - после информации о вызове показывается надпись "Скрыть код"

Можно запустить телефон без сим карты:
сим 004a_0001 бит 616
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить

Сообщений в этой теме

Реверсионная Лаборатория, Описание форматов и способов хранения данных в телефоне · Random's Developments · Forum
 

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

 



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

Форум живёт: