Hacker News Digest

Тег: #file-formats

Постов: 2

A file format uncracked for 20 years (landaire.net) 🔥 Горячее

Автор, энтузиаст исследования игровых файлов, взялся за анализ Splinter Cell (2002) в поисках вырезанного контента, столкнувшись с загадочным форматом .lin, остававшимся нерасшифрованным 20 лет. Игра, разработанная Ubisoft на Unreal Engine 2, имеет файловую структуру с разделенными картами, где каждый уровень состоит из нескольких .lin-файлов. Автор предположил, что common.lin содержит общие данные для оптимизации размера, подобно shared.map в Halo.

Анализ hex-редактором показал, что файлы содержат zlib-сжатые блоки с форматом {размер_распакованных_данных, размер_сжатых_данных, zlib_блок}. Инструмент для распаковки успешно извлек 64КБ данные, включающие четыре 32-битных целых числа, вероятно, связанные с размерами кэша текстур и буферов вершин. Основная секция содержит ссылки на игровые ресурсы, такие как \menu\menu.unr и \1_1_0Tbilisi.unr, что указывает на структуру, аналогичную Unreal Engine.

by todsacerdoti • 06 ноября 2025 г. в 16:52 • 272 points

ОригиналHN

#unreal-engine#reverse-engineering#file-formats#zlib#game-development#ubisoft#splinter-cell#hex-editing

Комментарии (54)

  • Обсуждение охватывает широкий спектр тем: от форматов файлов и их обратной разработки до влияния на разработку игр и оптимизации.
  • Участники обсуждают, как разработчики игр используют формат .lin для оптимизации загрузки уровней, и как это влияет на разработку игр.
  • Также обсуждается, какие инструменты и подходы используются для обратной разработки форматов файлов.
  • Участники делятся опытом и советами о том, как начать изучать неизвестные бинарные форматы.
  • Обсуждаются также влияние этих практик на разработку игр и на то, как разработчики игр должны балансировать между оптимизацией и читаемостью кода.

What If OpenDocument Used SQLite? (sqlite.org)

Если бы OpenDocument использовал SQLite

Мысленный эксперимент: заменить ZIP-контейнер в формате ODP на базу SQLite.
Плюсы: компактнее, быстрее открытие/сохранение, меньше памяти, встроенная версионность.

Текущий ODP

ODP-файл — это ZIP-архив с XML-файлами (content.xml, styles.xml, meta.xml, settings.xml) и папкой Pictures с ресурсами.
Пример: 49-слайдовая презентация — 78 файлов, 11 МБ.

Недостатки ZIP-контейнера

  1. Сложное инкрементальное обновление
    При каждом «Сохранить» перезаписывается весь архив, что медленно и «съедает» ресурс SSD.
  2. Медленный старт
    При открытии нужно распаковать и распарсить большой XML.
  3. Отсутствие версионности
    Нет простого способа хранить историю изменений.
  4. Избыточные данные
    Каждая картинка — отдельный файл, даже если она используется многократно.

Преимущества SQLite

  • Инкрементальные изменения
    Обновляются только нужные строки; сохранение происходит мгновенно и безопасно (благодаря транзакциям).
  • Мгновенный старт
    Данные уже структурированы; нет необходимости распаковывать и парсить XML.
  • Встроенная версионность
    Таблицы slide_history, image_versions позволяют откатываться к любому состоянию.
  • Дедупликация ресурсов
    Один и тот же рисунок хранится единожды; ссылки через image_id.
  • Сжатие и индексы
    SQLite сжимает данные и строит индексы по ключам (номера слайдов, идентификаторы объектов).

Схема SQLite-документа (упрощённо)

CREATE TABLE slides(
  slide_id INTEGER PRIMARY KEY,
  title TEXT,
  xml_content BLOB,
  z_order INTEGER
);
CREATE TABLE images(
  image_id INTEGER PRIMARY KEY,
  data BLOB,
  mime_type TEXT,
  sha256 BLOB UNIQUE
);
CREATE TABLE slide_images(
  slide_id INTEGER REFERENCES slides,
  image_id INTEGER REFERENCES images,
  x REAL, y REAL, width REAL, height REAL
);
CREATE TABLE history(
  change_id INTEGER PRIMARY KEY,
  timestamp DATETIME,
  sql BLOB
);

Итог

SQLite превращает «кучу файлов» в реляционную базу: быстрее, надёжнее, экономнее.
Это не предложение переделать ODP, а идея для следующих форматов.

by whatisabcdefgh • 04 сентября 2025 г. в 21:36 • 227 points

ОригиналHN

#sqlite#opendocument#odp#xml#zip#databases#relational-databases#file-formats

Комментарии (88)

  • SQLite как формат файла приложений: удобен для запросов, хранит всё в одном файле, но требует осторожности с безопасностью и сетевыми ФС.
  • Ключевые советы: включать secure_delete, не хранить больше 2 ГиБ в BLOB, избегать работы по сети без надёжных блокировок.
  • Плюсы: SQL-запросы, простота API, лёгкость инспектировать и мигрировать данные (пример — Anki).
  • Минусы: сложно версионировать бинарные вставки, проблемы синхронизации/коллаборации, перезапись всего файла при малом изменении.
  • Альтернативы: разделение текста и бинарников, JSON + Git, XML для обмена, CRDT-структуры для офлайн-редактирования.