Войти
  1. ВКонтакте
  2. Facebook
  1. »
  2. »
  3. »
  4. Архивы ZLIB
Скрыть панель справаПоказать панель справа

Архивы ZLIB

Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 1 отправлено 23:36, 09.06.2013
Прикрепленная картинка


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

Вашей группе Гости запрещён просмотр скрытого текста.


Последний раз редактировал WYLEK 18:04, 09.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 2 отправлено 01:15, 10.06.2013
Во-первых, хорошо, что ты написал статью, не нужно мне теперь писать, я буду просто дополнять

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

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 18:06, 09.02.2017
Легенда
  1. Офлайн
  2. Админ
  3. 1652 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 3 отправлено 12:38, 10.06.2013
Цитата (Nexus)

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


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


------------------------------------------
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 4 отправлено 18:14, 10.06.2013
Nexus писал:Во-первых, хорошо, что ты написал статью, не нужно мне теперь писать, я буду просто дополнять


Ты с таким же успехом можешь её продолжить... Спасибо за поддержку.

Nexus писал:Первое число - сигнатура ZLIB архива, второе число - степень сжатия (одна из трех).

Ты удачно завершил мою мысль. Согласен. Тем более, что если руководствоваться таблицей с полученными сигнатурами, то так и получается.

Nexus писал:Так что нужно искать сигнатуру только по первым 2 байтам.


А вот здесь я не согласен. Открой в НЕХ-редакторе любой файл (документ, изображение, DLL-ку и т.д.) и задай поиск поиск по байтам 78 DA. Подсчитай, сколько совпадений получится. Но это будут, увы, не Zlib-архивы. Я считаю, что необходимо искать по трем байтам, которые выделены в таблице. С 90% уверенностью можно будет сказать, что имеешь дело с данными архива. Хотя конечно, может быть просто совпадение с адресом перехода или вызова, или просто данной последовательностью байтов, но вероятность этого крайне мала, чем при поиске по двум байтам.

Nexus писал:Для упрощения поиска ZLIB архивов внутри файлов нужно перед сигнатурой, например 78 DA, приписывать еще и 00 - будет 00 78 DA.


Не согласен. И вот почему. Архивированные Zlib-данные можно вставить в программу в виде ресурсов, а также в виде массива НЕХ-данных. В первом случае (как ресурсы) ты прав, Zlib-данные будут отделены нулевым байтом (00), т.е. перед сигнатурой 78 DA будет нулевой байт (00 78 DA). Но во втором случае (как массив НЕХ-данных), на этапе компиляции программы, архив Zlib будет добавлен в исполняемый код без каких-либо признаков отделения. Какие байты будут находиться перед сигнатурой 78 DA неведомо никому. Ты привел пример "может даже встретиться такое западло как FF FF 78 DA". Вот тебе другой пример (программа XLtoEXE):

Прикрепленная картинка


А все потому, что архив был включен программу не как ресурс, а как массив НЕХ-данных. В общем, как правильно ты заметил, необходимо отрабатывать разные варианты.

Nexus писал:Еще не помешало бы добавить сюда скрины по работе в WinHex с этим архивом.


Вот здесь я еще не определился, стоит ли дублировать пост Horna, он довольно подробно осветил этот вопрос. Что-то нового я добавить не могу. Жду рекомендации и пожелания.

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


Что именно тебе не понятно? Архиватор Zlib обрабатывает данные в виде потока байт и ему совершенно по барабану файл это или папка, или раздел жесткого диска. Архив Zlib не имеет указателей на конец, имена, расширения и размер. Для него самое главное начало. Далее он работает с потоком байт. Если поток прервался, то архиватор прекращает работу, а результатом его работы является сжатая/распакованная последовательность байт. Поэтому

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


Если не понятна практическая сторона вопроса, то она будет описана немного позже, если требуется.

