RCE.SU - реверсинг, кодинг, выделенные сервера, ICQ, proxy

Локализуем ZoneAlarmPro v3.7.159

При локализации программы, вернее при любом изменении в исполняемом файле появляеться сообщение о том, что файл поврежден.
Эта критическая ошабка вызвана алгоритмом проверки файла от изменений, чтобы его обойти, нужно "занопить" условный переход по аадресу 0041B019h
0041B014                 mov     al, [ebp+0Ch]
0041B017                 test    al, al
0041B019                 jnz     short loc_41B031
0041B01B                 mov     esp, [ebp-18h]

0041B014                 mov     al, [ebp+0Ch]
0041B017                 test    al, al
0041B019                 nop
0041B01A                 nop
0041B01B                 mov     esp, [ebp-18h]
Или вот так, если смотреть на файл как на бинарный массив (Первая колонка - смещение от начала файла, вторая - данные до изменения, третья - данные после изменения)
0001B019: 75 90
0001B01A: 16 90
Но если мы собрались локализовать данную программу, то есть способ куда лучше, в самой программе предусмотрена возможность подгрузки библиотек с переводом.

Данная библиотека представляет из себя обычную DLL скомпилированную без исполняемого кода (ResourceOnly) и содержущую переведенную ресурсную часть.

Имя данной библиотеки формируеться из сложения двух строк "ZAProLang" + код_языка.

Код языка можно получать автоматически с помощью функции API WINDOWS GetUserDefaultLangID переведя возвращаемое значение в строку HEX с 4 символоми, в моем случае получилось "0419" (WinXP PROF SP1 RUS), либо укаазать явным образом по ветке реестра (строковый параметр)
HKEY_LOCAL_MACHINE\SOFTWARE\Zone Labs\ZoneAlarm\Language="0419"

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

Теперь осталось самое простое с помощью ResourceHacker вытащить ресурсы из программы, перевести их, и собрать библиотеку с ключами
/NOENTRY /OUT:"ZAProLang0419"

--
HarmEr, with best regards
ORIGIN: UOFG
PAGE: http://www.uofg.com.ua

Rambler's Top100