MSI Lab - Форум по русификации

Основные форумы => RusMe - РусМи! => Тема начата: Kirill Borisenko от 28 Октября 2023, 12:08:50

Название: PCem - проверка CRC32?
Отправлено: Kirill Borisenko от 28 Октября 2023, 12:08:50
Добрый день, коллеги.

Есть такая программка PCem, которая эмулирует почти любое компьютерное железо.
https://pcem-emulator.co.uk/index.html (https://pcem-emulator.co.uk/index.html)

Является по сути мастером по настройке плагинов, так что строк там немного.

Но для последней версии нет русифиактора (для предыдущих - есть).
И появляется предположение, - почему.

При изменении строк в любом редакторе, даже без изменения длин, программа просто отказывается запускаться.
Вероятно, в новых версиях встроена проверка контрольной суммы исполняемого файла.

Кто бы мог проверить это предположение?
Название: Re: PCem - проверка CRC32?
Отправлено: leserg73 от 13 Ноября 2023, 01:09:20
Приветствую!

Программа не имеет каких-либо проверок исполняемого файла.

Создал проект перевода в Radialix, перевел несколько строк, создал локализованный файл - все работает и запускается.

Скрин 1
(https://i.postimg.cc/vBQ9BQ9B/PCem-001.png)

Скрин 2
(https://i.postimg.cc/50nzQZqm/PCem-002.png)

Единственное, нужно быть аккуратным со встроенным ресурсом XRC (https://docs.wxwidgets.org/3.0/overview_xrcformat.html) (XML-формат).
Во-первых, переведенные строки должны быть в кодировке UTF-8. Во-вторых, его исходный размер и местоположение в файле должно остаться неизменным.
Т.е. напрямую в Radialix'е переводить его нельзя, т.к. он будет перенесен в конец файла. Поэтому с помощью Radialix его можно извлечь и необходимые строки перевести в текстовом редакторе, например Notepad++.

(https://i.postimg.cc/HL2xxbTG/PCem-003.png)

Исходный размер этого ресурса можно подогнать удалением пробелов форматирования (благо их там достаточно).
Затем при помощи НЕХ-редактора записать в файле поверх исходного ресурса.

Это можно сделать как ДО создания проекта перевода, так и ПОСЛЕ создания локализованного файла.
Название: Re: PCem - проверка CRC32?
Отправлено: leserg73 от 13 Ноября 2023, 12:41:49
Продолжение...

Если умеете работать в отладчике, то тогда нет необходимости подгонять размер локализованного XRC-ресурса под размер исходного и не нужно использовать НЕХ-редактор.

Примерная последовательность необходимых действий будет следующей:

1) Извлекаем XRC-ресурс в проекте Radialix (контекстное меню "Сервис - Сохранить").
(https://i.postimg.cc/T1P6x6WH/PCem-004.png)

2) С помощью текстового редактора (например, Notepad++) переводим строки в тегах "title", "label" и "tooltip".
   Можно также для этого ресурса создать проект перевода в Radialix и переводить в нём. В общем этот шаг на ваше усмотрение.

3) Полученный локализованный файл ресурса в проекте перевода файла вставляем на место русского перевода (контекстное меню "Сервис - Загрузить").
   Только убедитесь, что файл ресурса не содержит метки BOM. Также в колонке "Исходная кодировка" для этого ресурса укажите кодировку UTF-8.

4) Создаем локализованный файл программы (не пытайтесь его запустить - он не будет работать).

5) Открываем полученный файл в отладчике (например, x64Dbg (https://x64dbg.com/)) и переходим на адрес ссылки XRC-ресурса, который можно узнать из Radialix (смотрите в колонке "Ссылки" соответственно для XRC-ресурса).

6) В коде программы выше команды обращения к XRC-ресурсу идет команда записи с размером этого ресурса. Это значение необходимо изменить на новое, которое соответствует размеру локализованного XRC-ресурса.
(https://i.postimg.cc/yxrzYbm6/PCem-005.png)

7) Сохраняем сделанные изменения в новый файл и проверяем его работу. Если все сделано без ошибок, программа запустится.
Название: Re: PCem - проверка CRC32?
Отправлено: Kirill Borisenko от 14 Ноября 2023, 21:37:54


5) Открываем полученный файл в отладчике (например, x64Dbg (https://x64dbg.com/)) и переходим на адрес ссылки XRC-ресурса, который можно узнать из Radialix (смотрите в колонке "Ссылки" соответственно для XRC-ресурса).

На картинке в примере адреса ссылок немного разные. Ссылка должна быть +/- как в Radialix или точной?

6) В коде программы выше команды обращения к XRC-ресурсу идет команда записи с размером этого ресурса. Это значение необходимо изменить на новое, которое соответствует размеру локализованного XRC-ресурса.

Размер должен указываться в количестве байт текстового файла, указанном в шестнадцатеричном формате, или вычисляться исходя из количества символов, видимого в Radialix?
Название: Re: PCem - проверка CRC32?
Отправлено: leserg73 от 15 Ноября 2023, 00:44:04
На картинке в примере адреса ссылок немного разные. Ссылка должна быть +/- как в Radialix или точной?
Здесь все точно, без каких-либо допусков.
Radialix показывает адреса ссылок, а отладчик показывает адреса инструкций.
Инструкция со ссылкой находится по адресу 00460F66.
Размер инструкции mov dword ptr ss:[esp+4] составляет 4 байта (байты C7 44 24 04).
Остальные 4 байта (вторая часть инструкции) - ссылка на ресурс.
Тогда адрес этой ссылки будет 00460F66 + 4 = 00460F6A, что и показывает Radialix.

(https://i.postimg.cc/0QMQ4mfQ/PCem-006.png)

Размер должен указываться в количестве байт текстового файла, указанном в шестнадцатеричном формате, или вычисляться исходя из количества символов, видимого в Radialix?
Radialix отображает длину строк в символах. И если для кодировок ANSI длина строк в символах и в байтах будет одинаковой, то в кодировке UTF-8 для кириллицы длина строки в символах и в байтах будет различной, так как на один символ кириллицы приходится уже 2 байта. В отладчике необходимо указать физический размер ресурса, т.е. не в символах, а в байтах. Поэтому в данном случае из Radilaix можно воспользоваться только оригинальной длиной ресурса (значение 142917) для ориентировки в отладчике. В шестнадцатеричном формате это будет значение 22E45, что и видно в отладчике (см. скриншот выше). А вот после перевода ресурса берём уже значение размера файла, который это ресурс занимает. Он в любом случае будет больше исходного. Также обратите внимание, что XRC-ресурс имеет Unix-формат конца строк (хотя, возможно, это не принципиально).