Последний раз редактировал WYLEK 18:07, 09.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 5 отправлено 18:44, 10.06.2013
Leserg, насчет 00 перед сигнатурой - то была просто теория. И ты ее благополучно похерил biggrin . Пример привел просто убойный. Так что проблема в размышлении отпала - нужно пробивать и те, и эти варианты.
А вот насчет
Цитата (Leserg)
А вот здесь я не согласен. Открой в НЕХ-редакторе любой файл (документ, изображение, DLL-ку и т.д.) и задай поиск поиск по байтам 78 DA.
с тобой тоже не согласен biggrin . Приведу тоже убойный пример biggrin
Вот возьми тот же Streaming Audio Recorder, найди и распакуй по своему методу ZLIB архивы. Если будешь искать сигнатуру по трем байтам из своей таблицы, то недосчитаешься одного архива. Вот возьми распакуй и отпишешься здесь tongue
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 6 отправлено 20:59, 10.06.2013
Цитата (Nexus)
Вот возьми распакуй и отпишешься здесь

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


------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 7 отправлено 21:05, 10.06.2013
Цитата (Leserg)
Та я ж не против, все прекрасно вижу

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

Цитата (Leserg)
Тема то не обкатанная еще, новая, пахать не перепахать.

Тема не популярная даже на сайтах программистов, пришлось англоязычные руководства читать...
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 8 отправлено 21:17, 10.06.2013
Пока добавил сигнатуру в таблицу.
Цитата (Nexus)
просто если ориентироваться на 3 байта сигнатуры, то можно таких "частных случаев" наковырять такое количество, что мама не горюй...

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


------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 9 отправлено 22:06, 10.06.2013
Leserg,  да ты что!!! fear И не вздумай. Кому понадобится - так пускай здеся обсуждают вопрос. Материал уникальный, будет дополняться по мере приобретения опыта в данном деле tongue .
Сталкер
  1. Офлайн
  2. Знаток
  3. 144 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 10 отправлено 15:21, 12.06.2013
Программа TrIDNet определяет дескриптор zlib
Код?             1F8B080000000000000B            0        >
Вместо ASCII   Pos ?
Вот скрин из программы Streaming Audio Recorder



После архивации программой от Leserg показывает сжатие и что внутри
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 11 отправлено 01:16, 14.06.2013
Обновил информацию в шапке. smile

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

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


------------------------------------------
Кто ищет, тот всегда найдет!
Новичок
  1. Офлайн
  2. Участники
  3. 43 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 12 отправлено 17:06, 16.06.2013
Цитата (Leserg)
Новый Zlib-архив, размер файла - 908 872 байт.

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

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

А можно подробнее, что вы там переводили и как вы получили архив меньшего размера, чем оригинальный? Если просто взять распаковать архив, а потом тут же запаковать полученный файл обратно, то новый архив получается больше. wacko
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 13 отправлено 00:42, 17.06.2013
Цитата (Krig)
Но не получается получить архив переведенного файла меньшего размера, чем оригинальный.


Значит надо в переводимом файле что-то кастрировать - или уменьшать битность иконок в ресурсах, или упрощать русский перевод, что не есть гуд. В общем, надо как-то выкручиваться. Можно еще через отладчик в конце файла добавить пустые секции и впихнуть туда архив, но это далеко не все умеют, да и геморрно все это. Это, конечно, хорошо с Streaming Audio Recorder вышло - вытащил файлы и впихнул в паку, заработало - ну и ладно biggrin . В SysTracer так дело не прокатило - выкинули нафиг описание лицензии, сжали и впихнули - заработало! С XLtoEXE так номер не прокатил вообще, там надо еще что-то придумать, чтобы прога нормально функционировала... Вот так вокруг "бедовых" программ и вьемся - что ни перевод, то изысканная головоломка, сегодня ты локализаторщик, а завтра ты уже хакер - долбишь упрямую утилиту и зубилом, и пилой режешь, лишь бы она работала так, как тебе нужно...
Кстати, интересный экземпляр этот XLtoEXE. Запакована сама в себя, при запуске разархивируется в папку TEMP и оттуда уже выполняется. Для перевода пришлось ее хакнуть и прикрутить ZLIB библиотеку, так как копия утилиты отказывалась работать, чего только не придумают...
Новичок
  1. Офлайн
  2. Участники
  3. 43 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 14 отправлено 01:07, 17.06.2013
Цитата (Nexus)
В SysTracer так дело не прокатило - выкинули нафиг описание лицензии, сжали и впихнули - заработало!

Ах вот как ларчик открывается! agree
Теперь надо смотреть, что в Streaming Audio Recorder выкинуть, уменьшить, упростить? Это блин не локализация получается, а тюнинг... biggrin
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 15 отправлено 16:43, 19.06.2013
Цитата (MOVIC)
На опенсорсе всегда нужно указывать автора.

Цитата (Leserg)
Недолго думая, я полез на форумы по программированию и раскопал исходный код простейшего архиватора с использованием библиотеки Zlib. Автор программы Andrea Russo, Italy, 2005 год.
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 16 отправлено 00:16, 20.06.2013
MOVIC писал:всегда нужно указывать автора
Автор программы в новости указан и поверьте, не задним числом. К тому же, если вы посмотрите свойства файла, то я честно вписал туда авторские права.
MOVIC писал:И сайт с размещением этих сырков.
Так как у нас сайт не занимается вопросами программирования, то я не счел нужным добавлять ссылку на исходный код программы. Но если нашим читателям это интересно, то исходники утилиты я брал здесь: TorryNet. Когда материал будет полностью завершен, я постараюсь указать все источники информации. Моя вина состоит в том, что я немного переработал интерфейс программы, перевел её на русский и добавил ссылку на этот сайт. Если нашим пользователям нужна оригинальная версия программы, то я могу выложить и её.
Krig писал:А можно подробнее, что вы там переводили и как вы получили архив меньшего размера, чем оригинальный?
Я переводил только то, о чем спрашивал пользователь vaka61 ниже.
Скриншот
Работал в шаблоннике Radialix. При этом, страничку HTML, которая отображается в указанном окошке, я сохранил в отдельный файл и переводил в текстовом редакторе, затем загрузил её обратно в редактор. Касаемо размера файла. В каждом конкретном случае нужно проанализировать ресурсы программы. В частности в первую очередь я обращаю внимание на файлы изображений. Разработчики не уделяют должного внимания их оптимизации. К примеру, в программе Streaming Audio Recorder есть изображение, которое используется в качестве фонового в окне "О программе":
Картинка
Это изображение в формате PNG и размером 75 750 байт. Причем, этих изображений в ресурсах программы почему-то два! Если выполнить оптимизацию этого изображения, например с помощью программы RIOT, то мы получим файл размером 57 849 байт. С учётом замены двух изображений суммарная экономия получается 35 802 байт. Этого более чем достаточно, чтобы после создания локализованного файла и его последующей архивации в Zlib, размер полученного архива получился меньше оригинального, что позволило безболезнено выполнить его замену в оригинальном файле.

Последний раз редактировал WYLEK 18:17, 09.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 17 отправлено 10:17, 20.06.2013
Leserg, скажи, а ты вот упоминал о XLtoEXE, ты ее переводил? Как умудрился перевести, обратно сжать и втиснуть назад переведенный файл? Что-то вот размер никак не получается уменьшить... Просто интересно.
Сталкер
  1. Офлайн
  2. Знаток
  3. 133 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 18 отправлено 19:19, 20.06.2013
В общем, из статьи “Поиск и извлечение Zlib-данных” вреди бы всё понятно. Перехожу к практическим действиям, и тут всё идёт как по маслу, до определённого места. И место это, сжатие до размера. Размер изображения эффекта не дал. Сокращал перевод, лишнее забивал нулевыми байтами. Но результата нет. Очевидно я чего-то не догоняю, как добиваться желаемого размера. Nexus пишет. (Это, конечно, хорошо с Streaming Audio Recorder вышло - вытащил файлы и впихнул в паку, заработало - ну и ладно. Можно еще через отладчик в конце файла добавить пустые секции и впихнуть туда архив, но это далеко не все умеют, да и геморрно все это.) Может об этом статейку забабахали, лишним не будет. Учиться так, учиться.
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 19 отправлено 00:04, 21.06.2013
Nexus писал:Leserg, скажи, а ты вот упоминал о XLtoEXE, ты ее переводил?


Да, я её переводил.

Картинка


