• Добро пожаловать на WYLEK.ru. Пожалуйста, войдите или зарегистрируйтесь.
 
99 гостей, 2 пользователей

avatar_Leserg

Архивы ZLIB

Автор Leserg, 09 июня 2013, 09:39:00

« предыдущая - следующая »

LesergАвтор темы

Тема создана 09 июня 2013, 09:39:00

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

Извините, вам запрещён просмотр содержимого спойлеров.
Кто ищет, тот всегда найдет!

Nexus

Ответ #1 : 09 июня 2013, 10:39:00 #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 могла с ним нормально работать.

LesergАвтор темы

Ответ #2 : 09 июня 2013, 11:39:00 #2
Цитата: 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 и необходимые жестко-закодированные строки.
Кто ищет, тот всегда найдет!

LesergАвтор темы

Ответ #3 : 09 июня 2013, 12:39:00 #3 Последнее редактирование: 13 апреля 2018, 22:32:59 от WYLEK
ПРОДОЛЖЕНИЕ ТЕМЫ

6. Утилита Offset file unzipper v0.3.5
-----------------------------------------------------
Автор: Luigi Auriemma
Домашняя страница: Войдите на сайт для перехода по ссылке
Лицензия: Freeware.
Войдите на сайт для перехода по ссылке

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

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


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

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

Описание:
------------
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_SOFTSAR_ZlibStreaming Audio Recorder.exe" d:TEMP_SOFTSAR_Zlib 0

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


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

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

offzip -A "d:TEMP_SOFTSAR_ZlibStreaming Audio Recorder.exe" d:TEMP_SOFTSAR_Zliblib 0

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


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

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

offzip -a "d:TEMP_SOFTSAR_ZlibStreaming Audio Recorder.exe" "d:TEMP_SOFTSAR_ZlibUn_Zlib" 0

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

РАСПАКОВКА


ФАЙЛЫ


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

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

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

    TinyPortal

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

    Simple Machines

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

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