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

Вниз

Обход перехвата WinAPI-функции   Найти похожие ветки 

 
Barsuk   (2009-02-06 15:10) [0]

Добрый день.
Интересует следующее: моя програмка использует API функцию PostMessage, но есть другая прога (не моя) которая перехватывает выполнение этой функции, вопрос, если моя програмка будет загружаться раньше "перехватчика" и при загрузке запоминать адрес функции из dll, то возможна ли работа с функцией после старта "программы-перехватчика"

procedure TForm1.FormCreate(Sender: TObject);
var DLLHandle:THandle;
begin
 DLLHandle := LoadLibrary("user32.dll");
  //Получилось или нет?
 if DLLHandle <> 0 then
    begin       // ищем функцию в dll
    @MySendProc := GetProcAddress(DLLHandle, "PostMessageA");
    end;
 //освобождаем библиотеку
 FreeLibrary(DLLHandle);
end;

procedure TForm1.btnSendKeyClick(Sender: TObject);
var WHandle:HWND;
begin
 WHandle:=StrToInt(Edit1.Text);
 MySendProc(WHandle, WM_KEYDOWN, VK_F10, 1);
end;

P.S. И еще, подскажите, возможно ли определить что процессу в памяти моей проги происходит иньекция чужого кода? И как это предотвратить?


 
DrPass ©   (2009-02-06 15:32) [1]

Ээээ... а ты ЭТО ужн запускал?


 
DrPass ©   (2009-02-06 15:36) [2]

Ах да, сорри, не подумал. Оно действительно ж будет работать, т.к. один вызов FreeLibrary не выгрузит user32.dll...


 
Сергей М. ©   (2009-02-06 16:08) [3]


> если моя програмка будет загружаться раньше "перехватчика"
> и при загрузке запоминать адрес функции из dll, то возможна
> ли работа с функцией после старта "программы-перехватчика"


Если перехватчик использует методы перехвата, связанные искл-но с модификацией IAT и EAT, то возможна.


 
Rouse_ ©   (2009-02-06 17:04) [4]


> моя програмка использует API функцию PostMessage, но есть
> другая прога (не моя) которая перехватывает выполнение этой
> функции

Вот такое твоя программка-перехватчик не поймает, единственное ограничение, что константа уникальна для системы и сервиспака, поэтому ее ручками надо рассчитывать :)
например вот этот код будет работать на ХР SP2.

function SafePostMessage(const AHandle, Msg, WParam, LParam: DWORD): LRESULT;
asm
 push  LParam
 push  WParam
 push  Msg
 push  AHandle
 mov   eax, $000011DB // <- Индекс NtUserPostMessage в SDT
 lea   edx, @done
 push  edx
 push  edx
 mov   edx, esp
 sysenter
@done:
 add   esp, $14
 mov   Result, eax
end;


 
Barsuk   (2009-02-06 23:33) [5]

Попробовал откомпилировать Вашу функцию, компилятор ругается на sysenter.


 
Rouse_ ©   (2009-02-08 12:44) [6]


> компилятор ругается на sysenter.

Ну перепиши вот так:

function SafePostMessage(const AHandle, Msg, WParam, LParam: DWORD): LRESULT;
asm
push  LParam
push  WParam
push  Msg
push  AHandle
mov   eax, $000011DB // <- Индекс NtUserPostMessage в SDT
lea   edx, @done
push  edx
push  edx
mov   edx, esp
db    $0F, $34 // sysenter opcode
@done:
add   esp, $14
end;


 
Barsuk   (2009-02-09 11:37) [7]

Большое спасибо! Все работает.



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
15-1232271058
visiter
2009-01-18 12:30
2009.03.29
англоязычные форумы dephi


2-1233909755
kyn66
2009-02-06 11:42
2009.03.29
Не правильно работает MonthsBetween


10-1153500862
XProger
2006-07-21 20:54
2009.03.29
Вызов _Release


2-1233240872
Fonts
2009-01-29 17:54
2009.03.29
Про фонты дисплея


15-1232440471
Рыбба
2009-01-20 11:34
2009.03.29
Вопрос про наследование форм