• XSS.stack #1 – первый литературный журнал от юзеров форума

Русификация BadUSB или то, о чем не говорят...

h0peIess

RAM
Пользователь
Регистрация
04.12.2018
Сообщения
109
Реакции
117
Ты вообще о чем говорить собрался?
Для начала... BadUSB — один из инструментов в арсенале хацкера. Можно эмулировать любую периферию, чаще всего подделывают клавиатуру. Здесь я покажу, как решить одну из главных связанных с этим проблем — зависимость от текущей раскладки.

Если в операционной системе выставлена русская раскладка, а твой скрипт скармливает ей нажатия на клавиши в английской, то из этого, конечно же, ничего не выйдет. Как обойти эту проблему? Я сам столкнулся с ней недавно, материалов в интернете вообще нет. Только одна статья на Xakep'e, к сожалению, подписки у меня нет, зато там мне подали идею, как это реализовать, интереснее все сделать самому ^_^
Сегодня я лишь решил с вами поделиться решением этой проблемы, все будет изложено максимально кратко.
s-l300.jpg

Погнали
Так вот, для обхода этой проблемы можно использовать Alt-коды. Например, зажимаешь Alt, удерживая, набираешь на цифровом блоке '3', и получается сердечко. Здорово? Нам это тоже очень поможет, поскольку таким образом можно вводить и обычные символы, причем независимо от текущей раскладки. Главная проблема заключалась в эмулировании клавиш на кейпаде, спустя пару часов поиска я кое-что нашел. Стандартная библиотека для Arduino (Keyboard) воспринимает печатные символы до 128 (0x7F, код), поэтому она их будет искать в таблице ASCII кодов. Чтобы это обойти, мы должны добавить к коду 136. Вот что получится в итоге:
C-подобный:
'\334' => Keypad /
'\335' => Keypad *
'\336' => Keypad -
'\337' => Keypad +
'\340' => Keypad ENTER
'\341' => Keypad 1 and End
'\342' => Keypad 2 and Down Arrow
'\343' => Keypad 3 and PageDn
'\344' => Keypad 4 and Left Arrow
'\345' => Keypad 5
'\346' => Keypad 6 and Right Arrow
'\347' => Keypad 7 and Home
'\350' => Keypad 8 and Up Arrow
'\351' => Keypad 9 and PageUp
'\352' => Keypad 0 and Insert
'\353' => Keypad . and Delete
*Извиняюсь за говнокод, прежде под Arduino не писал*
А вот готовые функции для нажатия клавиш/набора текста:
C-подобный:
void numpad(int KeyCode)
{
  switch (KeyCode)
  {
    case 0:
      Keyboard.press('\352');
      Keyboard.release('\352');
      break;
    case 1:
      Keyboard.press('\341');
      Keyboard.release('\341');
      break;
    case 2:
      Keyboard.press('\342');
      Keyboard.release('\342');
      break;
    case 3:
      Keyboard.press('\343');
      Keyboard.release('\343');
      break;
    case 4:
      Keyboard.press('\344');
      Keyboard.release('\344');
      break;
    case 5:
      Keyboard.press('\345');
      Keyboard.release('\345');
      break;
    case 6:
      Keyboard.press('\346');
      Keyboard.release('\346');
      break;
    case 7:
      Keyboard.press('\347');
      Keyboard.release('\347');
      break;
    case 8:
      Keyboard.press('\350');
      Keyboard.release('\350');
      break;
    case 9:
      Keyboard.press('\351');
      Keyboard.release('\351');
      break;
  }
}

void write_str(String Input)
{
  for(int j = 0; j < Input.length(); j++)
  {
    /*У пробела нет ALT-кода, его значение не зависит от раскладки*/
    if (Input[j] == ' ')
    {
      Keyboard.print(' ');
    }
    else
    {
      Keyboard.press(KEY_LEFT_ALT);
      String temp = String(int(Input[j]));
      for(int i = 0; i < temp.length(); ++i)
      {
        numpad(String(temp[i]).toInt());
      }
      /*Поиграйтесь с этим значением*/
      delay(50);
    }
    Keyboard.release(KEY_LEFT_ALT);
  }
}
Заключение
Вот и все, надеюсь, что я вам сэкономил пару часов. Вопросы по поводу BadUSB попросил бы задавать в этом топике, надеюсь на вашу адекватность ^_^
Всем удачи!
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх