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

Acoustica Premium Edition

Автор Nexus, 03 октября 2013, 21:19:00

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

NexusАвтор темы

Тема создана 03 октября 2013, 21:19:00
Acoustica Premium Edition

 Многофункциональный аудиоредактор с поддержкой многоканальных форматов объемного звука 5.1 и 7.1. Средства программы обеспечат точное управление деталями производства аудио CD (длина пауз, индексные маркеры, поля CD-TEXT). В Acoustica Premium встроен широкий диапазон инструментов профессионального качества для мастеринга и звукового дизайна, а также имеется функция прожига CD и создания обложек и наклеек.

Teodorrrro

Ответ #1 : 04 октября 2013, 07:19:00 #1 Последнее редактирование: 31 июля 2018, 12:49:16 от WYLEK
Доброе время суток!
В исполняемом файле в секции RT_DLGINIT есть ресурсы, которые не распознаются ни в одном редакторе. В них остались строки, которые нужно перевести.

В Radialix выгружаю ресурс:
Извините, вам запрещён просмотр содержимого спойлеров.


Перевожу одно слово в Notepad++ (все буквы чередуются с символами конца строки?
Извините, вам запрещён просмотр содержимого спойлеров.


Загружаю обратно в Radialix:
Извините, вам запрещён просмотр содержимого спойлеров.


Запускаю - все работает, но кракозябры победить не удается. Подмена кодовой страницы не срабатывает, метод Nexus"a не помог, может, я сам где-то не совсем разобрался...
Извините, вам запрещён просмотр содержимого спойлеров.


Заранее благодарен!

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

Leserg

Ответ #2 : 04 октября 2013, 08:19:00 #2
Цитата: teodorrrroЗапускаю - все работает, но кракозябры победить не удается.

teodorrrro, кодировка строк Unicode!!! , а не чередование символами конца строки.
После перевода, возможно, придется в НЕХ-редакторе корректировать указатели на длину строк.
Кто ищет, тот всегда найдет!

Teodorrrro

Ответ #3 : 04 октября 2013, 08:39:00 #3 Последнее редактирование: 31 июля 2018, 12:51:03 от WYLEK
Leserg, Спасибо!
Извините, вам запрещён просмотр содержимого спойлеров.


И снова проблема.
Файл Declick.dll содержит жестко-закодированные строки, те, что в WIDEZ, переводятся на ура, а в ASCIIZ задание кодировки не лечит кракозябры...
В реестре замены cp1250,52,53 -> cp1251 и в Font Suntitles не приводят ни к какому результату.  
Извините, вам запрещён просмотр содержимого спойлеров.



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

Заранее благодарю!

Leserg

Ответ #4 : 04 октября 2013, 08:49:00 #4
Цитата: teodorrrroИ снова проблема. Файл Declick.dll...
У меня не получается справиться с твоей проблемой. Нужна помощь нашего товарища Nexus.

 Nexus, если получится, то хотя бы тезисно напиши, как удалось это сделать. Я в отладчике файл Declick.dll открыл, задал поиск по кодировкам, нашел только UTF-8 (FDE8) (там еще рядом функции проверки кодовой страницы (KERNEL32.IsValidCodePage) и локали (KERNEL32.IsValidLocale) ). Мне не ясно, в том ли я направлении двигаюсь или вообще в противоположном.
Кто ищет, тот всегда найдет!

NexusАвтор темы

Ответ #5 : 04 октября 2013, 09:49:00 #5 Последнее редактирование: 31 июля 2018, 12:52:02 от WYLEK
Мммм... Довольно трудная проблема. Изменения в реестре Винды и подмена шрифта абсолютно здесь не помогут. Тут физическое (в самом коде) превращение ANSI кодировки в Юникод. Простыми словами, программа в строку, к примеру, "Щелчков в секунду" вставляет нули и получается вот такое:

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


Leserg, если интересно, то эти "перерабатывающие" места находятся по адресу 0460B490 и 04607F40. Ставь на них останов и понаблюдай за происходящим...
Возможно я и смогу что-то сделать, но на это нужно время. Если время терпит, то что-то изобрету

Teodorrrro

Ответ #6 : 04 октября 2013, 10:49:00 #6
Nexus, спасибо за такое глубокое погружение в проблему, но стоит ли овчинка выделки?

Время терпит, пусть пока полежит на полке.

Leserg

Ответ #7 : 04 октября 2013, 11:49:00 #7
Цитата: Nexusесли интересно, то эти "перерабатывающие" места находятся по адресу 0460B490 и 04607F40

Мне очень интересно, но у меня нет таких адресов  
Я открыл файл Declick.dll в отладчике и код сразу начинается с адреса 10001000. Или я не так открываю?
Кто ищет, тот всегда найдет!

NexusАвтор темы

Ответ #8 : 04 октября 2013, 12:49:00 #8 Последнее редактирование: 31 июля 2018, 12:52:48 от WYLEK
Leserg, наверное программа осуществляет динамическое смещение кода, хотя что-то на это не похоже...
Вот скрины этих функций:


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


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


Цитата: LesergИли я не так открываю?

Да как-то непонятно у тебя открыто... А какая у тебя последовательность открытия файла? Я, например, запускаю всю программу вместе с плагином, а потом отладчиком прикрепляюсь к процессу AcousticaPE.exe через File -> Attach.... Потом уже выбираю модуль DeClick.dll через View -> Executable modules. Да, на Win 7 отладчик может некорректно работать, по крайней мере у меня...

teodorrrro, найдена причина неправильного отображения русских букв, точнее, место где они портятся. Это баг то ли программиста, то ли компилятора программы. Решение есть, но пока напряг со временем. Когда исправлю все, тода здесь и отпишусь...

Leserg

Ответ #9 : 04 октября 2013, 13:11:00 #9
Цитата: Nexusнайдена причина неправильного отображения русских букв, точнее, место где они портятся.

Нет слов... одни восклицания...

Цитата: NexusЭто баг то ли программиста, то ли компилятора программы.

Я думаю, что это баг программиста. Или неправильно применяет преобразование строк. Или устанавливает диапазон символов 0 - 128, что облегчает алгоритм преобразования кодировок, но рубит на корню поддержку национальных символов (диапазон 128 -256).
Кто ищет, тот всегда найдет!

Teodorrrro

Ответ #10 : 04 октября 2013, 13:41:00 #10 Последнее редактирование: 31 июля 2018, 12:53:23 от WYLEK
Nexus, потрясающе! Кстати, той же операции скорее всего ждут и остальные...


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

NexusАвтор темы

Ответ #11 : 04 октября 2013, 14:41:00 #11
teodorrrro, дошла очередь и до твоего перевода Целый файл выставлять не буду, так как там нужно поменять всего лишь один байт(!).
 Открой в WinHex DeClick.dll, по смещению 275CD поменяй 72 на EB. Все.
 Теперь все нужные тебе строки, которые находятся в формате ANSI, переводи в формате UTF-8. Но это касается только строк в ANSI! Строки в Unicode переводи тоже в Юникоде.
 Переведешь и обкатаешь файл - если глюков и багов обнаружено не будет, то дам такие же HEX значения и для других "проблемных" файлов.

78Sergey

Ответ #12 : 05 октября 2013, 08:41:00 #12
Цитата: NexusОткрой в WinHex DeClick.dll, по смещению 275CD поменяй 72 на EB.

Браво!!!

Немного прокомментирую твое решение. Насколько я понял, данная подпрограмма выполняет преобразование кодировки ANSI в UTF-8 по упрощенному алгоритму. Обрати внимание на предыдущую команду - cmp eax, 80. Шестнадцатеричное число 80h десятичном формате - это 128, т.е. в данном случае основная половина таблицы символов. Символы кириллицы находятся во второй, расширенной половине таблицы.

Итак, команда cmp eax, 80 сравнивает код символа с числом 80. Если код меньше 80 (основная таблица символов), то флаг CF будет установлен в1 и далее будет выполнена команда условного перехода JB на указанный адрес. Если код больше 80 (расширенная таблица символов), то флаг CF устанавливается в 0, а команда условного перехода игнорируется. Таким образом с символами второй половины таблицы выполняются какие-то дополнительные преобразования.

Ты предлагаешь заменить команду условного перехода JB (72h) на безусловный JMP (EBh). Т.е. однозначно и всегда, при обработке строк, определенный участок кода будет пропускаться. Возможно он и не так важен, но мы не знаем, как это отразится на работе самой программы. Я думаю, что более корректным решением будет исправление максимального значения символьных кодов, 128 на 256 (80h на 100h). Т.е. будет обрабатываться вся таблица ASCII. Так, по идее, побочных ошибок быть не должно.

Что нужно сделать? В НЕХ-редакторе по адресу 000275CD байт 72 оставляем без изменений, а корректируем значение 80.
Число 256 в шестнадцатеричном формате будет 100. Запишем его по байтам - 01 00. Изменим порядок байт на обратный - 00 01. Вот так его и записываем с адреса 000275C9. В моем варианте нужно изменить два байта teodorrrro, если есть есть желание, попробуй сделать так.

Nexus, если не трудно, то хотя бы тезисно расскажи алгоритм работы с отладчиком по нахождению таких мест в исследуемом файле. Это не срочно, как будет время и желание!

Teodorrrro

Ответ #13 : 05 октября 2013, 09:48:00 #13 Последнее редактирование: 31 июля 2018, 12:58:48 от WYLEK
Класс!
С горем пополам нашел и изменил значение 80, главное - не забывать про UTF-8. Спасибо всем!

Отчет:


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

Leserg

Ответ #14 : 05 октября 2013, 12:48:00 #14
Цитата: teodorrrroС горем пополам нашел и изменил значение 80, главное - не забывать про UTF-8.

 Ты бы мог быстро найти это место, задав в НЕХ-редакторе поиск следующей последовательности байт: 53573D800000007265BF01000000 . Она в файлах является уникальной. Если планируешь переводить следующие версии программы, то выполни поиск этой последовательности байт в новой версии программы. Если она повторяется и изменение байт положительно влияет на корректное отображение кириллицы, то можешь сделать патч, например с помощью утилиты diablo2oo2"s Universal Patcher [dUP]. Так ты себе немного облегчишь работу.

 Еще рекомендация. Для каждой программы, которую ты переводишь, делай себе пометки проблемных мест и способы их решения. Я, например, записываю в текстовый документ, как нашел, где находится, характерные признаки локации (какие функции или текстовые строки рядом), делаю скриншоты областей НЕХ-кода и участков дизассемблированного листинга в отладчике, какие инструменты применял. Поверь, пройдет пару недель и ты все это забудешь. Придется начинать все заново.

 Спасибо Nexus! Еще один мамонт повержен.
Кто ищет, тот всегда найдет!

 аталог@MAIL.RU - каталог ресурсов интернет Яндекс.Метрика