Этот сайт создан как клуб русификаторщиков. Для нас существуют три основных правила.
1. Мы никому и ничего не должны!
2.Один пришедший на сайт толковый русификаторщик дороже всех пользователей.
3. Мы делаем русификаторы для своего сайта, но в оригинале ими могут пользоваться все в интернете.
Все началось с легкой руки Николая (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). Но сразу надо создать текстовый файл и скопировать туда строки. Это делаю всегда, если есть мысль поддерживать программу в дальнейшем или просто для интереса. Со временем забываешь, что делал и как, а тут подсказка полного цикла.
Теперь создаем проект на переделанный файл 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), и вставляем в строку поиска без двух байт, как на рисунке.
Все, приехали – укорачивать ничего нельзя, да и не солидно все это. Надо искать другие пути, но я уже знаю – стоит в коде счетчик букв недоступный для Radialix 2. Благо ручками в свое время не гнушался работать, вот и пригодилось опять. А то тупеешь с этим радиаликсом. Теперь надо запустить проект на файл TimeFreeze1.exe, выделить как на картинке и вставить в текстовый файл. Не забудьте еще строку с Register, там три ссылки.
Порылся в загашниках и вытащил на свет Божий Hiew ( редактор двоичных файлов, ориентированный на работу с кодом. Имеет встроенный дизассемблер для x86, x86-64 и ARM, ассемблер для x86, x86-64.). В папку с дизассемблером кидаем исходный файл TimeFreeze.exe, чтобы пути не путать (во сказанул). Запускаем Hiew и выбираем исполняемый файл и жмем Enter.
Вы уже догадались, что это и есть число-ограничитель! Запишите байты для поиска в нех-редакторе – 00 6A 0B 68. Первая ссылка есть! Ищем вторую, в радиаликсе виден адрес.
Опускаемся ниже и по адресу ссылки останавливаемся. Тут тоже число и на тот же адрес ссылается. Записываем для поиска – D7 6A 0B 68. Вот и нашли все нужные данные для замены в русском варианте файла. Увага! Писать через пробел!
Так нужно сделать для всех строк. Теперь проверим, что мы натворили :) Запускаем FlexHEX Editor, вызываем окно поиска по НЕХ и вставляем первые данные.
В блокноте видно, что там 14 букв. Чтобы не мучиться в преобразовании с десятичного в шестнадцатеричное значение, просто выделите мышей 14 любых байт в нех-редакторе и вы увидите нужные значения.
Заменяем число 0В на 0Е и ищем вторую ссылку D7 6A 0B 68 по НЕХ и заменяем число 0В на 0Е. Все, сохраняем результат и запускаем екзешник. Так как у меня 64-битка, то я запущу файл на виртуалке Oracle VM VirtualBox, которая работает в два раза быстрее чем этот чудо-юдо VMware Workstation.
Во как, век живи, век учись. С большим интересом проштудировал урок, ведь сейчас пошли в основном проги на две оси и переводить приходится как файл на 32, так и на 64. Но вот с такой проблемой пока не встречался. Ну теперь я вооружен, урок занял достойное место у меня в архиве. Мэтр спасибо за полученные бесценные (а главное бесплатные) знания!!!
Храни меня Господь от тех, кому я верю. Кому не верю - тех остерегусь я сам.
Подобный счётчик нашёл в foobar 2000. Всё решилось при помощи HHD Hex Editor Neo ( там и дизасемблер есть) в пустых строках создавал перевод, находил виртуальные адреса, заменял и в счётчике указывал необходимое кол-во буковок:) Кому надо - могу подробнее наклепать:)