Войти
  1. ВКонтакте
  2. Facebook
  1. »
  2. »
  3. »
  4. Удлиняем не удлиняемые строки в коде
Скрыть панель справаПоказать панель справа

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

Мастер
  1. Офлайн
  2. Админ
  3. 1591 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 1 отправлено 13:20, 25.12.2011
Все началось с легкой руки Николая (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.

Спойлер


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

Последний раз редактировал WYLEK 18:32, 10.02.2017
Новичок
  1. Офлайн
  2. Участники
  3. 23 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 2 отправлено 15:33, 25.12.2011
Интересная штука. Спасибо за статью. smile
Знаток
  1. Офлайн
  2. Команда сайта
  3. 409 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 3 отправлено 19:00, 25.12.2011
Во как, век живи, век учись.
С большим интересом проштудировал урок, ведь сейчас пошли в основном проги на две оси и переводить приходится как файл на 32, так и на 64.
Но вот с такой проблемой пока не встречался.
Ну теперь я вооружен, урок занял достойное место у меня в архиве.
Мэтр спасибо за полученные бесценные (а главное бесплатные) знания!!!
Мастер
  1. Офлайн
  2. Админ
  3. 1591 сообщений
  4. Репутация: 1
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 4 отправлено 22:50, 25.12.2011
Quote (Stalevar)
Но вот с такой проблемой пока не встречался.


У меня на борту уже три программы. В первой, я думал, просто программист начудил. Но потом оказалось что это так и есть. Причем разные фирмы wacko
Veikko
  1. Гости
Полезность: 0 | сообщение № 5 отправлено 09:37, 05.02.2012
Спасибо за урок. При переводе PTGui пригодилось. Правда, счетчика не оказалось и Ида все удлинила.
Прибывший
  1. Офлайн
  2. Участники
  3. 2 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 6 отправлено 17:35, 21.02.2012
Подобный счётчик нашёл в foobar 2000.
Всё решилось при помощи HHD Hex Editor Neo ( там и дизасемблер есть) в пустых строках создавал перевод, находил виртуальные адреса, заменял и в счётчике указывал необходимое кол-во буковок:)
Кому надо - могу подробнее наклепать:)
Знаток
  1. Офлайн
  2. Команда сайта
  3. 409 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 7 отправлено 00:46, 22.02.2012
Quote (alexxx123)
могу подробнее наклепать:)

Клепать не надо, а вот подробный урок сделать, это бы не помешало!
Прибывший
  1. Офлайн
  2. Участники
  3. 2 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 8 отправлено 00:21, 29.02.2012
Quote (Stalevar)
Клепать не надо, а вот подробный урок сделать, это бы не помешало!

OK:)
Закончу с переводом , подготовлю мануальчик с картинками
Прибывший
  1. Офлайн
  2. Участники
  3. 6 сообщений
  4. Репутация: 0
  5. Сообщение
  6. Личные данные
Полезность: 0 | сообщение № 9 отправлено 01:50, 06.03.2014
Видимо alexxx123 с переводом так и не закончил...
 
Перейти
Найти

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

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

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

  1. Athentech Perfectly Clear Workbench...
    Автор: AlexSergeev Сегодня, 05:26
  2. WonderFox HD Video Converter Factory...
    Автор: 78Sergey Вчера, 15:32
  3. WonderFox DVD Video Converter 13.3 Rus
    Автор: 78Sergey Вчера, 15:30
  4. DFX Audio Enhancer 12 RUS
    Автор: Ариша 10:21, 24.06.2017
  5. Black Bird Image Optimizer 1.0.1.1 RUS
    Автор: pp0312 04:18, 23.06.2017
  6. Phoenix Windows Data Recovery...
    Автор: dinis124 12:38, 22.06.2017

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

  1. профиль Лучше быть бедным чем дешёвым. 17:18, 04.04.2017
  2. профиль Новичок 16:30, 10.02.2017
  3. профиль Офлайн 05:14, 11.12.2016