Сейчас на форуме: vsv1 (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Изменение свойств компонентов delphi без исходных кодов |
Посл.ответ | Сообщение |
|
Создано: 02 февраля 2016 23:33 · Личное сообщение · #1 Доброго времени суток, господа! Помогите разобраться, есть программа (без исходников), в которой пытаюсь сделать неактивной кнопку (ELPopupButton1.Enabled:= False); Как это можно сделать? декомпилятор ведь как то распознает компоненты и свойства (написал для разбора свой вариант программы): _Unit61::TForm2.FormShow 004BEC64 push esi 004BEC65 mov esi,eax 004BEC67 mov dl,1 004BEC69 mov eax,dword ptr [esi+378]; TForm2.ElPopupButton1:TElPopupButton 004BEC6F mov ecx,dword ptr [eax] 004BEC71 call dword ptr [ecx+64]; TControl.SetEnabled 004BEC74 pop esi 004BEC75 ret Здесь все гораздо проще, меняем в отладчике mov dl,1 на xor edx,edx и кнопка не активна, но что делать если в программе нет вызова нужного метода или того хуже вообще нет обращения к компоненту(В моем случае есть только обработчик onClick по ElPopupButton1)?. ![]() |
|
Создано: 02 февраля 2016 23:47 · Поправил: v00doo · Личное сообщение · #2 |
|
Создано: 03 февраля 2016 00:35 · Личное сообщение · #3 В описании формы в ресурсах может не быть состояния кнопки, например, если значение свойства совпадает с дефолтным родительским. Могут сохраняться только измененные свойства. SevenTf пишет: что делать если в программе нет вызова нужного метода Поискать включена ли реализация метода TControl.SetEnabled в exe файл. Возможно он еще кому то нужен. Если включена дописать код вызова. ![]() |
|
Создано: 03 февраля 2016 07:04 · Личное сообщение · #4 |
|
Создано: 03 февраля 2016 11:26 · Личное сообщение · #5 TryAga1n пишет: Что за наркомания? EnableWindow и все Спасибо, действительно копал не туда, все решалось гораздо проще, еще как вариант CreateWindow c dwStyle=WS_DISABLED. ...а что если нужной функции нет, я так понимаю ее можно добавить в таблицу импорта при условии что там есть место и подгружается dll этой функции. Или нужно добавлять что-то еще? ![]() |
|
Создано: 03 февраля 2016 11:39 · Личное сообщение · #6 Можешь вызывать сам, через LoadLibrary, GetProcAddress, можешь добавить в импорт. ![]() |
|
Создано: 03 февраля 2016 12:29 · Личное сообщение · #7 TryAga1n пишет: можешь добавить в импорт Раз уж поднята такая тема, то спрошу, пользуясь случаем: как до неё достучаться из ольки? Если функция ранее была в проге, то просто скопировать ассемблерный код её вызова. ![]() Как достучаться до функции, которая руками добавлена в импорт? В какую сторону копать? Может где-то чтиво есть? Пробовал как-то, потом забил и через LoadLibrary+GetProcAddress подключил и вызывал. Вопрос конечно нубский, но в первый раз такое понадобилось ![]() ![]() |
|
Создано: 03 февраля 2016 14:10 · Личное сообщение · #8 _FUCKER_ Например так: смотришь на RVA адрес добавленной функции ![]() В ольке Ctrl+G, RVA, вписываешь адрес ![]() И смотришь какой получился VA, с учетом ImageBase, а потом в нужном месте call DWORD PTR DS:[VA] Ну или можешь в уме посчитать) ![]() |
|
Создано: 03 февраля 2016 14:25 · Поправил: _FUCKER_ · Личное сообщение · #9 |
![]() |
eXeL@B —› Вопросы новичков —› Изменение свойств компонентов delphi без исходных кодов |