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

Вниз

Обход перехвата 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.046 c
2-1233251109
Арт
2009-01-29 20:45
2009.03.29
Доступ к компонентам


3-1217238791
Fynjy
2008-07-28 13:53
2009.03.29
как вручную создать TIBDataBase


6-1201453017
XakeP
2008-01-27 19:56
2009.03.29
Как написать прокси-сервер


2-1233646031
pavel_guzhanov
2009-02-03 10:27
2009.03.29
Странно передается параметр в запрос


15-1232945293
Slider007
2009-01-26 07:48
2009.03.29
С днем рождения ! 25 января 2009 воскресенье





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский