Архивы ZLIB

Небольшое руководство с описанием формата Zlib-архивов, методике их ручного поиска, извлечения и замены в файлах
  1. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 945

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1676

    Был: 2024-07-28 22:59

    Лайков: 167



    Небольшое руководство с описанием формата Zlib-архивов, методике их ручного поиска, извлечения и замены в файлах приложений, а также применение различных утилит, облегчающих работу с таким типом данных. Документ написан по материалам форума BlackStar Localizations Studio. Информация обновлена и дополнена. Рассчитана на широкий круг пользователей, которые занимаются локализацией ПО.

    78Sergey нравится это сообщение.

    Кто ищет, тот всегда найдет!

    9 июня 2013 - 09:39 / #1
  2. Оффлайн

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    Во-первых, хорошо, что ты написал статью, не нужно мне теперь писать, я буду просто дополнять

    А вот и дополнения:
    ------------------------

    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 могла с ним нормально работать.
    Сообщение отредактировал 24 января 2021 - 23:19
    9 июня 2013 - 10:39 / #2
  3. Оффлайн

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2188

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3495

    Был: 2024-10-09 14:08

    Лайков: 202


    Еще не помешало бы добавить сюда скрины по работе в WinHex с этим архивом. Не все же знают, что найдя нужную сигнатуру архива не нужно искать его конец (архива), а можно "откусить" лишний кусок EXE файла и впихнуть в отдельный файл. Потом этому же файлу необходимо присвоить какое-нибудь расширение, чтобы программа Simplyzip могла с ним нормально работать.


    Я первый раз слышуbiggrin с этого момента подробнее....пожалуйста...friday

    10 июня 2013 - 12:38 / #3
  4. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 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 и необходимые жестко-закодированные строки.
    Сообщение отредактировал 23 января 2023 - 09:32

    Кто ищет, тот всегда найдет!

    10 июня 2013 - 18:14 / #4
  5. Оффлайн

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    Leserg, насчет 00 перед сигнатурой - то была просто теория. И ты ее благополучно похерилbiggrin . Пример привел просто убойный. Так что проблема в размышлении отпала - нужно пробивать и те, и эти варианты.
    А вот насчет
    А вот здесь я не согласен. Открой в НЕХ-редакторе любой файл (документ, изображение, DLL-ку и т.д.) и задай поиск поиск по байтам 78 DA.
    с тобой тоже не согласенbiggrin . Приведу тоже убойный примерbiggrin
    Вот возьми тот же Streaming Audio Recorder, найди и распакуй по своему методу ZLIB архивы. Если будешь искать сигнатуру по трем байтам из своей таблицы, то недосчитаешься одного архива. Вот возьми распакуй и отпишешься здесьtongue
    10 июня 2013 - 18:44 / #5
  6. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 945

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1676

    Был: 2024-07-28 22:59

    Лайков: 167

    Вот возьми распакуй и отпишешься здесь

    Та я ж не против, все прекрасно вижу. Тема то не обкатанная еще, новая, пахать не перепахать. Просто надо добавить эту сигнатуру как частный случай и пополнять базу в дальнейшем. Другого варианта пока предложить не могу.wink

    Кто ищет, тот всегда найдет!

    10 июня 2013 - 20:59 / #6
  7. Оффлайн

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    Та я ж не против, все прекрасно вижу

    Да не в том суть, просто если ориентироваться на 3 байта сигнатуры, то можно таких "частных случаев" наковырять такое количество, что мама не горюй...

    Тема то не обкатанная еще, новая, пахать не перепахать.

    Тема не популярная даже на сайтах программистов, пришлось англоязычные руководства читать...
    10 июня 2013 - 21:05 / #7
  8. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 945

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1676

    Был: 2024-07-28 22:59

    Лайков: 167

    Пока добавил сигнатуру в таблицу.
    просто если ориентироваться на 3 байта сигнатуры, то можно таких "частных случаев" наковырять такое количество, что мама не горюй...

    Ладно, тогда закрываю тему, т.к. некомпетентен в этом вопросе.

    Кто ищет, тот всегда найдет!

    10 июня 2013 - 21:17 / #8
  9. Оффлайн

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    Leserg,  да ты что!!!fear И не вздумай. Кому понадобится - так пускай здеся обсуждают вопрос. Материал уникальный, будет дополняться по мере приобретения опыта в данном делеtongue .
    10 июня 2013 - 22:06 / #9
  10. Оффлайн

    pp0312

    Звание: Бывалый

    Мастер

    Сообщений: 173

    Создано тем: 24

    Рейтинг: 4

    Репа: (30|30|0)

    Баллы: 56

    Страна: не указана!

    Был: 2024-09-16 19:02

    Лайков: 26

    Программа TrIDNet определяет дескриптор zlib
    Код? <Pattern>            <Bytes>1F8B080000000000000B</Bytes>            <Pos>0</Pos>        </Pattern > 
    Вместо ASCII   Pos ?
    Вот скрин из программы



    После архивации программой от Leserg показывает сжатие и что внутри
    Сообщение отредактировал 5 февраля 2021 - 02:54
    12 июня 2013 - 15:21 / #10

Статистика форума, пользователей онлайн: 0 (за последние 20 минут)

---
Создано тем
1191
Всего сообщений
15721
Пользователей
17967
Новый участник
olkavv