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

  • Автор темы HHIDE_DUMP
  • Дата начала
  • Просмотры 3K
  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

HHIDE_DUMP

Гость
H

HHIDE_DUMP

Гость
Доброго всем времени суток!
В данной статье мы самостоятельно сделаем свой собственный аппаратный менеджер паролей на платформе Arduino и в среде разработке Borland Delphi 7.

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

Что это собственно такое, аппаратный менеджер паролей?
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!

  • Пакет драйверов для поддержки вашей платы.
  • Borland Delphi 7 +
    Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
    .

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

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

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


Приступим к написанию кода. Я начну с прошивки, буду выкладывать по куску кода и комментировать.
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!



На очереди у нас написание 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, кнопку и поле для поиска. У меня получилось как-то так:


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



Обработчик кнопки "Добавить аккаунт":
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


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

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

О нас

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

    Dark-Time 2015 - 2024

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя