Programing

Android가 물리적 USB 키보드로 작동하도록 프로그래밍 할 수 있습니까?

lottogame 2020. 10. 25. 11:28
반응형

Android가 물리적 USB 키보드로 작동하도록 프로그래밍 할 수 있습니까?


제가 정말로 알고 싶은 것은 그것이 하드웨어 문제인지 소프트웨어 문제인지입니다. USB를 통해 내 안드로이드 폰을 컴퓨터에 연결하고 하드웨어 키보드로 작동하도록 할 수 있습니까? 나는 컴퓨터에 아무것도 설치하고 싶지 않고 안드로이드가 표준 하드웨어처럼 작동하기를 원합니다.


편집 : 설명 장치가 일반 키보드를 완전히 에뮬레이션 할 수 있도록 Android 용 프로그램 / 라이브러리를 작성하여 운영 체제가 표준 키보드 장치로보고하고 BIOS 또는 키보드가있는 다른 모든 곳에서 작동합니다. 공장.


MTP / ADB / 기타 USB 기능을 잃지 않고 표준 HID 키보드 및 마우스처럼 작동하도록 Nexus 7의 커널을 수정했습니다.

usb-gadget-test 명령 줄 유틸리티를 사용하여 키 입력과 마우스 움직임을 PC로 보낼 수 있습니다. 나중에 주요 이벤트를 보내고 카메라에서 비디오를받는 원격 관리자 앱을 만들고 싶습니다.

커널 패치, 바이너리 및 지침 : https://github.com/pelya/android-keyboard-gadget

편집 : Google Play에 적절한 앱을 게시했습니다. Nexus 7이 루팅 된 경우 앱에서 바로 커널을 플래시하고 키 누르기를 함께 보낼 수 있습니다.


대부분의 USB 키보드를 실행하려면 드라이버가 필요합니다. 표준 HID 드라이버 의 기능을 넘어선 모든 키보드 기능 (비표준 버튼) 은 컴퓨터에 일부 소프트웨어를 설치해야합니다.

즉, Android의 USB 기능 을 사용 하고 기본 HID가 충분하지 않은 경우 사용자 지정 드라이버를 작성하여 목표를 달성 할 수 있습니다. 이것은 매우 사소한 작업 일 것입니다.

편집 : 저는 KristopherMicinski가 재고 Android USB API로 얻을 수있는 제어 수준이이 목적에 적합하지 않다고 생각합니다. HID 표준을 사용하여 통신하도록 펌웨어를 수정하는 그의 두 가지 솔루션과 Android 액세서리 프로토콜에서 HID로 변환하는 하드웨어 중개인이 나에게 모두 유효 해 보입니다. 컴퓨터에 드라이버를 설치하는 것이 의문의 여지가 없다면이 두 가지 옵션 만있을 수 있습니다.

그러나이 동작에 대해 드라이버를 설치할 수 있다면 Android USB 프로토콜을 처리 할 수있는 사용자 지정 드라이버를 작성하고 키보드 기능에 대한 올바른 호출 / 중단으로 올바르게 변환 할 수 있어야합니다. 메모리가 작동하는 경우 지난 10 년 동안 사용했던 모든 주변 장치 키보드에는 전체 기능을위한 드라이버를 설치해야하므로 비표준 동작으로 간주되지 않을 수 있습니다. (이 접근 방식은 장치가 부팅 프로세스 중이 아니라 창 내부의 키보드로만 작동하도록 허용하지만)


누군가 드디어 한 것처럼 보이지만 약간 못 생겼지 만 여기에 있습니다.

http://forum.xda-developers.com/showthread.php?t=1871281

커널 재 컴파일과 약간의 편집이 필요하며 부분적인 기능 (MDC?)을 잃어 버립니다. ..하지만 끝났습니다.

개인적으로 "진정한 비용"을 확인 했으므로 Android가 USB를 통해 직렬 장치와 통신 할 수 있다고 가정하면 Teency 또는 기타 장치에 작은 어댑터를 추가 할 수 있습니다. 그러나 그것은 내가 삼성을 가지고 있고 어쨌든 USB 연결을 만들기 위해 특별한 케이블이 필요하다는 사실에 근거합니다. 어쨌든 케이블을 가지고 다녀야한다면 끝에 작은 장치를 두는 데 추가 고통이 없습니다.


