Дешифровка файла локализации
-
Оффлайн
Автор темы
Звание: Мастер
Администратор
Сообщений: 1766
Создано тем: 163
Рейтинг: 9
Репа:
(220|220|0)
Баллы: 22956
Страна: не указана!
Был: 2025-11-04 08:40
Лайков: 222
помоги разобраться как и чем можно расшифровать файл локализации .dat программы EasePaint Watermark Remover
https://www.easepaint.com/download/EasePaintSetupG.exe
lang dat
https://www16.zippyshare.com/v/bmXb3nZd/file.html@RuslangXP
18 марта 2020 - 12:28 / #11 -
Цитата: ruslangxpпомоги разобраться как и чем можно расшифровать файл локализации .dat программы EasePaint Watermark Remover
ruslangxp, ответ очевиден. Если программа читает этот файл, значит она же его может и расшифровать. Не так ли?
Файл en.dat - это Compound File Binary формат данных (архив Microsoft Office), который можно распаковать архиватором 7z. Распакуй его и получишь два бинарных файла без расширения:Message и UI. Содержимое файлов зашифровано обычным алгоритмом XOR с константой 2424 (нех), причем шифрованию подвергнуты нечетные символы массива строк (1, 3, 5, 7... и т.д.).
Скрин 1
Строки в кодировке UTF-16, поэтому для операции исключающего "ИЛИ" берутся 2 байта.
Получить дешифрованные данные (как и зашифровать обратно) можно в самой программе, запустив её под отладчиком и поставив ВР на конец цикла обработки.
Скрин 2
Также это можно сделать при помощи шестнадцатеричного редактора (операция и константа известны).
На скрине 2 ВР установлена на операцию дешифровки с командой XOR. После выхода из цикла в памяти будет дешифрованный массив нуль-терминированных строк (сначала один файл, потом другой). Копируешь данные в шестнадцатеричный редактор, на месте нуль-терминаторов вставляешь символ новой строки в формате Unix или MAC и сохраняешь в текстовый документ (txt или ini).
Скрин 3
Переводишь. Потом выполняешь описанную последовательность действий в обратном порядке:заменяешь символы новой строки нуль-терминатором, шифруешь исключающим "ИЛИ" с константой 2424 (нех) и добавляешь с архив с заменой при помощи утилиты Structured Storage Viewer.
Можно файл обратно не шифровать, тогда в программе нужно сделать обход блока дешифровки. По адресу 0137DE72 (смотри скрин 2) изменить условный переход JBE на JMP (76 > EB). Но потом обязательно проверь работоспособность, вдруг блок дешифровки используется где-то ещё.{insert-8474}20 марта 2020 - 00:30 / #12 -
Оффлайн
Звание: Эксперт
Мастер
Сообщений: 559
Создано тем: 53
Рейтинг: 6
Репа:
(269|269|0)
Баллы: 3221
Страна: не указана!
Был: 2025-10-25 15:08
Лайков: 273
Цитата: KrigФайл en.dat - это Compound File Binary формат данных (архив Microsoft Office), который можно распаковать архиватором 7z.
А можно я задам чисто из любопытства вопрос?
В файле en.dat не все ресурсы, вероятно остальные в skin_en.skin. Можно ли, каким-то образом, распаковать его?
На извлечение требует некий пароль.ruslangxp нравится это сообщение.Сообщение отредактировал 78Sergey 21 марта 2020 - 14:5021 марта 2020 - 14:39 / #13 -
Цитата: 78SergeyВ файле en.dat не все ресурсы, вероятно остальные в skin_en.skin. Можно ли, каким-то образом, распаковать его?
Совершенно верно, строки интерфейса находятся в файле обложки. Файлы в папке "skin" - это запароленные архивы ZIP. Пароль прописан в библиотеке ycomuiu.dll и вызывается при обращении к файлам *.skin. Его легко можно увидеть при запуске программы под отладчиком и установкой ВР на обращение к файлам с расширением ".skin".
Скин 4
Файлы в архиве имеют формат XML, которым описывается интерфейс программы и его элементы. Строковые элементы указаны атрибутом "text=", кодировка - UTF-8. Там же можно подкорректировать позицию и размеры элементов управления под размеры переведенных строк.
Скин 5
Есть графический редактор для создания и модификации данного формата скинов - DuiDesigner (смотрите в папке bin). Проект давно не развивается и редактор глючит, но посмотреть скин и сориентироваться что-к-чему, вполне можно. А вот сама библиотека скинизации Duilib очень популярна и широко используется китайскими девелоперами.
Скин 6
А если имеете богатое воображение и фантазию, то можете забабахать свой скин. Графическая часть скинов находится в архиве default.skin.
После редактирования файлов пакуете все в архив ZIP, используя тот же пароль.{insert-8485}21 марта 2020 - 18:06 / #14 -
Оффлайн
Автор темы
Звание: Мастер
Администратор
Сообщений: 1766
Создано тем: 163
Рейтинг: 9
Репа:
(220|220|0)
Баллы: 22956
Страна: не указана!
Был: 2025-11-04 08:40
Лайков: 222
Цитата: KrigСовершенно верно, строки интерфейса находятся в файле обложки.
ну ладно, коль вы 78Sergey сами разобрались в его русификации, то вам я и поручаю его русификацию!!!!!!@RuslangXP
21 марта 2020 - 18:51 / #15 -
Оффлайн
Звание: Эксперт
Мастер
Сообщений: 559
Создано тем: 53
Рейтинг: 6
Репа:
(269|269|0)
Баллы: 3221
Страна: не указана!
Был: 2025-10-25 15:08
Лайков: 273
Цитата: ruslangxpто вам я и поручаю его русификацию!!!!!!
Да ладно ...
Я вам чем-то обязан? 
А если серьёзно, то я попробую.21 марта 2020 - 21:19 / #16 -
Оффлайн
Звание: Эксперт
Мастер
Сообщений: 559
Создано тем: 53
Рейтинг: 6
Репа:
(269|269|0)
Баллы: 3221
Страна: не указана!
Был: 2025-10-25 15:08
Лайков: 273
Цитата: KrigЕго легко можно увидеть при запуске программы под отладчиком и установкой ВР на обращение к файлам с расширением ".skin".
Спасибо! А можно подробнее, где поставить ВР (как выйти на этот пароль)?21 марта 2020 - 21:24 / #17 -
Цитата: 78SergeyА можно подробнее, где поставить ВР (как выйти на этот пароль)?
Имя папки, в которой находятся скины - skin. Имя файла скина, который загружает программа при установленном английском языке - skin_en.skin. Я в таких случаях начинаю поиск с жестких строк (при запуске программа должна как-то обратится или к папке или к файлу, или к тому и другому). Открываю программу в отладчике, провожу поиск жестких строк и отфильтровываю вызовы по ключевому слову, начиная вводить "skin". Получается вот такой интересный списочек.
Скрин 7
Устанавливаю ВР на все эти строки (команда контекстного меню в списке) и запускаю программу под отладчиком. Отладчик тормознет выполнение программы на обращении к строке "skinskin_en.skin".
Скрин 8
Просматриваю листинг до конца функции (RET). Замечаю функции PathFileExist - проверка файла, потом PathFindFileN - проверка пути к файлу файла. То есть это стандартные функции проверки и ничего интересного, поэтому продолжаю выполнение программы - F9. Следующая остановка обращение к строке ".skin" - это расширение файла с обложкой. Тут же видны функции менеджера управления обложками из библиотеки DuiLib (файл ycomuiu.dll): SetInstance@CPaintManagerUI@DuiLib - установка программы, для которой нужно применить обложку; SetSkinExt@CPaintManagerUI@DuiLib - установка расширения у файла с обложкой.
Скрин 9
Иду дальше. Пока это все подготовка к чтению непосредственно файла с обложкой. Жму F9. Отладчик тормозит выполнение на обращении к строке "skin" - это каталог, где лежат скины. И далее видна функция из библиотеки DuiLib - SetSkinPath@CPaintManagerUI@DuiLib - установки пути к файлам обложек. А еще чуть ниже по коду вызов функции SetResourceZip@CPaintManagerUI@DuiLib - установка архива с ресурсами. Отладчик как раз выводит комментарий, какой архив с ресурсами будет установлен (см. предыдущую инструкцию выше "skin_en.skin").
Скрин 10
Устанавливаю ВР на вызов функции SetResourceZip@CPaintManagerUI@DuiLib и по F9 перехожу к ней, а все ранее установленные ВР (в списке жестких строк) удаляю.
(лимит вложений, продолжу в следующем сообщении){insert-8491}78Sergey нравится это сообщение.22 марта 2020 - 12:47 / #18 -
(продолжение)
По F7 захожу в эту функцию. Теперь я коде библиотеки ycomuiu.dll (DuiLib). Рассуждаю так: библиотека работает с архивами ZIP, если с ним какая-то беда, то должны быть соответствующие сообщения. Исходя из этого задаю поиск жестких строк и ввожу ключ "zip". Ранее я также искал по ключу "pass" как здесь, так и в файле программы.
Скрин 11
Перехожу в код к первой строке "Could not find...". Просматриваю листинг функции от начала до конца, в котором видно, что все сообщения об ошибке находятся в ней, а сама функция называется LoadFromFile@CMarkup@DuiLib.
Скрин 12
Подымаюсь в начало функции и ставлю ВР. Затем продолжаю выполнение программы по F9. Стопоримся на нашей ВР в начале функции.
Скрин 13
В комментариях отладчика видим, что будет читаться файл skin.xml. При это я знаю, что этот файл находится в архиве обложки skin_en.skin. Это я выяснил, когда просматривал каталог установки и файлы приложения после установки. Файловый менеджер Тотал Сommander позволяет просматривать содержимое архивов без их распаковки. Раз файл читается из архива, значит где-то здесь он должен быть сначала распакован. Далее в пошаговом режиме F8 начинаю прохождение функции LoadFromFile@CMarkup@DuiLib и обращаю внимание на имена вызываемых подфункций - они говорят о конкретных операциях. Например, GetResourcePath@CPaintManagerUI@DuiLib - получение пути к ресурсу, GetResourceZip@CPaintManagerUI@DuiLib - получение ресурса архива и т.д. Также по комментариям отладчика смотрим пути и файлы, которые обрабатываются. Так добираемся до первого условного перехода.
Скрин 14
Смотрю куда он идет. Попутно отмечаю, что все сообщения об ошибках чтения архива zip остаются позади, как и должно быть, если с архивом все в порядке. По месту перехода ниже идет вызов подфункции GetData@CStdString@DuiLib - получение данных.
Скрин 15
Ставлю на ней ВР и продолжаю выполнение. После выполняю функцию - F8. В регистре EAX вижу полный путь к файлу skin_en.skin:
Скрин 16
Далее продолжаю выполнение в пошаговом режиме, но уже с заходом в продпрограммы! Как раз следующая инструкция выполняет вызов подпрограммы. Захожу в неё. Она небольшая с вызовом следующей подпрограммы. Захожу и в неё. И вот здесь явно видно используемый пароль (начни выполнение подпрограммы по F8, чтобы комментарии отладчика изменились).
Скрин 17
Так как исходники библиотеки DuiLib открыты, то я в них заглянул и увидел, что функция SetResourceZip, которую мы видели в исполняемом файле (смотри скрин 10), в качестве параметра принимает также и строку с паролем:
Скрин 18
Но разработчик приложения использовал один общий пароль и вшил его в саму библиотеку, поэтому в параметрах этой функции строки с паролем мы не наблюдали. Из листинга видно, что архив открывается непосредственно процедурой OpenZip, которой передается пароль. Произведя её поиск по исходному коду библиотеки я выяснил, что она также используется в функции LoadFromFile - которая отвечает за загрузку ресурса из внешнего файла. Вот часть кода этой функции:
Скрин 19
Здесь хорошо видны сообщения об ошибках, которые мы и наблюдали под отладчиком в библиотеке DuiLib файла ycomuiu.dll. Но, допустим, если удалить архив (переименовать, заменить на другой и т.п.), то вы эти сообщения не увидите. Библиотека внешняя, поэтому все сообщения поступающие из внешних библиотек программисты обрабатывают по своему усмотрению, знанию и опыту. Могут вообще не обрабатывать, если программист начинающий, тогда получится исключение (сбой). Или вводят свои сообщения. В данном случае программа просто сообщит "Missing Skins, the software cannot be launched, please reinstall the program." А вот, что конкретно произошло, автор решил пользователю не сообщать. Да и не нужно это обычному пользователю. Переустанови программу и проблема исчезнет.
В будущем, если попадутся программы с использованием этой библиотеки оформления приложений, можно сразу ориентироваться на обращение к функциям SetResourceZip и LoadFromFile. Хотя не исключено, что разработчик может чего-то намудрить.{insert-8492}78Sergey нравится это сообщение.22 марта 2020 - 12:59 / #19 -
Набросал небольшой пример скрипт для дешифровки файлов Message и UI. Скрипт реализован на базе скриптового движка шестнадцатеричного редактора WinHEX.
Архив с файлом скрипта:
В архиве находится файл Decode.whs. Распакуйте его и скопируйте в папку WinHEX (или в папку скриптов, согласно настроек редактора). Запустите WinHEX, откройте стартовое окно (через меню "Инструменты" или клавишей Enter), в разделе скриптов выберите Decode и нажмите ОК. Начнется выполнение скрипта: выберите файл Message или UI, дождитесь завершения работы скрипта, затем сохраните обработанные данные в новый файл с расширением TXT или INI. Вы можете легко изменить логику скрипта, добавить или удалить команды, а также усовершенствовать (например, добавить шифрование, сделать возможным обработку другого файла и т.д. и т.п.). Описание команд скрипта вы найдете в справке WinHEX. Создавать и редактировать скрипты WinHEX можно обычным текстовым редактором (кодировка ANSI).
Успехов!
22 марта 2020 - 22:24 / #20
