LesergАвтор темы


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

Показать / Скрыть текст
Кто ищет, тот всегда найдет!

Nexus

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

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

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 могла с ним нормально работать.

WYLEK

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

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

LesergАвтор темы

Цитата: 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 и необходимые жестко-закодированные строки.
Кто ищет, тот всегда найдет!

Nexus

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

LesergАвтор темы

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

Nexus

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

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

LesergАвтор темы

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

Nexus

Leserg,  да ты что!!! :fear:  И не вздумай. Кому понадобится - так пускай здеся обсуждают вопрос. Материал уникальный, будет дополняться по мере приобретения опыта в данном деле :tongue:  .

pp0312

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



 После архивации программой от Leserg показывает сжатие и что внутри

LesergАвтор темы

Обновил информацию в шапке. :smile: 

 pp0312, Программа TrIDNet немного не из той оперы. Во-первых, сигнатура 1F8B080000000000000B - это архив GZIP (Войдите на сайт для перехода по ссылке), который хоть и разработан авторами архиватора Zlib, но имеет совершенно другую структуру данных. Во-вторых, программа не показывает что внутри исследуемого файла, а пытается методом сопоставления с базой сигнатур различных форматов определить возможный тип файла. :smile: 

 У нас задача другая: определение наличия в исследуемом файле запакованных Zlib-данных, их извлечение, распаковка, перевод (при необходимости), а затем обратная операция по внедрению в файл модифицированных данных. :biggrin:
Кто ищет, тот всегда найдет!

Krig

ЦитироватьНовый Zlib-архив, размер файла - 908 872 байт.
Ребята, я хочу вернуться к Zlib (программа Streaming Audio Recorder). Распаковать вроде-как по написанному получается. Но не получается получить архив переведенного файла меньшего размера, чем оригинальный. В итоге архив невозможно заменить в файле программе на новый. Как это сделать?

Nexus написал, что файлы достаточно распаковать и кинуть в папку с программой. Да, так работает. Но это исключительный случай. С SysTracer такое не прокатывает. Нужно именно заменить архив на новый. Но в обеих случаях, хоть одно слово переведешь и после упаковки архив больше оригинального. Horna там писал о мастерстве, но не написал как этого добиться (да и пропал куда-то, с февраля не появлялся, в личку не отвечает) :sad:  

А можно подробнее, что вы там переводили и как вы получили архив меньшего размера, чем оригинальный? Если просто взять распаковать архив, а потом тут же запаковать полученный файл обратно, то новый архив получается больше. :wacko:

Nexus

ЦитироватьНо не получается получить архив переведенного файла меньшего размера, чем оригинальный.

Значит надо в переводимом файле что-то кастрировать - или уменьшать битность иконок в ресурсах, или упрощать русский перевод, что не есть гуд. В общем, надо как-то выкручиваться. Можно еще через отладчик в конце файла добавить пустые секции и впихнуть туда архив, но это далеко не все умеют, да и геморрно все это. Это, конечно, хорошо с Streaming Audio Recorder вышло - вытащил файлы и впихнул в паку, заработало - ну и ладно :biggrin:  . В SysTracer так дело не прокатило - выкинули нафиг описание лицензии, сжали и впихнули - заработало! С XLtoEXE так номер не прокатил вообще, там надо еще что-то придумать, чтобы прога нормально функционировала... Вот так вокруг "бедовых" программ и вьемся - что ни перевод, то изысканная головоломка, сегодня ты локализаторщик, а завтра ты уже хакер - долбишь упрямую утилиту и зубилом, и пилой режешь, лишь бы она работала так, как тебе нужно...
Кстати, интересный экземпляр этот XLtoEXE. Запакована сама в себя, при запуске разархивируется в папку TEMP и оттуда уже выполняется. Для перевода пришлось ее хакнуть и прикрутить ZLIB библиотеку, так как копия утилиты отказывалась работать, чего только не придумают...

Krig

ЦитироватьВ SysTracer так дело не прокатило - выкинули нафиг описание лицензии, сжали и впихнули - заработало!
Ах вот как ларчик открывается! :agree:  
Теперь надо смотреть, что в Streaming Audio Recorder выкинуть, уменьшить, упростить? Это блин не локализация получается, а тюнинг... :biggrin:

Nexus

ЦитироватьНа опенсорсе всегда нужно указывать автора.
ЦитироватьНедолго думая, я полез на форумы по программированию и раскопал исходный код простейшего архиватора с использованием библиотеки Zlib. Автор программы Andrea Russo, Italy, 2005 год.

* Ваши права на сайте

    Light Portal

  • Вы можете просматривать элементы портала
  • Вы не можете управлять блоками
  • Вы не можете управлять своими страницами
  • Вы не можете размещать свои страницы без модерации

    Simple Machines

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

Яндекс.Метрика Каталог@MAIL.RU - каталог ресурсов интернет