Добро пожаловать, гость ( Вход | Регистрация )
![]() ![]() |
| 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 6 2026, 19:27
Сообщение
#2
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,437 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 328 раз(а) |
Пришлось игру ставить - там без отладчика ничего не получилось бы, ибо два шифрования (отдельное для таблицы размещения файлов с 2 Kb статических таблиц для расшифровки, отдельное для самих файлов с алгоритмом попроще), плюс какой-то извращённый способ хранения таблицы размещения файлов в архиве (TPF0 - скомпилированные файлы .DFM от Delphi! там и некоторые ресурсы в этом же формате! наркоманы писали эту игру!). Ах, да, а ещё там некоторые файлы сжаты, но я до этого ещё не дошёл, так что не знаю что там за сжатие.
Короче, я файл посмотрел, но над распаковщиком придётся попотеть, будет не сразу и не быстро. |
| PavelDAS |
May 7 2026, 14:20
Сообщение
#3
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 38 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 12 раз(а) |
Пираты как-то разобрали
Руссобитовцы прилепили хук в виде dll: Dll_Hook_p.dll -------------------- |__--__|
***|*** ___|___ |
| -=CHE@TER=- |
May 7 2026, 15:25
Сообщение
#4
|
|
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 |
May 8 2026, 07:21
Сообщение
#5
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 38 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 12 раз(а) |
https://wdfiles.ru/folder/21295/Games_-_Times_of_Conflict
Версии от Руссобита + nocd, Века, 7-го волк. + патч Работали разные проггеры, может что поможет. Патч собран таким же способом. -------------------- |__--__|
***|*** ___|___ Спасибо сказали:
|
| -=CHE@TER=- |
May 9 2026, 21:28
Сообщение
#6
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,437 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 328 раз(а) |
Спасибо конечно, но алгоритм-то всё равно разбирать.
Всё, нашёл и разобрался что там за сжатие: LZ2K. Даже нашёл код распаковки в Интернете. Постараюсь программу доделать и в ближайшие дни на сайт добавить. Сразу оговорюсь, что код парсинга .DFM там будет очень ограниченный, ибо меня ломает для частной задачи писать полноценный парсер. |
| -=CHE@TER=- |
May 10 2026, 18:12
Сообщение
#7
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,437 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 328 раз(а) |
Times of Conflict tools
Просьба протестировать и написать если всё нормально - я игру удалю, а то место занимает. Спасибо сказали:
|
| PavelDAS |
May 11 2026, 14:13
Сообщение
#8
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 38 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 12 раз(а) |
Times of Conflict tools Просьба протестировать и написать если всё нормально - я игру удалю, а то место занимает. Триада и Век -- отлично. Волк и Руссобит -- ошибка. У Триады и Века картинки конвертируются. BigTexInGame_Fonts.b16 немного странный, но, возможно, переводчики его так перерисовали ![]() p.s. хостинг немного цвет исказил. -------------------- |__--__|
***|*** ___|___ Спасибо сказали:
|
| -=CHE@TER=- |
May 11 2026, 16:34
Сообщение
#9
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,437 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 328 раз(а) |
Как же я не хотел это качать...
Обновил программу и добавил поддержку. "7 Волк" - ухитрились разобрать формат архива и перепаковать, но не справились со шрифтами, а не распаковывалось, потому что они 16 байт копирайтов в конец архива добавили из-за чего было offs+size != filesize. "Руссобит-М" - не смогли запаковать, так что для корректной распаковки нужен файл "fat.new" - там новая таблица размещения файлов (FAT - file allocation table) для архива, без этого файла будут распакованы только оригинальные файлы игры, зато они справились со шрифтами (там 1251, а не подстановка букв как у "7 Волка"), аналогично offs+size != filesize, но здесь потому что новые файлы в конец архива добавили. BigTexInGame_Fonts.b16 немного странный, но, возможно, переводчики его так перерисовали Картинки конвертируются "в лоб", так что там и цвета могут быть неправильные. Конвертер изображений чисто чтобы можно было посмотреть что там внутри примерно. |
| PavelDAS |
May 12 2026, 06:43
Сообщение
#10
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 38 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 12 раз(а) |
Как же я не хотел это качать... Обновил программу и добавил поддержку. Теперь распаковывает всё. Спасибо. -------------------- |__--__|
***|*** ___|___ Спасибо сказали:
|
![]() ![]() |
| Упрощённая версия | Сейчас: 24th May 2026 - 22:49 |