Главная | Форум | Регистрация | Вход
[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Ремонт GPS навигаторов » FAQ - "ПОЧЕМУЧКА" » Изготовление и модификация прошивок (Все о прошивках PNA)
Изготовление и модификация прошивок
DenKoffДата: Четверг, 16.12.2010, 08:08 | Сообщение # 1
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Вниманию пользователей и гостей Alfessa.ru!


На этой странице, вы сможете найти полезную информацию по прошивкам PNA и программному обеспечению для этих целей, полезные советы и ответы пользователей.
Часть добавленной информации будет размещена с других сайтов и только с разрешения на ее публикацию автором (ссылка и имя автора в нижней части сообщения).
Информация будет постоянно добавляться и обновляться.


ВНИМАНИЕ! В ДАННОМ РАЗДЕЛЕ, ВОПРОСЫ ПОЛЬЗОВАТЕЛЯМИ НЕ ЗАДАЮТСЯ!!! ОБСУЖДЕНИЕ РАЗДЕЛА В ТЕМЕ "Вопросы пользователей и обсуждение прошивок".


ОГЛАВЛЕНИЕ:


Изготовление и модификация прошивок для навигационных устройств. Изменение файлов прошивок WinCE 5.0 и WinCE 6.

1. HELP по модификации прошивок с помощь программ.

2. Строение прошивок, описание формата файла прошивки типа nb0.

3. Извлечение файлов из прошивок.

4. Добавление русской локали в прошивки на WinCE 4 и WinCE 5.

5. Изменение реестра.

6. Структура файла реестра в формате fdf.

7. Добавление в прошивку различных файлов, удаление файлов и модулей из прошивки, перемещение модулей. Работа с программой xipport.

8. Основы ручного добавления файлов.

9. Работа с файлами реестра.

10. Извлечение образа прошивки в формате nb0 из дампа прошивки, полученного программой S3C2440_NR.

11. Прошивки типа img, описание (не завершенное).

12. Работа с "МультиБин" прошивками.

13. Ручной перенос модулей из одной прошивки в другую.

14. Меняем имя файла или модуля, прямо в файле прошивки.

15. Извлечение загрузочного лого, из дампа.

[size=10]16. Как из дампа, извлечь пригодный для прошивки файл.


17. Практические выводы, на основе анализа прошивок для мультихип в формате bin.

Программы для работы с образами

1. Программа BOOOFF.

2. Программа XipPort для WinCE.

3. Программа распаковки дампов.

4. Утилита разделения полных дампов.

5. Редактор реестра.

6. Программа для работы с образами WinCE - Remaker for WinCE 5-6.

7. Программа Quick BIN Viewer для просмотра, анализа и сравнения прошивок типа bin и их реестров.



Пиявки полезны для лечебных целей, НО! НЕ для форума!


ВНИМАНИЮ ПОЛЬЗОВАТЕЛЕЙ! ВСЯ ДОБАВЛЕННАЯ ВАМИ ПОЛЕЗНАЯ ИНФОРМАЦИЯ, БУДЕТ ОБОЗНАЧЕНА ССЫЛКОЙ НА НЕЕ В "ОГЛАВЛЕНИИ"!!!
 
DenKoffДата: Четверг, 16.12.2010, 13:09 | Сообщение # 2
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
HELP по модификации прошивок с помощью программ.

Прежде всего, в силу того, что вопросы вроде "как пересобрать прошивку?", будут появляться снова и снова, следует понять две простые вещи:

Первая: все-таки работа с прошивками требует какой-никакой, но хотя бы начальной теоретической подготовки, хотя бы в общих чертах (формата прошивки и ее составных частей), общих принципов построения архитектуры устройств, назначения и настройки драйверов, умения читать или хотя бы понимать реестры операционной системы ну и много чего еще. Если же ваше знакомство с дивайсом ограничивается лишь чтением инструкции к недавно приобретенному устройству, то лучше потратить месяц - другой, а то пол года на более глубокое знакомство с "физиологией" вашего "пациента".

Вторая: в этой теме достаточно много будет начальных сведений, необходимых для того, чтобы и голова знала, чем занимаются руки. Программа "B000FF" в большей степени ориентирован на опытных пользователей. Те, кто уже что-то знает о прошивках и интересуется возможностями "XIPPort", могут не утруждать себя чтением всех ниже выложенных вопросов, а ограничиться лишь беглым знакомством.

Теперь по существу:

1. Прошивка это образ памяти.

2. Зачем нужны форматы bin и nb0

3. Чем отличаются файлы в прошивке от файлов на диске или что такое модуль и регион.

4. Как модули и файлы копируются из ROM в RAM при включении дивайса и что такое слот.

5. Что значит "снять дамп", "разобрать" и "собрать" прошивку.

 
DenKoffДата: Четверг, 16.12.2010, 13:12 | Сообщение # 3
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
6. Что умеет и чего не умеет XIPPort.



6.1 Вкладка первая "XIPPort".



6.2 Вкладка вторая "Add"



6.3 Вкладка третья "M Reloc"



6.4 Вкладка четвертая "Misc".



7. Карта прошивки (MAP).

 
DenKoffДата: Четверг, 16.12.2010, 13:12 | Сообщение # 4
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
8. Анализ прошивки.

8.1 Разборка прошивки типа bin.

8.2 Анализ содержимого прошивки.

9. Начинать следует с удаления.

10. Известные принципы подбора донорских прошивок, модулей и файлов.

11. Замена файлов и модулей.

Далее информация будет добавляться

Отдельное "спасибо" за проделанный труд и подготовленный материал "Mi81"

 
DenKoffДата: Пятница, 17.12.2010, 06:52 | Сообщение # 5
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Строение прошивок, описание формата файла прошивки типа nb0.

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

Формат nb0 представляет из себя бинарный образ памяти. Т.е. данные хранятся во флэш памяти в таком же виде в каком они расположены в RAM. Данные находящиеся в этом формате, грузятся в RAM напрямую, не преобразовываясь. Загрузчик просто копирует содержимое флэш памяти в RAM и запускает от туда систему.
Для рассмотрения нам понадобится HEX редактор, например тот, что лежит в аттаче и файл прошивки, на примере которого мы и будем рассматривать структуру. Для примера я буду использовать файл прошивки от прибора WP9100. Скачать можно тут. Распакуйте архив и откройте в редакторе файл NK.nb0.
Вот что мы увидим.

С адреса 0х0000 по адрес 0х004С расположен заголовок партиции (раздела), так называемый PARTHDR.
Первые четыре байта A2 1E 00 EA, представляет из себя ассемблерный код, дающий команду загрузчику перепрыгнуть на определенный адрес и запустить от туда систему. Практической ценности для нас он не имеет, поэтому не будем задерживаться на его рассмотрении.
Далее, по смещению 0х40 находится сигнатура формата nb0, 45 43 45 43 (в ASCII формате ECEC) именно по этой сигнатуре, мы определяем, что перед нами формат nb0 и именно по ней, мы находим начало секций прошивок.
Следующие четыре байта 98 AE 53 8D говорят нам об адресе заголовка прошивки (ROMHDR) в RAM. Согласно этим байтам, адрес заголовка прошивки, загруженной в память, будет буден начинаться с адреса 8D 53 AE 98. Здесь хочу отметить следующее: порядок записи данных в память обратный. Этот способ называется Little endian.
Следующие четыре байта 98 EE 12 01, показывают нам адрес заголовка прошивки 01 12 EE 98, в образе прошивки, т.е смещение от начала образа прошивки. Перейдя на этот адрес мы попадем на начало заголовка прошивки (ROMHDR).

Длина заголовка равна 84 байта. Каждые четыре байта несут в себе определенную информацию. Рассмотрим подробнее его.
CODE - здесь описаны значения этих байт. Это очень важно понять, так как изменение прошивки, должно вести к изменению заголовка и его расположения в образе.

Теперь зная структуру заголовков, рассмотрим строение образа.
Для этого воспользуемся утилитой dumprom.exe. Ее вы можете найти во вложении. Сейчас мы не будем разбирать прошивку, а только выведем в текстовой файл, строение образа пошивки.

Создайте в корне диска С, папку с именем, например "1". Разархивируйте в эту папку архив с программой dumprom.exe. Скопируйте в эту папку файл прошивки NK.nb0. Создайте в папке 1, папку с именемdump. Нажмите кнопку ПУСК, затем выполнить. В появившемся окне наберите cmd. В окне DOS, наберите команду перехода в созданную нами папку, cd c:\1\
Теперь запустим программу dumprom.exe, для этого наберем следующую команду: dumprom -d dump -5 NK.nb0 >>1.txt
-d укажет программе что мы хотим получить дамп.
dump это имя папки, куда будут дампиться файлы прошивки.
-5 тип сжатия (для WinCE 5 это значение равно -5, для WinCE 4 это значение равно -4 )
NK.nb0 имя файла, который мы будем дампить
1.txt имя текстового файла, куда будет выводится дамп прошивки.

В результате работы программы, в папке 1 у нас появится файл 1.txt. Можете скачать это файл из аттача и сравнить с полученным Вами. Итак давайте рассмотрим полученный нами файл 1.txt. Что мы увидим. Пропустив начало, смотрим с этого места.

Первая строка показывает нам адрес в RAM, начиная с которого загружается образ оси. В нашем случае, образ грузится в память, начиная с адреса 8c40c000
Вторая строка просто сообщает нам, что начиная с адреса 8c40c000 по адрес 8c40c004 располагается код a2 1e 00 ea размер кода L00000004 - 4 байта. Мы с Вами уже знаем, что это просто ассемблерный код.
Третья строка говорит нам, что с адреса 8c40c004 по адрес 8c40c040 находятся нули. Размер этой секции равен L0000003c
Четвертая строка описывает сигнатуру ECEC и показывает адреса: заголовка образа (ROMHDR) в RAM 8d53ae98 и смещение от начала образа 0112ee98.
Пятая строка опять говорит нам об области занятой нулями.

Здесь мы сделаем небольшое отступление от рассмотрения нашего текстового файла 1.txt. Чтобы понимать строение прошивки, нам нужно знать из чего же состоит прошивка. Если Вы откроете папку Windows, то увидите набор файлов и ДЛЛ. Логично было бы предположить, что и в образе оси все расположено так же. Лежат куча файлов, длл и папок. Однако это не так. Вообще образ оси состоит из ФАЙЛОВ и МОДУЛЕЙ

ФАЙЛЫ:

МОДУЛИ:

Данная информация предоставлена для ознакомительных целей и ее использование вы берете на свой страх и риск. За последствия автор ответственности не несет.

Прикрепленные файлы: скачать одним архивом тут
- HexEdit_2_6.zip
- Dumprom.rar
- 1_txt.rar

Большая благодарность за разрешение на размешение информации и проделанный труд "holod"

 
DenKoffДата: Пятница, 17.12.2010, 08:10 | Сообщение # 6
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Инструменты (программы и утилиты) для исследования прошивок.Извлечение файлов из прошивок.

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

Извлечение файлов из прошивок типа .nb0

Извлечение файлов из прошивок типа .img

Извлечение файлов из прошивок типа .bin (BOOOFF)

Прикрепленные файлы: скачать одним архивом тут
- dumpromx.rar
- viewbin.rar
- cvrtbin.rar

Большая благодарность за разрешение на размешение информации и проделанный труд "holod"

 
DenKoffДата: Пятница, 17.12.2010, 08:48 | Сообщение # 7
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Добавление русской локали в прошивки на WinCE 4 и WinCE 5.

За поддержку локали и кодовых страниц в WinCE отвечает файл wince.nls (national language support)

Давайте для начала рассмотрим структуру этого файла.
Откроем файл в HEX редакторе. В аттаче есть фалы nls для WinCE 5 и для WinCE 4.

Что можно увидеть рассматривая файл. Многое, например мы можем узнать, есть ли поддержка русской локали, какие кодовые страницы присутствуют в этом файле. Сколько типов календарей поддерживается.
Первые четыре байта показывают количество локалей в файле.
Следующие четыре байта показывают количество календарей в файле. Здесь имеется ввиду типы календарей. Например григорианский, юлианский, китайский, лунный и т.д.
следующие четыре байта показывают количество кодовых страниц в файле.
адрес начала таблицы unicode в файле.
адрес начала таблицы сортировки unicode в файле.
четыре байта (выделено коричневым) номера локали (Американская локаль 0409)
адрес описания локали в файле.
четыре байта (выделен розовым) номера локали (Номер русской локали 0419).
адрес описания локали в файле.
далее идет четыре байта номера календаря 01 это григорианский календарь.
четыре байта адреса описания календаря в файле.
четыре байта номера кодовой страницы.
четыре байта адреса начала кодовой страницы в файле.
........... и т.д.

В аттаче лежат файлы для WinCE 4 и WinCE 5, сделанные в платформ буилдере, для двух локалей (США и Россия) Этими файлами я и пользуюсь, добавляя русскую локаль в прошивки. Файлы не содержат в себе ничего лишнего и отличаются компактными размерами, что позволяет добавить их в практически любую прошивку.

Добавление русской локали в файл прошивки, типа nb0 на WinCE 5.

Рассмотрим добавление русской локали в прошивку моего прибора, в котором русской локали не было.
Прошивка лежит здесь. Для работы нам понадобится утилита dumpromx.

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

dumpromx -5 NK.nb0 >>1.txt

В результате работы программы получаем текстовой файл 1.txt, открываем его блокнотом и ищем все строки содержащие wince.nls. Вот они:

8ccc9ff0 - 8ccc9ffa L0000000a filename wince.nls
...........................
8d2925f8 - 8d2b199a L0001f3a2 filedata wince.nls
..........................

По этим записям мы узнаем, что файл располагается в RAM с адреса 8d2925f8 по 8d2b199a и занимает место в памяти 1f3a2. Используя эти данные, мы можем узнать где он находится в прошивке.
От адреса размещения в RAM, отнимаем адрес начала размещения образа в RAM (8c40c000 - 8c40c000 L00000000 rom_00 start)

8d2925f8 - 8c40c000 = e865f8 ( смещение начала файла wince.nls от начала файла прошивки)

...........................
8d53c908 - 8d53c924 L0000001c filent 1 00000007 01c90d9acb144e00 127906 127906 8d2925f8 wince.nls

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

Если мы посмотрим теперь на размер файла, который мы хотим интегрировать в прошивку (в аттаче wince_nls_5 ), то увидим, что его размер больше, чем то место, которое в прошивке занимает родной файл 133 234 байта против 127 906 байт. Значит простой заменой в HEX редакторе здесь не обойтись. Что же следует предпринять в этом случае? В этом случае мы воспользуемся тем, что программа dumpromx помещает файлы в образ прошивки в сжатом виде. Даем следующую команду:

dumpromx -f wince.nls -a wince.nls -5 NK.nb0

-f wince.nls получаем информацию о файле wince.nls.
-a wince.nls даем команду заменить файл wince.nls в прошивке (файл должен находится рядом).
-5 использовать компрессию для WinCE 5.
NK.nb0 имя файла в котором производим замену.

В результате работы программы, мы получим файл wince.nls.nb, распечатаем его карту

dumpromx -5 wince.nls.nb >>2.txt

И поиском найдем все записи содержащие имя файла wince.nls

8ccc9ff0 - 8ccc9ffa L0000000a filename wince.nls
.............................
8d2925f8 - 8d2a4e4a L00012852 filedata wince.nls
.............................
8d53c908 - 8d53c924 L0000001c filent 1 00000807 01c90d9acb144e00 133234 75858 8d2925f8 wince.nls

Как мы видим размер занимаемого файлом места, уменьшился, в сжатом виде файл занимает 75858 байт, размер файла в памяти, в разархивированном виде равен 133234 байт. Место оставшееся после замены помечается программой как неиспользуемое.

8d2a4e4a - 8d2b199c L0000cb52 unknown

Осталось переименовать наш файл в NK.nb0 и мы получим файл прошивки, в которой будет русская локаль.

Данная информация предоставлена для ознакомительных целей и ее использование вы берете на свой страх и риск. За последствия автор ответственности не несет.

Прикрепленные файлы: скачать одним архивом тут
- wince_nls_4.rar
- wince_nls_5.rar

Большая благодарность за разрешение на размещение информации и проделанный труд "holod"

 
DenKoffДата: Пятница, 17.12.2010, 15:07 | Сообщение # 8
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Изменение реестра.

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

Вы уже наверное знаете, что реестр на одних устройствах хранится во флэш памяти и сохраняет настройки после выключения прибора. На других реестр хранится в RAM и после выключения записанные Вами настройки не сохраняются. Первый тип реестра называется Hive Based, второй RAM Based.

Hive Based реестр.

RAM Based реестр.

Данная информация предоставлена для ознакомительных целей и ее использование вы берете на свой страх и риск. За последствия автор ответственности не несет.

Прикрепленные файлы: скачать одним архивом тут
- boot.rar
- default.rar
- user.rar
- Reestr_hv.rar
- ActivePerl_5.10.0.1004_MSWin32_x86_287188.msi
- fdf2reg.rar
- reg2fdf.rar

Большая благодарность за разрешение на размещение информации и проделанный труд "holod"

 
DenKoffДата: Понедельник, 20.12.2010, 04:07 | Сообщение # 9
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Структура файла реестра в формате fdf.

Сведения о ключах и параметрах начинаются со смещения 0x00000008, т.е. с девятого байта от начала файла, где последовательно расположены записи реестра. Под записью я понимаю структуру байтов, которая может описывать как ключ реестра, так и параметр.

Каждая запись, в свою очередь, состоит из двух структур - заголовок записи длинной 4 байта (uint) и данные записи, в которых прописано все о ключе/параметре, длинна данных есть величина переменная. Записи параметров, относящихся к ключу, следуют непосредственно за записью самого ключа, т.е. пока не встретиться следующий ключ.

Заголовок записи состоит из двух значений, каждое длинной 2 байта (ushort):
* Первые два байта (ushort) определяют длину данных (RecordDataLength) в байтах, т.е. длину второй структуры в записи, которая следует непосредственно за заголовком записи.
* Следующие два байта определяют тип записи (RecordType) : значение 0х0001 означает, что это запись ключа, 0х0002 - параметра.

Данные записи, в зависимости от RecordType, могут интерпретироваться по-разному.

1. Если это ключ (RecordType = 0x0001), то данные записи (длинной RecordDataLength) хранятся в следующем формате:
* Первый байт (сhar) - индекс корневой ветки (RootKey), к которой принадлежит ключ. Может принимать следующие значения:
0 - "HKEY_CLASSES_ROOT", 1 - "HKEY_CURRENT_USER", 2 - "HKEY_LOCAL_MACHINE", 3 - "HKEY_USERS".
* Второй байт, похоже, зарезервирован и не используется. В проверенных реестрах равен нулю.
* Третий байт - длина имени ключа (KeyNameLength) в символах (не в байтах!), включая завершающий нулевой символ.
* Четвертый байт, кажется, тоже зарезервирован и имеет нулевое значание
* Далее следует имя ключа (KeyName) в виде строки unicode с завершающими нулевыми символами длинной KeyNameLength. Имя ключа содержит весь путь к нему кроме корня, который определяется по значению RootKey.

2. Если же это параметр (RecordType = 0x0002), то запись содержит его имя, тип значения параметра и собственно его значение. Структура параметра такая:

* Первые 2 байта (ushort) задают тип значения параметра (ValueType) и могут принимать значения: REG_NONE = 0, REG_SZ = 1, REG_EXPAND_SZ = 2, REG_BINARY = 3, REG_DWORD = 4, REG_LINK = 6, REG_MULTI_SZ = 7, REG_MUI_SZ = 0x15.
* Следующий байт (char) это длина имени параметра (ValueNameLength).
* Четвертый байт, видимо, зарезервирован, потому что он не значит ничего и в проверенных реестрах равен нулю.
* Затем идут два байта (ushort) - длина значения параметра (ValueLength) в байтах.
* Далее следуют символы имени параметра в формате unicode, естественно, длинною ValueNameLength, включая завершающий нулевой символ.
* Ну и в конце само значение параметра (Value) длинною ValueLength, которое интерпретируется в зависимости от RecordType.

И так далее до конца файла без всякого выравнивания, сплошным потоком. Т.о. реестр fdf хранится в фактически готовом к работе виде, т.е. смонтированным, в отличие от реестра hv. Вот и весь формат реестра fdf.
При работе с именами (ключей и параметров) и строковыми значениями параметров следует помнить, что они хранятся в кодировке unicode, т.е. каждый символ занимает два байта, в т.ч. и завершающий нулевой символ.

Отдельное "спасибо" за проделанный труд и подготовленный материал "Mi81"

 
DenKoffДата: Понедельник, 20.12.2010, 05:49 | Сообщение # 10
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Добавление в прошивку различных файлов и длл, удаление файлов и модулей из прошивки, перемещение модулей. Работа с программой xipport

Перемещение модулей для добавления файлов.

Так как, все работы по модификации, производятся на файлах формата nb0, я расскажу, как можно изменять прошивки приборов, на примере работы с файлами именно этого формата. Вопрос преобразования, в этом посте затрагивать не буду. Есть много типов файлов и разных прошивок и преобразование их в формат nb0, происходит разными программами. Эти вопросы рассмотрим позднее, беря для примера конкретные прошивки приборов.

Итак начнем. Возьмем любой файл nb0. Для примера я возьму файл от прошивки прибора SPT-100. Берем тут
Для работы нам потребуется программа xipport, которая находится в аттаче. Для работы программы xipport.exe, Вам понадобится установленный фреймворк 2 SP1.

Далее копируем в папку с прошивкой фал xipport.exe и pkgcommon.dll. Переименовываем, наш файл nb0, в xip.bin и запускаем программу xipport.exe.
В программе жмем кнопку dump xip bin.
В результате этого получаем папку OUT. В этой папке будут еще две папки.Это папка Files и папка Modules. А также текстовые файлы, PARTHDR.txt и ROMHDR.txt.
Затем жмем кнопку write maps.
В результате мы получим два текстовых файла, MAP.physical.txt и MAP.txt
Рассмотрим эти текстовые файлы и содержимое папок подробнее.

PARTHDR.txt содержит:

ROMHDR.txt содержит:

MAP.physical.txt содержит:

MAP.txt содержит:

Удаление файлов и модулей

.

Большая благодарность за разрешение на размещение информации и проделанный труд "holod"

 
DenKoffДата: Понедельник, 20.12.2010, 06:50 | Сообщение # 11
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Основы ручного добавления файлов.

Вот, например, у нас такая "дыра" размером 1 048 444 байта:
80eae51c - 80eae538 L0000001c filent 45 00000007 01c45f1fe1322000 23 23 8037bfd0 control.lnk
80eae538 - 80fae4b4 L000fff7c NUL
80fae4b4 - 80fae4b4 L00000000 End: highest physical address
Имеется смещение начального адреса загрузки P:
80200000 - 80200000 L00000000 Start: first physical address
Имеется некий несжатый файл xxx.dll длинною, допустим, 0002D453 байт

Вопрос как правильно вставить файл именно в то место, в какое мы хотим его вставить.

Для начала, сожмем файл, с помощью программы BOOOFF. Нажимаем кнопку compress и выбираем нужный нам файл. В результате получаем сжатый файл, с расширением compress (которое необходимо удалить) и текстовой лог файл, в котором описаны размер файла в сжатом и не сжатом виде. Эти данные представлены в десятичном виде (пожелание автору перевести их в шестнадцатеричный вид) С помощью виндовского калькулятора, переведем их в нужный нам шестнадцатеричный вид. Откроем в блокноте любой текстовой файл из директории ФАЙЛЫ. Ну например вот этот:
File name: wince.nls
dwFileAttributes: 00000007
ftTime: 01C8DCE3F4154742
nRealFileSize: 0002029E
nCompFileSize: 0002029E
lpszFileName: P+00095FE0
ulLoadOffset: P+001F3328

Вместо wince.nls пишем имя нашего файла xxx.dll

dwFileAttributes: 00000007
ftTime: 01C8DCE3F4154742
Эти два параметра оставляем без изменений, они ни на что не влияют в нашем случае.

nRealFileSize: сюда пишем значение полученное нами ранее в калькуляторе, размер не сжатого файла. Например 2015D

nCompFileSize: сюда пишем значение полученное нами ранее в калькуляторе, размер сжатого файла. Например 12А

lpszFileName: адрес с которого начинается имя файла в прошивке, в нашем случае это: 80eae538 (начало "дыры") минус 80200000 (начало прошивки в РАМ) равно CAE538

ulLoadOffset: адрес начала данных в прошивке. Логично предположить, что он будет начинаться сразу после имени. Т.е. если к смещению имени мы прибавим ее длину , мы получим смещение начала данных.
Длина имени равна количеству всех знаков имени, плюс один разделительный байт. В нашем случае имя xxx.dll имеет длину 7 байт плюс один. Итого восемь байт. Прибавляем к предыдущему смещению длину, получим смещение данных файла. Т.е. CAE538+8= CAE540

Сохраняем правленый файл с именем ххх.dll.imageinfo
Кидаем сжатый файл и текстовой файл в папку ФАЙЛЫ. Составляем карту. Если необходимо смещаем границу конца прошивки, смещаем актуалы, начало РАМ и начало свободного РАМ. Собираем прошивку.

Большая благодарность за разрешение на размешение информации и проделанный труд "holod"

 
DenKoffДата: Понедельник, 20.12.2010, 07:18 | Сообщение # 12
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Работа с файлами реестра.

Изучая Platform Builder 5.0 выяснил, что при генерации образа прошивки компиляцию реестра из файла текстового формата выполняет утилита regcomp.exe (лежит в WINCE500\PUBLIC\COMMON\OAK\BIN\I386). Указанный файл требует cereg400.dll.
В PB 6.0 файл regcomp лежит в WINCE600\PUBLIC\COMMON\OAK\BIN\I386.
Вызов осуществляется так: regcomp ,
где:
src - текстовый файл в формате REGEDIT4 (не забудьте, что REGEDIT4 в отличие от REGEDIT5, это обычный ASCII)
outputdir - директорий, в котором будут созданы default.fdf (для регистра размещаемого в RAM) или три файла boot.hv, default.hv, user.hv для hive-реестра.
Текстовый файл в формате REGEDIT4 представляет собой набор строк вида:
REGEDIT4
[HKEY_LOCAL_MACHINE\nls]
"DefaultLCID" = dword:419
[HKEY_LOCAL_MACHINE\MUI]
"SysLang"=dword:419
и т.д.

Какой реестр строить (RAM или hive) утилита определяет сама по содержимому текстового файла (по служебному коментарию OUTPUTHIVE - см. ниже).
Для hive-реестра весьма существенным является расстановка текстовых комментариев вида:
; HIVE BOOT SECTION
ключи реестра
; END HIVE BOOT SECTION

Ключи, размещенные в этой секции помещаются при компиляции в boot.hv и дублируются в system.hv. Определить ветки, которые должны находится внутри этих комментариев, можно открыв прошивку (в формате bin) в Visual Studio 2005 и изучив содержимое Boot Registry.
Кроме того, для hive-реестра в самом начале после REGEDIT4 нужно поместить строки:
; @CESYSGEN IF FILESYS_FSREGHIVE
; OUTPUTHIVE
; @CESYSGEN ENDIF

В RAM-рестре этот служебный комментарий отсутствует.
Все остальные ключи реестра (вне этой секции) вставляются только в system.hv. Все, что каcается ветки HCU и профиля юзера вставляется в user.hv, но об этом можно не заботиться.

Пока нет standalone инструмента действовать (с hive-реестром) предлагаю так:
1. Открыть прошивку в VS 2005 с установленным Platform Builder 6.0 (прошивка должна быть в формате bin, т.е. BOOOFF).
2. Правой кнопкой мыши щелкнуть на Boot Registry и выбрать Viev As Text.
3. В начале полученного текста добавить строки:
REGEDIT4
; @CESYSGEN IF FILESYS_FSREGHIVE
; OUTPUTHIVE
; @CESYSGEN ENDIF
; HIVE BOOT SECTION

4. В конце добавить строку:
; END HIVE BOOT SECTION
5. Сохранить файл (пусть это будет initrreg.ini или registry.txt - имя не важно).
6. Правой кнопкой мыши щелкнуть Registry и выбрать Viev As Text.
7. Скопировать все содержимое и добавить в конец ранее созданного файла.
8. Теперь нужно убрать дубликаты строк (ключей и переменных), дело в том, что ключи из Boot Registry повторяются и в Registry, поэтому нужно просматривая секцию HIVE BOOT SECTION, найти все повторные вхождения имеющихся в ней ключей в общей части реестра (Registry) и удалить их.
9. Провести редактирование реестра по своему усмотрению.
10. Задать переменную среды LOCALE (см. ниже).
11. Собрать новый реестр утилитой regcomp
Будьте внимательны при удалении дубликатов (п. 8): в одном и том же ключе реестра могут быть как hive, так и не hive переменные, не удалите лишнего, но и не пропустите двойник.
Для получения текстового файла реестра из прошивки, наверное, можно использовать и другие утилиты, помимо VS 2005, при этом не забудте, что все, что касается секции HIVE, лежит в boot.hv.
Выше описан порядок редактирования hive-рестра, для RAM рестра, так как он состоит из одного файла и не имеет секции HIVE, достаточно сохранить значение Registry, добавив в начале строку: REGEDIT4

Для того, чтобы правильно задать переменную среды LOCALE при компиляции вашего реестра (п. 10) нужно до запуска regcomp:
1. Найти в текстовом файле переменную LCID, в приложенных файлах она имеет вид
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\International]
"LCID"=dword:419

