[Асгард — С первых рук] Самодельный апаратный менеджер паролей

T0pDro4eR

Original poster
Pro Member
Сообщения
178
Реакции
190
Посетить сайт
Доброго всем времени суток!
В данной статье мы самостоятельно сделаем свой собственный аппаратный менеджер паролей на платформе Arduino и в среде разработке Borland Delphi 7.

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

Что это собственно такое, аппаратный менеджер паролей?

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.



Для начала, собственно, разберем схему работы.

*Да, не очень то понятно...

Теперь прокомментирую эту убогую схему.
  • Для записи паролей на хранение мы будем просто отсылать их в открытом(!) виде через COM порт.
  • Для получения пароля мы будем отсылать в открытом(!) виде ID записи нужного нам пароля. Arduino получит ID, опросит EEPROM, найдет нужную нам запись и через заюзанную нами библиотеку Keyboard.h сэмулирует нажатие клавиш на клавиатуре, тем самым введя нужный нам пароль.
Обращаю ваше внимание, такая реализация никак не защищена от перехвата кейлоггерами или мониторинга передачи данных через COM. Что тут говорить, мы можем просто отправить в тот же ком порт ид записи и получить пароль.
) Я это к тому, что эти моменты очень важны и для нормального менеджера такая реализация недопустима.


Приступим к написанию кода. Я начну с прошивки, буду выкладывать по куску кода и комментировать.

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.




На очереди у нас написание Delphi кода и собственно создание какого-то интерфейса для работы со всем этим.
Тут рассказывать особо нечего, рассмотрим только основные моменты.
Кидаем на форум компонент ListBox для последующего удобного выбора аккаунта, компонент ComPort, кнопку и поле для поиска. У меня получилось как-то так:

На картинке видно наглядную карту ячеек памяти. Первые 4 я выделил для хранения адреса следующей свободной ячейки (переменная currentNum). Начиная с 5-ой ячейки мы видим начало записи кодов символов. В качестве символа окончания строки (терминатор строки) я выбрал использовать единицу. Таким образом, для поиска нужного нам пароля по ИД нам фактически придется пройтись и посчитать количество единиц, а затем получить нужную строку. Ниже будет приведен код такой реализации.

Запись в следующую EEPROM ячейку. (с обновлением значения currentNum дикий говнокод, как говориться "my eyes are bleeding". Не советую так никогда делать
)
Код:
// Writing EEPROM string
if (command.length() + currentNum < 1020)
{
for (int i = 0; i < command.length(); i++) {
EEPROM[currentNum + i] = int(command);
}
EEPROM[command.length() + currentNum] = 1; // String terminator

currentNum = currentNum + command.length()+1;
if (currentNum > 255)
{
if (currentNum > 510) {
if (currentNum > 765) {
EEPROM[0] = 255;
EEPROM[1] = 255;
EEPROM[2] = 255;
EEPROM[3] = currentNum - 765;
} else {
EEPROM[0] = 255;
EEPROM[1] = 255;
EEPROM[2] = currentNum - 510;
}
} else {
EEPROM[0] = 255;
EEPROM[1] = currentNum - 255;
}
} else {
EEPROM[0] = currentNum;
}
Serial.println(1);
} else {
Serial.println(0);
}

Получение пароля по его ID в памяти:
Код:
String getById(int index)
{
String result = "";
int tmpID = 0;
for (int i = 4; i < currentNum; i++)
{
if (tmpID == index)
{
result.concat((char)EEPROM);
if (EEPROM == 1) break;
}
else
{
if (EEPROM == 1) tmpID++;
}
}
return result;
}
* Как я уже говорил, здесь мы подсчитываем количество терминаторов строки и таким образом получаем адрес начала нужного нам пароля...

По большому счету с прошивкой у нас все. Вот полный код:

На очереди у нас написание Delphi кода и собственно создание какого-то интерфейса для работы со всем этим.
Тут рассказывать особо нечего, рассмотрим только основные моменты.
Кидаем на форум компонент ListBox для последующего удобного выбора аккаунта, компонент ComPort, кнопку и поле для поиска. У меня получилось как-то так:


Форма добавления аккаунта:



Обработчик кнопки "Добавить аккаунт":

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.



Внимание. Я использовал дополнительные компоненты CoolTrayIcon, AlphaSkins, ComPort. Они нужны для открытия проекта.

Всем спасибо за внимание и трату своего времени для чтения этого бреда