Guten Abend, für eine Bachelorarbeit habe ich eine Idee und frage mich ob diese auch umsetzbar ist. Ich habe wenig/keine Erfahrung mit Microcontrollern aber 6 Monate Zeit für die Umsetzung ;) Dazu stellen sich mir folgende Fragen: 1) Bekommt ein USB-Gerät mit ob es von einem Rechner erkannt wurde? Also könnte man auf eine Ablehnung reagieren? 2) Kann man ein Gerät bauen, das zwei USB-Anschlüsse hat? Ich bräuchte einen Steueranschluss zum Setzen bzw. Rücksetzen von Settings. Der zweite Anschluss sollte zur normalen Nutzung an einem PC dienen. Wenn das möglich ist, können auch beide Anschlüsse (pseudo-)parallel genutzt werden? 3) Kann eine Funktion auch einfach simuliert werden? Also kann ein Gerät sagen es wäre ein USB-Stick oder eine Tastatur, ohne das dahinter Logik steckt? Es müsste nur erkannt werden, nicht aber funktionieren. Das waren schon alle Fragen :D Vielleicht gibts ja auch Bücher/Quellen zu diesem Bereich. Ich bin für jede Hilfe dankbar! Viele Grüße antiranker PS: Ich hoffe das hier ist der richtige Bereich. War mir nicht sicher wohin damit :)
Viel Spaß beim lesen: http://www.usb.org/developers/docs/ Ein Satz USB Spezifikationen, da steht so ziemlich alles drin. Umsetzung ist dann dein Teil des Jobs.
Hallo, zu 1: Ja, definitiv. zu 2: Ist möglich, ich kenne aber jetzt keinen µC der mehr als eine USB-Peripherie besitzt, da sehr aufwendig. Könntest auf RS-232 ausweichen zwecks debugging und Parameter setzten und mit einem USB-Seriell wandler anstöpseln. zu 3: Der Treiber wird ziemlich schnell meckern wenn auf eine grundlegende Funktionalität nicht passend geantwortet wird. So, jetzt schaue ich in die Glaskugel um zu erfahren was du vorhast...
An direkter USB Übertragung sind schon sehr viele gescheitert!! Weiche lieber gleich auf die virtuelle COM-Schnittstelle über USB aus, das ist schneller realisierbar. FTDI FT232 oder Silicon Labs CP2102
Jop, dem stimme ich zu. Debugging ist nicht einfach, sobald du deine Firmware anhältst wird der Gerät wegen eines Timeouts angehalten.
Hey, danke für die schnellen Antworten. @knödel "Könntest auf RS-232 ausweichen zwecks debugging und Parameter setzten und mit einem USB-Seriell wandler anstöpseln." Du meinst also einen µC mit zwei seriellen Anschlüssen? Zur Steuerung wäre ein serieller Anschluss in Ordnung, damit könnte ich leben... aber ist der nicht bedeutend langsamer als USB?
>Ich bräuchte einen Steueranschluss zum Setzen bzw. Rücksetzen von Settings. Dann gehe ich davon aus, dass es nicht sehr zeitkritisch ist. Also ein USB-Device über den µC mit einem anderen PC zu simulieren wird nicht funktionieren (was meine Glaskugel vorhersagt). Ein USB-Seriell Wandler meldet sich als CDC am PC an, von Seiten der PC-Software ist das dann wie ein COM-Port (oder ttyS/ttyAirgendwas) ansprechbar. Wenn du Tastatur und/oder Maus spielen willst, dann musst du dich ordentlich als HID über USB beim PC anmelden und die Funktionen bereitstellen. Das geht NICHT über einen USB-Seriell Wandler, der implementiert nur eine Serielle Schnittstelle. http://www.beyondlogic.org/usbnutshell/usb1.shtml Gibt einen wirklich guten Einstieg, was bei USB so hinter dem Plug-n-Play los ist.
antiranker schrieb: > aber ist der nicht bedeutend langsamer als USB? Was für Massen an Daten willst du denn zur Steuerung übertragen? Ich glaub nicht, dass du RS-232 voll ausnutzen wirst.
Es gibt boards, auf denen ein ARM Prozessor mit linux (Also im Prinzip ein PC) und ein USB DEVICE chip drauf ist. Wenn du mit o.g. System vertraut bist, wäre das eine Option, dh. anstatt einen Microcontroller zu programmieren schreibst du ein KERNEL MODUL, was zwar nicht wesentlich doch etwas besser zu debuggen ist.
Zu USB gibt es eine Menge Buecher von Jan Axelson. Die gehen echt ins Detail. Zu empfehlen.
Dave W. schrieb: > 2) > Kann man ein Gerät bauen, das zwei USB-Anschlüsse hat? Auch mit drei, vier oder n Anschlüssen, wenn man ext. "Wandler" hinzunimmt. Controller mit zwei internen USB-Kanälen gibt's z.B. von Renesas: RX62N > Ich bräuchte einen Steueranschluss zum Setzen bzw. Rücksetzen von > Settings. Je nach dem was man vorhat kann ein USB-Controller auch mehrere Funktionen gleichzeitig übernehmen z.B. als Massenspeicher und als HID (Maus, Tastatur, etc.). Fertige Code-Beispiele gibt's da z.B. von Microchip http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784 > Der zweite Anschluss sollte zur normalen Nutzung an einem PC dienen. > Wenn das möglich ist, können auch beide Anschlüsse (pseudo-)parallel > genutzt werden? Ja, s.o. > 3) > Kann eine Funktion auch einfach simuliert werden? > Also kann ein Gerät sagen es wäre ein USB-Stick oder eine Tastatur, ohne > das dahinter Logik steckt? Ja und nein, das Protokoll muss, wie schon gesagt, natürlich eingehalten werden (bzw. wird der Teil vom Framework übernommen s. Link von oben), die eigentlichen Funktionen z.B. zum Lesen oder Schreiben eines Sektors bei einem Massenspeicher müssen aber nicht vollständig implementiert werden (abhängig davon wie viel/wenig "simuliert" werden soll)
OK. Danke für die vielen Antworten. Allerdings muss ich meine Idee verwerfen (glaube ich). Folgendes: Es gibt Programme die Peripheriegeräte sperren können. Ein Beispiel http://www.usb-security.org/. In einer Whitelist werden zum Beispiel VandorID und ProductID gespeichert und nur passende Geräte zugelassen. Ich habe jetzt darüber nachgedacht, ein BruteForce-Gerät zu bauen/programmieren, das alle Kombinationen von VID und PID durchgeht. Allerdings ist das Ganze zu langsam. Selbst wenn ich 500 Versuche/Sekunde hinbekommen WÜRDE, bräuchte ich damit im Durchschnitt 50 Tage für einen erfolgreichen Angriff. Wäre aber schön, da Plattformunabhängig. Eine weitere Überlegung war eine Simulation mit dem "Device Simulation Framework" von Microsoft. Hier könnte man das ganze parallelisieren (max. 127). Dieses Vorgehen gefällt mir aber nicht, da das Programm auf dem "gesperrten" System laufen müsste. Also wirds nix :)
Ist schon viel gesagt worden, aber ich will die anderen Antworten nicht auseinanderpfriemeln also antworte ich auch noch mal: Dave W. schrieb: > 1) > Bekommt ein USB-Gerät mit ob es von einem Rechner erkannt wurde? > Also könnte man auf eine Ablehnung reagieren? Jedes USB-Gerät wird über einen Steuerkanal beim Anstecken initialisiert und bekommt dabei u.a. seine Adresse zugewiesen. Ich weiß nicht was für eine "Ablehnung" du meinst, aber das steht alles in der USB Spezifikation drin. > 2) > Kann man ein Gerät bauen, das zwei USB-Anschlüsse hat? > Ich bräuchte einen Steueranschluss zum Setzen bzw. Rücksetzen von > Settings. > Der zweite Anschluss sollte zur normalen Nutzung an einem PC dienen. > Wenn das möglich ist, können auch beide Anschlüsse (pseudo-)parallel > genutzt werden? Da gibt es mehrere Möglichkeiten: Wenn es wirklich als mehrere unabhängige USB Geräte erscheinen soll, implementiert man das Hub-Protokoll und dahinter die Geräte separat. Dass das hardwaremäßig nicht drei eigenständige, verkabelte Geräte sind sondern alles in der selben Software steckt ist egal. Für den Host sieht es gleich aus. Das braucht man aber nur, wenn die Geräte tatsächlich separat erscheinen sollen, weil sie eigene, vollständige Funktionen bieten. Etwa Maus und SD Kartenleser in einem, da es kein Standard-Protokoll für Maus+Kartenleser gibt. Wenn es nur um ein Gerät geht, das um Einstellungen und Befehle erweitert wird, braucht man das nicht (da ist es dann eher noch ein Klotz am Bein). Man kann existierende Protokolle erweitern, indem man zusätzliche Befehle auf dem Kontrollkanal implementiert oder indem man weitere Endpoints einrichtet. Die Standard-Protokolle schreiben vor, welche Befehle und Endpoints implementiert werden müssen, zusätzliche kann man implementieren da alle Befehle und Endpoints identifiziert werden über Zugehörigkeit zu Standards (oder eben als herstellerspezifisch). (Ich hoffe, ich liege mit dem ganzen richtig. Ist schon etwas her, und selbst habe ich nicht so viel implementiert.) > 3) > Kann eine Funktion auch einfach simuliert werden? > Also kann ein Gerät sagen es wäre ein USB-Stick oder eine Tastatur, ohne > das dahinter Logik steckt? > Es müsste nur erkannt werden, nicht aber funktionieren. Es muss halt das implementiert werden, was der Standard verlangt. Ob bei einer HID Tastatur das Ereignis "Taste X gedrückt" nun einem tatsächlichen Tastendruck oder nur der Fantasie eines Mikrocontrollers entspringt, kann der Host ja nicht erkennen. Und es interessiert ihn auch nicht. Auch nicht wenn es sogar eine Tastatur ist, auf der nie eine Taste gedrückt wird.
antiranker schrieb: > OK. Danke für die vielen Antworten. > Allerdings muss ich meine Idee verwerfen (glaube ich). > > Folgendes: > > Es gibt Programme die Peripheriegeräte sperren können. > Ein Beispiel http://www.usb-security.org/. > In einer Whitelist werden zum Beispiel VandorID und ProductID > gespeichert und nur passende Geräte zugelassen. Keine Ahnung ob's hier helfen würde, aber wer sperrt damit bspw. normale Tastaturen und Mäuse...d.h. man kann Tastatureingaben simulieren und fast alles mögliche an dem Rechner machen (lassen)... http://www.irongeek.com/i.php?page=security/programmable-hid-usb-keystroke-dongle http://pentest.snosoft.com/2011/06/24/netragards-hacker-interface-device-hid/ Praktische Liste... http://www.linux-usb.org/usb.ids > Ich habe jetzt darüber nachgedacht, ein BruteForce-Gerät zu > bauen/programmieren, das alle Kombinationen von VID und PID durchgeht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.