Добро пожаловать, гость ( Вход | Регистрация )
| PavelDAS |
May 6 2026, 07:54
Сообщение
#1
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 38 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 12 раз(а) |
Файл с пиратки. https://wdfiles.ru/2aVzq Не пойму как к нему подойти. Есть какие-то строки в середине, но впечатление, что зашифровано. -------------------- |__--__|
***|*** ___|___ |
![]() ![]() |
| -=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. |
PavelDAS Times of Conflict [.DAT] May 6 2026, 07:54
-=CHE@TER=- Пришлось игру ставить - там без отладчика ничего н... May 6 2026, 19:27
PavelDAS Пираты как-то разобрали :)
Руссобитовцы прилепили ... May 7 2026, 14:20
PavelDAS https://wdfiles.ru/folder/21295/Games_-_Times_of_C... May 8 2026, 07:21
-=CHE@TER=- Спасибо конечно, но алгоритм-то всё равно разбират... May 9 2026, 21:28
-=CHE@TER=- Times of Conflict tools
Просьба протестировать и ... May 10 2026, 18:12
PavelDAS
[url=https://www.ctpax-x.org/?goto=files&show... May 11 2026, 14:13
-=CHE@TER=- Как же я не хотел это качать...
Обновил программу ... May 11 2026, 16:34
PavelDAS
Как же я не хотел это качать...
Обновил программу... May 12 2026, 06:43![]() ![]() |
| Упрощённая версия | Сейчас: 24th May 2026 - 23:51 |