![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| fire64 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 18.7.2007 Репутация: нет Всего: нет |
Здравствуйте.
Подскажите как справиться с задачей: Нужно перехватить API-вызов к заданной экспортной функции в заданном процессе при определенных аргументах вызова. приведу пример. скажем есть программа test.exe и библиотека test.dll в которой есть экспортная функция
и скажем если передаваемый аргумент arg равен 2, то заменить testfunction на свой вариант, а если arg равен 3, то не перехватывать и пропустить его |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 1 Всего: 9 |
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 есть кол-во аргументов! Это сообщение отредактировал(а) EvilsInterrupt - 17.1.2010, 16:00 |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
EvilsInterrupt,
как-то ты все сложно написал, и немного не о том fire64, пишешь на своем любимом ЯВУ длл, которая импортирует testfunction код перехвата будет такой
а в дллмайн ищешь в test.exe в таблице импорта адрес testfunction и меняешь его на hook_function Добавлено @ 16:45 конечно вместо поиска в таблице импорта можно посплайсить testfunction, тогда код будет такой
Это сообщение отредактировал(а) GoldFinch - 17.1.2010, 16:51 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |