Перехват API на 32 и 64битных Windows XP,Vista,7

Тема в разделе "WASM.BEGINNERS", создана пользователем Chikanok, 30 апр 2010.

  1. Chikanok

    Chikanok New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    57
    Добрый день.
    Подскажите, максимально простой и рабочий под все перечисленные ОС, метод перехвата API вызова.
    Надо перехватить BeginPaint и EndPaint только для одного процесса, Моя Dll уже живет в его адрессном пространстве.
    И скажите, пожалуйста, как на это среагируют антивирусы.

    Нужно для того чтобы окно отрисовалось на моем HDC, пробовал WM_PRINT и WM_PRINTCLIENT, но не рисуются некоторые состояния окон (напимер перетаскивание элемента в ListView).
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Chikanok
    WM_PAINT ?
     
  3. Chikanok

    Chikanok New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    57
    Тоесть в WM_PAINT в wParam сунуть свой HDC ?
    Надо попробовать, но сомневась.
     
  4. Chikanok

    Chikanok New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    57
    Результат аналогичный.
    Перетаскивание и редактирование не отрисовываются.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Chikanok
    Обычно BeginPaint() юзается при обработке WM_PAINT. Посмотрите в вашем приложении, это так должно быть. Тогда сабклассинг + трассировка до целевой функции. Можно чтонибудь с apfn попробовать сделать, но это начнётся привязка к версиям.
     
  6. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    пожалуй получше сабклассинга будет такого плана код
    Код (Text):
    1. case DLL_PROCESS_ATTACH:
    2.       {
    3.          hInstDLL = hinstDLL;
    4.          hHook = SetWindowsHookEx(WH_GETMESSAGE, HookProc, hInstDLL, GetCurrentThreadId());
    5.       }break;
    и ловишь оконные месиджи в своем процессе
     
  7. Chikanok

    Chikanok New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    57
    Мне не сабклассинг не хуки не помогут.
    Мне надо перехватить вызов BeginPaint и EndPaint, скажите есть какой-нибудь метод чтобы он работал в Windows XP/Vista/7 32 и 64 бит?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Chikanok
    Есть такой отвратительный метод как патч. Запишите туда джамп какойнибудь, мб вам будет достаточно.
     
  9. Chikanok

    Chikanok New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    57
    А что такого отвратительно в этом методе?
    Возможны-ли какие-нибудь проблемы в случае разных версии ОС?
     
  10. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    Код (Text):
    1. А что такого отвратительно в этом методе?
    палиться Rku :)
     
  11. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Тогда поясните please какие методы скрытны для антивирей? и почему они более скрытны (с jmp конечно ясен хрен, однако, тогда каким образом ставятся хуки, без модификации памяти???)?
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Например тотже рку - один клик мышью как все перехваты снимаются, вместе с этим отваливаются все костыли в виде софта, которые испортили кодосекции.
    featurelles
    Весьма странный вопрос. Почитайте васм хотябы. Тут я описал множество всяких техник, ни одна не связана с изменением кода. Как такие вопросы могут у вас возникать не понимаю.