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

Discussion in 'WASM.RESEARCH' started by Dreamer_other, Feb 17, 2012.

  1. Dreamer_other

    Dreamer_other New Member

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

    Dreamer_other New Member

    Blog Posts:
    0
    Решил перехватывать 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

    Blog Posts:
    0
    Обнаружил, что прога импортирует GetKeyboardState(), было обрадовался, а нет, оказалось не оно. Похоже что создатели собрали все способы получения данных клавиатуры, но что используют на самом деле - вот загадка...
     
  4. totimoud

    totimoud New Member

    Blog Posts:
    0
    На хуки оно запилено по ходу.
     
  5. Dreamer_other

    Dreamer_other New Member

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

    Dreamer_other New Member

    Blog Posts:
    0
    DirectInput точно не при делах, поставил в отладчике бряки на Acquire/Unacquire - не срабатывают, при том что на CreateDevice срабатывает несколько раз. Наверно просто забыли убрать инициализацию...
     
  7. roman_pro

    roman_pro New Member

    Blog Posts:
    0
    AttachThreadInput не помогает ?
     
  8. totimoud

    totimoud New Member

    Blog Posts:
    0
    roman_pro
    Нет.
     
  9. Dreamer_other

    Dreamer_other New Member

    Blog Posts:
    0
    дык оно тоже передает фокус ввода, насколько я понимаю. а что-то вводить с фокусом проблемы нет - я инъекчу dll и вызываю SendInput(). тока вот оно перестает работать, когда фокус пропадает.

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

    totimoud New Member

    Blog Posts:
    0
    Dreamer_other
    мб в комерц ?
     
  11. Dreamer_other

    Dreamer_other New Member

    Blog Posts:
    0
    пока смысла нет - удовлетворительное решение нашлось. да и мне самому интересно найти ответ как они достают кнопки, потом как нибудь еще поковыряюсь.
     
  12. totimoud

    totimoud New Member

    Blog Posts:
    0
    Dreamer_other
    Я за 3%4 дня отбиваю полностью драва или аверские вм. Но не найти как кейстат чекается это ппц. Чтоб меня разорвало!
     
  13. Dreamer_other

    Dreamer_other New Member

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

    totimoud New Member

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

    Dreamer_other New Member

    Blog Posts:
    0
    Спасибо.