누군가 커널을 패치하여 한 것 같습니다. 저는 Angelos Stavrou, Zhaohui Wang, 컴퓨터 과학과 George Mason University, VA, Fairfax의 "Exploiting Smart-Phone USB Connectivity for Fun and Profit"이라는 제목의 논문을 방금 접했습니다. (위의 제목을 검색하여 자유롭게 사용 가능). 여기에서 두 연구원은 안드로이드 장치가 HID 장치 (키보드)로 표시되도록하여 연결된 PC를 제어하는 ​​손상된 안드로이드 장치의 가능성을 조사하고 있습니다. 개념 증명으로, 그들이 원하는대로 정확히 커널을 패치 한 것으로 보입니다. 그들은 자세한 단계를 제공하지 않았지만 어쨌든 그들이 한 일을 인용했습니다.

..... 우리는 Linux 용 USB Gadget API [4]를 사용하여 Android Linux 커널의 기존 USB 복합 인터페이스 외에 특수 USB 가젯 드라이버를 개발했습니다. UGAL 프레임 워크는 간단한 USB HID (Human Interface Driver) 기능 (예 : 장치 드라이버)과 다양한 커널 API 간의 연결 코드를 구현하는 데 도움이되었습니다. "drivers / usb / gadget / composite.c"에 제공된 코드를 사용하여 추가 복합 USB 인터페이스로 자체 가젯 드라이버를 만들었습니다. 이 드라이버는 USB 키보드 장치를 시뮬레이션합니다. 또한 미리 프로그래밍 된 입력 명령을 데스크탑 시스템으로 보내는 USB 마우스 장치를 시뮬레이션 할 수 있습니다. 따라서 일반 USB 마우스 또는 키보드 장치로 가장하고 미리 정의 된 명령을 은밀하게 전송하여 악의적 인 대화 형 사용자 활동을 시뮬레이션하는 것은 간단합니다. 이 기능을 확인하기 위해 제어 된 실험에서 치명적이지 않은 작업을 수행하기 위해 키 코드 시퀀스를 전송하고 이러한 조작 된 장치가 어떻게 손상을 일으킬 수 있는지 보여줍니다. 특히”CTRL + ESC”키 조합과”U”를 전송하는 Dell USB 키보드 (vendorID = 413C, productID = 2105)를 시뮬레이션했습니다. 시스템을 재부팅하려면 "Enter"키를 누르십시오. USB 연결 만 필요하며 데스크탑 시스템에 대한 "현재 사용자"권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇이 페이로드로 전송되면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다. USB 연결 만 필요하며 데스크탑 시스템에 대한 "현재 사용자"권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇을 페이로드로 전송하면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다. USB 연결 만 필요하며 데스크탑 시스템에 대한 "현재 사용자"권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇을 페이로드로 전송하면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다.


이것이 가능하다는 것을 알 수있는 유일한 방법은 다음과 같습니다.

  • 필요한 프로토콜을 사용하여 작동 할 수있을만큼 충분히 낮은 수준에서 USB 수준 액세스를 제공하도록 Android 펌웨어를 수정했습니다.

또는

  • 장치에 연결 한 일종의 특수 하드웨어 수준 변환기를 만들었습니다.

(그래서 원하는 작업량에 따라 하드웨어 또는 소프트웨어 문제 가 될 수 있다고 생각합니다 .)


최근 안드로이드로 루팅 된 기기가 있으면 할 수 있다고 생각합니다. 예를 들어, Android 4를 실행하는 Asus Eee Pad Transformer에는 /system/lib/libusb.so라이브러리가 /system/lib/libusbhost.so있으므로 JNI를 사용하여 USB 키보드를 에뮬레이트하는 Java 애플리케이션을 작성할 수 있습니다. 즉, USB 키보드가 PC와 통신하는 방식을 에뮬레이트하는 접착제 C 코드를 작성해야합니다 (= USB 프로토콜 작동 방식을 연구해야 함).

일반적으로 이러한 라이브러리를 사용하려면 일부 권한이 필요하기 때문에 "루팅"이라고합니다.

편집 : 위의 내용은 USB 호스트로 작동하도록 Android 기기를 프로그래밍 할 때 사실이며, 귀하의 경우 "가젯"이되어야합니다. Android 기기의 커널에 Linux 가젯 기능이 얼마나 많이 포함되어 있는지 모르겠습니다. 비슷한 질문을 보려면 이것을 참조하십시오 .


