¿Puede un dispositivo pretender ser un teclado USB?


16

Lo que estoy buscando:

¿Hay alguna manera de hacer que el dispositivo afirme ser un teclado / HID cuando se conecta a un puerto USB y "escriba" el contenido del portapapeles? Con más precisión; ¿Qué se necesitaría para que esto suceda?

Caso de uso motivador:

Tengo un programa para guardar contraseñas en mi teléfono, pero es molesto tener que leer la contraseña del dispositivo e intentar escribirla en otra computadora.

Antecedentes:

Tengo un dispositivo Android que se creó antes de que MTP fuera compatible para transferir archivos pero, con actualizaciones recientes, ahora lo admite. Basado en esto, la clase de USB que dice ser no puede definirse por hardware y debe definirse en software.

IIRC, este proyecto tiene dispositivos Android (con lo que creo que es un kernel de serie) hablando como una clase de USB que definitivamente no fue incorporada. Esto me indica que podría controlar qué clases de USB admite sin el trabajo del kernel, pero yo No estoy seguro.

En cuanto al lado del host (es decir, la PC), nunca he visto una PC, Mac o Linux necesitan unidades especiales para teclados, incluso para algunos dispositivos bastante esotéricos que dicen ser teclados (escáneres de códigos de barras, tarjetas de crédito e inteligentes). lectores de tarjetas, etc.) por lo que los controladores genéricos deberían ser lo suficientemente buenos para lo que quiero.

Todo lo que sostiene es que lo que estoy buscando se puede hacer desde el punto de vista del hardware , pero dice muy poco sobre qué soporte de software existe y nada sobre si hay una aplicación para ello.


2
Puede intentar usar KeePass (KeePassDroid en Android, keepassx en Linux, etc.) tanto en su teléfono como en su computadora, y simplemente sincronizar el archivo de la base de datos entre ellos, o acceder al archivo de la base de datos en el teléfono a través de USB desde la computadora. Otros administradores de contraseñas también pueden tener contrapartes de "computadora real".
ÁRBOL

@TREE: Eso podría funcionar para algunos casos, pero uno de los usos específicos de destino es donde no tengo la capacidad de instalar algo en la PC (ya sea sin acceso o un problema de huevo / gallina como las contraseñas de inicio de sesión del sistema) .
BCS

También hay una versión portátil de KeePass que puede ejecutarse desde una memoria USB. Esto podría funcionar desde un dispositivo de almacenamiento USB Android montado, pero ciertamente no aborda todos los casos de uso posibles.
ÁRBOL

Respuestas:


15

Si. Esto es definitivamente posible, ya que no requiere modificaciones ni controladores en la PC. Como menciona el OP, la identificación del USB en el extremo del teléfono se realiza finalmente en software (en este archivo https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c ), y podría modificarse para identificarse como un teclado USB estándar.

Este cambio requeriría un par de cosas.

  1. Un kernel modificado con un controlador USB parcheado
  2. Una aplicación de Android que podría comunicarse con alguna interfaz expuesta por el controlador USB modificado.

Hubo un documento publicado hace un par de años (titulado Explotación de la conectividad USB de teléfonos inteligentes para divertirse y obtener ganancias ) que describía el uso de un teléfono para forzar pantallas de inicio de sesión de escritorio. El método que usaron implicó hacer que el teléfono apareciera como un teclado USB.


Más información se encuentra aquí .
sampablokuper

github.com/pelya/android-keyboard-gadget Se ha implementado aquí ... y la aplicación de Android requerida también está disponible
Abhigyan

2

Esto no responde exactamente a su pregunta, pero podría ayudarlo en su caso de uso.

Tal vez quieras echar un vistazo a InputStick . Será una unidad de memoria USB que empareje con Android a través de Bluetooth. Conectado a una computadora, emula un USB HID genérico para enviar golpes de teclado. Una API Java avanzada también permitirá especificar, es decir, descriptores de dispositivos para emular funciones no estándar. Podría proporcionar un buen ejemplo de que está definido en software en lugar de hardware.

Como referencia, el desarrollador también está trabajando en programas de ejemplo, como un Administrador de contraseñas de demostración.


0

Como mínimo, esto requeriría tanto software en el teléfono como en la PC. Las 2 piezas de software tendrían que comunicarse entre sí. Nada de esto, que yo sepa actualmente, existe.

Y para que la PC piense que el dispositivo es realmente un teclado, requeriría un nuevo controlador que le diga a la PC que el dispositivo es un teclado y cómo "usarlo como teclado".

No estoy diciendo que no sea posible, porque casi todo es posible cuando se trata de cosas como esta. Sin embargo, lo que estoy diciendo es que nada de esto existe actualmente.

