Может ли устройство выдавать себя за клавиатуру USB?


16

Что я ищу:

Есть ли способ сделать устройство претендующим на то, чтобы быть клавиатурой / HID при подключении к USB-порту и "вводить" содержимое буфера обмена? Точнее; Что нужно сделать, чтобы это произошло?

Мотивирующий вариант использования:

У меня на телефоне установлена ​​программа для хранения паролей, но раздражает необходимость считывать пароль с устройства и пытаться ввести его на другом компьютере.

Фон:

У меня есть устройство Android, которое было построено до того, как MTP был поддержан для передачи файлов, но с последними обновлениями теперь поддерживает его. Исходя из этого, класс USB, который он утверждает, не может быть аппаратно определен и должен быть определен в программном обеспечении.

IIRC, в этом проекте Android-устройства (с тем, что я считаю стандартным ядром) говорят как некий USB-класс, который окончательно не встроен. Это указывает на то, что вы можете контролировать, какие классы USB он поддерживает, без работы ядра, но я не знаю точно.

Что касается хоста (то есть ПК), я никогда не видел, чтобы ПК, Mac или Linux не нуждались в специальных дисках для клавиатур, даже для некоторых довольно эзотерических устройств, которые претендуют на роль клавиатур (сканеры штрих-кода, кредитные карты и смарт-карты). устройства чтения карт и т. д.) поэтому общие драйверы должны быть достаточно хороши для того, что я хочу.

Все, что утверждает, что то, что я ищу, может быть сделано с аппаратной точки зрения , но очень мало говорит о том, какая поддержка программного обеспечения существует, и ничего о том, есть ли приложение для нее.


2
Вы можете попробовать использовать KeePass (KeePassDroid на Android, keepassx на Linux и т. Д.) На телефоне и компьютере и просто синхронизировать между собой файл базы данных или получить доступ к файлу базы данных на телефоне через USB с компьютера. Другие менеджеры паролей также могут иметь аналоги «реального компьютера».
TREE

@TREE: в некоторых случаях это может сработать, но одно из конкретных целевых применений - это то, что у меня нет возможности установить что-либо на ПК (либо нет доступа, либо проблема курица / яйцо, например пароли при входе в систему) ,
БКС

Существует также портативная версия KeePass, которая может работать с USB-накопителя. Это может работать с подключенного Android-устройства хранения USB, но, конечно, не учитывает все возможные варианты использования.
TREE

Ответы:


15

Да. Это определенно возможно, не требуя никаких модификаций или драйверов на ПК. Как упоминает OP, идентификация USB на конце телефона в конечном итоге выполняется программно (в этом файле https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c ), и его можно изменить, чтобы идентифицировать себя как стандартную клавиатуру USB.

Это изменение потребует нескольких вещей.

  1. Модифицированное ядро ​​с пропатченным драйвером USB
  2. Android-приложение, которое может взаимодействовать с каким-либо интерфейсом, доступным через модифицированный драйвер USB.

Пару лет назад была опубликована статья под названием « Использование USB-подключения к смартфону для развлечения и выгоды», в которой описывалось использование телефона для грубых действий на экранах входа в систему. Метод, который они использовали, включал отображение телефона в виде клавиатуры USB.


Больше информации можно найти здесь .
Сампаблокупер

github.com/pelya/android-keyboard-gadget Это было реализовано здесь ... и необходимое Android-приложение также доступно
Abhigyan

2

Это не совсем отвечает на ваш вопрос, но может помочь в вашем случае использования.

Может быть, вы хотите взглянуть на InputStick . Это будет USB-накопитель, который вы подключите к Android через Bluetooth. Подключенный к компьютеру, он эмулирует общий USB HID для отправки ударов по клавиатуре. Усовершенствованный Java API также позволит указывать, например, дескрипторы устройств для эмуляции нестандартных функций. Это может послужить хорошим примером того, что он определен программно, а не аппаратно.

Для справки, разработчик также работает с примерами программ, таких как Demo Password Manager.


0

Как минимум, для этого потребуется программное обеспечение на телефоне и на ПК. 2 части программного обеспечения должны были бы общаться друг с другом. Ничего подобного, что я знаю в настоящее время, не существует.

А для того, чтобы ПК думал, что устройство действительно является клавиатурой, ему потребуется новый драйвер, который сообщит ПК, что устройство является клавиатурой, и как «использовать его в качестве клавиатуры».

Я не говорю, что это невозможно, потому что практически все возможно, когда дело доходит до таких вещей. Однако я говорю, что ничего подобного в настоящее время не существует.

USB - это и аппаратное, и программное обеспечение. Если бы он был программным, то один и тот же драйвер USB работал бы для всех устройств Android в Windows, а это не так. USB-накопитель и MTP обрабатываются драйверами на ПК, а не на устройстве. Какие устройства поддерживают как MTP, так и USB-накопители одновременно? Я нашел статьи о том, что устройства могут поддерживать UMS и MTP, но поддерживают UMS, только если есть внешняя SD-карта. Вы не можете подключить внешнюю SD-карту с помощью MTP и UMS. MTP для внутреннего хранения. И я не читал ничего, что могло бы подтвердить или опровергнуть, что вы можете использовать оба одновременно.

