![]() |
eXeL@B —› Вопросы новичков —› редактирование dll |
Посл.ответ | Сообщение |
|
Создано: 15 июля 2011 23:30 · Личное сообщение · #1 Подскажите, как можно отредактировать ресурсы dll- сменить слово zarafa на другое. Это возможно? Спасибо. ![]() ![]() |
|
Создано: 15 июля 2011 23:38 · Личное сообщение · #2 |
|
Создано: 31 октября 2011 00:52 · Поправил: Horna · Личное сообщение · #3 Здравствуйте! Прошу помощи экспертов в области исследования программ. Тему новую не стал создавать, т.к. мой вопрос можно отнести к этому топику. Задача несколько иного плана, чем тематика данного сайта. Побывал уже на нескольких форумах по русификации, но там так глубоко никто не копает. Вот поэтому я вас. Перевожу на русский язык интерфейс программы "GIF Construction Set Professional 3", а также плагинов к ней. С самой программой проблем не возникло - все ресурсы доступны и их свободно можно локализовать в шаблонных редакторах. А вот с плагином "Text Effects 2" возникли затруднения. Файл является обычной DLL и находится после установки в папке "plugins" (файл "gcspltx2.dll") корневого каталога программы. Часть ресурсов в нем доступна и их можно перевести, а часть находится в жестко-закодированных строках и их тоже не проблема перевести, только вот нет возможности изменить координаты и размеры контролов так, чтобы текст перевода полностью в них помещался или не налазил на другие элементы интерфейса. Поймите правильно, я не хочу делать сокращения в переводе, я думаю, что можно сделать по нормальному, только надо изменить размеры и координаты некоторых элементов. Но загвоздка в том, что я не могу найти в плагине то место, где прописаны координаты и размеры этих элементов, чтобы их изменить. У меня нет опыта работы с отладчиками и я не знаю ассемблера. Вот поэтому обращаюсь к вам. Как я пытался решить этот вопрос? Вот смотрите как выглядит окно плагина после перевода (плагин вызывается из меню программы "Edit => Text Effects #2"): ![]() На скриншоте я указал область (незатемненная), где располагаются эти элементы (контролы) интерфейса. Как видите перевод некоторых элементов или не помещается в установленные границы или налазит на другой контрол. И еще, в зависимости от выбранного эффекта (справа) меняются контролы и их расположение в этой области окна. Всего эффектов 20, соответственно под каждый из них активизируются те или иные контролы. Вот как выглядит окно плагина в шаблонном редакторе: ![]() Как видите в данной области нет элементов. Они появляются там после загрузки плагина в память ПК, и как я понимаю, в зависимости от выбранного эффекта из списка, просто включается или выключается отображение контролов в данной области окна. Занимаясь этим вопросом, выяснил, что программно можно создавать элементы интерфейса, а также и само окно средствами WinAPI, к чему, наверняка и прибегли разработчики программы. Чтобы знать, как в отладчике может выглядеть код программы, где идет описание создание элементов диалогового окна, я воспользовался небольшой утилитой, которая устанавливается вместе с программой. Этот файл называется alchuddl.exe (находится в корневом каталоге установленной программы). Интерфейс это программки также написан на API, а в ресурсах у неё только диалоговое окно "О программе". Я загрузил эту программку в OllyDbg и начал знакомиться как с самим отладчиком, так и кодом. Вот интерфейс этой программки: ![]() А вот как выглядит код программы, где даются параметры для создания кнопки интерфейса "Go". А сама кнопка создается функцией "CreateWindowExA": ![]() Вроде бы ничего сложного, все размеры и координаты видны, я понял соответствие машинных чисел десятичным. Попробовал изменить их - получилось. И я начал искать подобный код в плагине gcspltx2.dll. Каково же было мое разочарование, когда загрузив в OllDbg этот файл я не обнаружил там ничего подобного. Получается координаты и размеры этих контролов задаются как-то по-другому, а как, я не знаю. Думал найду по функции "CreateWindowExA", но она используется только 27 раз, когда контролов для всех 20 эффектов наберется около сотни. В общем я пришел в тупик, хочется решить задачу и не знаю как. Другой вопрос, я не понял как в отладчике работать с DLL. Если программу (ехе) можно запустить и пошагово смотреть, что происходит, то DLL без программы не запустишь... Может я не прав, просто я не знаю как это делать. А у вас на сайте в основном идет работа с ехе-файлами. Еще мне показалась интересной функция "EnableWindow". Она довольно много используется в плагине: ![]() И как я понял, управляет отображением искомых мной контролов. С помощью программы Прошу у вас помощи. Укажите мне хотя бы один контрол, где прописаны его координаты и размеры, а я уже дальше, по аналогии, определю остальные и сделаю необходимые корректировки. Или подскажите на ЧТО нужно обратить внимание в отладчике. Я понимаю, что это может быть вам не интересно, или слишком просто и очевидно. Но для новичка в этой области, это пока неразрешимая задача. Вот здесь вы можете скачать саму программу и плагин к ней: Сам работаю на Windows XP SP3, поэтому не знаю, как ведет себя программа на Vista и Windows 7, она прошлогодняя, а новой с аптечкой я не встречал. ![]() |
|
Создано: 31 октября 2011 02:39 · Личное сообщение · #4 Взглянул, наспех. Что там за странные "bitmap" ресурсы с номерами с 1000? Это не они отрисовываются в качестве контролов? DLL подгружается просто вызовом LoadLibrary(DLLName); Набросайте простейшую программу из одного диалога и загружайте туда что угодно. Или можно поискать готовые лоадеры на тематических сайтах. ![]() |
|
Создано: 31 октября 2011 04:32 · Поправил: Horna · Личное сообщение · #5 gazlan пишет: Что там за странные "bitmap" ресурсы с номерами с 1000? Это не они отрисовываются в качестве контролов? ![]() gazlan пишет: Набросайте простейшую программу из одного диалога Простите, но вы меня не поняли, я не программист. Я просто перевожу интерфейсы программ на русский язык с помощью шаблонных редакторов: Radialix, Susilizer и т.д. Также эти редакторы позволяют подкорректировать размеры визуальных компонентов диалоговых окон, как то: Label, Edit, ComboBox, CheckBox и т.д., т.е. привести в соответствие с текстом, если он не помещается в отведенные границы элемента. В данном же случае в файле плагина, в его ресурсах нет тех компонетов, которые я указал на скриншоте. Строки есть, я их перевел, а изменить координаты и размеры не могу, т.к. они создаются средствами WinAPI и шаблонные редакторы такие ресурсы не видят. ![]() Например, когда окно плагина открыто, т.е. он загружен в ОЗУ ПК, с помощью программы WinSpy++ можно узнать размеры каждого контрола. ![]() Также эта программа позволяет произвести изменения загруженной программы или Dll в память ПК. Вот на следующем скриншоте я изменил координаты и размеры указанной метки "Движение:". Теперь она полностью видна. ![]() Вот такую фишку я хочу сделать с остальными элементами, которые не помещаются или налазят на другие компоненты окна. Я просто не могу в этом плагине найти то место, где задаются координаты каждого из этих элементов, а также их размеры. Вот в чем мне нужна помощь. Надеюсь на понимание. ![]() |
|
Создано: 31 октября 2011 06:37 · Поправил: 0xy · Личное сообщение · #6 Если окна нет в ресурсах, то оно может создаваться DialogBoxParamIndirect. В общем, "покурите" для начала ![]() |
|
Создано: 31 октября 2011 06:46 · Личное сообщение · #7 Все, нашел! ![]() Помогла мне в этом IDA. Я правда не знаю как ею пользоваться, поставил, открыл в ней файл плагина и просто просматривал полученный листинг, пока не набрел на любопытное место. Вот, к примеру я взял кнопку: Рис.1 ![]() Рис.2 ![]() Рис.3 Потом уже можно в WinHex можно править нужные данные. ![]() Спасибо за внимание. Извините за беспокойство. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› редактирование dll |