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 байта, не упаковано, пробовал изменять в хекс-эдиторе, ни на что не повлияло, вообще похоже что ни за чем не служит. В чем проблема:
В архиве приаттачил пример упаковки файла, распакованный бинарник, (signature) и оригинальный архив. Файл проекта в VS2005.
Буду рад любой помощи, очень уж не хочется тратить время на изобретение велосипеда.
Best regards, Fukki. |
10.01.2011, 04:28 | #1
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
советую sfmpq который есть в сорце в интернетах и имеет куда лучшие свойства.
|
10.01.2011, 05:00 | #2
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Fukki
offline
Опыт:
45Активность: |
Спасибо огромное, определенный прогресс есть: упакованный архив имеет идентичный размер, флаги во всех структурах одинаковые, отличаются лишь сами упакованные данные файла. Такое чувство, что просто используется другой ключ кодировки. Сейчас уже нет сил, пойду спать, завтра попробую провести еще парочку тестов. |
10.01.2011, 08:28 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JaBeN_Симфер
offline
Опыт:
20,050Активность: |
не знаю поможет или нет, но я всегда распаковывал и упаковывал через плагин MPQ на Total Commander, игра такой архив нормально хавает - проверено на стандартных архивах перезапакованных для уменьшения веса игры. |
11.01.2011, 01:46 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Fukki
offline
Опыт:
45Активность: |
Да, был прав, для кодировки секции используется хэш имени файла, который я указывал неверно, что привело к печальным последствиям. Всетаки начинать стоило именно с детального прочтения доков по формату. Однако стандартный sfmpq или аналоги не упакуют такой файл по следующим причинам:
Т.о. подкорректировав SFmpqapi можно спокойно паковать бинарники-аля-близард. Если кого-то интересует результат моих потуг, могу поделиться сорцами. Отредактировано Fukki, 11.01.2011 в 04:00. |
11.01.2011, 03:53 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|