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

avatar_WYLEK

Удлиняем не удлиняемые строки в коде

Автор WYLEK, 25 декабря 2011, 18:42:00

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

WYLEKАвтор темы

Тема создана 25 декабря 2011, 18:42:00 Последнее редактирование: 13 апреля 2018, 23:25:05 от WYLEK
Все началось с легкой руки Николая (stepchik) - он попросил меня поглядеть один русификатор, после установки, которого на 64-битной оси программа умирала...

Кролик - Wondershare Time Freeze 2.0.3.0

Инструменты...

Radialix 2
IDA Pro Advanced
HIEW
Блокнот
FlexHEX Editor

Найти причину сбоя программы не составило труда, как я и предполагал, для каждой оси устанавливаются свои файлы. Ну, думаю, щас за час все сделаю. Запустил на локализацию для 64-битной версии проект, и за час все перевел и настроил, осталось перекинуть ресурсы на 32-битную версию. Вот тут то и началось самое интересное!

Меня ждала засада, то есть две засады....

Дело в том, что я уже давно заметил, что у программ, у которых каждый екзешник для своей оси, некоторые ссылки в одном из них исчезают. Вернее вначале первого слова дописывается буква. Можно и так переводить, если перевод влезет, а как быть, если слово на английском имеет четыре буквы, а на русском десять? Например: Hits - Совпадения. Так и здесь вышло.

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


Смотрите, приписана буква. Ну, и как же удлинить слова, спросите Вы, да очень просто. Для этого открываем в FlexHEX исполняемый файл TimeFreeze.exe и ищем все строки. Например, строку Hide/Show tray icon (Press Ctrl+Alt+F8). Но сразу надо создать текстовый файл и скопировать туда строки. Это делаю всегда, если есть мысль поддерживать программу в дальнейшем или просто для интереса. Со временем забываешь, что делал и как, а тут подсказка полного цикла.

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


Копируем 16 байт (выделено черным) и вставляем напротив строки.

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


Теперь обратите внимание на байт 47, вот из-за его гада и не находятся ссылки. Цифры 47 забейте нулями.

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


Поступите со всеми строками так же. Получится вот так. Не забудьте сохранить документ и переделанный файл TimeFreeze.exe с именем TimeFreeze1.exe!

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


Теперь создаем проект на переделанный файл TimeFreeze1.exe в Radialix 2 и файл .rdmap в IDA Pro Advanced. В Radialix 2 я не создавал проект, а в предыдущем проекте просто заменил исходный файл на TimeFreeze1.exe, и подключил файл .rdmap IDA созданный для файла TimeFreeze1.exe. Уничтожаем удаленные ресурсы, и смотрим, что вышло.

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


Теперь есть два пути - или сразу перевести все строки со ссылками в проекте с исходным файлом TimeFreeze.exe и .rdmap IDA созданный для файла TimeFreeze.exe или перевести строки, ссылки на которые мы нашли. В первом варианте можно запускать переведенный файл и смотреть локализацию в живую. Во втором варианте запускать нельзя, потому что мы изменили код, и непонятно как поведет себя программа. Лучше всего, это конечно же первый вариант, что я и сделал. Перевел все и наладил растяжки, после в проекте подменил исходный файл TimeFreeze.exe на переделанный файл TimeFreeze1.exe и подключил файл .rdmap IDA созданный для файла TimeFreeze1.exe. Перевел эти строки, да еще на некоторые строки добавились ссылки, теперь можно не следить за количеством букв. Делаем обновление, создаем выходной файл. Radialix с IDA можно закрывать, а русский файл открываем в FlexHEX. В блокноте копируем байты, например для Hide/Show tray icon (Press Ctrl+Alt+F8), и вставляем в строку поиска без двух байт, как на рисунке.

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


Все нашлось, и теперь вставляем байт на свое место, здесь 47. И так делаем все строки. Не забудьте сохранить в конце файл.

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


Запускаем екзешник и радуемся результату!

Но, тут подкралась вторая засада....

Запустил программу, по клацал по вкладкам и настройкам, решил выйти и, вот оно вылезло...

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


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

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


Все, приехали - укорачивать ничего нельзя, да и не солидно все это. Надо искать другие пути, но я уже знаю - стоит в коде счетчик букв недоступный для Radialix 2. Благо ручками в свое время не гнушался работать, вот и пригодилось опять. А то тупеешь с этим радиаликсом. Теперь надо запустить проект на файл TimeFreeze1.exe, выделить как на картинке и вставить в текстовый файл. Не забудьте еще строку с Register, там три ссылки.

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


Уберите ненужное, будет вот так.

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


Запускаем нех-редактор и ищем, например Online Help, там две ссылки.

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


Записываем адрес, выделенный красным в блокнот.

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


Порылся в загашниках и вытащил на свет Божий Hiew ( редактор двоичных файлов, ориентированный на работу с кодом. Имеет встроенный дизассемблер для x86, x86-64 и ARM, ассемблер для x86, x86-64.). В папку с дизассемблером кидаем исходный файл TimeFreeze.exe, чтобы пути не путать (во сказанул). Запускаем Hiew и выбираем исполняемый файл и жмем Enter.

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


Далее жмем F4, выбираем Hex и жмем Enter.

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


Далее жмем F5 и в поле адреса вводим адрес, что мы нашли в нех-редакторе и жмем Enter.

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


Мы попали на интересующий нас адрес.

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


И последнее - нажмите F6 и попадаем на ссылки. Смотрите внимательно, подозрительное число ставится на стек - 0B что в десятичном 11.

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


Вы уже догадались, что это и есть число-ограничитель! Запишите байты для поиска в нех-редакторе - 00 6A 0B 68. Первая ссылка есть! Ищем вторую, в радиаликсе виден адрес.

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


Опускаемся ниже и по адресу ссылки останавливаемся. Тут тоже число и на тот же адрес ссылается. Записываем для поиска - D7 6A 0B 68. Вот и нашли все нужные данные для замены в русском варианте файла. Увага! Писать через пробел!

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


Так нужно сделать для всех строк. Теперь проверим, что мы натворили :) Запускаем FlexHEX Editor, вызываем окно поиска по НЕХ и вставляем первые данные.

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


Нажмите Найти все и вот результат. Теперь нужно поменять число 0B на количество букв слова Справка отлайн.

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


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

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


Заменяем число на и ищем вторую ссылку D7 6A 0B 68 по НЕХ и заменяем число на . Все, сохраняем результат и запускаем екзешник. Так как у меня 64-битка, то я запущу файл на виртуалке Oracle VM VirtualBox, которая работает в два раза быстрее чем этот чудо-юдо VMware Workstation.

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


Любуемся своей работой и выпрямленными руками   

Stalevar

Во как, век живи, век учись.
 С большим интересом проштудировал урок, ведь сейчас пошли в основном проги на две оси и переводить приходится как файл на 32, так и на 64.
 Но вот с такой проблемой пока не встречался.
 Ну теперь я вооружен, урок занял достойное место у меня в архиве.
 Мэтр спасибо за полученные бесценные (а главное бесплатные) знания!!!
Храни меня Господь от тех, кому я верю. Кому не верю - тех остерегусь я сам.

WYLEKАвтор темы

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

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

    TinyPortal

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

    Simple Machines

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

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