Последние сообщения

Страницы: 1 2 3 4 5 [6] 7 8 9 10
51
RusMe - РусМи! / Re: Удлинение "неудлиняемых" строк
« Последний ответ от миха04 10 Июня 2020, 22:07:50 »
Спасибо за подробный ответ. Буду разбираться.
52
RusMe - РусМи! / Re: Удлинение "неудлиняемых" строк
« Последний ответ от Krig 10 Июня 2020, 18:34:49 »
К сожалению у меня это не получается, не хватает опыта, а информации по данной теме абсолютный ноль.
Это не удивительно, т.к. обычно дальше ресурсов и языковых файлов никто не лезет, а инструменты для работы с жесткими строками можно пересчитать на пальцах одной руки. Регистровые и смешанные (относительные) ссылки доступны только при выполнении программы, только в определенный момент времени и зависят от области памяти, в которой был развернут образ приложения. Поэтому при анализе программы в статике такие ссылки найти невозможно. Строки есть, а ссылок как-бы и нету.

Пример прямой ссылки: mov eax,009C44AC
Пример косвенной ссылки: lea eax,[014521FA]

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

Совсем другое дело остальные типы ссылок. Их адрес вычисляется в процессе работы приложения. Примеры регистровых ссылок:

1) mov eax,dword ptr ds:[rbx] - здесь адрес берется из регистра rbx.
2) lea rcx,qword ptr ds:[rax+rbx] - здесь адрес получается при суммировании значений регистров rax и rbx.

При этом могут быть задействованы любые доступные регистры. Относительные ссылки, это те же регистровые ссылки, но адрес строки вычисляется относительно другого адреса, используемого в качестве константы. Пример такой ссылки:

lea edx,dword ptr ds:[edi+5A39] - здесь регистр edi содержит адрес, относительно которого на величину определенного значения смещения 5A39 находится искомая строка. Чтобы перенести такую строку на новое место, необходимо изменить значение смещения, которое следует вычислить исходя из нового адреса строки (практический пример, автор Tekton).

Смешанные ссылки - это регистровые и относительные вместе. Примеры смешанных ссылок:

1) lea rсx,qword ptr ds:[rax+rbx*4]
2) mov rdx,qword ptr ds:[rdx+rcx*8+10F]

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

