GCF Editor

Для тех, кто хочет сделать мир лучше.
Ответить
Сообщение
Автор
Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 43 раза
Контактная информация:

#1 Сообщение 06.01.2008, 08:49

может кто-нибудь всеже займется разработкой GCF редактора ?
думаю что эта прога могла бы многим пригодится, например создать
GCF файл Half Life с русификацией

я бы сам занялся, но увы я не кодер

Аватара пользователя
impulse666
Полковник
Полковник
Сообщения: 7405
Зарегистрирован: 08.12.2005
Откуда: Atman
Благодарил (а): 2340 раз
Поблагодарили: 590 раз

#2 Сообщение 06.01.2008, 08:50

fire64
аа, ты вроде добился какихто результатов, так выкладывай хотябы приблизительный алгоритм что там и как..
можно в ЛС..
Изображение
Негласные Правила
1. Пропаганда лицензии запрещена.
2. На форуме режим многоступенчатых стандартов Ψ. То что можно одним, нельзя другим. Решается правящей партией
3. Ники членов правящей партии (impulse666, NiGHt-LEshiY, SHADOW) искажают только в случае необходимости получить БАН.

...воздержитесь от этого, изучите вот это.
Лучшая статья о моих взглядах. Настоятельно рекомендую.

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 43 раза
Контактная информация:

#3 Сообщение 06.01.2008, 10:09

давай рассмотрим структуру GCF файла
за пример возьмем файл sourceinit.gcf так как он самый простой

байт 8 имеет значение 06 ( 6 ) он определяет версию GCF файла
изменять версию не имеет никакого смысла так как изменяется только идентификатор версии

байт C имеет значение ca ( 202 ) это AppID gcf файла

дальше идет CRC файла и сам GCF формат ( здесь я не копался )

байт 3ED, здесь название файла

байт 688, здесь начинается файл sourceinit.dat и идет до конца файла

байты отвечающие за название файла и за начало файла в каждом файле разные

также каждый GCF файл имеет CRC в связи с этим необходимо что бы после редактирования GCF файла
контрольная сумма осталась прежней

вот образец http://ifolder.ru/4846736
файл имеет AppID 33
внутри GCF файла находится файл Half Life2.jpg

vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#4 Сообщение 07.01.2008, 19:27

[fire64]

Открыв всего один файлик(причём не являющийся GCF-ом) скажу:

struct GCFHeader
{
hlUInt uiDummy0; // Always 0x00000001
hlUInt uiMajorVersion; // Always 0x00000001
hlUInt uiMinorVersion; // GCF version number.
hlUInt uiCacheID;
hlUInt uiLastVersionPlayed;
hlUInt uiDummy1;
hlUInt uiDummy2;
hlUInt uiFileSize; // Total size of GCF file in bytes.
hlUInt uiBlockSize; // Size of each data block in bytes.
hlUInt uiBlockCount; // Number of data blocks.
hlUInt uiDummy3;
};

struct GCFBlockEntryHeader
{
hlUInt uiBlockCount; // Number of data blocks.
hlUInt uiBlocksUsed; // Number of data blocks that point to data.
hlUInt uiDummy0;
hlUInt uiDummy1;
hlUInt uiDummy2;
hlUInt uiDummy3;
hlUInt uiDummy4;
hlUInt uiChecksum; // Header checksum.
};

struct GCFBlockEntry
{
hlUInt uiEntryFlags; // Flags for the block entry. 0x200F0000 == Not used.
hlUInt uiFileDataOffset; // The offset for the data contained in this block entry in the file.
hlUInt uiFileDataSize; // The length of the data in this block entry.
hlUInt uiFirstDataBlockIndex; // The index to the first data block of this block entry's data.
hlUInt uiNextBlockEntryIndex; // The next block entry in the series. (N/A if == BlockCount.)
hlUInt uiPreviousBlockEntryIndex; // The previous block entry in the series. (N/A if == BlockCount.)
hlUInt uiDirectoryIndex; // The index of the block entry in the directory.
};


Всё открыто и явно написано - что и как построено.

Часть исходников HLLib - библиотеки написанной одним из работников Valve

Проблема заклчюается в том что все заголовки данных имеют контрольную сумму а так же в файле GCF находится карта контрольных сумм для всех файлов которые в нём содержатся... Так что имитация контрольной суммы является практически невыполнимой...

Но есть ко всему этому делу workaround:
HLLib позволяет создавать GCF файлы что значит что можно распаковывать существующий GCF и создавать новый с нужными модификациями...

Параллельно CFTool помоему умеет редактировать GCF(или пользуется подобным workaround-м) :)

Аватара пользователя
zerg_spb
Маппер
Маппер
Сообщения: 823
Зарегистрирован: 11.06.2006
Благодарил (а): 1 раз
Поблагодарили: 32 раза
Контактная информация:

#5 Сообщение 09.01.2008, 13:55

По моему, Вам надо на cracklab.ru.

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#6 Сообщение 09.01.2008, 15:22

vityan666
Кстати, я по этим хэадерам сейчас попробую сделать какой-нибудь вьювер ГЦФ-файлов, авось получится еще и чтение файлов сделать. Причем все - самому.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 43 раза
Контактная информация:

#7 Сообщение 09.01.2008, 15:58

zhiga писал(а):По моему, Вам надо на cracklab.ru.
зачем ?

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#8 Сообщение 09.01.2008, 17:28

ЗЫ: дошел до небольшого ступора еще в чтении заголовка GCF файла. Разбираемся, разбираемся. Версию файла уже могу читать, как и общий размер упакованных файлов :)

fire64
Это он к тому, что там типо самые крутые хакеры сидят :)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
impulse666
Полковник
Полковник
Сообщения: 7405
Зарегистрирован: 08.12.2005
Откуда: Atman
Благодарил (а): 2340 раз
Поблагодарили: 590 раз

#9 Сообщение 09.01.2008, 17:35

самые крутые крэкеры сидят здесь :D
пс andreil
у тебя не осталось исходняка витяновского ОпенПатча? я чтото немогу найти нигде (в 1 посте соседней темыв нет)
а то хотелосьбыв к аккменеджеру своему прикрутить...%)
Изображение
Негласные Правила
1. Пропаганда лицензии запрещена.
2. На форуме режим многоступенчатых стандартов Ψ. То что можно одним, нельзя другим. Решается правящей партией
3. Ники членов правящей партии (impulse666, NiGHt-LEshiY, SHADOW) искажают только в случае необходимости получить БАН.

...воздержитесь от этого, изучите вот это.
Лучшая статья о моих взглядах. Настоятельно рекомендую.

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#10 Сообщение 09.01.2008, 18:24

impulse666
неа, нету.

ЗЫ: крути мой патчер :) он прост как пробка :)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

aqws
Нович0к
Нович0к
Сообщения: 13
Зарегистрирован: 04.07.2008

#11 Сообщение 09.07.2008, 02:28

:)

Аватара пользователя
Kein
Капитан
Капитан
Сообщения: 367
Зарегистрирован: 21.04.2008

#12 Сообщение 09.07.2008, 07:00

Очень, бл, содержательно.
Модераторы, в пытошную его!

Ответить