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

помогите или подскажите как и чем можно дешифровать текстовой файл локализации en.bin двух программ WinX
  1. Оффлайн

    Автор темы

    ruslangxp

    Звание: Ветеран

    Администратор

    Сообщений: 1531

    Создано тем: 152

    Рейтинг: 8

    Репа: (220|220|0)

    Баллы: 14986

    Страна: не указана!

    Был: 2024-12-21 14:12

    Лайков: 211

    помоги разобраться как и чем можно расшифровать файл локализации .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
  2. Оффлайн

    Krig

    Звание: Бывалый

    Знаток

    Сообщений: 188

    Создано тем: 7

    Рейтинг: 4

    Репа: (86|86|0)

    Баллы: 56

    Был: 2023-03-14 15:26

    Лайков: 82

    Цитата: ruslangxp
    помоги разобраться как и чем можно расшифровать файл локализации .dat программы EasePaint Watermark Remover


    ruslangxp, ответ очевиден. Если программа читает этот файл, значит она же его может и расшифровать. Не так ли? biggrin

    Файл 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}
    NNK_RTR, 78Sergey, WYLEK и ещё 1 нравится это сообщение.
    Сообщение отредактировал 23 января 2023 - 18:42
    20 марта 2020 - 00:30 / #12
  3. Оффлайн

    78Sergey

    Звание: Эксперт

    Мастер

    Сообщений: 532

    Создано тем: 52

    Рейтинг: 6

    Репа: (269|269|0)

    Баллы: 2551

    Страна: не указана!

    Был: 2024-11-20 20:43

    Лайков: 264

    Цитата: Krig
    Файл en.dat - это Compound File Binary формат данных (архив Microsoft Office), который можно распаковать архиватором 7z.


    А можно я задам чисто из любопытства вопрос? biggrin
    В файле en.dat не все ресурсы, вероятно остальные в skin_en.skin. Можно ли, каким-то образом, распаковать его?
    На извлечение требует некий пароль.
    ruslangxp нравится это сообщение.
    Сообщение отредактировал 78Sergey 21 марта 2020 - 14:50
    21 марта 2020 - 14:39 / #13
  4. Оффлайн

    Krig

    Звание: Бывалый

    Знаток

    Сообщений: 188

    Создано тем: 7

    Рейтинг: 4

    Репа: (86|86|0)

    Баллы: 56

    Был: 2023-03-14 15:26

    Лайков: 82

    Цитата: 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}
    ruslangxp, 78Sergey, NNK_RTR и ещё 1 нравится это сообщение.
    21 марта 2020 - 18:06 / #14
  5. Оффлайн

    Автор темы

    ruslangxp

    Звание: Ветеран

    Администратор

    Сообщений: 1531

    Создано тем: 152

    Рейтинг: 8

    Репа: (220|220|0)

    Баллы: 14986

    Страна: не указана!

    Был: 2024-12-21 14:12

    Лайков: 211

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



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

    @RuslangXP

    21 марта 2020 - 18:51 / #15
  6. Оффлайн

    78Sergey

    Звание: Эксперт

    Мастер

    Сообщений: 532

    Создано тем: 52

    Рейтинг: 6

    Репа: (269|269|0)

    Баллы: 2551

    Страна: не указана!

    Был: 2024-11-20 20:43

    Лайков: 264

    Цитата: ruslangxp
    то вам я и поручаю его русификацию!!!!!!


    Да ладно ... surprised  Я вам чем-то обязан? biggrin
    А если серьёзно, то я попробую.
    21 марта 2020 - 21:19 / #16
  7. Оффлайн

    78Sergey

    Звание: Эксперт

    Мастер

    Сообщений: 532

    Создано тем: 52

    Рейтинг: 6

    Репа: (269|269|0)

    Баллы: 2551

    Страна: не указана!

    Был: 2024-11-20 20:43

    Лайков: 264

    Цитата: Krig
    Его легко можно увидеть при запуске программы под отладчиком и установкой ВР на обращение к файлам с расширением ".skin".


    Спасибо! А можно подробнее, где поставить ВР (как выйти на этот пароль)?
    21 марта 2020 - 21:24 / #17
  8. Оффлайн

    Krig

    Звание: Бывалый

    Знаток

    Сообщений: 188

    Создано тем: 7

    Рейтинг: 4

    Репа: (86|86|0)

    Баллы: 56

    Был: 2023-03-14 15:26

    Лайков: 82

    Цитата: 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
  9. Оффлайн

    Krig

    Звание: Бывалый

    Знаток

    Сообщений: 188

    Создано тем: 7

    Рейтинг: 4

    Репа: (86|86|0)

    Баллы: 56

    Был: 2023-03-14 15:26

    Лайков: 82

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

    По 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." А вот, что конкретно произошло, автор решил пользователю не сообщать. Да и не нужно это обычному пользователю. Переустанови программу и проблема исчезнет. biggrin

    В будущем, если попадутся программы с использованием этой библиотеки оформления приложений, можно сразу ориентироваться на обращение к функциям SetResourceZip и LoadFromFile. Хотя не исключено, что разработчик может чего-то намудрить.
    {insert-8492}
    78Sergey нравится это сообщение.
    22 марта 2020 - 12:59 / #19
  10. Оффлайн

    Krig

    Звание: Бывалый

    Знаток

    Сообщений: 188

    Создано тем: 7

    Рейтинг: 4

    Репа: (86|86|0)

    Баллы: 56

    Был: 2023-03-14 15:26

    Лайков: 82

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



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

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

    Успехов! chao

    Вложения:

      Вам запрещено скачивать вложения.
    78Sergey, NNK_RTR нравится это сообщение.
    Сообщение отредактировал 23 января 2023 - 18:42
    22 марта 2020 - 22:24 / #20

Статистика форума, пользователей онлайн: 0 (за последние 20 минут)

---
Создано тем
1201
Всего сообщений
15802
Пользователей
18047
Новый участник
hapka33