С вашим примером программы ситуация аналогичная с той, которая рассмотрена здесь в одноименной теме, за авторством leserg73 (ответ #1, Рис. 1). Отличие лишь в типе ссылки: вместо косвенной задействована смешанная. Вам также нужно изменить только прямые ссылки переносимых строк, а код вычисления ссылочных адресов оставить без изменений.

Прямой адрес на строку можно узнать под отладчиком, установив бряк на чтение интересуемой строки (De-ess). Так вы найдете код, в котором вычисляется ссылочный адрес к данной строке. Или же, также используя отладчик, открыть дамп с этой строкой. Взять адрес начала строки (например, для строки De-ess адресом её начала является 00000001415CC1C0 (у вас может быть другое значение)), перевернуть адрес побайтово задом наперед (00000001415CC1C0   >>  C0C15C4101000000) и задать в коде поиск полученной последовательности байт. Так вы найдете место размещения прямой ссылки на данную строку. Теперь переносите строку на новое место и изменяете её прямой адрес на тот, который показывает отладчик в месте нового размещения строки.
53
RusMe - РусМи! / Re: Удлинение "неудлиняемых" строк
« Последний ответ от миха04 10 Июня 2020, 10:11:59 »
К сожалению у меня это не получается, не хватает опыта, а информации по данной теме абсолютный ноль.
54
RusMe - РусМи! / Re: Удлинение "неудлиняемых" строк
« Последний ответ от Krig 09 Июня 2020, 23:46:23 »
Добрый день.
Строки не могут не иметь ссылок. Иначе такие строки не были бы показаны и использованы. Кроме прямых и не прямых ссылок могут быть еще регистровые, относительные и смешанные ссылки. Нужный тип адресации устанавливает компилятор в зависимости от представления, объявления и размещения строк в коде. Поэтому ссылки есть, вам нужно просто их найти.
55
RusMe - РусМи! / Удлинение "неудлиняемых" строк
« Последний ответ от миха04 09 Июня 2020, 10:02:27 »
Всем добрый день. Давно мучает проблема - как удлинить строки не имеющие ни прямых, ни косвенных ссылок, ни лишних байт для замены в UTF-8. Файл iZotope RX7 https://yadi.sk/d/h7umphumB4NN9A
56
Общий форум / Re: Создание языкового модуля
« Последний ответ от Krig 06 Июня 2020, 10:48:41 »
Привет!
Вопрос возник в том, что есть ряд программ ресурсы которых находятся в жестко-закодированных строках. И при переводе такого рода программ в последствии выявляется ряд проблем связанные со стабильностью их работы.
В таких случаях не следует переводить все подряд. Обязательно разделяйте ссылки и после их перевода по каждой из них проверяйте работу/функции программы. Если происходит нарушение функциональности — от перевода такой ссылки отказываемся. Других вариантов нет.

Можно ли для таких программ создать отдельный "ЯЗЫКОВЫЙ МОДУЛЬ" с требуемым языком в данном случае русским! И главный вопрос как это делается практически?
Если разработчик не предусмотрел механизмов локализации интерфейса своего ПО, то вы, как пользователь этого ПО, никоим образом не сможете добавить свою локализацию отдельным модулем (исключение - программы Delphi автоматом подхватывают локализованные ресурсы). Вы можете только перевести ресурсы, если они доступны, и/или жесткие строки. Сама поддержка локализации создается на этапе разработки ПО.
57
Общий форум / Создание языкового модуля
« Последний ответ от KonstantinGV 05 Июня 2020, 14:08:54 »
Добрый день друзья.
Вопрос возник в том, что есть ряд программ ресурсы которых находятся в жестко-закодированных строках. И при переводе такого рода программ в последствии выявляется ряд проблем связанные со стабильностью их работы.
Можно ли для таких программ создать отдельный "ЯЗЫКОВЫЙ МОДУЛЬ" с требуемым языком в данном случае русским! И главный вопрос как это делается практически?
Пример такой программы разных версий:

https://mega.nz/file/63pTVTrI#JTDYbAshLTRbd802vuHfM-BE_T5Ko2kz3ykBHxqXaVc

https://mega.nz/folder/7mwHjbjb#HUfEmQsctluLW3sXqhjXCQ


58
RusMe - РусМи! / Re: Удлинение "неудлиняемых" строк
« Последний ответ от миха04 12 Мая 2020, 11:17:07 »
Большое спасибо. Вот таких тонкостей я как раз и не знал. Будет добавка в мою копилку статей. :dance:
59
RusMe - РусМи! / Re: Удлинение "неудлиняемых" строк
« Последний ответ от leserg73 12 Мая 2020, 01:46:05 »
У строк подменю "Paste Special" есть ссылки, только они не прямые, а косвенные (посредством другого адреса/ссылки). Возьмем строку "Insert", Обращение к этой строке выполняется инструкцией вида lea r15, ds:[0x00000001415D1910]. Причем, адрес 00000001415D1910 является ссылочным и указывает не на строку, а на следующий адрес 00000001415CB758, по которому уже находится сама строка "Insert".

Рис. 1


Таким образом, вам нужно сделать перевод данной строки в другом месте, например в новой секции, и изменить в коде только прямой адрес к этой строке, а ссылочный адрес оставить без изменений. Вот как ниже показан пример со строкой "Insert". В новом месте добавлен перевод и скорректирован прямой адрес к этой строке. Ссылочный адрес остался без изменений.

Рис. 2


Обратите внимание, что порядок записи байт адреса обратный (от младшего к старшему). Аналогично нужно поступить и по остальным строкам этого подменю. Как видно из рис.1 (см. панель дампа), все прямые адреса на строки этого подменю находятся в одном месте и следуют друг за другом. Вот эти адреса вам необходимо скорректировать в отладчике с учётом  адресации переведенных строк для подменю.


Касательно пунктов подменю "Rewind", "Play" в меню "Transport". По строке "Rewind" я проблем не увидел, просто для неё исправьте указатель длины в соответствии с длиной переведенной строки. Аналогично для строки "Play", но с небольшим нюансом. Эта строка является динамической. Если обратили внимание, то при включении воспроизведения она изменяется на "Stop" и наоборот. Также, полагаю, вы обратили внимание на то, что длина этих строк, "Play" и "Stop", одинаковая - 5 байт (длина строк 4 байта плюс 1 байт на признак клавиши быстрого доступа (&)).  Из-за этого у них в коде общий указатель длины. Он находится перед блоками кода с выбором установки соответствующих строк. Смотрите участок кода, представленный на рисунке ниже. Сначала командой mov r8d, 0x5 в регистр r8d заносится значение длины строки, а затем выбирается та или иная строка для установки в меню.

Рис. 3


Что делать? Можно немного переделать код так, чтобы для каждой их строк устанавливался указатель длины, соответствующий переведенным строкам. Это не сложно, если разбираетесь в ассемблере. А можно пойти другим путём. Сделать переводы строк одинаковой длины и потом на это значение скорректировать указатель длины. Например, переведем строки следующим образом: "Воспроизвести" и "Остановить". В кодировке UTF-8 длина первой строки - 1Ah байт, а второй - 14h байт. Строку "Остановить" дополняем пробелами до размера 1Ah байт. Вот так: "Остановить      "  (6 пробелов). Затем корректируем в коде значение указателя длины для этих строк.

Рис. 4


Вы можете сделать перевод этих строк в Radialix, а потом в отладчике или НЕХ-редакторе изменить значение длины. Главное сделайте длину строку одинаковой, иначе более короткая строка потеряет клавишу управления (Space). Сохраняете изменения в файле; проверяете в работе.

Рис. 5
60
RusMe - РусМи! / Удлинение "неудлиняемых" строк
« Последний ответ от миха04 10 Мая 2020, 16:19:20 »
Поздравляю всех с Днём Победы! Коварный iZotope RX7 постоянно подкидывает проблемы. В меню Transport строки Rewind, Play, например, не хотят удлиняться ни с помощью IDA, ни переносом на новый адрес в x64dbg. Всё строго ограничено количеством байт, а вот слово Файл уложилось при переносе. Также проблема со строками в подменю Paste Special меню Edit, это Insert и так далее. У них нет ссылок. Вот такая заморочка. Есть ли решение проблемы? Пытался искать по размерам полей, куда вписаны строки, но там просто гигантское число констант выскакивает. Для меня, как человека малосведущего в коде, это просто непонятный набор символов. Файл https://yadi.sk/d/h7umphumB4NN9A
Страницы: 1 2 3 4 5 [6] 7 8 9 10