Главная страница
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.021 c
2-1233694291
mifi
2009-02-03 23:51
2009.03.29
инди сокет


6-1201094893
Михаил (Питер)
2008-01-23 16:28
2009.03.29
Поиск в локальной сети


15-1233294554
Knight
2009-01-30 08:49
2009.03.29
Интерфейсы и события...


2-1233825648
АБВ
2009-02-05 12:20
2009.03.29
TNotifyEvent;


2-1233732753
Mishenka
2009-02-04 10:32
2009.03.29
Ошибка при обращении к свойству Lines компонента DBRichEdit