| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Локальный перехват API-вызовов в Win32 |
| Автор: fire64 17.1.2010, 15:09 | ||
| Здравствуйте. Подскажите как справиться с задачей: Нужно перехватить API-вызов к заданной экспортной функции в заданном процессе при определенных аргументах вызова. приведу пример. скажем есть программа test.exe и библиотека test.dll в которой есть экспортная функция
и скажем если передаваемый аргумент arg равен 2, то заменить testfunction на свой вариант, а если arg равен 3, то не перехватывать и пропустить его |
| Автор: EvilsInterrupt 17.1.2010, 15:45 |
| 2 fire64 : Почитай подобное на wasm.ru в одной из статей от Ms-Rem. Реализуй сначала на основе патча таблицы импорта, а уж потом переходи на сплайсинг. В общем виде выглядит так: 1) Ставишь в таблицу импорта адрес на свою функцию 2) В коде перехвата смотришь стек возврата и откатываешься назад 3) Откатившись назад, знаешь что за АПИ-фукнция 4) Зная что за АПИ смотрешь в заранее заготовленный список по типу аргументов нужных библиотек как выглядит код перехвата, псевдо асм: push all registers push eflags здесь и делаешь п.2, п.3 и п4 pop eflags pop allregisters jmp dword [ native_api_func ] список по кол-ву аргументов можно получить из lib-файлов соответствующих длл-ок, но там они замангленные. Как правило циферка после @<кол-во стека> и количество стека делить на 4 есть кол-во аргументов! |
| Автор: GoldFinch 17.1.2010, 16:36 | ||||
| EvilsInterrupt, как-то ты все сложно написал, и немного не о том fire64, пишешь на своем любимом ЯВУ длл, которая импортирует testfunction код перехвата будет такой
а в дллмайн ищешь в test.exe в таблице импорта адрес testfunction и меняешь его на hook_function Добавлено @ 16:45 конечно вместо поиска в таблице импорта можно посплайсить testfunction, тогда код будет такой
|