Архивы ZLIB
Небольшое руководство с описанием формата Zlib-архивов, методике их ручного поиска, извлечения и замены в файлах
-
Оффлайн
Автор темы
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Небольшое руководство с описанием формата Zlib-архивов, методике их ручного поиска, извлечения и замены в файлах приложений, а также применение различных утилит, облегчающих работу с таким типом данных. Документ написан по материалам форума BlackStar Localizations Studio. Информация обновлена и дополнена. Рассчитана на широкий круг пользователей, которые занимаются локализацией ПО.78Sergey нравится это сообщение.9 июня 2013 - 09:39 / #1 -
Во-первых, хорошо, что ты написал статью, не нужно мне теперь писать, я буду просто дополнять
А вот и дополнения:
------------------------
1. Касаемо сигнатуры. Третье число после 78 DA (9C, 01) абсолютно ничего не значит. Первое число - сигнатура ZLIB архива, второе число - степень сжатия (одна из трех). И точка. Расширения и тип файлов ничего не значат - в архив не записывается даже название файла, куда уж о типе файла говорить... То, что часто попадается совпадение, такое как 78 DA EC или 78 DA ED, так это из-за суммирования начальных байт, у разных файлов оно разное. Например, в той же Streaming Audio Recorder попался упакованный DLL файл с сигнатурой 78 DA D4. Так что нужно искать сигнатуру только по первым 2 байтам.
2. Для упрощения поиска ZLIB архивов внутри файлов нужно перед сигнатурой, например 78 DA, приписывать еще и 00 - будет 00 78 DA. Почему? Потому что между блоками архивов должно быть разделительное пространство. Хотя данное предположение является теорией; может даже встретиться такое западло как FF FF 78 DA. В общем, надо отрабатывать разные варианты.
Еще не помешало бы добавить сюда скрины по работе в WinHex с этим архивом. Не все же знают, что найдя нужную сигнатуру архива не нужно искать его конец (архива), а можно "откусить" лишний кусок EXE файла и впихнуть в отдельный файл. Потом этому же файлу необходимо присвоить какое-нибудь расширение, чтобы программа Simplyzip могла с ним нормально работать.9 июня 2013 - 10:39 / #2 -
Оффлайн
Звание: Легенда
Админ
Сообщений: 2188
Создано тем: 317
Рейтинг: 10
Репа: (245|245|0)
Баллы: 3495
Был: 2024-10-09 14:08
Лайков: 202
Еще не помешало бы добавить сюда скрины по работе в WinHex с этим архивом. Не все же знают, что найдя нужную сигнатуру архива не нужно искать его конец (архива), а можно "откусить" лишний кусок EXE файла и впихнуть в отдельный файл. Потом этому же файлу необходимо присвоить какое-нибудь расширение, чтобы программа Simplyzip могла с ним нормально работать.
Я первый раз слышу с этого момента подробнее....пожалуйста...10 июня 2013 - 12:38 / #3 -
Оффлайн
Автор темы
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Цитата: Nexusдо определённого места. И место это, сжатие до размера. Размер изображения эффекта не дал.
Сокращал перевод, лишнее забивал нулевыми байтами. Но результата нет.
Обращай внимание на размер создаваемого локализованного файла. Если он больше размера оригинального файла, то никоим образом не получится получить новый размер архива меньше исходного. Например, я работал с версией Streaming Audio Recorder v.2.8. Размер оригинального файла программы - 2 225 152 байт. После описанных выше действий в редакторе Radialix, размер локализованного файла у меня получается 2 163 712 байт. Как видишь новый размер меньше оригинального (за счет замены двух изображений на оптимизированные!), соответственно и архив получится меньше оригинального.Очевидно я чего-то не догоняю, как добиваться желаемого размера.
Если ты работаешь в Radialix"e, то в нем есть небольшой нюанс: те ресурсы, которые не будут переводиться или изменяться, необходимо переключить в режим "только для чтения".
Проведи небольшой эксперимент:
1) Создай новый проект локализации файла Streaming-Audio-Recorder.exe. Radialix выдаст огромный список ошибок (по крайней мере у меня это так).
Ничего не переводи, а создай локализованный файл. Посмотри размер полученного файла. Например у меня получился 2 378 240 байт, т.е. больше оригинального, а мы еще ничего не переводили.
2) Теперь в менеджере ресурсов установи всем режим "Только для чтения", кроме ресурсов StreamingAudioRecorder.Resources.resources, StreamingAudioRecorder.frmAbout.resources (в них находятся изображения), StreamingAudioRecorder.help-xp.html (документ HTML).
Ресурс #US - это жестко-закодированные строки, где у каждой из них признак "Только для чтения" установлен индивидуально. Сохрани проект и закрой редактор полностью.
3) Снова запусти Radialix и открой только что созданный проект локализации. Ошибок быть не должно.
Ничего не переводи, создай локализованный файл. Его размер должен быть в пределах оригинального, например у меня получился 2 230 784 байт. Т.е. всего лишь на 5 Кб больше оригинального.
4) Если теперь заменить те два изображения на оптимизированные и создать новый локализованный файл, то его размер будет меньше оригинального, например у меня - 2 163 712 байт (это зависит от суммарного размера оптимизированных изображений). После этого можно переводить документ HTML и необходимые жестко-закодированные строки.10 июня 2013 - 18:14 / #4 -
Leserg, насчет 00 перед сигнатурой - то была просто теория. И ты ее благополучно похерил . Пример привел просто убойный. Так что проблема в размышлении отпала - нужно пробивать и те, и эти варианты.
А вот насчет
А вот здесь я не согласен. Открой в НЕХ-редакторе любой файл (документ, изображение, DLL-ку и т.д.) и задай поиск поиск по байтам 78 DA.с тобой тоже не согласен . Приведу тоже убойный пример
Вот возьми тот же Streaming Audio Recorder, найди и распакуй по своему методу ZLIB архивы. Если будешь искать сигнатуру по трем байтам из своей таблицы, то недосчитаешься одного архива. Вот возьми распакуй и отпишешься здесь10 июня 2013 - 18:44 / #5 -
Оффлайн
Автор темы
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Вот возьми распакуй и отпишешься здесь
Та я ж не против, все прекрасно вижу. Тема то не обкатанная еще, новая, пахать не перепахать. Просто надо добавить эту сигнатуру как частный случай и пополнять базу в дальнейшем. Другого варианта пока предложить не могу.10 июня 2013 - 20:59 / #6 -
Та я ж не против, все прекрасно вижу
Да не в том суть, просто если ориентироваться на 3 байта сигнатуры, то можно таких "частных случаев" наковырять такое количество, что мама не горюй...
Тема то не обкатанная еще, новая, пахать не перепахать.
Тема не популярная даже на сайтах программистов, пришлось англоязычные руководства читать...10 июня 2013 - 21:05 / #7 -
Оффлайн
Автор темы
Звание: Ветеран
Команда сайта
Сообщений: 945
Создано тем: 79
Рейтинг: 8
Репа: (131|131|0)
Баллы: 1676
Был: 2024-07-28 22:59
Лайков: 167
Пока добавил сигнатуру в таблицу.
просто если ориентироваться на 3 байта сигнатуры, то можно таких "частных случаев" наковырять такое количество, что мама не горюй...
Ладно, тогда закрываю тему, т.к. некомпетентен в этом вопросе.10 июня 2013 - 21:17 / #8 -
Leserg, да ты что!!! И не вздумай. Кому понадобится - так пускай здеся обсуждают вопрос. Материал уникальный, будет дополняться по мере приобретения опыта в данном деле .10 июня 2013 - 22:06 / #9
-
12 июня 2013 - 15:21 / #10
Статистика форума, пользователей онлайн: 0 (за последние 20 минут)
---
- Создано тем
- 1191
- Всего сообщений
- 15721
- Пользователей
- 17967
- Новый участник
- olkavv