2. Создать переменную среды LOCALE с локалью вашей прошивки (в данном случае 0419, обратите внимание, что вводить нужно 4 цифры, дополнив при необходимости слева нулем), для этого выполнить:
Мой компьютер -> Свойства -> Дополнительно -> Переменные среды -> Создать
После компиляции реестра переменную можно (и нужно) удалить из системы, чтобы не засорять ее.

После выполнения всех операций и компиляции реестра, имеющимися в вашем распоряжении инструментами (например, BOOOFF) удаляете файлы реестра из прошивки и добавляете свои. Все. Нужно лишь позаботиться о том, чтобы в прошивке, после удаления старых файлов реестра, была "дыра" необходимого размера.

Для примера прилагаю два текстовых файла RAM и hive рестра, сгенерированных PB5 при сборке образа эмулятора (второй поленился чиcтить от комментариев, начинающихся с точки с запятой, коментарии можно смело выкинуть (но лучше почитать), кроме ; HIVE BOOT SECTION и ; END HIVE BOOT SECTION).
My.ini это реестр пересобранный описанным способом из reginit_hive.ini.
Regcomp_WinCE_60.rar - таже утилита, но для Windows CE 6.0. Работать точно так же.

Прикрепленные файлы: скачать одним архивом тут
- Regcomp.RAR
- reginit.ini
- reginit_hive.ini
- my.ini
- Regcomp_WinCE_60.RAR

