Yokogawa

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

                (с)  не помню, из какой-то
                компьютерной классификации


Пишу редактор файлов одного проприетарного формата.

Описание формата от разработчика стоит $750, так что решил обойтись подручными
средствами: скачал Free/Trial версии софта, умеющего с этим форматом работать
и путем медитации в дизассемблере и отладчике, извлек необходимую информацию.

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

Причем, это явно не результат моего недопонимания "высокого стиля"
разработчиков.

Вот что, например, пишет производитель редактора FiberDoc:


>       Important notes:
>
>       Unfortunately the current definitions of the Bellcore/Telcordia
>       standards are not fully clear, which results in various
>       misunderstandings in the implementation. Though FiberDoc tolerates
>       some 'derivatives' of the standard, there is neither any guarantee,
>       that Bellcore files of all suppliers can be read, nor can it be
>       assured, that Bellcore files created by FiberDoc are readable by
>       OTDR's or evaluation software of other suppliers.



<Lyrics>
      Вообще, устройство этого формата от Bellcore/Telcordia я не могу
      объяснить ничем, кроме врожденного идиотизма.

      Вот, скажем, блок фиксированных параметров - FixedParametersBlock.

      В файле это выглядит так:

            <fixed size parameter>
            ...
            <fixed size parameter>
            <variable size collection>          <-- Oops!
            <fixed size parameter>
            ...
            <fixed size parameter>

      Если бы (переменного размера) коллекция была помещена в конце блока
      параметров (а по-иному поступают только люди с ошибкой в ДНК), то весь
      блок, исключая коллекцию, можно было бы читать и писать "одним глотком",
      просто наложив подходящую структуру на файл. Ошибка в записи коллекции
      не препятствовала бы корректному чтению всех остальных параметров и это
      облегчило бы восстановление при сбое. Наконец, доступ к любому параметру
      блока был бы возможен по фиксированному смещению - индексно), без
      необходимости чтения всего блока. И нет ни одной причины и никакой
      выгоды от размещения переменного размера записи в середине блока. Я даже
      не могу припомнить в своей практике ни одного другого примера столь
      нелепо устроенного формата.
</Lyrics>



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

Как выяснилось, никто почти значение этого поля при чтении не проверяет, хотя
исправно заполняет при записи.

Софт мне попался очень разнородный, написанный буквально на всем, что нынче в
моде у индусов: C#, VisualBasic, Delphi, COM...

Единственное, сделанное на простом C++/MFC, приложение было от Yokogawa и,
естественно, я начал с него: выдрал алго расчета контрольной суммы и
реализовал у себя в редакторе.

К немалому моему удивлению, подписанные редактором файлики, другие программы
принимать отказались - ошибка контрольной суммы.

Гм. Запустил оригинал, отредактировал в нем, что попалось... Oops! Та же
ошибка. Пришлось реверсировать и все остальное. Разумеется, в листинге
декомпилятора VB невозможно было совершенно ничего понять, но из оставшегося
однозначно следовало, что программисты из Yokogawa допустили глупейшую ошибку
- инициализировали хэш неверным значением.

При этом версия софта - 7.9.32, так что баг явно имеет давнюю историю.

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


Рецензии