Android는 호스트에 연결될 때 이미 VID / PID로 식별됩니다. 대용량 저장 소용 인터페이스가 이미 있습니다. 03:01 HID에 대한 두 번째 인터페이스를 지원하려면 낮은 수준에서 드라이버를 해킹해야합니다. 그러면 수정 된 드라이버에 스캔 코드를 푸시하는 문제 일뿐입니다. 간단하지는 않지만 깔끔한 해킹이 될 것입니다. 한 가지 용도는 로그인을 위해 긴 임의의 암호를 입력하는 것입니다.


포기하지 마십시오. Linux는 "USB Gadgets"를 통해 올바른 하드웨어로이를 수행 할 수 있습니다. 그리고 다음 사실을 제공합니다.

  1. 내 오래된 Nokia N95는 USB를 사용하여 "대용량 저장 장치", "미디어 플레이어", "GSM 모뎀"으로 사용하거나 사진을 인쇄 할 수 있습니다.
  2. Apple USB-Camera 패시브 어댑터를 통해 iPhone을 iPad에 연결하면 사진이 전송됩니다.
  3. iPhone은 DFU에 들어갈 때와 같이 여러 가지로 분명히 나타날 수 있습니다.

이 모든 것이 왜 관련이 있습니까?

내가 리눅스 폰을 작성 한다면 그것이 무엇을 할 것인지, 어떻게 할 것인지를 알고 있기 때문입니다. 그리고 대답은 USB 가제트를 포함합니다.

여기에 게시 된 링크 중 하나를 읽고,

It's the Linux kernel, the code is in drivers/usb/gadget/ in the kernel.org tree if you are interested. Android does have a few specific gadget patches that are not in mainline, but it's not all that much. You can see all of this by just checking out their kernel git tree, no need to bother their developers.

I would guess that you would have a shot at it - but it would involve recompiling the android kernel/operating system - or at least having a build environment in which you /could/ rebuild the kernel if you wanted.

BTW, I have an Atmel NGW100mkII, which support USB gadgets, but doesn't ship with the HID module. And I'll be having to do the above and more.


This is possible, without any additional drivers needed.

You can emulate PC's USB keyboard with small USB dongle-sized device and then use your Android device to send keyboard (and/or mouse) data over Bluetooth.

Take a look on descriptive video in Indiegogo campaign: http://igg.me/at/hiDBLUE/x/3400885

BTW: The product technical documents is available here: http://www.flyfish-tech.com/hiDBLUE


You have to establish some kind of connection to do that android-out-of-the-box, like via tcp/ip and adb, so no not w/o installing at least adb and a listener on the computer.

But if you have an activity that sends the hardware keyboard like data via usb then why not? Won't be easy i guess. At this point the usuas forum answer comes right away: "Why don't you change your plans and ...." :)


Some others figured out that this is wrong. In the meantime i share their opinion. I'm sorry.

Old WRONG answer:

In my opinion this is barely possible.

Your Computer identifies any USB device with the USB device descriptor or the usb interface descriptor. To be able to use your android device as a keyboard, you would have to change these. Actually i think these are saved on a ROM in the device, so you would have to change hardware. The device needs to identifiy itself with the host even if its only charging in turned off state (has to tell usb host about the power consumption, otherwise only a few mA max). For me this points into the direction, that you would have to change hardware

"Easiest" way would proabably be assemble an adapter containing a usb host chip with a µC that converts the received data (which you still had to send via usb) to ps/2 or usb-client signals that u send to the computer.

In my opinion the easiest way would be: Buy one of these Keyboards you can roll and put them in your bag too.


I am bit late to comment in this question but it might be useful for some other people.

You can make your android phone to work like keyboard, mouse, camera, sound streaming system, tethering device. In short what ever usb gadget you see in the market and until and unless hardware doesn't limit you. Such as speed, or gadget interface not available.

USB device is of two type, host and gadget. So gadget device acts like client and usually has usb otg interface in most of the phones. So in gadget end, you can make your phone to behave like different device at all by switching between different configuration(you are already doing it when you go into usb settings and make your device as mass storage or anything else).

But for doing all these you have to modify android kernel. If you are a android device developer you can for sure do it.


I have some experience here as a user. The most obvious solution is via tcp/ip via a client/server model. Many of the tools out there like airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm) utilize this method for creating a keyboard/mouse replacement using a smartphone os. Note that there are some security issues that become apparent in the implementation. For instance, you must be logged in to utilize the server componenents.

Other cross platform tools (ie windows/mac controlling another windows/mac instance) utilize a similar approach. See synergy: http://synergy-foss.org/

참고URL : https://stackoverflow.com/questions/9805731/is-it-possible-to-program-android-to-act-as-physical-usb-keyboard

반응형