Цитата Nexus" data-quote="1">Как умудрился перевести, обратно сжать и втиснуть назад переведенный файл? Что-то вот размер никак не получается уменьшить...
Все очень просто. В данном случае не нужно морочить голову с размером получаемого Zlib-архива. Почему? Потому что Zlib-данные находятся в конце файла и после них идет всего лишь 16 байт, где прописан размер файла, который находится в архиве, т.е. 331776 байт. Поэтому просто вставляем новый архив на место старого, а в конце добавляем эти 16 байт.

Мои действия для перевода этой программы:
1) В оригинальном файле программы по сигнатуре 78DAEC нашел архив и сохранил его в отдельный файл.
2) Распаковал содержимое архива и узнал что это за файл.
3) Программа оказалась написана на Visual Basic 5/6.0. Поэтому дизассемблировал её до исходного кода (чтобы получить исходный код форм).
4) В компиляторе Microsoft Visual Basic 6.5 перевел все формы программы и скомпилировал программу-пустышку. Она запускается и отображает диалоговые формы программы, но ничего функционально не делает. Таким образом я проверяю, как ложится перевод в интерфейсе.
5) После завершения отладки интерфейса, начинается работа в НЕХ-редакторе. Из программы-пустышки переношу НЕХ-код форм в оригинальный файл программы.
6) Затем начинается работа по переводу жестко-закодированных строк. Благо в этой программе оказалось два языка: английский и испанский. Так как испанский язык нигде в программе не активируется, то если переведенные строки русский не помещались на место английских, я их переносил на место испанских и корректировал соответствующим образом смещения.
7) Когда локализация была готова, запаковал файл обратно в Zlib-архив. Новый архив получился больше исходного, но так как он находится в конце файла, то нет нужды предпринимать меры по его уменьшению.
8) Так как программа каким-то образом проверяет размер архивных данных, и если они не соответствуют действительности, то отказывается работать. Поэтому выполнив анализ НЕХ-кода, я обратил внимание на интересную запись:

Картинка


Если сложить этим данные (36864 + 80722 + коррекция), то получится размер Zlib-архива. Корректируем эти данные с учётом нового размера архива, сохраняем и... программа великолепно работает.

Вот и все.

vaka61 писал: до определённого места. И место это, сжатие до размера. Размер изображения эффекта не дал.


Сокращал перевод, лишнее забивал нулевыми байтами. Но результата нет.
Обращай внимание на размер создаваемого локализованного файла. Если он больше размера оригинального файла, то никоим образом не получится получить новый размер архива меньше исходного. Например, я работал с версией 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 и необходимые жестко-закодированные строки.

Последний раз редактировал WYLEK 19:01, 09.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 20 отправлено 01:35, 24.06.2013
ПРОДОЛЖЕНИЕ ТЕМЫ

6. Утилита Offset file unzipper v0.3.5
-----------------------------------------------------
Автор: Luigi Auriemma
Домашняя страница: http://aluigi.altervista.org
Лицензия: Freeware.
Скачать OffZip

Уникальная утилита для извлечения и распаковки ZIP-данных (в том числе и Zlib/gZip/Deflate), которые могут находиться внутри файлов (исполняемых, DLL, архивах, изображениях и прочих). Программа выполняет поиск Zip/Zlib/gZip/Deflate архивов в указанном файле по всем известным сигнатурам с заданного смещения. При нахождении блока с архивными данными, сохраняет их в отдельные файлы с именами смещений, по которым они были найдены, и при необходимости распаковывает архивы. Язык - английский.

Программа является консольной, поэтому с ней необходимо работать в интерпретаторе командной строки (cmd.exe).



Синтаксис команд следующий:

offzip [параметры] <имя_файла> <папка_сохранения> <смещение>


