Войти
  1. ВКонтакте
  2. Facebook
  1. »
  2. »
  3. »
  4. Acoustica Premium Edition
Скрыть панель справаПоказать панель справа

Acoustica Premium Edition

Старожил
  1. Офлайн
  2. Администраторы
  3. 620 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 1 отправлено 22:19, 03.10.2013
Acoustica Premium Edition


Многофункциональный аудиоредактор с поддержкой многоканальных форматов объемного звука 5.1 и 7.1. Средства программы обеспечат точное управление деталями производства аудио CD (длина пауз, индексные маркеры, поля CD-TEXT). В Acoustica Premium встроен широкий диапазон инструментов профессионального качества для мастеринга и звукового дизайна, а также имеется функция прожига CD и создания обложек и наклеек.
Сталкер
  1. Офлайн
  2. Команда сайта
  3. 132 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 2 отправлено 22:19, 03.10.2013
Доброе время суток! В исполняемом файле в секции RT_DLGINIT есть ресурсы, которые не распознаются ни в одном редакторе. В них остались строки, которые нужно перевести. В Radialix выгружаю ресурс:
Рисунок 1
Перевожу одно слово в Notepad++ (все буквы чередуются с символами конца строки? surprised
Рисунок 2
Загружаю обратно в Radialix:
Рисунок 3
Запускаю - все работает, но кракозябры победить не удается. Подмена кодовой страницы не срабатывает, метод Nexus'a не помог, может, я сам где-то не совсем разобрался...
Рисунок 4
Заранее благодарен!

Вашей группе Гости запрещён просмотр скрытого текста.


Последний раз редактировал WYLEK 17:51, 16.02.2017
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 3 отправлено 22:19, 03.10.2013
teodorrrro писал:Запускаю - все работает, но кракозябры победить не удается.


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

Последний раз редактировал WYLEK 15:01, 16.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Сталкер
  1. Офлайн
  2. Команда сайта
  3. 132 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 4 отправлено 22:20, 03.10.2013
Leserg, Спасибо!
Спойлер [+]

Последний раз редактировал WYLEK 17:51, 16.02.2017
Сталкер
  1. Офлайн
  2. Команда сайта
  3. 132 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 5 отправлено 22:20, 03.10.2013
И снова проблема.
Файл Declick.dll содержит жестко-закодированные строки, те, что в WIDEZ, переводятся на ура, а в ASCIIZ задание кодировки не лечит кракозябры...
В реестре замены cp1250,52,53 -> cp1251 и в Font Suntitles не приводят ни к какому результату.
Спойлер [+]




Вашей группе Гости запрещён просмотр скрытого текста.


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

Последний раз редактировал WYLEK 17:56, 16.02.2017
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 6 отправлено 22:20, 03.10.2013
Цитата (teodorrrro)
И снова проблема. Файл Declick.dll...l

У меня не получается справиться с твоей проблемой. sad Нужна помощь нашего товарища Nexus.

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


------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 620 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 7 отправлено 22:20, 03.10.2013
Мммм... Довольно трудная проблема. Изменения в реестре Винды и подмена шрифта абсолютно здесь не помогут. Тут физическое (в самом коде) превращение ANSI кодировки в Юникод. Простыми словами, программа в строку, к примеру, "Щелчков в секунду" вставляет нули и получается вот такое:

Спойлер [+]


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

Последний раз редактировал WYLEK 17:50, 16.02.2017
Сталкер
  1. Офлайн
  2. Команда сайта
  3. 132 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 8 отправлено 22:20, 03.10.2013
Nexus, спасибо за такое глубокое погружение в проблему, но стоит ли овчинка выделки? sad

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

Последний раз редактировал WYLEK 17:30, 16.02.2017
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 9 отправлено 22:21, 03.10.2013
Nexus писал:если интересно, то эти "перерабатывающие" места находятся по адресу 0460B490 и 04607F40


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

Последний раз редактировал WYLEK 17:29, 16.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 620 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 10 отправлено 22:21, 03.10.2013
Leserg, наверное программа осуществляет динамическое смещение кода, хотя что-то на это не похоже...
Вот скрины этих функций:


Рисунок 1


Рисунок 2


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


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

Последний раз редактировал WYLEK 17:50, 16.02.2017
Старожил
  1. Офлайн
  2. Администраторы
  3. 620 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 11 отправлено 22:21, 03.10.2013
teodorrrro, найдена причина неправильного отображения русских букв, точнее, место где они портятся. Это баг то ли программиста, то ли компилятора программы. Решение есть, но пока напряг со временем. Когда исправлю все, тода здесь и отпишусь...
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 12 отправлено 22:21, 03.10.2013
Nexus писал:Я, например, запускаю всю программу вместе с плагином, а потом отладчиком прикрепляюсь к процессу


Я так никогда не делал... Просто открывал файл (File -> Open). Попробовал как ты написал: запустил программу, загрузил в неё плагин, потом запустил отладчик, прицепил в нем процесс исполняемого файла программы, и наконец выбрал модуль плагина DeClick.dll. Но адресное пространство у него было другое, не то что указал. К примеру участок кода, который ты показал на первом скриншоте, у меня лежит в следующем диапазоне.
Но дальше я не сдвинулся. Ставил тут бряк, вижу строки прогоняются, а как повлиять на кодировку не понял.

Nexus писал:найдена причина неправильного отображения русских букв, точнее, место где они портятся.


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

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


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

Последний раз редактировал WYLEK 17:37, 16.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Сталкер
  1. Офлайн
  2. Команда сайта
  3. 132 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 13 отправлено 22:21, 03.10.2013
Nexus, потрясающе! Кстати, той же операции скорее всего ждут и остальные...


Спойлер [+]

Последний раз редактировал WYLEK 17:50, 16.02.2017
Старожил
  1. Офлайн
  2. Администраторы
  3. 620 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 14 отправлено 22:21, 03.10.2013
teodorrrro, дошла очередь и до твоего перевода smile Целый файл выставлять не буду, так как там нужно поменять всего лишь один байт(!).
Открой в WinHex DeClick.dll, по смещению 275CD поменяй 72 на EB. Все.
Теперь все нужные тебе строки, которые находятся в формате ANSI, переводи в формате UTF-8. Но это касается только строк в ANSI! Строки в Unicode переводи тоже в Юникоде.
Переведешь и обкатаешь файл - если глюков и багов обнаружено не будет, то дам такие же HEX значения и для других "проблемных" файлов.
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 15 отправлено 22:22, 03.10.2013
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. В моем варианте нужно изменить два байта smile teodorrrro, если есть есть желание, попробуй сделать так.

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

Последний раз редактировал WYLEK 17:41, 16.02.2017

------------------------------------------
Кто ищет, тот всегда найдет!
Сталкер
  1. Офлайн
  2. Команда сайта
  3. 132 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 16 отправлено 22:22, 03.10.2013
Класс!
С горем пополам нашел и изменил значение 80, главное - не забывать про UTF-8. Спасибо всем!

Отчет:


Спойлер [+]

Последний раз редактировал WYLEK 17:49, 16.02.2017
Мастер
  1. Офлайн
  2. Команда сайта.
  3. 901 сообщений
  4. Репутация: 9
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 17 отправлено 22:22, 03.10.2013
Цитата (teodorrrro)
С горем пополам нашел и изменил значение 80, главное - не забывать про UTF-8.

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

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

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


------------------------------------------
Кто ищет, тот всегда найдет!
Старожил
  1. Офлайн
  2. Администраторы
  3. 620 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 18 отправлено 22:22, 03.10.2013
Цитата (Leserg)
Я думаю, что более корректным решением будет исправление максимального значения символьных кодов, 128 на 256 (80h на 100h).

Эффект один и тот же - запретить выполнение кода за этими значениями, т.е. не пускать туда текстовые строки для обработки. Почему? Потому что дальнейший код за этим оператором предназначен для конвертирования с Юникода в UTF-8 и он НЕРАБОЧИЙ! По сути вся вот эта функция - полная лажа. И вроде код полезный и нужный, если бы не одно "но"... Все дело в операторе MOVZX EAX,BYTE PTR DS:[ECX] и последующим INC ECX. Для конвертирования двухбайтовой кодировки (Юникод, UTF-8, ..) в UTF-8 нужна загрузка в регистр процессора сразу двух байт, а не одного как в этом операторе. Чуть ниже, сразу за этой подпрограммой, находится такая же, аналогичная функция обработки строк в UTF-8, но уже корректно написана. Ну а текущая функция годится только для перемещения байт текстовой строки с одного места памяти в другое. И не более. Все равно на выходе необходимо получить строку в виде UTF-8, как требует программа, значит пускай входная строка и будет написана в UTF-8.

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

Алгоритм? Ну... Нахожу ссылку на проблемную текстовую строку, потом по этой ссылке иду на то место, где хранится это строка, ставлю на ней бряк Memory... и запускаю прогу. В тех местах кода, где строка считывается, отладчик и останавливается. Вот эти места я и анализирую. Бывает в том месте просто подсчитывается длина исходной строки (это место я пропускаю), а бывает считывается первый байт строки в какой-нибудь регистр и, после некоторых манипуляций с этим байтом, пересылается в другое место памяти, обычно это оператор MOV BYTE *** или MOV WORD ***. Смотрю куда оно пересылает и ставлю там тоже бряк. Вот так и скачу по брякам, пока не найду то место, где портится строка.
А что у тебя за отладчик? И вроде Олька, но как-то не особо похоже...
 
Перейти
Найти

Доступ закрыт.

  1. Вам запрещено отвечать в темах данного форума.

Последние темы

  1. Help & Manual 7.2.0 4035 rus
    Автор: druc Вчера, 18:38
  2. MiniTool Partition Wizard Technician...
    Автор: WYLEK 20:31, 18.09.2017
  3. Справка для MiniTool Partition Wizard
    Автор: WYLEK 13:20, 17.09.2017
  4. TeoreX PhotoScissors 4.0 Rus Portable...
    Автор: Valx 13:17, 16.09.2017
  5. TeoreX PhotoScissors 4.0 RUS
    Автор: AlexSergeev 13:58, 15.09.2017
  6. PE Explorer v1.99 R6 Rus
    Автор: gazon01 20:33, 13.09.2017

Изменения статуса

  1. Никто не менял личный статус.