LINUX.ORG.RU
ФорумTalks

Реверс-инжиниринг бинарного формата


0

1

Есть кучка файлов в бинарном формате.

В формате этом хранятся всякие числа. Причём какие именно числа там хранятся, известно. Неизвестно, в каком формате они там (разрядность и т.п., возможно даже просто в строковом). И неясно, в каком они там порядке.

Известно, что формат несжатый.

Короче, мне нужно узнать, как заменить там число X на число Y. Каким образом искать там X? Перебирать возможные представления в hex редакторе?

★★★★★

Последнее исправление: Obey-Kun (всего исправлений: 1)

Ответ на: комментарий от X10Dead

Нет средств редактирования файла. Есть много готовых файлов. И средство просмотра данных в них. От файла к файлу изменяется бОльшая часть данных.

Obey-Kun ★★★★★
() автор топика

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

А то тоже блин, шпионские игры какие-то...

adriano32 ★★★
()
Ответ на: комментарий от Obey-Kun

И средство просмотра данных в них.

Открой hex-редактором, что-то поправь, сохрани, переоткрой и попытайся узреть отличия после предыдущей версии.

adriano32 ★★★
()

все просто.

для начала вычисляешь длину одной записи.

затем путем подбора выявляешь кортежи и их типизацию

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

делаешь гуевый редактор

профит

guyvernk
()
Ответ на: комментарий от Obey-Kun

> эти файлы генерируют устройтва за несколько млн баксов, которых в мире всего сотня.

Тогда не исключена какая-то цифровая подпись. Хотя как тут уже сказали, все проверяется методом тыка - меняется байты по очереди, открывается файл - наблюдаются изменения. Если любое изменение фэйлит открывание файла - значит, стоит защита.

segfault ★★★★★
()
Ответ на: комментарий от segfault

Нет. Это оборудование работает под досом и вообще создатели криворуки по части софта.

Я сделал cat для одного из файлов, выглядит так:

... ИМЯ_ПОЛЯ1   ИЕРОГРЛИФ   ИМЯ_ПОЛЯ2    КРАКОЗЯБРА ...

Некоторые поля выглядят не как иероглифы, а как значения (а именно те, где хранятся строки). Осталось определить формат чисел и можно писать парсер.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от adriano32

Я хочу написать парсер, который упростил бы мою работу с этими файлами.

Obey-Kun ★★★★★
() автор топика

Дизассемблируй вьюер формата.

karbofos
()
Ответ на: комментарий от Obey-Kun

Ну скорее всего какой-то стандартный IEEE бинарный формат.

П.С. Из данной цитаты не видно, что создатели криворуки.

segfault ★★★★★
()
Ответ на: комментарий от Obey-Kun

> эти файлы генерируют устройтва за несколько млн баксов, которых в мире всего сотня.

а подробнее ничего рассказать не можешь?
и что это за софт такой поганый если железки такие дорогущие?

q11q11 ★★★★★
()

У меня была почти такая же задача. Есть два запароленных RAR одним паролем. Один распакован и файл вот он лежит. Другой не распакован. Пароля нет. Как с помощью распакованного файла получить пароль от архива.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от XVilka

Пока сам попробую разобраться. Файлы эти на вид при cat просты как доска, думаю там дизассемблировать софтину не надо будет (да и толку мне от этого не будет, не знаю асм).

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Эмблема почему-то станцию «Лебедь» из LOST'а напомнила.

strangeman ★★★★
()
Ответ на: комментарий от q11q11

У меня нет секретов :). Эта станция в один из файлов при записи записывает всяческую побочную информацию, включающую в себя текущие координаты по бортовому GPS. Я хочу написать парсер этих файлов, чтобы можно было из кучи записей составлять карту.

Сейчас это делается полуавтоматически: при помощи родной софтины генерируются txt-файлы с информацией о точках, оттуда скрипт вытаскивает координаты и составляет файл для ozi. Хочу добиться независимости от родной софтины, а там глядишь и небольшой простор для творчества откроется, а то руками лишние вещи приходится делать.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

>И средство просмотра данных в них.

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

proud_anon ★★★★★
()
Ответ на: комментарий от Obey-Kun

... ИМЯ_ПОЛЯ1 ИЕРОГРЛИФ ИМЯ_ПОЛЯ2 КРАКОЗЯБРА ...

Выглядит похоже на таблицу типа dbf. Ты, конечно, натравливал на эти файлы утилиту file?

Xenesz ★★★★
()
Ответ на: комментарий от XVilka

Файл прост как доска: http://paste.kde.org/79129/.

Первые 4 char в каждой строке — название строки.

Если посмотреть последние 2 строки, в глаза бросаются значения строковых переменных — 2550.975,N и 08804.067,E.

Щас на руках нету декодированной версии файла. Но первые 3 столбца от файла к файлу не меняются.

Глянь, может будут идеи? http://obey.su/tbl. Расшифровки будут через пару часов, сейчас софта нет.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

в глаза бросаются значения строковых переменных — 2550.975,N и 08804.067,E.

Сами имена полей говорящие, LATG и LNGG - явно широта и долгота.

Xenesz ★★★★
()
Ответ на: комментарий от Xenesz

Это-то ежу понятно, названия полей и во вьювере отображаются

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от fluorite

Щито? SSMT2000, софтина для интерпретации данных магнитно-теллурического зондирования фирмы Phoenix.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Точнее, файл генерирует станция при проведении зондирования. А программа эта их открывает.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от fluorite

Пока в метро ехал, частично расшифровал:

Каждая строчка по 25 байтов
Последняя строчка - мусор (одинаковый для всех файлов)

*** Одинаковые для всех файлов ***
1-4     название строчки (от 1 до 4 букв)
5       00
6-7     непонятно, но, возможно, "группа" строчки (надо проверить в SSMT2000):
        0000 = Неизменяемое значение (показывается в обычном просмотре)
        FFFF = Изменяемое значение
        0200 = Неизменяемое значение (показывается в просмотре доп. полей)
8       непонятно, попадаются значения от 01 до 10 и F0 
12      тип данных в строчке:
        00 = Int
        01 = Flt
        02 = Str
        04 = Pos
        05 = UTC
*** Далее данные ***
13-24   данные:
        Int - целое, как минимум 2 байта, хотя формат в случае DISK непонятно
        Flt - число с плавающей запятой, 8 байт
        Str - строка, до 12 букв
        Pos - строка в формате "DDDMM.MMM,P" или "DDMM.MMM,P", D - градусы, M - минуты, P - полушарие (WGS84)
        UTC - дата и время, формат неясен
*** И снова константа ***
25      00

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Ага, точно, 3C 07 в файле соответствует числу 1852. А 1852 это 0x73C.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Nicholass

Я их в okteta смотрю.

cat был на пробу.

Obey-Kun ★★★★★
() автор топика
27 августа 2011 г.
4 января 2012 г.
Ответ на: комментарий от Obey-Kun

Заборол формат-то?

Дроби пишет стандартно ieee-754.
Даты в каком-то странном формате — читать надо в обратном порядке от смещения 0x13 в каждой записи побайтно пропуская 0x12.
Например:
(начиная со смещения 0xc)
27 00 00 01 01 50 02 13 -> 39 00 00 01 01 80 [02] 19
т.е. 1980-01-01 00:00:39.

Формат каждого FOURCC похоже статический (не видно, чтобы что-то задавало формат значения).

frob ★★★★★
()
Ответ на: комментарий от Obey-Kun

Понятно. А глядя на этот .tbl присобачил себе в утиль переразбивалку строк.

frob ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.