SendInput в неактивное окно

Тема в разделе "WASM.RESEARCH", создана пользователем Dreamer_other, 17 фев 2012.

  1. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    Добрый день.
    Есть программа, которая обрабатывает ввод с клавиатуры с использованием directinput8. Необходимо эмулировать нажатия. С этим справляется SendInput, однако он требует, что бы окно целевого приложения было активно. Какие есть способы обойти это ограничение? Может быть можно что-то пропатчить в памяти что бы SendInput не делал эту проверку (если, конечно, она в юзерлевеле)? Или же единственный способ хукать функции directinput-а?
    Так же я пытался найти обработчик ввода внутри программы, но потерпел неудачу из-за отсутствия навыков реверсинга.
     
  2. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    Решил перехватывать DI благо нашелся код делающий то, что нужно (http://www.wasm.ru/forum/viewtopic.php?id=38207). Однако столкнулся с проблемой - брекпойнт в xGetDeviceState() как на зло не срабатывает, хотя прога инициализирует DI (вызываются xDirectInput8Create и xCreateDevice). Означает ли это, что прога не использует DI для чтения клавиатуры? Либо есть другой способ читать данные не используя GetDeviceState()? Так же обнаружил, что прога юзает GetRawInputData(), хукнул ее и подставил свой код кнопки (raw->data.keyboard.VKey == 'w') однако это опять таки не привело к видимому результату... Что же прога может юзать для получения ввода с клавиатуры?
     
  3. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    Обнаружил, что прога импортирует GetKeyboardState(), было обрадовался, а нет, оказалось не оно. Похоже что создатели собрали все способы получения данных клавиатуры, но что используют на самом деле - вот загадка...
     
  4. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    На хуки оно запилено по ходу.
     
  5. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    Вряд ли, потому как с GetRawInputData() я не совсем прав оказался. После ее хука перестал работать шифт(я сначала не заметил). Программа - это игра, на шифте было прицеливание, однако на WASD это никакого влияния не оказало, сл-но их они получают каким-то другим способом. Хотя в упор не понимаю зачем так делать.
     
  6. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    DirectInput точно не при делах, поставил в отладчике бряки на Acquire/Unacquire - не срабатывают, при том что на CreateDevice срабатывает несколько раз. Наверно просто забыли убрать инициализацию...
     
  7. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    AttachThreadInput не помогает ?
     
  8. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    roman_pro
    Нет.
     
  9. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    дык оно тоже передает фокус ввода, насколько я понимаю. а что-то вводить с фокусом проблемы нет - я инъекчу dll и вызываю SendInput(). тока вот оно перестает работать, когда фокус пропадает.

    на самом деле, нашлось грубое решение, выяснилось что vmware поддерживает directx, причем игры идут достаточно шустро. буду юзать его.
     
  10. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    Dreamer_other
    мб в комерц ?
     
  11. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    пока смысла нет - удовлетворительное решение нашлось. да и мне самому интересно найти ответ как они достают кнопки, потом как нибудь еще поковыряюсь.
     
  12. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    Dreamer_other
    Я за 3%4 дня отбиваю полностью драва или аверские вм. Но не найти как кейстат чекается это ппц. Чтоб меня разорвало!
     
  13. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    рад за тебя, что ты такой опытный. однако я не профессиональный реверсер и приступил к этой задаче имея лишь базовые знания winapi из рихтера прочитанного сто лет назад, мне простительно тупить :)) ну и если есть какие-то очевидные вещи, которые я не замечаю, вполне можно было бы подсказать - форум для этого и предназначен.
     
  14. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    Dreamer_other
    Что вам подсказать. Кейстат получается несколькими сервисами, вы сказали что все из проверили. Далее значит чекается не реальный кейстат, а системная очередь сообщений, тут стопяцот методов. Какой из них юзает ваше приложение я знать не могу, кофейная гуща тоже почему то не знает, наверно не так кофе сварил.. Да и вообще в виньапи тока нубы лезут, нормально в юзермодах сие решается через apfnDispatch[]. В ядре захват RIT. Остальное от лукавого. Перечислять шадова хуки етц это полнейший изврат и гемор.
     
  15. Dreamer_other

    Dreamer_other New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2012
    Сообщения:
    9
    Спасибо.