Отдельное "спасибо" за проделанный труд и подготовленный материал "Mi81"

 
DenKoffДата: Понедельник, 20.12.2010, 08:20 | Сообщение # 13
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Извлечение образа прошивки в формате nb0 из дампа прошивки, полученного программой S3C2440_NR.

Как из дампа сделанного программой S3C2440_NR вычленить ВОЗМОЖНО прошивку и извлечь из нее файлы и модули.

Для начала отправлю Вас, почитать выложенную тут тему по STP100. Читаем "Как из дампа, извлечь пригодный для прошивки файл (см. п.16 темы)".
Еще раз хочу восхититься автором данной программы. Она позволяет не только получить все содержимое флэш памяти, но и узнать есть ли у Вас бэд блоки. И зная это, получить возможность обойти эти блоки при извлечении файла прошивки. Как найти и расчитать адреса бэд блоков я описал в своем посте. Если что то не поймете пишите, постараюсь растолковать.
Единственное отличие данного дампа от дампа моего прибора, это отсутствие таблицы ТОС.


Вот теперь попробуем извлечь файлы пригодные для разборки, без наличия этой таблицы.
Для работы нам понадобится HEX редактор, который вы можете скачать из данной темы.
Берем файл Spares.bin -тут. Проверяем его на наличие бэд блоков. К счастью, или к сожалению этот прибор не имеет бэд блоков. Значит наша задача значительно упрощается. Нам остается только вырезать из дампа интересующую нас информацию. В HEX редакторе открываем файл Pages.bin. Мы не ставим перед собой задачу, получить файлы для восстановления , через JTAG, поэтому nBOOT нас не интересует.
Ищем известную, из второго поста, сигнатуру 45 43 45 43 (ECEC), первый вход найдется по адресу 0х0000 4040. Сравните со скрином.