Описание:
------------
  • offzip - имя исполняемого файла утилиты (offzip.exe);
    <имя_файла> - полный путь к файлу, в котором необходимо выполнить поиск Zip/Zlib/gZip/Deflate архивов. Если в строке пути имеются пробелы, то её необходимо заключить в двойные кавычки;
    <папка_сохранения> - полный путь к папке, в которую необходимо сохранить/извлечь/распаковать все найденные архивные данные. Если в строке пути имеются пробелы, то её необходимо заключить в двойные кавычки;
    <смещение> - адрес смещения, с которого следует начать поиск архивных данных в исследуемом файле;
    [параметры] - параметры сканирования, поддерживаются следующие команды:
    ..................-s - поиск всех Zip/Zlib/gZip/Deflate данных.
    .........................После нахождения первого архива сканирование завершается.
    .........................Параметр <папка_сохранения> игнорируется, поэтому можете указать любые данные;
    ..................-S - все тоже самое, что и команда -s, но сканирование продолжается
    .........................(на экран выводится список смещений всех найденных архивов);
    ..................-a - распаковка содержимого всех найденных архивов в указанную папку <папка_сохранения>.
    .........................Имена файлов будут содержать адреса смещений, где были найдены архивы;
    ..................-A - извлечение всех найденных архивов в указанную папку <папка_сохранения>.
    .........................Имена файлов будут содержать адреса смещений, по которым были найдены архивы;
    ..................-1 - этот параметр используется совместно с командами -a/-A и позволяет
    .........................генерировать одно уникальное имя файла вместо нескольких;
    .........-m SIZE - размер блока ZIP-данных, который подтверждает достоверность архивов.
    .........................По умолчанию используется значение 32 (-m 32).
    .........................Используйте большие значения для уменьшает числа ложных срабатываний утилиты и
    .........................меньшие значения для, например 16 (-m 16), для выявления очень маленьких архивов;
    ...........-z NUM - величина выделенной памяти (windowBits) для сжатых данных.
    .........................По умолчанию используется значение 15.
    .........................Значения от -8 до -15 используются для поиска RAW Deflate данных.
    .........................Значения от 8 до 15 используются для поиска Zlib данных;
    ..................-q - отключение каких-либо сообщений об ошибках;
    ..................-r - не удалять поврежденные архивы, полученные при помощи команд -a/-A;
    ..................-x - вывод данных о размерах сжатых/распакованных данных в шестнадцатеричном формате;
    ..........-L FILE - сохранение отчета с результатами сканирования в указанный файл (FILE).


Пример применения утилиты Offset file unzipper v0.3.5. Допустим мы хотим проверить наличие Zlib-архивов в исполняемом файле Streaming Audio Recorder.exe программы Streaming Audio Recorder (я рассматриваю версию 2.8). Запускаем интерпретатор командной строки (от имени Администратора!) и вводим следующие команды:

offzip -S "d:\TEMP_SOFT\SAR_Zlib\Streaming Audio Recorder.exe" d:\TEMP_SOFT\SAR_Zlib 0


Параметр -S только поиск архивов, затем путь к файлу (т.к. в имени файла есть пробелы, то строку заключаем в двойные кавычки), потом папка вывода (в данном случае этот параметр игнорируется, но указывать его нужно обязательно), наконец начальный адрес поиска - 0 (т.е. с самого начала файла). Все. Нажимаем [Enter]. Утилита отработает и покажет результаты своей работы:



Найдено 10 архивов: адреса, размеры сжатых/распакованных данных. Один из архивов не удалось распознать и утилита предлагает изменить параметры, чтобы проверить, действительно ли это архив.

Так, архивы есть. Теперь давайте их извлечём в папку "Zlib". Для этого укажем следующие команды:

offzip -A "d:\TEMP_SOFT\SAR_Zlib\Streaming Audio Recorder.exe" d:\TEMP_SOFT\SAR_Zlib\Zlib 0


После работы утилиты в заданной папке мы получем файлы с найденными архивами:



Валидным архивам утилита дала расширения DLL, а неизвестному - DAT (файл 00120186.dat). На самом деле все полученные файлы с расширением DLL - это Zlib-архивы. Чтобы выполнить их распаковку, например, при помощи программ Simplyzip или Архиватор Zlib, файлам необходимо дать расширение *.zlp. Что из себя представляет архив 00120186.dat я не разбирался. Если вам интересно, то можете провести самостоятельное исследование :) .

Наконец, утилите можно дать команду, чтобы она сразу выполняла распаковку данных из найденных в исследуемом файле архивов, например в папку "Un_Zlib":

