Наши кнопки

Настоятельно рекомендую посетить сайты моих друзейРусификация программ, помощь и обучение

Буду Вам очень признателен, если разместите мою кнопку на своем сайте
Irokkezz.ru - portable, софт, русификаторы, книги
Главная Литература Статьи Русификация программы Cool Flash Player 2.18
Последние русификаторы

Русификатор MD5 Checksum Verifier 5.2

News image

Русификатор MD5 Checksum Verifier 5.2 - русификатор простой и удобной программы для быстрого вычисления MD5 хе... Подробнее...

Русификатор ArtCursors 5.25

News image

Русификатор ArtCursors 5.25 - русификатор мощного и очень удобного редактора курсоров, который позволяет легко... Подробнее...

Русификатор BetterJPEG 2.0.0.9

News image

Русификатор BetterJPEG 2.0.0.9 - русификатор прекрасного графического редактора, предназначенного для работы с... Подробнее...

Случайные сборки

Portable FILEminimizer Suite 8.0 Rus

News image

FILEminimizer Suite - универсальная программа для оптимизации изображений и офисных документов. Позволя... Подробнее...

Portable CDuke 4.6.21 Rus

News image

CDuke - удобная программа для записи дисков. Позволяет записывать СD и DVD диски с данными, DVD видео д... Подробнее...

Portable SadMan Sudoku 4.1 Rus

News image

SadMan Sudoku - хорошая программа для любителей судоку. Позволяет очень легко (в ручном или полностью а... Подробнее...

Русификация программы Cool Flash Player 2.18

( Голосов:15 Средний балл:4.73 )
27.02.2014 20:08

Русификация программы Cool Flash Player 2.18

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

rusifikacziya-programmy-cool-flash-player-218-1

После установки, лечения и краткого анализа программы выясняется, что все ресурсы, которые нуждаются в переводе, находятся в главном исполняемом файле cFlashPlayer.exe, написанном на Delphi. Проблем с их переводом не возникает никаких, обычно для этого я использую шаблонный переводчик Multilizer.

Окно проекта перевода в Multilizer

После окончания перевода и компиляции нового исполняемого файла с переведенными ресурсами, приступаю к отладке. Запускаю нашу программу и любуюсь ее русским интерфейсом. Все вроде бы хорошо, но ровно до того момента, пока не решаю проверить функции конвертирования SWF - EXE и SWF - SCR.

Диалог конвертирования SWF - EXE

Нет, само конвертирование работает безупречно. На выходе из SWF файла получаем автономный исполняемый файл EXE или файл заставки SCR, которые прекрасно запускаются, но ... по прежнему имеют английский интерфейс. Грешным делом подумал, что при переводе пропустил какие-то ресурсы, вернулся, перепроверил - нет, переведено все.

EXE файл с ... английским интерфейсом

Возвращаюсь к папке программы и начинаю изучать ее содержимое. В глаза бросается исполняемый файл htmlswf.exe. PEiD говорит, что файл упакован ASProtect 1.2 - 1.3. После распаковки и открытия файла в Restorator, понимаю, что иду по ложному следу. Этот файл, хотя и требует перевода, но к автономным EXE и SCR не имеет никакого отношения.

rusifikacziya-programmy-cool-flash-player-218-5

От безысходности начинаю ковырять библиотеку GetSourceDll.dll, которая оказывается упакованной ASPack, но и там ничего подходящего не нахожу. И тут, совершенно случайно, мое внимание привлекают два файла с непонятными расширениями - Exe.mod и screensaver.mod, привлекают главным образом своими названиями.

Файлы с подозрительным названием и расширением

Проверяю свою догадку, изменяя расширения обоих файлов с .mod на .exe, и она подтверждается! Вот они родимые! Два исполняемых файла, которые замаскированы сменой расширения и являютя фактически базовыми модулями для создаваемых при конвертировании SWF автономных исполняемых файлов EXE и SCR. Уже легче, сказал я себе.

Найденные файлы после смены расширения

Но не тут-то было. Анализ этих файлов в PEiD показал, что оба они упакованы ASPack версии 2.12. Обычно проблем с распаковкой этого пакера не бывает, но с этими файлами качественно справился только один распаковщик - ASPack unpacker 1.13 by PE_Kill. За что ему огромное спасибо, ну и автору разумеется тоже.

Результат работы ASPack unpacker 1.13 by PE_Kill

После распаковки стало видно, что оба файла написаны на Delphi. Используя Multilizer и его память переводов, перевел их ресурсы (а это главным образом пункты контекстного меню будущих автономных исполняемых файлов) и скомпилировал русскоязычные файлы почти мгновенно. Закинул их в папку с программой и заменил расширение на .mod.

Быстро подбросил программе подопытный SWF ролик, сконвертировал его поочередно в EXE и SCR. Запустил файлы и ... при запуске обоих получил одно и то же окно диалога с сообщением "this is not a flash file". А после нажатия кнопки OK - пустое окно проигрывателя с подлой надписью "No file is playing".

Сообщение при запуске полученного EXE файла

Первая мысль - где-то в программе есть проверка контрольных сумм этих файлов, поэтому пытаюсь пофиксить контрольные суммы распакованных файлов на контрольные суммы упакованных (исходных) файлов при помощи PEiD и его плагина CRC32 (или Fix CRC). Но такой вариант положительных результатов не дает.

Попытка изменить контрольную сумму в PEiD

Следующий вариант - открываю один из файлов Exe.exe в дизассемблере и ищу процедуру вывода сообщения "this is not a flash file" и самое главное - условия его появления. Для этого использую PE Explorer и его встроенный дизассемблер. Искомая строка находится очень быстро по адресу 004b0648, а ссылка на нее по адресу 004b04ff.

Процедура вывода сообщения об ошибке

Чуть выше этого адреса вижу условный переход по адресу 004B04F2 ( jz 004B052A ). Здесь, в зависимости от того, какой результат возвращает какая-то функция проверки SUB_L00404898, либо выводится наше противное сообщение (если возвращается 1) либо выполняется переход на адрес 004B052A (если возвращается 0).

Условный переход минуя вывод сообщения об ошибке

Пробую атаковать в лоб - условный переход по адресу 004B04F2 ( jz 004B052A ) меняю на безусловный - ( jmp 004B052A ). То есть не зависимо от того, что возвратит функция проверки, мы перепрыгиваем наше сообщение. Делаю это уже в дизассемблере Hiew, так как PE Explorer не позволяет редактировать файлы в режиме дизассемблера.

Замена условного перехода на безусловный

Сохраняю изменения. Таким же способом редактирую второй файл screensaver.exe. Естественно, адреса переходов в нем будут совершенно другими - отталкиваемся от строки сообщения. Оба файла готовы. Меняю их расширение на .mod, кладу в папку с программой, конвертирую SWF ролик, получаю EXE и SCR. Запускаю ...

Результаты не утешительны. Надоедливое окно с сообщением "this is not a flash file" действительно пропало, но SWF содержимое этих файлов воспроизводиться упорно не хочет. Снова пустое окно проигрывателя с надписью "No file is playing". Судя по всему дело не только в условном переходе по адресу 004B04F2.

Еще раз пытаюсь анализировать участок кода, связанный с условиями появления сообщения "this is not a flash file". Абсолютно интуитивно обращаю внимание на строчки sub eax,0005C600h ( адрес 004B04B0 ) и mov edx,0005C600h ( адрес 004B04BA ), расположенные чуть выше в листинге дизассемблера.

Операции с шестнадцатеричным значением 5С600h

Здесь выполняются манипуляции с шестнадцатеричным числом 0005C600h. При помощи калькулятора Windows перевожу его в десятичный формат и получаю 378 368. И тут возникает бешеная догадка - открываю свойства исходного, не распакованного файла Exe.exe и ... Чудо! Эти магические цифры есть не что иное, как размер файла в байтах!

rusifikacziya-programmy-cool-flash-player-218-15

Причем файла именно упакованного! То есть, где-то в программном коде этих файлов проверяется их размер. И если он отличается от требуемого - при запуске выводится сообщение "this is not a flash file" и блокируется воспроизведение содержимого. Один такой участок кода я уже нашел. Теперь вопрос был в том, единственное ли это место.

Еще раз поочередно открыв оба файла в дизассемблере и задав в поиске строку 5C600h (для Exe.exe) и 5BA00h (для screensaver.exe) определил, что в каждом файле эти значения используются по пяти адресам. Условно говоря, в пяти местах программного кода этих файлов выполняется проверка их размеров.

Одно из пяти мест кода для замены

Теперь стал абсолютно понятен алгоритм дальнейших действий. Нужно узнать размер в байтах распакованных и переведенных файлов Exe.exe и screensaver.exe, а потом заменить старый размер на новый по пяти адресам их программного кода, естественно предварительно преобразовав его в шестнадцатеричный вид.

С учетом того, что я собирался паковать переведенные файлы, сделал это в такой последовательности. Упаковал переведенные файлы пакером NSPack c сохранением резервных копий. Определил размеры в байтах упакованных файлов. Перевел эти размеры в hex вид. В неупакованных резервных копиях файлов заменил старые значения на новые при помощи Hiew.

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

EXE файл с русскоязычным интерфейсом

Этот материал подготовлен владельцем сайта irokkezz.ru

 

Комментарии  

 
#2 irokkezz 22.09.2014 07:12
Рад, что пригодилось :-) .
 
 
+1 #1 Paul1465 21.09.2014 22:55
Весьма интересно и полезно. Сохранил памятку на будущее, т.к. когда-то застрял на чем-то подобном.
Еще раз спасибо!
 

Пожалуйста зарегистрируйтесь для добавления комментариев!

Форекс Форум MT5 | Форум трейдеров рынка Forex

Авторизация



Подписка на новости

RSS - лента сайта

Подписаться на новостную ленту Irokkezz.ru

Введите Ваш E-mail адрес:

Последние комментарии

Сейчас на сайте

  • [Bot]
  • [Yahoo]
  • [Yandex]