История изменений
Исправление Stanson, (текущая версия) :
В реале немного не так всё.
Раскрутить чтение файла, тем более на сишке - достаточно просто. На цепепе немного сложнее, но тоже реально.
Нужен какой-нибудь приличный декомпилятор и время. Берём софтину декомпилируем и ищем всякие open и read. Что-то будет относиться к чтению файла. Далее начиная с open ищем первое чтение, смотрим как читается заголовок. Ну и дальше кропотливо раскручиваем это всё. Если используются сторонние библиотеки - читаем доки на них, смотрим как они применяются для данных читаемых из файла. Ну и т.д. Дело в том, что отталкиваясь от файла, а не от кода, можно упустить огромное количество вещей, которые в исследуемом экземпляре не используются. А все возможные варианты файла заполучить может быть просто нереально. А если раскручивать код, то все варианты, флаги, метаданные потихоньку станут понятны и уже можно будет написать читалку которая будет читать любые файлы данного формата, даже те, которых у тебя не было.
Мне частенько приходится реверсить форматы файлов всяких мутных промышленных софтин написанных с какими-то понтами, велосипедами и потугами на вендорлок и всё такое.
Недавно реверсил формат HyperFile (*.FIC) из PCSoft’овского фреймворка WinDev. Такая типа недоБД проприетарная. Какое-то жалкое подобие SQLite но в которой можно делать поля-массивы, типа CREATE TABLE example(name CHAR(32),date DATETIME, reflectance[40] REAL32)
. Было забавно. Там вторичный заголовок, где хранятся названия, размеры и типы полей БД сначала сжимается нестандартной реализацией LZW, a потом перекрёстно ксорится 16-тибайтным ключом сделанным из французской фразы «Il serait plaisant qu’Annick se décide ŕ nous apporter des DooWaps» и начального 16-тибайтного seed. При этом, сами данные в файле не сжаты и не закодированы, но смещения и размеры полей без заголовка не получить. Нахера так делать, кроме как для лютого вендорлока - я не знаю. Зато теперь знаю что такое DooWaps. :)
Если плясать от файла и его данных, то такое вообще вряд-ли возможно отреверсить. А декомпайлером потихоньку всё раскрутил, причём полностью, для всех возможных вариантов файла.
Исходная версия Stanson, :
В реале немного не так всё.
Раскрутить чтение файла, тем более на сишке - достаточно просто. На цепепе немного сложнее, но тоже реально.
Нужен какой-нибудь приличный декомпилятор и время. Берём софтину декомпилируем и ищем всякие open и read. Что-то будет относиться к чтению файла. Далее начиная с open ищем первое чтение, смотрим как читается заголовок. Ну и дальше кропотливо раскручиваем это всё. Если используются сторонние библиотеки - читаем доки на них, смотрим как они применяются для данных читаемых из файла. Ну и т.д. Дело в том, что отталкиваясь от файла, а не от кода, можно упустить огромное количество вещей, которые в исследуемом экземпляре не используются. А все возможные варианты файла заполучить может быть просто нереально. А если раскручивать код, то все варианты, флаги, метаданные потихоньку станут понятны и уже можно будет написать читалку которая будет читать любые файлы данного формата, даже те, которых у тебя не было.
Мне частенько приходится реверсить форматы файлов всяких мутных промышленных софтин написанных с какими-то понтами, велосипедами и потугами на вендорлок и всё такое.
Недавно реверсил формат HyperFile (*.FIC) из PCSoft’овского фреймворка WinDev. Такая типа недоБД проприетарная. Какое-то жалкое проприетарное подобие SQLite но в которой можно делать поля-массивы, типа CREATE TABLE example(name CHAR(32),date DATETIME, reflectance[40] REAL32)
. Было забавно. Там вторичный заголовок, где хранятся названия, размеры и типы полей БД сначала сжимается нестандартной реализацией LZW, a потом перекрёстно ксорится 16-тибайтным ключом сделанным из французской фразы «Il serait plaisant qu’Annick se décide ŕ nous apporter des DooWaps» и начального 16-тибайтного seed. При этом, сами данные в файле не сжаты и не закодированы, но смещения и размеры полей без заголовка не получить. Нахера так делать, кроме как для лютого вендорлока - я не знаю. Зато теперь знаю что такое DooWaps. :)
Если плясать от файла и его данных, то такое вообще вряд-ли возможно отреверсить. А декомпайлером потихоньку всё раскрутил, причём полностью, для всех возможных вариантов файла.