offzip -a "d:\TEMP_SOFT\SAR_Zlib\Streaming Audio Recorder.exe" "d:\TEMP_SOFT\SAR_Zlib\Un_Zlib" 0


Вы получим тот же список файлов с такими же именами и расширениями, но это уже будут файлы, которые находились внутри архивов.

РАСПАКОВКА




ФАЙЛЫ




О том, как выяснить настоящие имена полученных файлов написано в разделе "3. Поиск и извлечение Zlib-данных." данного руководства (при помощи программы Exeinfo PE). С этим вопросом вы уже должны справиться сами.

Так, благодаря утилите Offset file unzipper, всю рутинную работу с Zlib-данными можно выполнить за считанные секунды.

Последний раз редактировал WYLEK 18:59, 09.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Новичок
  1. Офлайн
  2. Участники
  3. 43 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 21 отправлено 00:00, 25.06.2013
Да уж, PackZip v0.3 покруче жмет. А с Offset file unzipper v0.3.5, так вообще песня!
Leserg, под твоим натиском пал еще один бастион, имя которому Zlib. Спасибо за информацию.

Админ, сделай отдельный раздел для мануалов Leserg, как для arkady45. Инфа уникальная, такой больше нигде нет!!!
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 22 отправлено 00:54, 25.06.2013
Утилитка очень полезная, особенно когда ищешь архивы по сигнатуре через Winhex, полное задротство. Ввиду безвозмездного использования разработчиками алгоритма ZLIB, эта программулинка в будущем ох как будет выручать...
Легенда
  1. Офлайн
  2. Админ
  3. 1652 сообщений
  4. Репутация: 2
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 23 отправлено 15:52, 25.06.2013
Цитата (Krig)
Админ, сделай отдельный раздел для мануалов Leserg, как для arkady45. Инфа уникальная, такой больше нигде нет!!!


Ага, а остальные просто переписали из других источников инфу biggrin


------------------------------------------
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 24 отправлено 03:18, 26.06.2013
Цитата (Krig)
сделай отдельный раздел для мануалов Leserg

Не нужно мне отдельных разделов. Здесь топик обмена опытом, вот я опытом и делюсь.
Цитата (Krig)
Инфа уникальная, такой больше нигде нет!!!

Это опрометчивое заявление. Еще раз повторю: первоисточник по работе с архивами Zlib был опубликован 30 ноября 2012 года форуме сайта BlackStar Localizations Studio. Автор статьи: Horna. Я эту работу дополнил, т.к. были непонятки и вопросы. Получился обобщающий материал.


------------------------------------------
Кто ищет, тот всегда найдет!
Сталкер
  1. Офлайн
  2. Знаток
  3. 133 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 25 отправлено 22:18, 26.06.2013
Цитата (Leserg)
После описанных выше действий в редакторе Radialix, размер локализованного файла у меня получается 2 163 712 байт.

У меня после оптимизации и замене изображений с помощью MultiExtractor, размер получается больше. А с помощью Radialix можно вытащить и заменить изображения? И как.
В общем, топчусь с тех пор на месте, сдвигов не каких.
Старожил
  1. Офлайн
  2. Администраторы
  3. 622 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 26 отправлено 23:25, 26.06.2013
vaka61, Да ну что ты мучаешься? Я же тебе распаковал нужные файлы, переведи и собери их в установочный инсталлятор. Не нужно их паковать обратно в ZLIB архив, оно все и так работает.
 
Перейти
Найти

Доступ закрыт.

  1. Вам запрещено отвечать в темах данного форума.

Последние темы

  1. Radialix 3
    Автор: pangasiys Сегодня, 13:27
  2. PartitionGuru 4.9.3.409_х86_х64_RUS
    Автор: Lupik2 Вчера, 11:30
  3. Задавайте вопросы по русификации и мы...
    Автор: Xabib2302 23:24, 18.11.2017
  4. Поговорим?
    Автор: kurkoff1965 11:15, 18.11.2017
  5. QTranslate 5.4.1 + Portable
    Автор: gazon01 07:21, 15.11.2017
  6. Promt Professional 9.0 Giant &...
    Автор: WYLEK 15:04, 14.11.2017

Изменения статуса

  1. Никто не менял личный статус.