[android] 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의 “재미와 이익을 위해 스마트 폰 USB 연결성 활용”이라는 제목의 논문을 발견했습니다. (위의 제목을 검색하여 자유롭게 사용 가능). 여기에서 두 연구원은 안드로이드 장치가 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”키를 전송하는 Dell USB 키보드 (vendorID = 413C, productID = 2105)를 시뮬레이션했습니다. 시스템을 재부팅하려면 조합과”U”및”Enter”키 시퀀스를 누르십시오. USB 연결 만 필요하며 데스크탑 시스템에 대한 “현재 사용자”권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇을 페이로드로 전송하면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다. productID = 2105)”CTRL + ESC”키 조합과”U”및”Enter”키 시퀀스를 전송하여 시스템을 재부팅합니다. USB 연결 만 필요하며 데스크탑 시스템에 대한 “현재 사용자”권한을 얻을 수 있습니다. 추가 로컬 또는 원격 익스플로잇을 페이로드로 전송하면 맬웨어가 권한을 상승시키고 데스크톱 시스템에 대한 전체 액세스 권한을 얻을 수 있습니다. productID = 2105)”CTRL + ESC”키 조합과”U”및”Enter”키 시퀀스를 전송하여 시스템을 재부팅합니다. 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에 대한 두 번째 인터페이스를 지원하려면 낮은 수준에서 드라이버를 해킹해야합니다. 그러면 수정 된 드라이버에 스캔 코드를 푸시하는 문제 일뿐입니다. 간단하지는 않지만 깔끔한 해킹이 될 것입니다. 한 가지 용도는 로그인을 위해 긴 임의의 암호를 입력하는 것입니다.