Главная страница
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.024 c
4-1206779666
kalexi
2008-03-29 11:34
2009.03.29
Как узнать с какого по какой адрес занимает процесс в системе?


3-1216950454
Konrads
2008-07-25 05:47
2009.03.29
Смена пароля в FireBird 2.0


15-1232784590
Кое кто
2009-01-24 11:09
2009.03.29
Чем читать файл *.RM?


15-1232920547
pushkin42
2009-01-26 00:55
2009.03.29
Глупая ситуация...


15-1232421567
Slider007
2009-01-20 06:19
2009.03.29
С днем рождения ! 20 января 2009 вторник