Список форумов
Гипат.org
Найдется место всем!


:: В чате сейчас никого нет
EIRES Extractor
   Список форумов -> MODный форум
Автор
Сообщение
Баттерс
Загонщик


Пришел: 12.02.2009
Сообщения: 4
Добавлено: 24 ноября 2009, 17:20 [?] [PM]   [«»]

Вот написал экстрактор для архивов игры (*res файлов). Частичная замена консольному ResBuild'у.
Что умеет:
Парсить файлы ресурсов и отображать информацию об их содержимом (имена файлов, их вес, время модификации и оффсет в архиве).
Извлекать файлы из архива на диск. Можно извлечь 1 файл, можно 2. А можно сразу все.
Для удобства прикручена поддержка командной строки (Можно выбрать "Открыть с помощью" из проводника).
Все. Больше программа ничово не умеет. :D
Если автор преодолеет лень, то, возможно, программа научится еще добавлять и удалять файлы в/из архива.
Скреншод:



IERES_Extractor.zip   EIRES Extractor
51.56 KB, Скачано 164 раз(а).
 
Sagrer
Убийца троллей


Пришел: 24.12.2001
Сообщения: 3548
Откуда: Курск
Добавлено: 25 ноября 2009, 02:38 [?] [PM] [M] [w] [m] [i]   [«»]

я так понимаю, там не используется резбилд, автор написал свой парсер res-ов....

Только один вопрос: зачем?

:roll:

З.Ы. разве что, исходник в виде читабельного и юзабельного класса на паскале или С++ был бы полезен кому-нибудь из мододелов и разработчиков утилит. Просто GUI для резбилда целая куча на самом деле, и реально пользоваться просто для распаковки\запаковки будут таки тем что основано на резбилде. Опять же насчёт запаковки - если алгоритм хеширования не разобран - смысла от пакующей утилиты нет при наличии резбилда, res-ы с хешами игра по идее должна обрабатывать быстрее чем без оных.
_________________
Мы уйдем без следа, ни имен ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше здесь не было - после не будет.
Ни ущерба, ни пользы от этого нет. (с) Омар Хайям
Баттерс
Загонщик


Пришел: 12.02.2009
Сообщения: 4
Добавлено: 25 ноября 2009, 12:29 [?] [PM]   [«»]

Пока отреверсен только алгоритм распаковки. Там хэши не используются. Алгоритм запаковки отреверсить тоже не проблема. Только времени бы побольше.
Класс пока выкладывать не буду. Все равно без запаковки смысла в нем нет. Да и там непричесано там все как-то.
Могу пока выложить шаблон для вывода структуры файла в 010 Editor.
Код:
//--------------------------------------
//--- 010 Editor v3.0.4 Binary Template
//
// File: CMappedResource
// Author: Butters
// Revision: 1.0
// Purpose: Defines a template for
//    parsing Evil Islands RES files.
//--------------------------------------

typedef struct {
    signed int  Hash;
    DWORD   filesize;
    DWORD   fileoffset<format=hex>;
    time_t  filetime; //32 bit
    WORD    FileNameLen;
    DWORD   FileNameOffset;
} FILEINFO;

typedef struct {
    DWORD       dwType<format=hex>;//0x19ce23c
    DWORD       nFiles;
    DWORD       pFileInfoBlock<format=decimal>;
    DWORD       sizeof__FileNamesBlock;
} CMappedResourceHeader;

LittleEndian();
SetBackColor( cLtAqua );
CMappedResourceHeader header;

// Check for header
if( header.dwType !=  0x19ce23c)
{
    Warning( "File is not a CMappedResource file. Template stopped." );
    return -1;
}

if (FSeek(header.pFileInfoBlock)!=0)
{
    Warning( "Corrupted header." );
    return -1;
}

SetBackColor( cLtYellow );
FILEINFO fileinfoblock[header.nFiles];

SetBackColor( cLtGray );
string filenames;
FSeek(16);
SetBackColor( cLtGreen );
char FileContent[header.pFileInfoBlock - 16];

