Формат BIN-файлов системы AISIN

Программное обеспечение ГУ, Загрузочные носители, и всё что с ними связано.
Аватара пользователя
bellic
Сообщения: 1449
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Формат BIN-файлов системы AISIN

Сообщение bellic »

...Собственно, для начала выложу красочную картинку, для зрительного восприятия...
Позже буду описывать используемые поля и давать пояснения. В случае неясностей в тексте прошу задавать вопросы - буду корректировать периодически ЭТО ПЕРВОЕ СООБЩЕНИЕ, что бы было все доступно и понятно...
;)

В данной теме рассматриваются BIN-файлы системы AISIN, являющиеся "кирпичиками" в операционной системе, используемой на японских магнитолах, загружающих ОС с HDD и SD-карточек.

В магнитолах, загружающихся с HDD данный тип файлов, необходимы для работы, находится как правило в папке PRG на одном из логических дисков HDD.

Пример листинга файлов одного из таких каталогов:
PRG.jpg
PRG.jpg (131.88 КБ) 13116 просмотров
Грубо говоря - каждый из BIN-файлов содержит программы и ресурсы, необходимые для функционирования отдельных функций магнитолы...
На магнитолах, загружаемых с HDD в каталоге PRG отсутствует один, очень важный для начальной загрузки файл - ldm.bin !
На самом деле он находится в начале жесткого диска, в скрытом разделе (Windows определяет его как RAW-раздел, т.е. не размеченный, а по большому счету - раздел с неизвестной для Windows файловой системой...)
На самом деле в RAW-области, кроме BOOT-записи и вышеупомянутого файла ldm.bin, находится своя файловая система с файлами картографии...
В конце поста я приведу пример начала жесткого диска...

В магнитолах, загружающихся с SD-карточек BIN-файлы упакованы особым образом в знакомый многим контейнер - файл LOADING.KWI, формат которого я планирую раскрыть в отдельной теме....

Ну а теперь - сам внутренний формат BIN-файлов:
БИН-файл Ок.jpg
Как видно из картинки, рассматриваемые файлы состоят из:

- Заголовка, размером 128 (дес.) байт, выделенного синим цветом

и

- Тела модуля(блока), выделенного зеленым цветом.

Рассмотрим поля Заголовка (цифровые значения адресов (offset) указаны в шестнадцатеричной системе, длина поля - в десятичной!):

=== Offset ===== Length ==========================================================================================
[0000 -- 0003] -- 4 bytes -- внутреннее имя Модуля(Блока);
[0004 -- 0005] -- 2 bytes -- 0D 0A (символы CR - Carriage Return (Перевод каретки) и LF - Line Feed (Перевод строки) );
[0006 -- 000D] -- 8 bytes -- версия Модуля (Блока);
[000E -- 000F] -- 2 bytes -- 0D 0A (CR, LF);
[0010 -- 001A] -- 11 bytes -- месяц, дата и год разработки (разделители - код 20h (пробел));
[001E -- 001F] -- 2 bytes -- 0D 0A (CR, LF);
[0020 -- 0027] -- 8 bytes -- время разработки в формате ЧЧ:ММ:СС;
[002E -- 002F] -- 2 bytes -- 0D 0A (CR, LF);
[0030 -- 003E] -- 15 bytes -- Фирма-разработчик;
[005D -- 005E] -- 2 bytes -- 0D 0A (CR, LF);
[005F -- 0063] -- 5 bytes -- НАЗНАЧЕНИЕ ПОЛЯ ПОКА НЕ ВЫЯСНЕНО;
[0070 -- 0072] -- 3 bytes -- адрес расположения тела блока в оперативной памяти (тут адрес начала поля возможно начинается с адреса 006Fh);
[0074 -- 0077] -- 4 bytes -- длина Блока (Заголовок + Тело модуля(Блока)), начиная с Нулевого оффсета (Обзовем переменной BlockLen);
[0078 -- 007B] -- 4 bytes -- Контрольная Сумма (КС) Тела модуля (Блока);
[0080 -- до адреса, указанного в поле [0074 - 0077]] -- расположено тело Модуля (Блока).
===============================================================================================================

При этом - реальная длина BIN-файла от последнего байта тела Модуля (Блока) - дополнена нулями до целочисленной кратности 2048dec длины файла.
Контрольная Сумма (КС) тела Модуля (Блока) считается от оффсета 0080h до конца тела Модуля(Блока):
Длина для подсчета КС = BlockLen - 80h
В принципе можно КС считать и до конечного адреса физического файла - ошибки не будет, ввиду того, что его концовка заполнена нулевыми значениями!