Отсчитав 0х40 (64) байта назад, от начала сигнатуры, мы попадем на начало заголовка. Если затрудняетесь считать, поднимитесь на четыре строки вверх и поставьте отметку. На этом скрине это будет находится по адресу 0х0000 4000. Теперь нам необходимо найти конец этой части прошивки. Поиск конца, мы построим на том предположении, что после конца этой части прошивки, будет начало следующей части прошивки. Вот и будем искать начало следующей части по той же сигнатуре 45 43 45 43( ECEC). А вот тут нас поджидает небольшой сюрприз. Сигнатура 45 43 45 43 находится во многих местах. Просто пройдитесь поиском до конца прошивки пока не увидите надпись "искомый текст не найден". Как же нам найти нужный нам? Очень просто. Если Вы внимательно читали пост о строении формата nb0, Вы знаете, что после сигнатуры 45 43 45 43 идет 4 или 8 байт описывающих адрес заголовка прошивки (ROMHDR), и затем идет 0х960 (4032) байт нулей, вот и ищите сигнатуру после которой идет много нулей. Это хорошо видно на скрине выше.
Для самопроверки выкладываю, то что нашел я.

Конец первой части будет заканчиваться на последний байт FF расположенный по адресу 0х0002 7FFF.
Итак мы знаем начало нашей части 0х0000 4000 и знаем конец 0х0002 7FFF. Осталось выделить их и скопировать. Затем в HEX редакторе создать новый файл и вставить туда нашу копию.
Обратите внимание в конце полученного нами нового файла находится куча FF FF FF FF. Их необходимо вырезать.

После удаления ненужных FF FF FF FF, сохраним файл, например под именем EBOOT.nb0
Для сравнения Ваших результатов с моими, выкладываю полученный мной файл EBOOT.nb0

Итак одну часть прошивки мы извлекли из дампа. Действуя точно так же мы извлечем оставшиеся части. Т.е ищем начало части прошивки по сигнатуре 45 43 45 43(ЕСЕС), поднимаемся на 0х40 (64) байта вверх, отмечаем начало. Затем ищем конец, отмечаем. Копируем в новый файл, вырезаем FF FF FF. Попробуйте сделать это самостоятельно. Для контроля правильности сравните полученные Вами файлы с моими. Файлы называются 1.nb0

Итак мы получили с Вами четыре файла. Как заметил комрад ihmgsm, первые два файла, повторяют вторые два файла. Поэтому мы будем рассматривать только первые два. Мы получили с Вами заготовки для работы. С началом файла все ясно. Он начинается на 0х40 (64) байта выше сигнатуры 45 43 45 43. Осталось правильно определить гдеже файл заканчивается. Как же это сделать?
Для этого построим карты наших файлов. Итак даем команду dumprom -4 EBOOT.nb0>>EBOOT.txt , для первого файла и dumprom -4 1.nb0>>1.txt , для второго.
Мои файлы в аттаче, можете сравнить с вашими. Что же мы можем узнать из карты? Из карты мы можем узнать адрес начала загрузки образа в RAM и адрес конца образа.

