Forum: PC-Programmierung Machbarkeitsfrage


von Dave W. (antiranker)


Lesenswert?

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 :)

von Joerg (Gast)


Lesenswert?

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.

von knödel (Gast)


Lesenswert?

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...

von Martin (Gast)


Lesenswert?

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

von knödel (Gast)


Lesenswert?

Jop, dem stimme ich zu.
Debugging ist nicht einfach, sobald du deine Firmware anhältst wird der 
Gerät wegen eines Timeouts angehalten.

von antiranker (Gast)


Lesenswert?

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?

von knödel (Gast)


Lesenswert?

>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.

von Troll (Gast)


Lesenswert?

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.

von blub (Gast)


Lesenswert?

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.

von Purzel H. (hacky)


Lesenswert?

Zu USB gibt es eine Menge Buecher von Jan Axelson. Die gehen echt ins 
Detail. Zu empfehlen.

von Arc N. (arc)


Lesenswert?

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)

von antiranker (Gast)


Lesenswert?

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 :)

von Andreas B. (andreas_b77)


Lesenswert?

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.

von Arc N. (arc)


Lesenswert?

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
Noch kein Account? Hier anmelden.