Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.23;
Скачать: CL | DM;

Вниз

Задачка для любознательных   Найти похожие ветки 

 
Digitman ©   (2002-08-06 15:57) [40]

>Ученик

хммм ..

вот то, что я вижу в модуле controls.pas

procedure TWinControl.DefaultHandler(var Message);
begin
if FHandle <> 0 then
begin
with TMessage(Message) do
begin
if (Msg = WM_CONTEXTMENU) and (Parent <> nil) then
begin
Result := Parent.Perform(Msg, WParam, LParam);
if Result <> 0 then Exit;
end;
case Msg of
WM_CTLCOLORMSGBOX..WM_CTLCOLORSTATIC:
Result := SendMessage(LParam, CN_BASE + Msg, WParam, LParam);
CN_CTLCOLORMSGBOX..CN_CTLCOLORSTATIC:
begin
SetTextColor(WParam, ColorToRGB(FFont.Color));
SetBkColor(WParam, ColorToRGB(FBrush.Color));
Result := FBrush.Handle;
end;
else
Result := CallWindowProc(FDefWndProc, FHandle, Msg, WParam, LParam);
end;
if Msg = WM_SETTEXT then
SendDockNotification(Msg, WParam, LParam);
end;
end
else
inherited DefaultHandler(Message);
end;

???


 
Ученик ©   (2002-08-06 16:08) [41]

>Digitman
У меня Delphi 6, в Delphi 5 надо посмотреть
реализацию
function FindControl(Handle: HWnd): TWinControl;


 
DiamondShark ©   (2002-08-06 18:43) [42]

Как внедриться в чужой процесс -- моя идея была правильной. Метод с хуками работает и на Мастдае и на НТ. Можно хоть свой аналог CreateRemoteThread писать.

Тяжелее с объектами.
Конечно, жизнь упрощает условие, что обе проги (и ломаемая и ломатель) созданы одной версией компилера.
Свою версию FindControl надо писать под каждую версию компилера.
Операторы IS и AS работают только в пределах одного исполняемого модуля (EXE или DLL), поэтому для поиска и проверки объекта надо использовать TObject.ClassName и TComponent.Name, но надо точно знать имя класса, а то если надо добраться до какогото TMyCoolLabel = class(TLabel), то балалайка (либо копать глубже в RTTI).

Приведение типов TAnyClass(X) работает (AS не работает), но как подумаешь, что при этом происходит...
Виртуальные методы вызываются те что в EXE, а статические -- те что в DLL с хуком. Бр-р-р!!! Жуть!

Короче, оцените
http://moldovacc.md/acoulichev/hack.htm


 
DiamondShark ©   (2002-08-06 19:07) [43]

А вот такое извращение можно использовать вместо IS если класс в другом модуле:

function IsClass(ClassRef: TClass; const ClassName: string): boolean; overload;
begin
Result := UpperCase(ClassRef.ClassName) = UpperCase(ClassName);
while not Result do
begin
ClassRef := ClassRef.ClassParent;
if ClassRef = nil then break;
Result := UpperCase(ClassRef.ClassName) = UpperCase(ClassName);
end;
end;

function IsClass(Obj: TObject; const ClassName: string): boolean; overload;
var
ClassRef: TClass;
begin
ClassRef := Obj.ClassType;
Result := IsClass(ClassRef, ClassName);
end;


Этого в моем коде, кстати, нет.


 
Ученик ©   (2002-08-06 19:13) [44]

>DiamondShark © (06.08.02 18:43)
Классно


 
Almaz ©   (2002-08-06 23:38) [45]


> Digitman © (06.08.02 08:31)
> >Almaz
> Отличная идея ! Все верно -"плясать" нужно от получения
> указателя на Frm в АП DstPrg ! Дальше - уже проще дело пойдет.
> Только вот зачем атом создаешь ? Его искать нужно ! Он уже
> существует - достаточно только локализовать его хэндл

Насчет искать атом - это ты точно подметил, просто в 3 часа ночи после вечеринки у меня были проблемы с логическим мышлением :)))


 
DiamondShark ©   (2002-08-26 12:36) [46]

Просто чтоб в даун не ушла ;)



Страницы: 1 2 вся ветка

Текущий архив: 2002.09.23;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
3-73529
bib
2002-09-02 18:37
2002.09.23
Помогите!


6-73781
chsv
2002-07-17 19:25
2002.09.23
вопрос про модем


3-73550
Lion
2002-09-02 21:37
2002.09.23
Помогите с фильтром !


1-73635
Демонов Е.В.
2002-09-10 17:07
2002.09.23
MethodAddress


1-73587
billybons
2002-09-12 09:00
2002.09.23
бегущая строка в статусбаре