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

  • Дешифровка файла локализации 5 0 5 1
avatar_ruslangxp

Дешифровка файла локализации

Автор ruslangxp, 11 января 2019, 13:55:21

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

ruslangxpАвтор темы

Цитата: Krig от 21 марта 2020, 18:06:44Совершенно верно, строки интерфейса находятся в файле обложки.

ну ладно, коль вы 78Sergey сами разобрались в его русификации, то вам я и поручаю его русификацию!!!!!!
@RuslangXP

78Sergey

Цитата: ruslangxp от 21 марта 2020, 18:51:17то вам я и поручаю его русификацию!!!!!!
Да ладно ...  :surprised:  Я вам чем-то обязан?  :biggrin:
А если серьёзно, то я попробую.

78Sergey

Цитата: Krig от 21 марта 2020, 18:06:44Его легко можно увидеть при запуске программы под отладчиком и установкой ВР на обращение к файлам с расширением ".skin".
Спасибо! А можно подробнее, где поставить ВР (как выйти на этот пароль)?

Krig

Цитата: 78Sergey от 21 марта 2020, 21:24:42А можно подробнее, где поставить ВР (как выйти на этот пароль)?
Имя папки, в которой находятся скины - skin. Имя файла скина, который загружает программа при установленном английском языке - skin_en.skin. Я в таких случаях начинаю поиск с жестких строк (при запуске программа должна как-то обратится или к папке или к файлу, или к тому и другому). Открываю программу в отладчике, провожу поиск жестких строк и отфильтровываю вызовы по ключевому слову, начиная вводить "skin". Получается вот такой интересный списочек.

Скрин 7
epwe07.png

Устанавливаю ВР на все эти строки (команда контекстного меню в списке) и запускаю программу под отладчиком. Отладчик тормознет выполнение программы на обращении к строке "skin\skin_en.skin".

Скрин 8
epwe08.png

Просматриваю листинг до конца функции (RET). Замечаю функции PathFileExist - проверка файла, потом PathFindFileN - проверка пути к файлу файла. То есть это стандартные функции проверки и ничего интересного, поэтому продолжаю выполнение программы - F9. Следующая остановка обращение к строке ".skin" - это расширение файла с обложкой. Тут же видны функции менеджера управления обложками из библиотеки DuiLib (файл ycomuiu.dll): SetInstance@CPaintManagerUI@DuiLib - установка программы, для которой нужно применить обложку; SetSkinExt@CPaintManagerUI@DuiLib - установка расширения у файла с обложкой.

Скрин 9
epwe09.png

Иду дальше. Пока это все подготовка к чтению непосредственно файла с обложкой. Жму F9. Отладчик тормозит выполнение на обращении к строке "\skin\" - это каталог, где лежат скины. И далее видна функция из библиотеки DuiLib - SetSkinPath@CPaintManagerUI@DuiLib - установки пути к файлам обложек. А еще чуть ниже по коду вызов функции SetResourceZip@CPaintManagerUI@DuiLib - установка архива с ресурсами. Отладчик как раз выводит комментарий, какой архив с ресурсами будет установлен (см. предыдущую инструкцию выше "skin_en.skin").

Скрин 10
epwe10.png

Устанавливаю ВР на вызов функции SetResourceZip@CPaintManagerUI@DuiLib и по F9 перехожу к ней, а все ранее установленные ВР (в списке жестких строк) удаляю.

(лимит вложений, продолжу в следующем сообщении)

Krig

(продолжение)

По F7 захожу в эту функцию. Теперь я коде библиотеки ycomuiu.dll (DuiLib). Рассуждаю так: библиотека работает с архивами ZIP, если с ним какая-то беда, то должны быть соответствующие сообщения. Исходя из этого задаю поиск жестких строк и ввожу ключ "zip". Ранее я также искал по ключу "pass" как здесь, так и в файле программы.

Скрин 11
epwe11.png

Перехожу в код к первой строке "Could not find...". Просматриваю листинг функции от начала до конца, в котором видно, что все сообщения об ошибке находятся в ней, а сама функция называется LoadFromFile@CMarkup@DuiLib.

Скрин 12
epwe12.png

Подымаюсь в начало функции и ставлю ВР. Затем продолжаю выполнение программы по F9. Стопоримся на нашей ВР в начале функции.

