Перейти к содержимому
Zone of Games Forum

Рекомендованные сообщения

Ребята нужна помощь со вскрытием файлов от игры Gangland, текстуры, звуки, модели достать удалось, а вот игровые скрипты, файлы карт, текст не поддается, видимо файлы архивов чем то сжаты, вот только чем не могу понять. Прилагаю несколько примеров таких архивов, буду благодарен за любую наводку в какую сторону копать.

https://disk.yandex.ru/d/HADBydmbPoR16g

Поделиться сообщением


Ссылка на сообщение

Файлы фрагментно зашифрованны с использованием операции XOR по “ключу”.

Структура файла:

uint32 : dataOffset — смещение на начало секции с файлами
uint8 : globalFlags — флаги характеризующие файл:
	0x1 — указывает файловому менеджеру игры, что файлы нужно расшифровать сразу же при открытии архива
	0x2 — указывает, что каждое вхождение файла в таблице содержит дополнительные флаги
	0x4 — указывает, что таблица файлов зашифрована

Структура таблицы файлов:

uint16 : count — количество файлов в архиве
<далее вхождения файлов>

Структура вхождения файла в таблице:

cstring : filename — относительный путь к файлу \ название файла
uint32 : size — размер файла

#if globalFlags & 0x2
uint8 : flags — дополнительные флаги файла:
	0x1 — файл зашифрован
#endif

Что касается шифрования, это тот же самый алгоритм, что используется в игре “The Escape from Paradise City”, который представлен в скрипте для quickBMS (я так понимаю именно он и использовался для распаковки других файлов):

Spoiler

public static void XorData(int key, byte[] buffer)
{
  int salt = 0x1001 * key - 0x6F0B34D9;
  int position = 0;

  if (buffer.Length > 3) {
    int block_size = buffer.Length / 4;
    position = block_size * 4;

    for (int i = 0; i < position; i += 4) {
      buffer[i + 0] ^= (byte)(salt >> 4);
      buffer[i + 1] ^= (byte)(salt >> 10);
      buffer[i + 2] ^= (byte)(salt >> 16);
      buffer[i + 3] ^= (byte)(salt >> 22);

      salt = ((int)(key ^ (key << 8) ^ 0xE08ADA15)) + ((0x10001 * key + 0x4D3B1949) * salt);
    }
  }

  if (position < buffer.Length) {
    int remaining = buffer.Length - position;
    for (int i = 0; i < remaining; ++i) {
      buffer[position + i] ^= (byte)salt;
    }
  }
}

 

Отличие только в используемом ключе:

key = dataOffset + 0x00E6C2CF — ключ для таблицы файлов
key = dataOffset + file.Offset + (file.Size * 7) — ключ для файла

Удалось написать программку и распаковать представленные архивы.

Найти её можно здесь: Прямая ссылка (GitHub)

  • Лайк (+1) 1

Поделиться сообщением


Ссылка на сообщение

Скажите, пожалуйста, а как использовать эту программу, что-то не запускается на Windows 11? И как использовать данный скрипт, через чего запустить? Очень хочется вскрыть map и lua...

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас популярно

  • Продвигаемые темы

  • Последние сообщения

    • Мне нет, в 2д на гемпадах играю — эта дурацкая фигня проросшая из рогаликов раздражает. Из-за неё не беру такие игры.
    • прошёл босса, не разу не получив урона )капканы все словил пока шёл ) сделано неплохо,понравилась рисовка и буду проходить  дак удобно же. меню не удобно сделано, где ctrl- применить, а выйти из опций alt
    • Разобрался, они лежат в других файлах.
      Switch assets_00020a03e5d93e00_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/MasterDialogueDatabase.asset assets_00000042fe410000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH6 Dialogue Databases/0_CH6_OldTownDatabase.asset assets_00000801c0010000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/1_CH2_ApartmentMemory.asset assets_0000000000080000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/2_CH2_ClubMemory.asset assets_0000000000400000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/3_CH2_OccupantMemory.asset assets_0000000000068000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/5_CH2_BunkerBBF.asset assets_0000000000340000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/6_CH2_BunkerHealer.asset assets_0000000020300000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/7_CH2_BunkerKnower.asset assets_0000000001800800_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/8_CH2_AllmoMurder.asset assets_00060ae7ffffb800_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH2 Dialogue Databases/CH2_DialogueDatabaseArchive/0_CH2 Master Dialogue Database.asset assets_00000801c0000000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH7 Dialogue Databases/CH7 Dialogue Database.asset assets_0000000200000000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH8 Dialogue Databases/CH8 Dialogue Database.asset assets_000008dc00000000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH9 Dialogue Databases/CH9 Dialogue Database.asset assets_00000fe000000000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH10 Dialogue Databases/CH10 Dialogue Database.asset assets_0006000000000000_other_0_assets_all.bundle Assets/SunsetVisitor/1000xRESIST/Data/Dialogue/CH10 Dialogue Databases/CH11 Epilogue Dialogue Database.asset

      Пока что на примере MasterDialogueDatabase.asset вижу что отличий в структуре нет, из не текстовых отличий есть только одна строка 0 int m_FileID где значения отличаются.
       
    • меняет оригинальные файлы при запуске. Но чтобы меняло надо сначала этот оригинальный файл достать и перевести) По сути тот же самый копи-паст с заменой, что и на пк. Типа того. Русификатор всё равно ещё делается. Так что в будущем будет видно что и как. Если не горит, можешь и подождать.
    • бин , считай я свич покупал только из за двух игр , это одна из них) придется на пк играть(
    • Хорошо, что есть перевод. Но игра реально разочаровала. Так ждал ее, а она оказалась посредственной и нудной. Тут, как и всегда, решает пиксель-арт шикарный. Всё остальное мимо.
    • оно ж вроде как патч отдельно лежит ,физически не меняя оригинал …    я так понял хук на лету подмена ,не ?
    • файлы подкидываешь в папку мода, чтобы они заменили оригинальные файлы)) Это не ещё проще) Это сделано, чтобы не перепаковывать ром. На пк совершенно другой метод перевода, на свитче он не будет работать.
  • Изменения статусов

    • TerryBogard  »  Siberian GRemlin

      C&C: RA: Retaliation (ПК) не работает.
      · 0 ответов
    • Алекс Лев  »  SerGEAnt

      Привет, Сержант. Прошу разрулить ситуэйшн и урезонить некоторых людей, оскорбивших мою личность. Пожалуйста, для этого прочтите нашу переписку с Ленивым. Примите меры, будьте добры, мною составлена бумага, ждущая вашей электронной подписи, для подачи её в суд. Если не желаете судебных разборок (а я пойду дальше, если меры не будут приняты), оскорбившие меня люди должны понести необходимое по вашему же Договору наказание. Спасибо.
      · 1 ответ
    • Antony1203  »  SerGEAnt

      Добрый вечер! С Новым Годом. Нашел на просторах сети русскую озвучку Halo Infinite, которая отсутствует на моем любимом сайте  Протестил. Все работает. Подскажите, как можно передать? Спасибо.
      · 2 ответа
    • Albeoris

      Демка вышла. Работаем.
      · 0 ответов
    • maddante665  »  parabelum

      https://disk.yandex.ru/d/A7W9aHwW7wLTjg
      ссылка на торрент , в нем архив с игрой.
      единстенное в геймпасее папка TotalChaos_Data так, а в стиме Total Chaos_Data, но если пробел убрать в архиве с ркссификатором все равно не работает, ломаются надписи , просто прозрачные. я пробовал только текст .
      · 1 ответ
  • Лучшие авторы


Zone of Games © 2003–2026 | Реклама на сайте.

×