Можно ли запрограммировать Android как физическую USB-клавиатуру? - PullRequest
72 голосов
/ 21 марта 2012

Что я действительно хочу знать, так это то, является ли это аппаратной или программной проблемой. Могу ли я подключить свой телефон Android к компьютеру через USB и сделать его аппаратной клавиатурой. Я не хочу ничего устанавливать на компьютер, я хочу, чтобы Android вел себя как стандартное оборудование.


Редактировать: Уточнение Я хочу написать программу / библиотеку для Android, которая позволит устройству полностью эмулировать обычную клавиатуру, чтобы операционная система сообщала об этом как о стандартном устройстве клавиатуры, и она работала в BIOS или в любом другом месте, где работает клавиатура.

Ответы [ 13 ]

37 голосов
/ 18 декабря 2013

Я изменил ядро ​​на Nexus 7, чтобы оно работало как стандартная клавиатура и мышь HID, не теряя функциональности MTP / ADB / USB.

Вы можете использовать утилиту командной строки usb-gadget-test для отправки нажатий клавишдвижения мыши к вашему ПК.Позже я хочу создать приложение удаленного администратора, которое будет отправлять ключевые события и получать видео с камеры.

Исправление ядра, двоичные файлы и инструкции: https://github.com/pelya/android-keyboard-gadget

Редактировать: I 'Вы опубликовали правильное приложение в Google Play , если у вас установлен Nexus 7, вы можете прошить ядро ​​прямо из приложения и отправить с ним нажатия клавиш.

12 голосов
/ 21 марта 2012

Для большинства клавиатур USB требуются драйверы.Любая функциональность клавиатуры (нестандартные кнопки), выходящая за рамки возможностей стандартных драйверов HID , потребует установки некоторого программного обеспечения на компьютер.

При этом, возможно, будет возможно использовать Android Возможности USB , а также написание собственного драйвера, если HID по умолчанию недостаточно для достижения вашей цели.Это, вероятно, очень нетривиальное мероприятие.

Редактировать: Я думаю, что Кристофер Мичински прав, что уровень контроля, который вы получаете с помощью стандартного Android USB API, не подходит для этой цели.Его два решения по изменению прошивки для связи с использованием стандартов HID, а также аппаратного посредника, который переводит протокол Android Accessory на HID, оба кажутся мне верными.Если об установке драйверов на компьютер не может быть и речи, это могут быть только два варианта.

Однако, если вы открыты для установки драйвера для этого поведения, должна быть возможность написать собственный драйверкоторый может обрабатывать протокол Android USB и правильно переводить на правильные вызовы / прерывания для функциональности клавиатуры.Если память служит, для каждой периферийной клавиатуры, которую я использовал за последние 10 лет, требовалось установить драйвер для полной функциональности, поэтому это не может считаться нестандартным поведением.(Хотя только что произошло, этот подход позволит устройству функционировать только как клавиатура внутри окон, а не во время процесса загрузки)

11 голосов
/ 28 сентября 2012

Похоже, кто-то наконец сделал это, это немного уродливо - но вот оно:

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

Это требует некоторой перекомпиляции ядра и небольшого редактирования, и вы теряете частичную функциональность (MDC?) ... но это сделано.

Хотя лично, теперь я вижу "истинную стоимость"«Я бы, вероятно, собрал небольшой адаптер на Teency или что-то в этом роде, предполагая, что Android может общаться с последовательными устройствами через USB.Но это основано на том факте, что у меня есть самсунг, и мне потребуется специальный кабель для USB-подключения в любом случае - без особых проблем иметь небольшое устройство на конце, если мне все равно придется носить чертов кабель.

4 голосов
/ 10 октября 2013

Кажется, кто-то сделал это, исправив ядро.Я только что натолкнулся на статью под названием «Использование USB-подключения к смартфону для удовольствия и выгоды». Автор - Ангелос Ставру, Чжаохуэй Ван, факультет компьютерных наук, Университет Джорджа Мейсона, Фэйрфакс, Вирджиния.(доступно бесплатно, прибегая к помощи указанного выше названия).Здесь два исследователя исследуют возможность взломанного устройства Android, управляющего подключенным ПК, когда устройство Android представляет собой устройство HID (клавиатуру).В качестве доказательства концепции кажется, что они успешно исправили ядро, делая именно то, что вы хотите.Они не предоставили подробных шагов, но в любом случае я просто процитирую то, что они сказали, что сделали:

..... мы разработали специальный драйвер USB-гаджета в дополнение к существующему композитному интерфейсу USB наAndroid-ядро Linux с использованием USB Gadget API для Linux [4].Инфраструктура UGAL помогла нам реализовать простую функциональность драйвера человеческого интерфейса USB (HID) (т.е. драйвера устройства) и связующий код между различными API ядра.Используя код, представленный в «drivers / usb / gadget / композит.c», мы создали наш собственный драйвер гаджета в качестве дополнительного композитного интерфейса USB.Этот драйвер имитирует устройство клавиатуры USB.Мы также можем имитировать USB-мышь, отправляя запрограммированную команду ввода в настольную систему.Таким образом, очень просто выдать себя за обычную USB-мышь или клавиатурное устройство и незаметно отправить предопределенную команду для симуляции вредоносных интерактивных действий пользователя.Чтобы проверить эту функциональность, в наших контролируемых экспериментах мы отправляем последовательности кодов клавиш для выполнения нефатальных операций и показываем, как такое манипулируемое устройство может привести к повреждению. В частности, мы смоделировали отправку клавиатуры USB Dell (vendorID = 413C, productID = 2105) ».Комбинация клавиш CTRL + ESC и последовательность клавиш «U» и «Enter» для перезагрузки машины.Обратите внимание, что для этого требуется только USB-соединение, и он может получить привилегию «текущий пользователь» в настольной системе.С помощью дополнительного локального или удаленного эксплойта, отправляемого в качестве полезной нагрузки, вредоносная программа может повысить привилегию и получить полный доступ к настольной системе.

3 голосов
/ 21 марта 2012

Единственный способ увидеть это возможно, если вы:

  • изменили прошивку Android, чтобы предоставить вам доступ на уровне USB на достаточно низком уровне, чтобы вы могли работать с использованием необходимого протокола

или

  • Сделан какой-то специальный аппаратный преобразователь уровня, который вы подключили к устройству.

(Так что, полагаю, в зависимости от того, сколькоработа, которую вы хотите сделать, это может быть аппаратная проблема или .)

2 голосов
/ 13 июня 2013

Это возможно, без каких-либо дополнительных драйверов.

Вы можете эмулировать USB-клавиатуру ПК с небольшим устройством USB, а затем использовать устройство Android для отправки данных клавиатуры (и / или мыши) по Bluetooth.

Посмотрите описательное видео в кампании Indiegogo: http://igg.me/at/hiDBLUE/x/3400885

Кстати: техническая документация на продукт доступна здесь: http://www.flyfish -tech.com / hiDBLUE

2 голосов
/ 11 августа 2012

Не сдавайся.Linux может сделать это с подходящим оборудованием, через «USB-гаджеты».И приводя следующие факты:

  1. Мой старый Nokia N95 мог использовать свой USB для «устройства хранения данных», «медиаплеера», «модема GSM» или для печати фотографий.
  2. Я могу подключить iPhone к iPad с помощью пассивного адаптера USB-камеры Apple, и они передают снимки.
  3. iPhone может представлять собой несколько вещей, например, когда они переходят в DFU.

Почему все это актуально?

Потому что, если бы я писал телефон linux Я знаю, что он будет делать и как он это сделает.И ответ будет включать в себя USB-гаджеты.

Чтение одной из ссылок, которые были размещены здесь,

Это ядро ​​Linux, код находится в драйверах / usb / gadget / вДерево kernel.org, если вам интересно.У Android есть несколько специальных патчей для гаджетов, которых нет в основной ветке, но это не так уж и много.Вы можете увидеть все это, просто проверив их git tree ядра, не нужно беспокоить их разработчиков.

Я думаю, что у вас будет шанс - но это потребует перекомпиляции Androidядро / операционная система - или, по крайней мере, наличие среды сборки, в которой вы / могли бы / пересобрать ядро, если хотите.

Кстати, у меня есть Atmel NGW100mkII, который поддерживает гаджеты USB, но не поставляется сHID модуль.И мне придется делать все выше и многое другое.

2 голосов
/ 14 июля 2012

Ваш Android уже идентифицируется с VID / PID при подключении к хосту.У него уже есть интерфейс для Mass Storage.Вам потребуется взломать драйвер на низком уровне для поддержки второго интерфейса для 03:01 HID.Тогда это был бы просто вопрос отправки кодов сканирования в модифицированный драйвер.Это было бы не просто, но было бы аккуратно.Одно из них - ввод длинных случайных паролей для входа в систему.

2 голосов
/ 30 марта 2012

Я считаю, что вы можете сделать это, если у вас есть рутированное устройство с недавним Android.Например, Asus Eee Pad Transformer под управлением Android 4 имеет библиотеки /system/lib/libusb.so и /system/lib/libusbhost.so, поэтому вы можете написать приложение Java, которое вызывает их с использованием JNI для эмуляции клавиатуры USB.Это означает, что вы должны написать некоторый клейкий C-код, который имитирует способ взаимодействия USB-клавиатуры с ПК (= вы должны изучить, как работает протокол USB).обычно необходимы для использования этих библиотек.

Редактировать: вышеизложенное справедливо при программировании устройства Android для работы в качестве USB-хоста, в вашем случае вам нужно быть «гаджетом».Я не знаю, сколько функциональных возможностей гаджета Linux содержится в ядре вашего устройства Android.См. this для аналогичного вопроса.

1 голос
/ 15 января 2013

Я немного опоздал с комментариями в этом блоге, но это может быть полезно для некоторых других людей.

Вы можете заставить свой телефон Android работать как клавиатура, мышь, камера, система потокового звука, устройство модема. Короче говоря, что когда-либо USB-гаджет вы видите на рынке и до тех пор, пока аппаратное обеспечение не ограничивает вас. Например, скорость или интерфейс гаджета недоступны.

Устройство USB имеет два типа, хост и гаджет. Таким образом, устройство гаджета действует как клиент и обычно имеет интерфейс usb otg в большинстве телефонов. Таким образом, в конце гаджета вы можете заставить свой телефон вести себя как другое устройство, переключаясь между разными конфигурациями (вы уже делаете это, когда заходите в настройки usb и делаете ваше устройство запоминающим устройством или чем-то еще).

Но для всего этого вам нужно изменить ядро ​​Android. Если вы разработчик устройства для Android, вы можете это сделать.

...