Сама Контрольная Сумма (КС) считается простым последовательным суммированием полей по два двойных слова (4 байта) между собой от начала Тела Модуля(Блока)...
(что то тут у меня не удалось правильно сформулировать принцип суммирования..((( ... Надо пересмотреть эту формулировку для понятия..)
Может лучше вот так?:
Контрольная Сумма формируется последовательным суммированием 4-х разрядных слов, с отбрасыванием разрядов, выходимых из разрядной сетки, от начала Тела Модуля(Блока)(оффсет $0080) и длиной BlockLen - 80h.(Читать как BlockLen минус 80h )(Вроде я не ошибся?)

Немного слов о содержимом Тела Модуля (Блока), начинающегося с 0080h...
Пока скажу коротко - определенного формата на это содержимое не существует - производитель ПО магнитол распоряжается этим пространством на свое усмотрение.
Там могут находиться различные блоки, модули и поля, такие как:
- процессорные команды;
- таблицы графических данных, используемых в интерфейсе магнитол, и сама графика(как в открытом формате, так и в упакованном виде);
- таблицы текстовых сообщений и сам текст на Японском и Английском языках;
- различные шрифты и таблицы перекодировок;
- и т.д. и т.п.

Вот для начала весь расклад... ;)

И еще - для правильного подсчета используйте следующую простую формулу:

Адрес последнего байта ПОЛЯ = Адрес первого байта ПОЛЯ + Длина ПОЛЯ - 1

Как и обещал, привожу HEX-ASCII-дамп начала жесткого диска:
диск.jpg
Как видим - с Нулевого оффсета жесткого диска идет BOOT-загрузчик ОС, а с оффсета 0200h - спрятался Модуль (Блок) ldm.bin (внутреннее имя - .LDR).

Прямоугольниками выделены поля:
- Синим - длина Модуля (Блока), отсчитываемая в данном случает от оффсета 0200h;
- Зеленым - Контрольная сумма Тела Модуля(Блока), которая считается в данном случае от оффсета 0280h.
Таким образом, зная адрес начала и длину Модуля(Блока) ldm.bin, можно легко его от туда сохранить в отдельный файл.
Не забыв при этом дополнить в конце нулями до длины физического файла, кратного 2048dec.

Ну а дальше, имея в своем распоряжении ПОЛНЫЙ набор BIN-файлов данной версии, при желании и/или необходимости, можно собрать свой файл-контейнер LOADING.KWI для анализа содержимого программами, оперирующими с данным типом файла... :roll:

Примечание:
Ввиду того, что в разных источниках, сам BIN-файл иногда называется по разному - МОДУЛЕМ или БЛОКОМ, я был вынужден применять через скобку оба этих названия, что возможно несколько усложнило восприятие!
Если посчитаете, то достаточного ОДНОГО названия из двух - я откорректирую описание выше...
Аватара пользователя
bellic
Сообщения: 1449
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Формат BIN-файлов системы AISIN

Сообщение bellic »

bin_f.jpg
Еще раз акцентирую непонятные поля в BIN-файлах:
  1. Назначение байта по адресу 005F: значение 1A (26-dec) ?
  2. Длина поля "Адреса размещения в RAM" - 3 или 4 байта? (я склоняюсь - к 4-м байтам..)
  3. Назначение поля по адресу 0060 - 0063 ?
    (..очень похоже на адрес, расположенный ниже "Адреса размещения в RAM" этого BIN-файла)
Будут ли у кого какие мысли? :(
Аватара пользователя
minja71
Сообщения: 219
Зарегистрирован: 12 мар 2017, 12:41
Откуда: Санкт-Петербург

Формат BIN-файлов системы AISIN

Сообщение minja71 »

0060-0063, а так же 0080-0096 , схожие адреса, попробуй посчитать-возможно смещение. 8845B000, 88539A74,88539A78,88539ADA,88539AE0
88539AE0-88539ADA=6байт
88539ADA-88539A78=98 байт
88539A78-88539A74=4 байта
Аватара пользователя
bellic
Сообщения: 1449
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Формат BIN-файлов системы AISIN

Сообщение bellic »

minja71 писал(а): 0060-0063, а так же 0080-0096 , схожие адреса, попробуй посчитать-возможно смещение. 8845B000, 88539A74,88539A78,88539ADA,88539AE0
88539AE0-88539ADA=6байт
88539ADA-88539A78=98 байт
88539A78-88539A74=4 байта
То что это есть АДРЕС - сомнений не вызывает, но я не смотрел на значения в Теле модуля(Блок), т.е. с адреса 0080.
Знаешь почему?
Потому что похожие адреса в Теле - может быть простым совпадением.
А еще потому что 4 байта по адресу 0060, как и по 0070 - принадлежат так называемому "Заголовку", который при считывании в память, скорее всего туда не пишется! Т.е. в память переписывается само Тело блока(Модуля), расположенное с адреса 0080, а значения из Заголовка используются лишь для проверки КС, идентификации и правильного расположения Тела блока в RAM.

Кстати - проверил значения этих 4-х байт у всех своих BIN-файлов...
НУЛЕВЫЕ значения этого поля - в BIN-ах:
  • ldm.bin - он скорее всего записывается в RAM начиная с адреса 0000(это ведь загрузчик всеж!);
  • font.bin - видимо как-то связано со шрифтами и Система сама зарезервировала для них место;
  • sd.bin
А значение байта по адресу 005F - во всех файлах одинаковое - 1A.

Могу предположить, что 4 байта с адреса 0060, могут означать один из вариантов:
  • адрес процедуры внутренней инициализации модуля;
А собственно - пока на ум больше ничего и не приходит!.. :grin:

P.S. Формат файла взят из реального файла APM.BIN, но содержание внутренностей Тела блока(Модуля) мы тут не рассматриваем - только образно, что оно существует.
Аватара пользователя
bellic
Сообщения: 1449
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Формат BIN-файлов системы AISIN

Сообщение bellic »

Еще мысля! - Не плохо было бы написать утилитку, раскладывающую Тела блоков(Модулей) всех BIN-файлов именно по своим адресам, указанным по адресам в поле заголовка.
Т.е. составить так называемую КАРТУ ПАМЯТИ (если я правильно применил этот термин).
Будет удобнее искать ссылки и смещения, нежели постоянно пересчитывать...
Ну вы меня наверное поняли?.. :oops:

P.S. Утилиту напишу чуток позже...
Вот тогда, когда все Модули будут "лежать" по своим адресам - можно их будет пощупать IDA-ой!
Аватара пользователя
vitecd
Сообщения: 175
Зарегистрирован: 12 июл 2017, 06:29
Откуда: Auckland, NZ
Контактная информация:

Формат BIN-файлов системы AISIN

Сообщение vitecd »

ну так то их можно просто в иду вгрузить по нужным адресам )) или для иды скриптец написать, который будет их загружать
Аватара пользователя
bellic
Сообщения: 1449
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Формат BIN-файлов системы AISIN

Сообщение bellic »

vitecd писал(а):
12 июл 2017, 08:00
ну так то их можно просто в иду вгрузить по нужным адресам )) или для иды скриптец написать, который будет их загружать
Как то довненько прикидывал - файл получится размером более двух Гигов... :oops:
...да и в IDA-де я не шибко большой спец.. :?

