IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Times of Conflict [.DAT]
PavelDAS
May 6 2026, 07:54
Сообщение #1


Advanced Member
***

Группа: Authorized
Сообщений: 38
Регистрация: 21-September 25
Из: Minsk
Пользователь №: 18,037
Спасибо сказали: 12 раз(а)




Файл с пиратки.
https://wdfiles.ru/2aVzq


Не пойму как к нему подойти. Есть какие-то строки в середине, но впечатление, что зашифровано.


--------------------
|__--__|
***|***
___|___
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
May 7 2026, 15:25
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,437
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 328 раз(а)



Т.к. я с нормальным распаковщиком ещё повожусь, то расскажу как распаковать, кому уж совсем невтерпёж.

1. Открываем файл "DATA01.DAT" читаем первые 8 байт в такую структуру:
CODE
typedef struct {
  uint32_t offs;
  uint32_t size;
} dat_head;


2. Смещаемся на offs байт от начала и читаем оттуда size байт - это зашифрованная таблица размешения файлов (TOC = Table of Contents). Кстати говоря, как проверить, что архив целый и, вообще, это нужный нам архив, а не что-то левое: offs+size == filesize("DATA01.DAT").

3. Расшифровываем TOC при помощи криптографического алгоритма BlowFish (там стандартная реализация). Ключ для инициализации - строчка "Conflit Rules" (без ковычек и завершающего нуля, а также обратите внимание, что слово "Confli_c_t" написано с ошибкой).

3. Получаем тот самый скомпилированный бинарный .DFM в качестве результата. Если сохранить, например, в "head.dfm" расшифрованный TOC, затем в Delphi добавить к проекту, то получим примерно такой текст:
CODE
object TDataModule
  OldCreateOrder = False
  Height = 0
  Width = 0
  object DFC: TDataFatComponent
    CollectionFileInfo = <
      item
        FileName = 'Data\Effettable\Table_BmpLineaire.b16'
        Position = 8
        Size = 32780
        Compress = False
        Criptage = etcSimpleCryptage
        HasCRC = True
        EugenCRC = 206493871
      end

      // ... тут будет много-много таких же записей item-end ...

      item
        FileName = 'Data\Effettable\Table_exemple3.bmp'
        Position = 163303690
        Size = 49208
        Compress = False
        Criptage = etcSimpleCryptage
        HasCRC = True
        EugenCRC = 67199876
      end>
  end
end


4. Поле "Criptage" может быть трёх типов:
etcNoCryptage - файл не шифруется (не используется)
etcSimpleCryptage - простое шифрование uint32_t rol 8 (у всех файлов)
etcBlowFish - BlowFish, похоже, что используется только для TOC

Расшифровка etcSimpleCryptage выглядит так:
CODE
void decrypt_simple(uint8_t *p, uint32_t l) {
uint32_t *d;
  if ((p) && (l >= 4)) {
    d = (uint32_t *) p;
    l /= 4;
    while (l--) {
      // делаем обратную операцию - uint32_t ror 8
      *d = (*d >> 8) | (*d << 24);
      d++;
    }
  }
}


5. После того как получили полную таблицу файлов, то распаковка выглядит так:
а) Идём на смещение "Position" и читаем оттуда "Size" байт.
б) Расшифровываем прочитанное, если есть шифрование (см. про "Criptage" выше).
в) Распаковываем файл, если "Compress = True".
г) "HasCRC", должно быть, отвечает за то, что у файла посчитана контрольная сумма в поле "EugenCRC", но как она считается я не знаю, да и для распаковки не нужна (и непонятно от чего считать - от начальных данных или когда уже всё расшифровано и распаковано).

6. Что за сжатие используется, когда "Compress = True" мне неизвестно. Вижу только, что первые 4 байта (uint32_t) это, вероятно, размер распакованных данных. Судя по данным, там, скорее всего, какая-то вариация LZW очередная. Сжато только некоторое количество .DFM и .IFF файлов. Если кто-то знает что за сжатие - то пишите. Потому что игра на Delphi, там ещё тот шлакокод, плюс IDA почему-то зависает при попытке проанализировать код исполняемого файла, так что я даже толком в дизассемблере посмотреть не могу, приходится останавливать анализ и только выбранные блоки, адреса которых беру из отладчика, декомпилировать.

7. По поводу пиратов - либо игра не проверяет и не использует "EugenCRC", либо пираты взломали игру, чтобы она не вылетала с ошибкой при несовпадении контрольной суммы (я не видел исполняемый файл игры, а только тот архив, что ты выложил - я смотрел оригинальную версию игры). До шифрования файлов они, вероятно, сами догадались (оно не сложное), а вот таблицу расмещения файлов не осилили или им было это всё лень собирать и разбирать, потому что таблица совпадает с официальной английской версией файла "DATA01.DAT".

8. По поводу картинок, у них такой формат:
uint32_t - неизвестно // у .BFF и .IFF файлов этого поля нет, только у .B16
uint32_t - ширина
uint32_t - высота
uint16_t [ширина*высота] - данные изображения в 16 битах // у .IFF каждый пиксель uint32_t
uint32_t - непонятно что, может присутствовать у некоторых .IFF
Но форматы там разные есть. Плюс встречаются не только .BMP, но они же с другим расширением - смотри по сигнатуре файла, если на "BM" начинается, значит, это .BMP.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 24th May 2026 - 23:51