Вам не нужно устанавливать драйверы для клавиатур, если они следуют спецификации «по умолчанию», потому что в Windows уже есть драйверы для нее. Есть клавиатуры, которые поставляются со своими драйверами. Как я уже сказал, это было бы возможно. Я не уверен, как это будет сделано. Почти наверняка потребовалось бы собственное ядро, чтобы оно действовало как клавиатура, и никаких дополнительных драйверов на стороне ПК не требовалось.

Кроме того, я согласен с @davidbb, что это возможно, и я уже сказал, что это так. Проблема с вопросом о том, возможно ли что-то, никогда не решает проблему. Это было бы похоже на то, как я говорю «возможно ли мне запускать приложения ios на Windows?». Это теоретически возможно, но сейчас ничего такого не происходит, и «обычный пользователь» (или даже опытный пользователь) не может сделать этого. Этот сайт предназначен для пользователей, поэтому если вам нужно написать модифицированное ядро, это не тот ответ, который принесет пользу кому-либо. Таким образом, реальный ответ на вопрос - нет, потому что там нет модифицированного ядра.


IIRC, конец USB-соединения для Android выполнен программно (должно быть в той же степени, чтобы одно и то же оборудование функционировало как запоминающее устройство USB, так и MTP). Исходя из этого, что должно препятствовать тому, чтобы драйвер только на стороне устройства заставлял устройство объявлять о себе как об общем HID? Если это можно сделать, то те же драйверы на стороне ПК, которые обрабатывают любую другую клавиатуру, будут обрабатывать ее (как это делается для таких вещей, как сканеры штрих-кода и устройства для считывания кредитных карт).
БКС

Я добавил к своему ответу адрес вашего комментария.
Райан Конрад

Устройства Android (аппаратные средства), которые были созданы до использования MTP, теперь работают как класс MTP USB, поэтому классы, которые, как заявляет устройство, работают, должны быть определены в программном обеспечении. Я не могу вспомнить, установил ли я когда-либо драйвер для клавиатуры (или, если на то пошло, не универсальный драйвер для подключения устройства Android), поэтому не нужно устанавливать ничего на стороне ПК. Объедините их, и я почти уверен, что аппаратное обеспечение сможет это сделать. Остается только один вопрос: предоставляет ли Android Android доступ к нужным регуляторам, или это займет создание собственного ядра?
БКС

Re: 2-е редактирование. Думаю, я ищу человека, который точно знает, что для этого нужно. (Можете ли вы переместить этот последний абзац наверх?)
BCS

Этот ответ неверен, никакого программного обеспечения на стороне ПК не требуется. Для разных телефонов требуются разные драйверы, поскольку производители не используют один и тот же идентификационный номер поставщика. Клавиатуры, однако, относятся к другой категории устройств, где они распознаются хостом по типу, поэтому идентификатор поставщика не имеет большого значения. VID / PID, тип устройства, протоколы и т. Д. Все реализованы в программном обеспечении на стороне Android и могут быть изменены любым пользователем с исходным кодом ядра и способом установки скомпилированного результата.
Крис Страттон

0

Вы пробовали Unified Remote . Это отличный инструмент для использования телефона в качестве клавиатуры и мыши. Он использует не USB, а Wi-Fi. На телефоне и компьютере есть приложение, которое работает вместе. Прекрасно работает для меня. Также, если вы получаете полную версию, вы получаете интеграцию со многими распространенными приложениями.


Я ищу решение для случаев, которые включают в себя такие вещи, как ввод паролей в подсказки загрузки BIOS, поэтому я не могу установить какой-либо клиент.
BCS

0

Я искал что-то подобное и нашел

https://github.com/pelya/android-keyboard-gadget

Кажется, то же самое можно использовать в вашем случае. Вкратце, что я получил, вы должны написать драйвер USB в ядре Android, чтобы обнаружить устройство как HID.


0

Сейчас прошло> шесть лет, и где-то посередине кто-то создал USB-плагин Keepass2 для клавиатуры Keepass2Android .

Хотел добавить сюда эту информацию ради полноты и потому, что я нашел этот вопрос без ответа и вышеупомянутый плагин при поиске именно такого.

Я еще не проверял это сам ...


-1

InputStick - это беспроводной USB-приемник, разработанный для устройств Android. Это позволяет приложениям Android эмулировать различные типы устройств, например: USB-клавиатура, USB-мышь, USB-геймпад и многие другие. С InputStick приложения для Android могут делать все, что может физическое устройство: печатать, перемещать указатель мыши, управлять мультимедиа и играми.

Информация может быть найдена в http://inputstick.com/


1
Это читается как реклама. Каковы ваши отношения с этим продуктом?
Дэн Халм
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.