Форум: "Начинающим";
Текущий архив: 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.043 c