Um dispositivo pode fingir ser um teclado USB?

16

O que estou olhando:

Existe uma maneira de fazer com que o dispositivo afirme ser um teclado / HID quando conectado a uma porta USB e "digite" o conteúdo da área de transferência? Mais precisamente; O que seria necessário para que isso acontecesse?

Motivar caso de uso:

Eu tenho um programa de proteção de senhas no meu telefone, mas é irritante ter que ler a senha do dispositivo e tentar digitá-la em outro computador.

Fundo:

Eu tenho um dispositivo Android que foi construído antes do suporte ao MTP para transferência de arquivos, mas, com atualizações recentes, agora é compatível. Com base nisso, a classe USB que afirma ser não pode ser definida por hardware e deve ser definida em software.

IIRC, este projeto tem dispositivos Android (com o que eu acho que é um kernel padrão) falando como uma classe USB que definitivamente não foi incorporada. Isso indica para mim que você pode controlar quais classes USB ele suporta sem o trabalho do kernel, mas eu não tenho certeza.

Quanto ao lado do host (ou seja, o PC), nunca vi uma caixa de PC, Mac ou Linux precisar de unidades especiais para teclados, mesmo para alguns dispositivos esotéricos que afirmam ser teclados (scanners de código de barras, cartão de crédito e smart) leitores de cartões, etc.) para que os drivers genéricos sejam bons o suficiente para o que eu estou querendo.

Tudo isso argumenta que o que estou procurando pode ser feito do ponto de vista do hardware , mas diz muito pouco sobre o suporte a software existente e nada sobre se existe um aplicativo para ele.

BCS
fonte
2
Você pode tentar usar o KeePass (KeePassDroid no android, keepassx no linux etc.) no telefone e no computador e apenas sincronizar o arquivo do banco de dados entre eles ou acessar o arquivo do banco de dados no telefone via USB a partir do computador. Outros gerenciadores de senhas também podem ter contrapartes do "computador real".
ÁRVORE
@TREE: Isso pode funcionar em alguns casos, mas um dos usos específicos de destino é que não tenho a capacidade de instalar algo no PC (sem acesso ou com problemas de galinha / ovo, como senhas de logon do sistema) .
BCS
há também uma versão portátil do KeePass que pode ser executada a partir de um pendrive. Isso pode funcionar em um dispositivo USB de armazenamento Android montado, mas certamente não trata de todos os casos de uso possíveis.
ÁRVORE

Respostas:

15

Sim. Definitivamente, isso é possível, sem exigir modificações ou drivers no PC. Como o OP menciona, a identificação USB na extremidade do telefone é finalmente feita em software (neste arquivo https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c ) e pode ser modificado para se identificar como um teclado USB padrão.

Essa mudança exigiria algumas coisas.

  1. Um kernel modificado com um driver USB corrigido
  2. Um aplicativo Android que pode conversar com alguma interface exposta pelo driver USB modificado.

Havia um artigo publicado há alguns anos (intitulado Explorando a conectividade USB de smartphones para diversão e lucro ) que descrevia o uso de um telefone para forçar as telas de login de desktops. O método usado envolveu fazer o telefone aparecer como um teclado USB.

davidbb
fonte
Mais informações podem ser encontradas aqui .
precisa saber é o seguinte
github.com/pelya/android-keyboard-gadget Foi implementado aqui .. e o aplicativo Android necessário também está disponível
Abhigyan
2

Isso não responde exatamente à sua pergunta, mas pode ajudar no seu caso de uso.

Talvez você queira dar uma olhada no InputStick . Será um pen drive USB emparelhado com o Android via Bluetooth. Conectado a um computador, ele emula um USB HID genérico para enviar pressionamentos de teclado. Uma API Java avançada também permitirá especificar descritores de dispositivos para emular funções não padrão. Poderia fornecer um bom exemplo de que é definido em software e não em hardware.

Para referência, o desenvolvedor também está trabalhando em programas de exemplo, como o Demo Password Manager.

Mini-Me
fonte
0

No mínimo, isso exigiria software no telefone e no PC. Os dois pedaços de software teriam que se comunicar. Nada disso, que eu saiba atualmente, existe.

E para o PC pensar que o dispositivo é realmente um teclado, seria necessário um novo driver que informasse ao PC que o dispositivo é um teclado e como "usá-lo como um teclado".

Não estou dizendo que isso não seja possível, porque praticamente tudo é possível quando se trata de coisas assim. O que estou dizendo, porém, é que nada disso existe atualmente.

USB é hardware e software; se fosse apenas software, o mesmo driver USB funcionaria para todos os dispositivos Android no Windows, e esse não é o caso. O armazenamento em massa USB e o MTP são gerenciados pelos drivers no PC, não pelo dispositivo. Quais dispositivos suportam armazenamento em massa MTP e USB e ao mesmo tempo? Encontrei artigos informando que os dispositivos podem suportar UMS e MTP, mas apenas suportam UMS se houver um sdcard externo. Você não pode montar o sdcard externo com MTP e com UMS. MTP é para o armazenamento interno. E não li nada que possa confirmar ou negar que você possa usar os dois ao mesmo tempo.

