Сейчас на форуме: vsv1 (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Изменение свойств компонентов delphi без исходных кодов
Посл.ответ Сообщение

Ранг: 2.8 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 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)?.



Ранг: 80.6 (постоянный), 194thx
Активность: 0.10.04
Статус: Участник

Создано: 02 февраля 2016 23:47 · Поправил: v00doo
· Личное сообщение · #2

SevenTf, ну раз delphi и у кнопки в коде нет изменений состояния, то не пробовал ли ты поменять значение в описании формы в ресурсах?
Где сам подопытный (файл) то?



Ранг: 39.4 (посетитель), 9thx
Активность: 0.01=0.01
Статус: Участник

Создано: 03 февраля 2016 00:35
· Личное сообщение · #3

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


SevenTf пишет:
что делать если в программе нет вызова нужного метода

Поискать включена ли реализация метода TControl.SetEnabled в exe файл. Возможно он еще кому то нужен. Если включена дописать код вызова.



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 03 февраля 2016 07:04
· Личное сообщение · #4

Что за наркомания? EnableWindow и все

| Сообщение посчитали полезным: SevenTf

Ранг: 2.8 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 03 февраля 2016 11:26
· Личное сообщение · #5

TryAga1n пишет:
Что за наркомания? EnableWindow и все


Спасибо, действительно копал не туда, все решалось гораздо проще, еще как вариант CreateWindow c dwStyle=WS_DISABLED.

...а что если нужной функции нет, я так понимаю ее можно добавить в таблицу импорта при условии что там есть место и подгружается dll этой функции. Или нужно добавлять что-то еще?



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 03 февраля 2016 11:39
· Личное сообщение · #6

Можешь вызывать сам, через LoadLibrary, GetProcAddress, можешь добавить в импорт.

| Сообщение посчитали полезным: _FUCKER_

Ранг: 19.2 (новичок), 12thx
Активность: 0.030
Статус: Участник

Создано: 03 февраля 2016 12:29
· Личное сообщение · #7

TryAga1n пишет:
можешь добавить в импорт

Раз уж поднята такая тема, то спрошу, пользуясь случаем: как до неё достучаться из ольки? Если функция ранее была в проге, то просто скопировать ассемблерный код её вызова.

Как достучаться до функции, которая руками добавлена в импорт? В какую сторону копать? Может где-то чтиво есть? Пробовал как-то, потом забил и через LoadLibrary+GetProcAddress подключил и вызывал.
Вопрос конечно нубский, но в первый раз такое понадобилось



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 03 февраля 2016 14:10
· Личное сообщение · #8

_FUCKER_
Например так: смотришь на RVA адрес добавленной функции

В ольке Ctrl+G, RVA, вписываешь адрес

И смотришь какой получился VA, с учетом ImageBase, а потом в нужном месте call DWORD PTR DS:[VA]
Ну или можешь в уме посчитать)

| Сообщение посчитали полезным: _FUCKER_

Ранг: 19.2 (новичок), 12thx
Активность: 0.030
Статус: Участник

Создано: 03 февраля 2016 14:25 · Поправил: _FUCKER_
· Личное сообщение · #9

TryAga1n, спасибо громадное! Я по таблице импорта в ольке лазил. Вот где надо было искать
С подсчётом VA/RVA/RAW точно нет проблем. Я не там искал


 eXeL@B —› Вопросы новичков —› Изменение свойств компонентов delphi без исходных кодов
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати