XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Fukki

offline
Опыт: 45
Активность:
Перепаковка IX86ver1.mpq
Привет всем, вопрос к знатокам, часто работающим с MPQ архивами.
Админю пвпгн сервер варкрафта и столкнулся с такой задачей: перепаковать IX86ver1.mpq или его аналог(ver-ix86-1.mpq etc). Нужно мне это для выполнения моего кода на стороне клиента без дополнительных лоадеров, ведь в этом архиве содержится длл с одной экспортируемой функцией:
typedef BOOL (__stdcall *TCheckRevision)(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD).
На самом деле там указатели на строки и еще какая-то лабудень, но нам это не так важно, главное лишь количество байт запушеных в стек. Казалось бы, зная вышеперечисленное, можно развернуться по полной.
Но тут я столкнулся стакой проблемой: не удается правильно упаковать архив, даже распаковывая-запаковывая оригинальный файл получаю неприемлемый результат(варик выкачивает файл с сервера, однако распаковывать не хочет и выдает эрор при заходе на батлу).
Детально взглянув на архив(Ladik's MPQ Editor last revision) видно, что в архиве 2 файла:
собственно dll - упаковано с флагами MPQ_FILE_EXISTS | MPQ_FILE_IMPLODE | MPQ_FILE_ENCRYPTED
метадата (signature) - 72 байта, не упаковано, пробовал изменять в хекс-эдиторе, ни на что не повлияло, вообще похоже что ни за чем не служит.
В чем проблема:
  1. При создании/изменении архива автоматически создается (listfile) который мне не нужен. Не проблема, можно и ручками потом удалить
  2. Ч-з стандартные эдиторы не получается упаковать с этим набором флагов, решил вопрос воспользовавшись StormLib API отсюда www.zezula.net/en/mpq/main.html и написав маленький архиватор.
  3. Даже с тем же набором флагов упакованный байт-код выглядит отлично от оригинала, хотя при просмотре MPQ-эдитором оба нормально открываются, имеют идентичное сжатие, флаги, размер
В архиве приаттачил пример упаковки файла, распакованный бинарник, (signature) и оригинальный архив. Файл проекта в VS2005.
Буду рад любой помощи, очень уж не хочется тратить время на изобретение велосипеда.
Best regards, Fukki.
Прикрепленные файлы
Тип файла: zip mpq_sample.zip (836.7 Кбайт, 75 просмотров )
Старый 10.01.2011, 04:28
DioD

offline
Опыт: 45,134
Активность:
советую sfmpq который есть в сорце в интернетах и имеет куда лучшие свойства.
Старый 10.01.2011, 05:00
Fukki

offline
Опыт: 45
Активность:
Спасибо огромное, определенный прогресс есть: упакованный архив имеет идентичный размер, флаги во всех структурах одинаковые, отличаются лишь сами упакованные данные файла. Такое чувство, что просто используется другой ключ кодировки. Сейчас уже нет сил, пойду спать, завтра попробую провести еще парочку тестов.
Старый 10.01.2011, 08:28
JaBeN_Симфер

offline
Опыт: 20,050
Активность:
не знаю поможет или нет, но я всегда распаковывал и упаковывал через плагин MPQ на Total Commander, игра такой архив нормально хавает - проверено на стандартных архивах перезапакованных для уменьшения веса игры.
Старый 11.01.2011, 01:46
Fukki

offline
Опыт: 45
Активность:
Да, был прав, для кодировки секции используется хэш имени файла, который я указывал неверно, что привело к печальным последствиям. Всетаки начинать стоило именно с детального прочтения доков по формату. Однако стандартный sfmpq или аналоги не упакуют такой файл по следующим причинам:
  1. Нет возможности добавлять файл без флагов или с неизвестным флагом( всеравно добавляется MPQ_FILE_EXISTS, что неприемлемо)
  2. Нигде не реализована подпись архива, в StormLib можно лишь ее проверить, но только при условии, что файл сигнатуры имеет валидные флаги. (в моем случае это какой-то неизвестный 0x90000000). А вычисляется она довольно просто - как 512-битный RSA ключ (не забыть что порядок байт при записи в файл интеловский!)
Т.о. подкорректировав SFmpqapi можно спокойно паковать бинарники-аля-близард.
Если кого-то интересует результат моих потуг, могу поделиться сорцами.

Отредактировано Fukki, 11.01.2011 в 04:00.
Старый 11.01.2011, 03:53
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 09:35.