Перехват API функций в Windows

Тема в разделе "WASM.BEGINNERS", создана пользователем vatson123, 3 сен 2007.

  1. vatson123

    vatson123 New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    3
    в статье "Перехват API функций в Windows NT (часть 1). Основы перехвата." расписаны методы установки Hook на NativeAPI ф-ции. По образу ProcHide (http://www.wasm.ru/pub/21/files/prochide.rar) у меня получилось поставить Hook на другую ф-цию. Вопрос в следующем: как из одной dll поставить несколько hook ? Как бы писать под каждую ф-цию свою dll не правильно.
     
  2. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Ну... даже не знаю что и ответить..
    По порядку.
    1. Не надо использовать этот метод (из первой части) - он слишком топорный и мало применимый (постоянно снятие/установка перехвата - ведет к проблемам при многопоточности и пр.).
    2. Вы бы разобрались, что ли, в коде - то, ничто не мешает устанавливать сразу несколько перехватов из одной dll. Просто пишем New- функции для каждой их перехватываемых и делаем перехват столько раз сколько нужно.
     
  3. vatson123

    vatson123 New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    3
    Спасибо за ответ, но все же.
    В ф-ции
    procedure SetHook();
    var
    Bytes: dword;
    begin
    PtrZwq := GetProcAddress(GetModuleHandle('ntdll.dll'), ZwCreateKey);

    ReadProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, @OldZwq, SizeOf(OldCode), Bytes);
    JmpZwq.PuhsOp := $68;
    JmpZwq.PushArg := @NewZwCreateKey;
    JmpZwq.RetOp := $C3;
    WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, @JmpZwq, SizeOf(far_jmp), Bytes);
    end;


    Явно указывается Hook на какую ф-wb. ставиться,
    при попытке сделать procedure SetHook(func: PAnsiChar);
    и дальше в зависимости от func ставить hook на разные ф-ции
    SetGlobalHook();
    SetHook('ZwCreateKey');
    SetGlobalHook();
    SetHook('ZwDeleteKey');

    Система перегрузилась
     
  4. vatson123

    vatson123 New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    3
    Все, вроде бы разобрался...
    Надо было сохранять значения для каждой из перехватываемых ф-ций
    JmpZwq: far_jmp;
    OldZwq: OldCode;
    PtrZwq: pointer;