Для первого файла это:

img 00000000 : hdr=8c042a74 base=8c038000 commandlineoffset=8c038000
................................................
8c043338 - 8c043338 L00000000 rom_00 end

base=8c038000 - начало прошивки в RAM
8c043338 - конец прошивки в RAM

Для второго:

img 00000000 : hdr=8cb6c24c base=8c200000 commandlineoffset=8c200000
................................................
8cb6d52c - 8cb6d52c L00000000 rom_00 end

base=8c200000 - начало прошивки в RAM
8cb6d52c - конец прошивки в RAM

Отняв от адреса конца, адрес начала, мы узнаем длину образа.

8c043338 минус 8c038000 равно b338 длина образа EBOOT.nb0

8cb6d52c минус 8c200000 равно 96d52c длина образа 1.nb0

Осталось самое малое, отрезать ненужное из файлов заготовок.
Для этого открываем файл в HEX редакторе, отмечаем начало, затем переходим на адрес, равный найденной нами длине. Вырезаем файл расположенный между этими адресами и сохраняем его, например под именем EBOOT_cut.nb0.
То же самое делаем и со второй заготовкой. сохраненный файл назовем, например 1_cut.nb0

Процесс извлечения файлов из дампа флэша на этом завершен.
Теперь полученные нами бинарные файлы Вы можете разобрать, используя программу dumprom.
Создайте две папки. Первую назовите EBOOT, вторую NK.
Дайте команду dumprom -d EBOOT -4 EBOOT_cut.nb0, для первого файла и dumprom -d NK -4 1_cut.nb0 для второго.
После выполнения команд, в созданных Вами папках, вы увидите файлы и модули содержащиеся в образе в Вашей оси. В первой папке будет находится всего один файл NK.exe. Во второй целая россыпь файлов.

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