Скрин 13
epwe13.png

В комментариях отладчика видим, что будет читаться файл skin.xml. При это я знаю, что этот файл находится в архиве обложки skin_en.skin. Это я выяснил, когда просматривал каталог установки и файлы приложения после установки. Файловый менеджер Тотал Сommander позволяет просматривать содержимое архивов без их распаковки. Раз файл читается из архива, значит где-то здесь он должен быть сначала распакован. Далее в пошаговом режиме F8 начинаю прохождение функции LoadFromFile@CMarkup@DuiLib и обращаю внимание на имена вызываемых подфункций - они говорят о конкретных операциях. Например, GetResourcePath@CPaintManagerUI@DuiLib - получение пути к ресурсу, GetResourceZip@CPaintManagerUI@DuiLib - получение ресурса архива и т.д. Также по комментариям отладчика смотрим пути и файлы, которые обрабатываются. Так добираемся до первого условного перехода.

Скрин 14
epwe14.png

Смотрю куда он идет. Попутно отмечаю, что все сообщения об ошибках чтения архива zip остаются позади, как и должно быть, если с архивом все в порядке. По месту перехода ниже идет вызов подфункции GetData@CStdString@DuiLib - получение данных.

Скрин 15
epwe15.png

Ставлю на ней ВР и продолжаю выполнение. После выполняю функцию - F8. В регистре EAX вижу полный путь к файлу skin_en.skin:

Скрин 16
epwe16.png

Далее продолжаю выполнение в пошаговом режиме, но уже с заходом в продпрограммы! Как раз следующая инструкция выполняет вызов подпрограммы. Захожу в неё. Она небольшая с вызовом следующей подпрограммы. Захожу и в неё. И вот здесь явно видно используемый пароль (начни выполнение подпрограммы по F8, чтобы комментарии отладчика изменились).

Скрин 17
epwe17.png

Так как исходники библиотеки DuiLib открыты, то я в них заглянул и увидел, что функция SetResourceZip, которую мы видели в исполняемом файле (смотри скрин 10), в качестве параметра принимает также и строку с паролем:

Скрин 18
epwe18.png

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

Скрин 19
epwe19.png

Здесь хорошо видны сообщения об ошибках, которые мы и наблюдали под отладчиком в библиотеке DuiLib файла ycomuiu.dll. Но, допустим, если удалить архив (переименовать, заменить на другой и т.п.), то вы эти сообщения не увидите. Библиотека внешняя, поэтому все сообщения поступающие из внешних библиотек программисты обрабатывают по своему усмотрению, знанию и опыту. Могут вообще не обрабатывать, если программист начинающий, тогда получится исключение (сбой). Или вводят свои сообщения. В данном случае программа просто сообщит "Missing Skins, the software cannot be launched, please reinstall the program." А вот, что конкретно произошло, автор решил пользователю не сообщать. Да и не нужно это обычному пользователю. Переустанови программу и проблема исчезнет.  :biggrin:

В будущем, если попадутся программы с использованием этой библиотеки оформления приложений, можно сразу ориентироваться на обращение к функциям SetResourceZip и LoadFromFile. Хотя не исключено, что разработчик может чего-то намудрить.

Krig

Набросал небольшой пример скрипт для дешифровки файлов Message и UI. Скрипт реализован на базе скриптового движка шестнадцатеричного редактора WinHEX.

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


Архив с файлом скрипта: Decode.zip

В архиве находится файл Decode.whs. Распакуйте его и скопируйте в папку WinHEX (или в папку скриптов, согласно настроек редактора). Запустите WinHEX, откройте стартовое окно (через меню "Инструменты" или клавишей Enter), в разделе скриптов выберите Decode и нажмите ОК. Начнется выполнение скрипта: выберите файл Message или UI, дождитесь завершения работы скрипта, затем сохраните обработанные данные в новый файл с расширением TXT или INI. Вы можете легко изменить логику скрипта, добавить или удалить команды, а также усовершенствовать (например, добавить шифрование, сделать возможным обработку другого файла и т.д. и т.п.). Описание команд скрипта вы найдете в справке WinHEX. Создавать и редактировать скрипты WinHEX можно обычным текстовым редактором (кодировка ANSI).

Успехов!  :chao:

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

    TinyPortal

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

    Simple Machines

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