Однажды сотрудник принёс телефон Fly Ezzy Trendy 3.
(по его версии телефон начал первый, но сотрудник оказался сильнее)
Осознание того, что телефонная книга осталась у побеждённого наступило не сразу. И через некоторое время сотрудник обратился в ближайший сервис с просьбой извлечь телефонную книгу.
На этом история могла бы и закончиться, но по какой-то причине в сервисе ему отказали под предлогом того, что у них нет специализированной программы для этого телефона.
Проверили, вроде включается. Во всяком случае, загорается подсветка клавиатуры.
Лезем в гугл и узнаём, что телефон работает на процессоре MediaTek MT6261D. Смотрим какие сервисные программы используются для работы с устройствами на базе таких процессоров. Выбираем MAUI META и заодно качаем пакет драйверов для устройств на базе процессоров MTK.
Нагуглил вот такие варианты:
- Most Advanced User Interface
- Multimodal Affective User Interface
- Multimedia Application User Interface
Но это всё лирика.
Ставим драйвера, запускаем MauiMETA, выбираем FAT Editor, подключаем телефон и видим файловую систему телефона.
Копируем на компьютер содержимое NVRAM\NVD_DATA и начинаем усиленно его изучать. Оказалось, что нам нужны всего два файла MP0C_003 (здесь хранятся имена) и MP0H_006 (здесь хранятся номера телефонов). Так же, там был файл с смсками MPA3_001, но они нам были не нужны.
Будем использовать Frhed. Определяем размеры записей в этих файлах.
(вот здесь хорошо видно, где заканчиваются данные и идут пустые записи)
Формат записи в файле с именами:
- 44 байта на одну запись
- 2 последних байта под контрольную сумму
- сами записи в UTF-16LE
Формат записи в файле с телефонами:
- 38 байт на одну запись
- каждая запись начинается с 0x00 0x00 0x01 0x00
- 2 последних байта под контрольную сумму
- сами записи в ASCII
Теперь было бы неплохо как-то автоматизировать процесс извлечения из файлов номеров телефонов и имён. Поскольку под рукой был вёб-сервер и я немного могу в php, набросал скрипт, закинул файлы на сервер. В результате получился файл с записями такого вида: имя контакта, номер телефона. Дальше импортировали в таблицу.
Довольный владелец телефона ушёл со списком своих контактов в закат.
P.S. Из спортивного интереса решил проверить действительно ли последние два байта каждой записи являются какой-то контрольной суммой и если да, то каков её алгоритм.
Читал про 16-битные контрольные суммы типа CRC16 и безуспешно подбирал ту, которая подошла бы мне. Запарился и решил использовать «помощь зала» «звонок другу», который предположил, что всё намного проще и там может использоваться простая сумма всех байт записи.
Оказалось немного сложнее: нечётные байты суммируются отдельно и результат сравнивается с первым байтом контрольной суммы, чётные отдельно — со вторым. Суммирование происходит без учёта переполнения.
Надеюсь, что кому-то эта заметка поможет, а кого-то просто позабавит.
Комментарии (0)