Кстати, я тут мельком заглянул в game.exe. По рудиментам отладочной печати стало понятно, что разрабы называли этот класс CMappedResource. Думаю, правильнее будет называть утилиту CMappedResource Extractor.

ЗЫ. А код там сложноват для анализа. Все смешано в кучу. И MFC туда же втюхали. :spy: Одних только потомков CObject порядка 200 штук. :ass: Эх, когда-то MFC был очень даже популярен. Вот, оказывается даже в играх его использовали.

ЗЫ2. Кстати, находка: (не знаю, известна ли она). Игра использует Miles Sound System. А та в свою очередь подгружает в качестве плагинов все файлы с расширением asi, положенные в корневую директорию игры. Итак, как написать свой плагин для игры? Очень просто: пишем dll и переименовываем в asi. Проверил - работает. :D

ЗЫ3. Этот же метод использовался в играх GTA 3, Vice City. Позже был внедрен в San Andreas и GTA 4 (но уже руками). Можно вот тут почитать.
Снайпер
Зеленый гипатский зануда


Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
Добавлено: 25 ноября 2009, 19:59 [?] [PM] [w] [m] [i]   [«»]

Про подгрузку "левых" библиотек - уже интереснее, избавляет от необходимости извращаться в стартере с памятью игры...
_________________
Я желаю всем счастья!
Sagrer
Убийца троллей


Пришел: 24.12.2001
Сообщения: 3548
Откуда: Курск
Добавлено: 26 ноября 2009, 02:53 [?] [PM] [M] [w] [m] [i]   [«»]

ну, насчёт распаковки - формат известен %). Неясен только алгоритм хеширования, но если тут реверсится resbuild.exe - наверное скоро что-то будет %).

Насчёт asi спасибо за инфу, правда пока в голову не приходит как это можно использовать, если уже есть стартер %).
_________________
Мы уйдем без следа, ни имен ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше здесь не было - после не будет.
Ни ущерба, ни пользы от этого нет. (с) Омар Хайям
Баттерс
Загонщик


Пришел: 12.02.2009
Сообщения: 4
Добавлено: 26 ноября 2009, 17:11 [?] [PM]   [«»]

ресбилд-то? Ну, если надо, то реверсится.
Прикол в том, что хэширования никакого нет. Похоже, что то, что я обозвал "хэш" - это просто какой-то порядковый номер. Для большинства файлов в ресурсе он равен -1. Для некоторых имеет какое-то вполне определенное и совсем даже не магическое число - 1, 2 ...
Попробовал изменить одну циферку на -1. В игре никаких отличий не обнаружил. После оптимизации ресбилдом циферка вернулась.
Думаю пока не запариваться по поводу этой циферки. После перепаковки всегда можно оптимизировать ресбилдом.

Не приходит в голову как использовать подгрузку библиотек? Ну, можно патчить процесс игры во время исполнения (для патчинга не перезаписываемых областей кода надо использовать функцию VirtualProtect) . Внедриться в игру. Заменить функции игры своими функциями... Можно делать все, что угодно. Мы в адресном пространстве процесса. А что еще нужно?
Sagrer
Убийца троллей


Пришел: 24.12.2001
Сообщения: 3548
Откуда: Курск
Добавлено: 27 ноября 2009, 02:53 [?] [PM] [M] [w] [m] [i]   [«»]

Цитата:
Можно делать все, что угодно. Мы в адресном пространстве процесса. А что еще нужно?


просто уже есть addon.dll, которая делает то же самое.
_________________
Мы уйдем без следа, ни имен ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше здесь не было - после не будет.
Ни ущерба, ни пользы от этого нет. (с) Омар Хайям
visor
Охотник


Пришел: 15.03.2004
Сообщения: 77
Добавлено: 20 февраля 2010, 23:33 [?] [PM]   [«»]

Цитата (Баттерс):

DWORD fileoffset<format=hex>;
DWORD pFileInfoBlock<format=decimal>;

А ичто за диво такое? MS расширения?
Показать сообщения:   
   Список форумов -> MODный форум
Версия для печати
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы
Вы можете скачивать выложенные файлы
Перейти:  
Часовой пояс: GMT +4:00