USB es tanto hardware como software, si fuera solo software, entonces el mismo controlador USB funcionaría para todos los dispositivos Android en Windows, y este no es el caso. El almacenamiento masivo USB y el MTP son manejados por los controladores en la PC, no por el dispositivo. ¿Qué dispositivos son compatibles con el almacenamiento masivo MTP y USB y al mismo tiempo? He encontrado artículos que indican que los dispositivos pueden admitir UMS y MTP, pero solo admiten UMS si hay una tarjeta sd externa. No puede montar la tarjeta sd externa con MTP y con UMS. MTP es para el almacenamiento interno. Y no he leído nada que pueda confirmar o negar que puede usar ambos al mismo tiempo.

No tiene que instalar controladores para teclados si siguen la especificación "predeterminada" porque Windows ya tiene los controladores para ello. Hay teclados que vienen con sus propios controladores. Como dije, sería posible. No estoy seguro de cómo se haría. Es casi seguro que requerirá un núcleo personalizado como mínimo para que actúe como un teclado y no se necesiten controladores adicionales en el lado de la PC.

Además, estoy de acuerdo con @davidbb en que es posible y ya he dicho que sí. El problema con una pregunta que pregunta si algo es posible, nunca resuelve el problema. Sería como si yo dijera "¿es posible para mí ejecutar aplicaciones iOS de forma nativa en Windows?". Esto es teóricamente posible, pero no hay nada que haga esto ahora y no hay algo que un "usuario normal" (o incluso un usuario avanzado) pueda hacer para que esto suceda. Este sitio está dirigido a usuarios, por lo que decir que solo necesita escribir un kernel modificado no es una respuesta que vaya a beneficiar a nadie. Entonces, la verdadera respuesta a la pregunta es no, porque no hay un núcleo modificado por ahí.


IIRC, el extremo de Android de la conexión USB se realiza en software (tiene que ser, en cierta medida, para que el mismo hardware actúe tanto como dispositivo de almacenamiento masivo USB como MTP). Basado en eso, ¿qué es para evitar que un controlador solo del lado del dispositivo haga que el dispositivo anuncie que es un HID genérico? Si eso se puede hacer, entonces los mismos controladores del lado de la PC que manejan cualquier otro teclado lo manejarán (al igual que se hace para cosas como lectores de códigos de barras y lectores de tarjetas de crédito).
BCS

He agregado a mi respuesta para abordar su comentario.
Ryan Conrad

Los dispositivos Android (hardware) que se construyeron antes de que se utilizara MTP ahora funcionan como la clase MTP USB, por lo tanto, las clases que el dispositivo afirma que funcionan deben definirse en el software. No recuerdo si alguna vez instalé un controlador para un teclado (o si es un controlador no genérico para conectar un dispositivo Android), por lo tanto, no debería ser necesario instalar nada en el PC. Combina esos y estoy casi seguro de que el hardware puede hacerlo. La única pregunta que queda es: ¿Android proporciona acceso a las perillas necesarias, o esto requeriría construir un kernel personalizado?
BCS

Re: 2da edición. Supongo que estoy buscando a alguien que sepa definitivamente lo que se necesitaría. (¿Puedes mover ese último párrafo a la parte superior?)
BCS

Esta respuesta es incorrecta, no se requiere software en el lado de la PC. Los diferentes teléfonos requieren diferentes controladores porque no todos los fabricantes usan el mismo número de identificación del proveedor. Sin embargo, los teclados caen en una categoría diferente de dispositivo donde el host los reconoce por tipo, por lo que la identificación del proveedor realmente no importa. El VID / PID, el tipo de dispositivo, los protocolos, etc. se implementan en el software en el lado de Android, y pueden ser cambiados por cualquier persona con fuente del núcleo y una forma de instalar el resultado compilado.
Chris Stratton

0

¿Has probado Unified Remote ? Esta es una gran herramienta para usar el teléfono como teclado y mouse. No usa USB sino wifi en su lugar. Hay una aplicación para teléfono y computadora que funciona en conjunto. Funciona muy bien para mi. Además, si obtienes la versión completa, obtienes integración con muchas aplicaciones comunes.


Estoy buscando una solución para casos que incluyen cosas como escribir contraseñas en las solicitudes de arranque del BIOS, por lo que realmente no puedo instalar ningún tipo de cliente.
BCS


0

Ahora> seis años más tarde, y en algún punto intermedio, alguien creó el complemento de teclado USB Keepass2 para Keepass2Android .

Quería agregar esta información aquí en aras de la integridad y porque encontré esta pregunta sin respuesta y el complemento mencionado anteriormente mientras buscaba exactamente algo así.

Todavía no lo he probado ...


-1

InputStick es un receptor USB inalámbrico, diseñado para dispositivos Android. Permite que las aplicaciones de Android emulen muchos tipos diferentes de dispositivos, por ejemplo: teclado USB, mouse USB, gamepad USB y muchos más. Con InputStick, las aplicaciones de Android pueden hacer cualquier cosa que un dispositivo físico puede hacer: escribir, mover el puntero del mouse, controlar multimedia y juegos.

La información se puede encontrar en http://inputstick.com/


1
Esto se lee como un anuncio. ¿Cuál es tu relación con este producto?
Dan Hulme
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.