Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.01 c
6-73803
Nubie
2002-07-18 14:44
2002.09.23
Цвет фона выделенного текста в RichEdit.


1-73604
Max2000
2002-09-11 10:40
2002.09.23
Windows NT 4.0


1-73740
still
2002-09-11 16:05
2002.09.23
Создание справки


3-73537
Viacheslav
2002-09-03 09:02
2002.09.23
Добавление записи в таблицу.


3-73574
Vicheslav
2002-08-31 08:50
2002.09.23
Модель безопасности ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский