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

Все началось с легкой руки Николая (stepchik) – он попросил меня поглядеть один русификатор, после
  1. Оффлайн

    Автор темы

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202



    Все началось с легкой руки Николая (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. И так делаем все строки. Не забудьте сохранить в конце файл.



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

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


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



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



    Все, приехали – укорачивать ничего нельзя, 007 да и не солидно все это. Надо искать другие пути, но я уже знаю – стоит в коде счетчик букв недоступный для Radialix 2. Благо ручками в свое время не гнушался работать, вот и пригодилось опять. А то тупеешь с этим радиаликсом. 009 Теперь надо запустить проект на файл 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.



    Любуемся своей работой и выпрямленными руками  biggrin_mini2 
    Dmetryk, tregalka нравится это сообщение.
    Сообщение отредактировал WYLEK 29 января 2023 - 14:41

    25 декабря 2011 - 18:42 / #1
  2. Оффлайн

    InternetMC

    Звание: Новичок

    Участники

    Сообщений: 21

    Создано тем: 0

    Рейтинг: 2

    Репа: 0

    Баллы: 51

    Страна: не указана!

    Был: 2021-05-15 17:18

    Интересная штука. Спасибо за статью.smile
    25 декабря 2011 - 19:09 / #2
  3. Оффлайн

    Stalevar

    Звание: Эксперт

    Команда

    Сообщений: 488

    Создано тем: 85

    Рейтинг: 6

    Репа: (59|59|0)

    Баллы: 51

    Страна: не указана!

    Был: 2015-05-25 08:56

    Лайков: 22

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

    Храни меня Господь от тех, кому я верю. Кому не верю - тех остерегусь я сам.

    25 декабря 2011 - 19:42 / #3
  4. Оффлайн

    Автор темы

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202

    Но вот с такой проблемой пока не встречался.


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

    25 декабря 2011 - 22:50 / #4
  5. Оффлайн

    Veikko

    Забанен

    Сообщений: 127

    Создано тем: 6

    Репа: 0

    Баллы: 0

    Был: 2015-02-18 11:15

    Лайков: 1

    Спасибо за урок. При переводе PTGui пригодилось. Правда, счетчика не оказалось и Ида все удлинила.
    5 февраля 2012 - 09:37 / #5
  6. Оффлайн

    alexxx123

    Звание: Прибывший

    Участники

    Сообщений: 2

    Создано тем: 0

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Страна: не указана!

    Был: 2012-02-20 02:46

    Подобный счётчик нашёл в foobar 2000.
    Всё решилось при помощи HHD Hex Editor Neo ( там и дизасемблер есть) в пустых строках создавал перевод, находил виртуальные адреса, заменял и в счётчике указывал необходимое кол-во буковок:)
    Кому надо - могу подробнее наклепать:)
    21 февраля 2012 - 17:35 / #6
  7. Оффлайн

    Stalevar

    Звание: Эксперт

    Команда

    Сообщений: 488

    Создано тем: 85

    Рейтинг: 6

    Репа: (59|59|0)

    Баллы: 51

    Страна: не указана!

    Был: 2015-05-25 08:56

    Лайков: 22

    могу подробнее наклепать:)

    Клепать не надо, а вот подробный урок сделать, это бы не помешало!

    Храни меня Господь от тех, кому я верю. Кому не верю - тех остерегусь я сам.

    22 февраля 2012 - 00:46 / #7
  8. Оффлайн

    alexxx123

    Звание: Прибывший

    Участники

    Сообщений: 2

    Создано тем: 0

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Страна: не указана!

    Был: 2012-02-20 02:46

    Клепать не надо, а вот подробный урок сделать, это бы не помешало!

    OK:)
    Закончу с переводом , подготовлю мануальчик с картинками
    29 февраля 2012 - 00:21 / #8
  9. Оффлайн

    Alex_S

    Звание: Прибывший

    Участники

    Сообщений: 6

    Создано тем: 0

    Рейтинг: 1

    Репа: 0

    Баллы: 51

    Страна: не указана!

    Был: 2023-01-27 04:22

    Видимо alexxx123 с переводом так и не закончил...
    6 марта 2014 - 01:50 / #9

Статистика форума, пользователей онлайн: 0 (за последние 20 минут)

---
Создано тем
1197
Всего сообщений
15762
Пользователей
18015
Новый участник
HELIUM