Czego szukam:
Czy istnieje sposób, aby urządzenie twierdziło, że jest klawiaturą / HID po podłączeniu do portu USB i „wpisaniu” zawartości schowka? Dokładniej; Co by to zrobiło?
Motywujący przypadek użycia:
Mam w telefonie program do zabezpieczania haseł, ale denerwujące jest odczytywanie hasła z urządzenia i próby wpisania go na innym komputerze.
Tło:
Mam urządzenie z Androidem, które zostało zbudowane zanim MTP było obsługiwane do przesyłania plików, ale dzięki najnowszym aktualizacjom teraz je obsługuje. Na tej podstawie klasa USB, którą twierdzi, nie może być zdefiniowana sprzętowo i musi zostać zdefiniowana w oprogramowaniu.
IIRC, projekt ten ma urządzeń Android (co moim zdaniem jest kernel) rozmowy jako pewnego klasy USB, który nie został ostatecznie zbudowany. To wskazuje mi się, że może być w stanie kontrolować tego, co USB klasy obsługiwać bez pracy jądra ale nie wiem na pewno.
Jeśli chodzi o stronę hosta (tj. PC), nigdy nie widziałem, aby komputer, Mac lub Linux wymagały specjalnych napędów do klawiatur, nawet dla niektórych raczej ezoterycznych urządzeń, które podają się za klawiatury (skanery kodów kreskowych, karty kredytowe i inteligentne czytniki kart itp.), więc ogólne sterowniki powinny być wystarczające do tego, czego chcę.
Wszystko to dowodzi, że tego, czego szukam, można zrobić ze sprzętowego punktu widzenia , ale niewiele mówi o tym, jakie wsparcie programowe istnieje i nic, jeśli jest do tego odpowiednia aplikacja.
Odpowiedzi:
Tak. Jest to zdecydowanie możliwe, nie wymagając żadnych modyfikacji ani sterowników na komputerze. Jak wspomina OP, identyfikacja USB po stronie telefonu jest ostatecznie wykonywana programowo (w tym pliku https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c ) i można go zmodyfikować, aby identyfikował się jako standardowa klawiatura USB.
Ta zmiana wymagałaby kilku rzeczy.
Było artykule opublikowanym kilka lat temu (zatytułowanych Wykorzystując złącze USB smart-telefonu dla zabawy i zysku ), które opisane za pomocą telefonu do brute-force ekranów pulpitu logowania. Zastosowana metoda polegała na wyświetleniu telefonu jako klawiatury USB.
źródło
To nie odpowiada dokładnie na twoje pytanie, ale może pomóc w twoim przypadku użycia.
Może chcesz rzucić okiem na InputStick . Będzie to pendrive USB sparowany z Androidem przez Bluetooth. Podłączony do komputera emuluje ogólny interfejs USB HID do wysyłania uderzeń klawiatury. Zaawansowany interfejs API języka Java umożliwia także określenie np. Deskryptorów urządzeń w celu emulacji niestandardowych funkcji. Może to być dobry przykład, że jest zdefiniowany w oprogramowaniu, a nie w sprzęcie.
W celach informacyjnych programista pracuje również nad przykładowymi programami, takimi jak Demo Password Manager.
źródło
Wymagałoby to przynajmniej oprogramowania na telefonie i komputerze. Te dwa programy musiałyby się ze sobą komunikować. Nic takiego, o czym wiem obecnie, nie istnieje.
Aby komputer mógł pomyśleć, że urządzenie jest naprawdę klawiaturą, wymagałby nowego sterownika, który powiedziałby komputerowi, że urządzenie jest klawiaturą i jak „używać go jako klawiatury”.
Nie twierdzę, że nie jest to możliwe, ponieważ prawie wszystko jest możliwe, jeśli chodzi o takie rzeczy. Mówię jednak, że obecnie nic takiego nie istnieje.
USB to zarówno sprzęt, jak i oprogramowanie. Gdyby to było tylko oprogramowanie, ten sam sterownik USB działałby na wszystkich urządzeniach z Androidem w systemie Windows, i tak nie jest. Pamięć masowa USB i MTP są obsługiwane przez sterowniki komputera, a nie urządzenie. Jakie urządzenia obsługują jednocześnie pamięć masową MTP i USB? Znalazłem artykuły stwierdzające, że urządzenia mogą obsługiwać UMS i MTP, ale obsługują UMS tylko wtedy, gdy istnieje zewnętrzna karta SD. Nie można zamontować zewnętrznej karty SD za pomocą MTP i UMS. MTP służy do pamięci wewnętrznej. I nie przeczytałem niczego, co mogłoby potwierdzić lub zaprzeczyć, że możesz używać obu jednocześnie.
Nie trzeba instalować sterowników dla klawiatur, jeśli są one zgodne ze „domyślną” specyfikacją, ponieważ system Windows już je obsługuje. Istnieją klawiatury, które mają własne sterowniki. Jak powiedziałem, byłoby to możliwe. Nie jestem pewien, jak by to było zrobione. Prawie na pewno wymagałoby to niestandardowego jądra, aby działało jak klawiatura i nie wymagało żadnych dodatkowych sterowników po stronie komputera.
Ponadto zgadzam się z @davidbb, że jest to możliwe i już powiedziałem, że jest. Problem z pytaniem, czy coś jest możliwe, nigdy nie rozwiązuje problemu. To tak, jakbym powiedział „czy mogę uruchamiać aplikacje iOS natywnie w systemie Windows?”. Jest to teoretycznie możliwe, ale nic nie robi tego teraz i nie ma nic, co mógłby zrobić „normalny użytkownik” (lub nawet zaawansowany użytkownik). Ta strona jest przeznaczona dla użytkowników, więc powiedzenie, że wystarczy napisać zmodyfikowane jądro, nie jest odpowiedzią, która przyniesie korzyść każdemu. Prawdziwa odpowiedź na to pytanie brzmi: nie, ponieważ nie ma tam zmodyfikowanego jądra.
źródło
Czy próbowałeś Unified Remote . To świetne narzędzie do korzystania z telefonu jako klawiatury i myszy. Zamiast tego nie używa USB, ale Wi-Fi. Na telefonie i komputerze jest aplikacja współpracująca ze sobą. Działa świetnie dla mnie. Również w przypadku uzyskania pełnej wersji można uzyskać integrację z wieloma popularnymi aplikacjami.
źródło
Szukałem czegoś podobnego i znalazłem
https://github.com/pelya/android-keyboard-gadget
Wydaje się, że w twoim przypadku można użyć tego samego. Krótko mówiąc, musisz napisać sterownik USB w jądrze Androida, aby wykryć deivce jako HID.
źródło
Teraz jest> sześć lat później i gdzieś pomiędzy ktoś stworzył wtyczkę Keepass2 USB Keyboard dla Keepass2Android .
Chciałem dodać tę informację tutaj ze względu na kompletność i ponieważ znalazłem to pytanie bez odpowiedzi i wspomnianą wtyczkę podczas wyszukiwania dokładnie czegoś takiego.
Sam jeszcze tego nie testowałem ...
źródło
InputStick to bezprzewodowy odbiornik USB, zaprojektowany dla urządzeń z systemem Android. Pozwala aplikacjom na Androida emulować wiele różnych rodzajów urządzeń, na przykład: Klawiatura USB, Mysz USB, USB Gamepad i wiele innych. Dzięki InputStick aplikacje na Androida mogą robić wszystko, co potrafi urządzenie fizyczne: pisać, przesuwać wskaźnik myszy, sterować multimediami i grami.
Informacje można znaleźć na stronie http://inputstick.com/
źródło