P.S. блин, ну хоть бы кто еще пришел на форум, шарящий в кодинге! :geek:
okulski
Сообщения: 322
Зарегистрирован: 04 май 2019, 16:59

Формат BIN-файлов системы AISIN

Сообщение okulski »

Чтоб пользоваться идой нужно знать асм и архитектуру изучаемого проца..... а это офигеть на сколько узконаправленный спец..... я в своё время мотороловский асм изучал потом прошивы дизасмил.... пароли заводские снимал с коммутаторов(радиотелефонии) и на www.hackersrussia.ru выкидывал, а после уже и прошиву как хотел так и модифицировал под себя..... но сейчас уже здоровья не хватит..... тогда и прошивки по 64 кило вешали.... хотя тогда и иды небыло дизасмил какой-то прогой под доской.....
okulski
Сообщения: 322
Зарегистрирован: 04 май 2019, 16:59

Формат BIN-файлов системы AISIN

Сообщение okulski »

Достанут все и всё .... уйду в лес.... займусь дизасмом.
Аватара пользователя
bellic
Сообщения: 1449
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Формат BIN-файлов системы AISIN

Сообщение bellic »

okulski писал(а):
29 июл 2019, 15:18
Чтоб пользоваться идой нужно знать асм и архитектуру изучаемого проца..... а это офигеть на сколько узконаправленный спец..... я в своё время мотороловский асм изучал потом прошивы дизасмил.... пароли заводские снимал с коммутаторов(радиотелефонии) и на www.hackersrussia.ru выкидывал, а после уже и прошиву как хотел так и модифицировал под себя..... но сейчас уже здоровья не хватит..... тогда и прошивки по 64 кило вешали.... хотя тогда и иды небыло дизасмил какой-то прогой под доской.....
Мда...
я тоже в юности баловался ассемблером К580 и 1801 - на фоне увлечения РК-86 и БК-0010... :grin:
Но дальше как то дело не пошло.. на смену пришли PC-подобные...
Ответить

Вернуться в «Программное обеспечение.»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing, hhanchik и 45 гостей