Данная информация предоставлена для ознакомительных целей и ее использование вы берете на свой страх и риск. За последствия автор ответственности не несет.

Прикрепленные файлы: скачать одним архивом тут
- EBOOT.rar
- 1.rar
- boot.txt
- 1.txt
- EBOOT_cut.rar
- 1_cut.rar

Большая благодарность за разрешение на размешение информации и проделанный труд "holod"

 
DenKoffДата: Понедельник, 20.12.2010, 08:46 | Сообщение # 14
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Модификация прошивок формата img.

Как я уже писалось ранее, файл прошивки типа img состоит из трех частей. Для работы с этим типом прошивок, нам нужно разделить ее на эти составляющие части. Откроем файл прошивки в хекс редакторе и зададим поиск по сигнатуре 54 49 4E 59 4E 4B (это TINYNK)

Здесь мы видим:
00 00 88 8C адрес загрузки в RAM (8С 88 00 00).
20 7А 28 00 размер файла TINYNK (28 7A 20).
00 С0 2F 00 размер области зарезервированной под часть TINYNK (2F С0 00).
Обратите внимание, что размер области зарезервированный под TINYNK кратен размеру блока микросхемы флеш памяти. В нашем случае блок равен 4 кБ т.е 0х4000 . Разделив зарезервированный размер на размер блока получим, что под эту часть зарезервировано BF (191) блоков.

