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

  • Дешифровка файла локализации 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.

Подробно...
// ================================================================ //
// Дешифровка языковых файлов программы EasePaint Watermark Expert
// Автор: Krig (специально для форума https://wylek.ru/)
// Дата создания: 23 марта 2020
// ================================================================ //


// Выбираем и открываем файл (Message или UI)
Open "?"

// Выводим на экран предупреждение.
MessageBox "В файле будут сделаны необратимые изменения. Вы хотите продолжить?"

// Инициализация переменных
Assign BytePos 0
Assign FileSize GetSize
Assign FileSize (FileSize-9) // коррекция размера для счетчика

// --- Основной блок обработки (цикл) ---
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Label ContinueHere
//
  Goto BytePos      // переход в позицию
  Read ByteData 1   // чтение первого байта
  Assign ByteData (ByteData*256)
  Read ByteData1 1  // чтение второго байта
  Assign ByteData (ByteData+ByteData1)
  // Обработка первого файла
  Assign ByteXOR ((ByteData^0x2424)/256)
  // Обработка второго байта
  Assign ByteData1 ((ByteData%0x100)^0x24)
  // Смещение позиции курсора на 2 байта назад
  Move -2
  Write2 ByteXOR    // запись первого байта
  Write2 ByteData1  // запись второго байта
  Assign NullFile (FileSize-BytePos)
  IfGreater 0 NullFile
    JumpTo ContinueHere2 // выход из цикла
  Else
    Assign BytePos (BytePos+0x4)  // следующая позиция
    JumpTo ContinueHere  // переход в начало цикла
  EndIf

// --- Конец цикла ---
Label ContinueHere2

// --- Добавление символов новой строки (формат МАС) ---
Goto 0
ReplaceAll 0x000000 0x000D00
Goto 0
ReplaceAll 0xFF0000 0xFF0D00
Goto 0
ReplaceAll 0x023000 0x2E000D

// --- Освобождение переменных ---
Release BytePos
Release FileSize
Release ByteXOR
Release NullFile
Release ByteData
Release ByteData1

// Выводим сообщение
MessageBox "Дешифровка файла завершена успешно! Теперь сохраните данные в новый файл с расширением TXT или INI."

// Диалог сохранения данных в новый файл (укажите расширение файла TXT или INI)
SaveAs "?"

// Завершение сценария и выход из редактора
Exit
[свернуть]

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

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

Успехов!  :chao:

78Sergey

Ответ #21 : 13 апреля 2020, 23:39:31 #21 Последнее редактирование: 13 апреля 2020, 23:47:24 от 78Sergey
Программа Allavsoft Video Downloader Converter Войдите на сайт для перехода по ссылке.
Если я правильно понимаю, языковые файлы находятся в zlib-архивах(в videodownloader.exe), это :
005c2a3c.xml
005c9ea8.xml
005c756b.xml
005cef8f.xml
005d844b.xml
005d3150.xml
005da5fa.xml
и они(.xml) похоже зашифрованы. Если это так, как их дешифровать?

Krig

Цитата: 78Sergey от 13 апреля 2020, 23:39:31Программа Allavsoft Video Downloader Converter
Да, языковые файлы в злиб архивах. Они не шифрованы. Это обычные языковые файлы формата QM (двоичный XML). Вот берете распакованный файл, к примеру 005c2a3c, и даете ему расширение 005c2a3c.qm. Затем открываете его в Qt Linguist и переводите. Или сохраняете в формат TS (текстовый XML) и переводите в Radialix или блокноте.  :chao:

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

    TinyPortal

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

    Simple Machines

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