logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Najprostszy menedżer (wpisywasz) haseł z konfiguracją przez USB jak pendrive

p.kaczmarek2 14 Maj 2026 12:30 87 0

TL;DR

  • Powstał prosty menedżer haseł na PIC16LF1659, który po naciśnięciu przycisku udaje klawiaturę HID i automatycznie wpisuje zapisane hasło, a w spoczynku działa jak pendrive.
  • Obsługa pendrive'a korzysta z FAT12, a całość rozdziela się na MSD i HID przez wspólny main, usb_handle_transaction oraz keyboard_service.
  • Do przełączania trybów użyto cyfrowego wejścia RA5, a hasło zapisano w EERAM; klawiatura odczytuje bajty z pamięci i wysyła je w pętli nieblokującej.
  • Miganie LED sygnalizuje aktualny stan urządzenia, a po zakończeniu wpisywania system wraca do trybu pamięci masowej.
  • W praktyce urządzenie działa, ale przydałyby się dodatkowe przyciski, kontrola edycji i zabezpieczenie przed keyloggerami.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Najprostszy menedżer (wpisywasz) haseł z konfiguracją przez USB jak pendrive
    Pokazywałem już wcześniej jak można zrealizować na PIC16LF1659 prostą klawiaturę, oraz pokazywałem najprostszą emulację pendrive z jednym plikiem i zapisem do pamięci nieulotnej EERAM. Teraz pójdę o krok dalej i wykonam praktyczny projekt oparty o doświadczenia z obu poprzednich eksperymentów. Będzie to urządzenie udające klawiaturę i wpisujące automatycznie hasło w momencie gdy wciśniemy przycisk. Co więcej, w trybie bierności, urządzenie będzie z kolei udawać pendriva i pozwalać na edycję zapisanego hasła w postaci zwykłego pliku tekstowego. O bieżącym stanie urządzenia będzie informować szybkość migania LED.

    Przypomnę dwa poprzednie tematy:
    -Tutorial PIC16LF1459 - obsługa USB HID w darmowym kompilatorze SDCC - LED, myszka i klawiatura
    - Własny pendrive od zera - mikrokontroler PIC i pamięć EERAM - bez zewnętrznych bibliotek

    Teraz można zacząć od ogólnego planu działania. Mamy uruchomione już dwa składowe moduły, teraz wystarczy:
    - wydzielić odpowiednio klawiaturę i pendrive do osobnych plików
    - utworzyć wspólną funkcję pętli w main i w niej decydować, który stos USB działa
    - dobrać jakiś pin cyfrowy - przykładowo RA5 - i skonfigurować go jako cyfrowe wejście
    - w pętli na bazie odczytu z tego pinu przełączać stan na klawiaturę, a gdy klawiatura skończy wysyłać znaki to wracać do trybu pamięci masowej
    Dla uproszczenia uznałem, że dam namiastkę sprzętową ograniczającą efekt drgania styków i po prostu zastosuję kondensator...

    W praktyce się nieco skomplikowało. Obsługa Mass Storage Device opiera się o przerwania, jest reaktywna, MSD odpowiada dopiero gdy się ją zapyta. Z tego powodu zrealizowana jest w usb_handle_transaction.
    Klawiatura HID natomiast jest proaktywna - klawiatura sama się odzywa i wysyła wciśnięte klawisze, nie trzeba jej pytać o zdanie.
    Z tego powodu mamy ogólny handler usb_service oraz dodatkowo funkcję keyboard_service.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Analogicznie rozdzieliłem inne wspólne funkcje, np. pobieranie deskryptora:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    albo inicjalizacje:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    To teraz już wiemy jak działa rozdzielenie oraz jak działa wejście w tryb klawiatury. Zostaje jeszcze wyjście z trybu klawiatury i wysyłanie klawiszy. Główna pętla klawiatury respektuje w nieblokujący sposób opóźnienia i wysyła kolejne klawisze, wcześniej odczytując je z EERAM:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    No i teraz wracamy do pokazanej głównej pętli - tam sprawdzana jest flaga o zakończeniu pisania:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zasadniczo to tyle. Kilka ifów, obsługa przycisku, iteracja bajtów z pamięci i jazda.

    Pora na końcową prezentację.
    Tak wygląda nośnik danych w "Ten Komputer":
    Najprostszy menedżer (wpisywasz) haseł z konfiguracją przez USB jak pendrive
    Tak w menedżerze urządzeń:
    Zrzut ekranu Menedżera urządzeń Windows z właściwościami „Urządzenie pamięci masowej USB”.
    Tak po otwarciu w eksploratorze Windows (ciekawostka: ten plik od Dropbox i folder systemowy nie istnieją fizycznie w mojej tablicy plików):
    Zrzut ekranu Eksploratora Windows z dyskiem PIC_DRIVE i plikiem DATA.TXT otwartym w Notatniku
    Tak urządzenie działa w praktyce - na filmie widać wciśnięcie przycisku, miganie LED oraz wprowadzanie tekstu:



    ... a te natrętne okno z Dropbox po wpisywaniu tekstu dobrze obrazuje, że urządzenie wraca do trybu nośnika pamięci.

    Podsumowując, cała trudna praca sprowadzała się do uruchomienia klawiatury HID (to było względnie proste) i udawanego pendrive z FAT12 (to nieco trudniejsze), a oba te kroki opisałem w poprzednich tematach. Tu zasadniczo całość sprowadziła się do sprytnego rozdzielenia obsługi USB na dwie gałęzie oraz do zaprogramowania klawiatury tak, by wysyłała bajty z pamięci a potem wracała do trybu nośnika danych.
    Zostaje tylko pytanie - czy tak opracowane urządzenie ma sens?
    W bieżącej wersji raczej nie, przydałoby się dodać kilka więcej przycisków oraz niezbędna może okazać się kontrola nad trybem edycji zawartości (pendrive). Edycja tekstu powinna by tylko na żądanie, być może też zabezpieczona hasłem, tylko w jaki sposób to zrobić bez zewnętrznych sterowników? Lepiej chyba zabezpieczyć przyciskiem. Wyobrażam sobie sytuację, gdzie tego rodzaju urządzenie jest takim przenośnym menedżerem haseł, pozwalającym wygodnie zalogować się na konto w szkole, pracy lub w bibliotece. Oczywiście są gotowce, ale tu chodzi o DIY. Podobnie przydałby się wyświetlacz... może coś z interfejsem I2C, pinów na to starczy.
    Oczywiście nie ochroni to przed programami typu keylogger na komputerze, bo one przechwytują na poziomie systemu operacyjnego, ale to inna sprawa już.
    Być może to jeszcze nie koniec, a wkrótce przedstawię kolejną wersję.
    Pełen projekt SDCC w załączniku.
    Załączniki:
    • pic16lf1459_usb_drive_hybrid.zip (182.66 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14446 postów o ocenie 12418, pomógł 650 razy. Jest z nami od 2014 roku.
  • REKLAMA
📢 Słuchaj (AI):
REKLAMA