Далее идем вниз и видим описание файла NK.

Здесь:
00 00 B8 8C адрес загрузки в RAM (8С B8 00 00)
C8 A1 9C 01 размер файла NK (1 9C A1 C8)
00 00 F0 01 размер области зарезервированной под часть NK (1 F0 00 00)
Здесь так же размер области зарезервированной под часть NK кратен размеру блока

И так, все необходимые данные нами получены, приступим к расчленению прошивки.
Идем в начало, отмечаем первый байт как начало выделяемого блока, затем прыгаем на адрес 2F C0 00 (берем его из chain, напомню это размер зарезервированный под TINYNK) Выделяем байты между этими адресами, вырезаем их. Здесь небольшое пояснение, именно вырезаем, так нам будет легче и проще разделять прошивку на части, не нужно будет пересчитывать смещения от начала. Создаем новый файл в хекс редакторе и вставляем в него вырезанные данные. Сохраняем полученный файл, например с именем TINYNK.nb0 Теперь, после того как мы вырезали первую часть, начало файла у нас будет приходиться на начало chain. Размер chain во влеш памяти равен размеру блока, в нашем случае это 16кБ т.е. 0х4000. Опять отмечаем первый байт как начало выделяемого блока и затем прыгаем на адрес 0х4000. Выделяем байты между этими адресами, вырезаем их. Сохраняем полученный файл, например с именем Chain.bin Оставшаяся часть, это данные NK. сохраняем эту часть например под именем NK.nb0.
Разборка прошивки на части завершена. У нас получилось три файла. Два из них (TINYNK.nb0 и NK.nb0) мы будем использовать для модификации. С третьим, мы ничего делать не будем, отложите его в сторону.

Теперь приступим непосредственно к работе с полученными нами файлами.
Существует несколько путей модификации файлов прошивки. От того, какие цели Вы ставите перед собой, зависит то, по какому пути мы пойдем. Если Ваша цель, незначительно изменить реестр, достаточно простого пути, воспользоваться программой dumpromx. Если же Вы хотите внести серьезные изменения в прошивку, добавить или удалить файлы, одного dumpromx будет не достаточно. Тут нам на помощь придет xipport и BOOOFF. Я расскажу об обоих способах модернизации. Заодно мы увидим, чем отличаются прошивки типа nb0 от прошивок типа img и в чем преимущество прошивок img над прошивками типа nb0.

НЕ ЗАВЕРШЕНО...

Большая благодарность за разрешение на размешение информации и проделанный труд "holod"

 
DenKoffДата: Понедельник, 20.12.2010, 09:55 | Сообщение # 15
Главный модератор форума
Группа: Друзья Alfessa.net
Сообщений: 505
Награды: 26
Статус: Offline
Работа с "МультиБин" прошивками.

В качестве подопытной возьмем эту прошивку.
Смысл состоит в следующем.

А. Разборка прошивки.

Б. Сборка мультибиновой прошивки после редактирования партишенов.

Если вы были внимательны и нигде не ошиблись ни на один байт, прошивка будет полностью отвечать стандарту, а главное - работоспособна.
Напомню лишь, что все что вы делаете, вы делаете на свой страх и риск. Чтобы убедиться в правильности сборки, откройте полученную прошивку в Quick BIN Viewer и проверьте содержимое (сожалею, но сравнить ее с оригинальной этим инструментом, вы, скорее всего, не сможете, т.к. библиотеки Microsoft не поддерживают сравнение мультибиновых прошивок - только просмотр) или разберите с помощью инструментов наших авторов. Если все прошло Ok, значит с большой долей вероятности вы нигде не партачили при разбоке/сборке, что, кстати, вовсе не гарантирует, что вы не нахимичили на этапе редактирования ваших nb0.

PS: Архив содержит все исходные, промежуточные и конечные файлы, полученные при тестовой разборке и обратной сборке мультибиновой прошивки формата bin описанным методом с целью проверки возможности такой операции инструментами доступными на 20 июля 2010 года - Remaker. Для этих же целей могут быть использованы XIPPort или B000FF.

Отдельное "спасибо" за проделанный труд и подготовленный материал "Mi81"

 
Форум » Ремонт GPS навигаторов » FAQ - "ПОЧЕМУЧКА" » Изготовление и модификация прошивок (Все о прошивках PNA)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Gallasy © 2021 Сайт создан в системе uCoz