Você não precisa instalar drivers para teclados, se eles seguirem a especificação "padrão", porque o Windows já possui os drivers. Existem teclados que vêm com seus próprios drivers. Como eu disse, seria possível. Não tenho certeza de como isso seria feito. Exigiria, quase certamente, um kernel personalizado, no mínimo, para que ele funcionasse como um teclado e nenhum driver adicional fosse necessário no lado do PC.

Além disso, concordo com @davidbb que isso é possível e já disse que é. O problema com uma pergunta perguntando se algo é possível, nunca resolve o problema. Seria como eu dizendo "é possível executar aplicativos iOS nativamente no Windows?". Isso é teoricamente possível, mas não há nada que faça isso agora e não há algo que um "usuário normal" (ou mesmo um usuário avançado) possa fazer para que isso aconteça. Este site é voltado para usuários, portanto, dizer que você só precisa escrever um kernel modificado não é uma resposta que beneficiará ninguém. Portanto, a resposta real para a pergunta é não, porque não existe um kernel modificado por aí.

Ryan Conrad
fonte
IIRC, a extremidade android da conexão USB é feita em software (deve ser, até certo ponto, que o mesmo hardware atue como dispositivo de armazenamento em massa USB e MTP). Com base nisso, o que é impedir que um único driver do lado do dispositivo faça com que o dispositivo anuncie a si próprio como um HID genérico? Se isso puder ser feito, os mesmos drivers do lado do PC que lidam com qualquer outro teclado irão lidar com isso (assim como acontece com coisas como scanners de código de barras e leitores de cartão de crédito).
BCS
Eu adicionei à minha resposta para responder ao seu comentário.
Ryan Conrad
Os dispositivos Android (hardware) que foram construídos antes do uso do MTP agora operam como a classe USB MTP, portanto, as classes que o dispositivo afirma operar como devem ser definidas no software. Não me lembro se alguma vez instalei um driver para um teclado (ou um driver não genérico para conectar um dispositivo Android), portanto, nada deve precisar ser instalado no lado do PC. Combine isso e tenho quase certeza de que o hardware pode fazer isso. A única questão que resta é: o estoque Android fornece acesso aos botões necessários, ou seria necessário criar um kernel personalizado?
BCS
Re: 2a edição. Acho que estou procurando alguém que saiba definitivamente o que seria necessário. (Você pode mover esse último parágrafo para o topo?) #
282 BCS
Esta resposta está errada, nenhum software é necessário no lado do PC. Telefones diferentes exigem drivers diferentes, porque os fabricantes nem todos usam o mesmo número de identificação do fornecedor. No entanto, os teclados se enquadram em uma categoria diferente de dispositivo, onde são reconhecidos pelo host por tipo, de modo que o ID do fornecedor não importa. O VID / PID, o tipo de dispositivo, os protocolos etc. são todos implementados em software no lado Android e podem ser alterados por qualquer pessoa com fonte de kernel e uma maneira de instalar o resultado compilado.
Chris Stratton
0

Você já experimentou o Unified Remote . Esta é uma ótima ferramenta para usar o telefone como teclado e mouse. Ele não usa USB, mas Wi-Fi. Há um aplicativo no telefone e no computador que funciona em conjunto. Funciona muito bem para mim. Além disso, se você obtém a versão completa, obtém integração com muitos aplicativos comuns.

user207748
fonte
Estou procurando uma solução para casos que incluem coisas como digitar senhas nos prompts de inicialização do BIOS, para que eu não possa instalar nenhum tipo de cliente.
BCS
0

Eu estava procurando algo semelhante e encontrei

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

Parece a mesma coisa que pode ser usada no seu caso. Em resumo, o que eu tenho é que você precisa escrever o driver usb no kernel do Android para detectar o dispositivo como HID.

Abhigyan
fonte
0

É agora> seis anos depois e em algum lugar entre alguém criou o Keepass2 USB Keyboard Plugin para Keepass2Android .

Queria adicionar essas informações aqui por uma questão de exaustividade e porque achei essa pergunta sem resposta e o plug-in acima mencionado enquanto procurava exatamente algo assim.

Eu ainda não testei ...

Limer
fonte
-1

O InputStick é um receptor USB sem fio, projetado para dispositivos Android. Ele permite que os aplicativos Android emulem muitos tipos diferentes de dispositivos, por exemplo: teclado USB, mouse USB, USB Gamepad e muito mais. Com o InputStick, os aplicativos Android podem fazer tudo o que um dispositivo físico pode: digitar, mover o ponteiro do mouse, controlar multimídia e jogos.

Informações podem ser encontradas em http://inputstick.com/

user3776541
fonte
11
Isso parece um anúncio. Qual é a sua relação com este produto?
Dan Hulme