Eine etwas unkonventionelle Anforderung an einen USB-Stick. Die Seriennummer wird, sofern sie denn überhaupt vergeben wird, vom Hersteller vergeben und das nicht mit der Intention, sie vom Endanwender ändern zu lassen. Dass dies nicht trivial möglich ist, ist auch eine Voraussetzung für Software wie
USBGuard, welche es ermöglicht, nur bestimmte USB-Geräte an einem Rechner zu erlauben. Dieses Whitelisting basiert darauf, die angeschlossenen Geräte anhand bestimmter Eigenschaften erkennen zu können, etwa anhand der Seriennummer. So könnte man eben nur vorab definierte Seriennummern überhaupt erlauben. Könnte man die Seriennummer einfach ändern, wäre es recht einfach, diesen Schutz auszuhebeln, sofern man grundsätzlich Zugang zu dem Rechner hat und die Seriennummern der angeschlossenen Geräte auslesen kann. Daher wäre meine erste Annahme, dass das nicht möglich ist.
Gräbt man nun etwas tiefer, stellt sich die Frage, wo die Seriennummer denn eigentlich abgelegt ist und inwiefern diese Ablage überhaupt schreibbar ist. Um die Seriennummer zu ermitteln, verwende ich lsusb, welches auf der quelloffenen Bibliothek
libusb aufsetzt. Schaut man sich die API dieser Bibliothek an, findet man dort den Aufruf
libusb_get_descriptor, welcher etliche Eigenschaften wie etwa die Id des Herstellers ermittelt, insbesondere aber auch die Seriennummer, wie man dem Aufbau des verwendeten
Structs entnehmen kann (beachte die
ISerialNumber Eigenschaft). Diese API verwendet eine in der USB Spezifikation festgelegte Funktion GET_DESCRIPTOR. Also ist der logische nächste Schritt sich ebendiese anzuschauen, welche z.B. hier zu finden ist:
http://sdphca.ucsd.edu/Lab_Equip_Manuals/usb_20.pdf
Hier finden sich allerdings keine Details darüber, wo die Seriennummber abgelegt ist. Dies kann praktisch beliebig durch den Hersteller festgelegt werden und es lässt sich somit nicht allgemein sagen, ob diese überhaupt geändert werden kann. Naheliegend ist dann die Frage, ob der USB Standard eine Möglichkeit zur Änderung vorsieht und tatsächlich, analog zu GET_DESCRIPTOR findet sich in der oben verlinkten Spezifikation auch eine API SET_DESCRIPTOR. Dies hat mich ehrlich gesagt überrascht, da mir nicht klar ist, warum die hier gelieferten Informationen für jedes die Spezifikation umsetzende USB-Gerät änderbar sein sollten. Allerdings ist das natürlich der Weg der Wege, wenn man die Seriennummer ändern möchte. Letztlich brauchst du "nur" diesen Aufruf absetzen und kannst dann prüfen, ob der Hersteller deines Sticks diese Funktion in seinem Controller umgesetzt hat, was natürlich nicht garantiert ist. Um das auszuprobieren, bräuchte man jetzt idealerweise eine Bibliothek, welche diesen Aufruf auch implementiert. Die oben erwähnte libusb tut dies leider nicht, was wohl daran liegt, dass das unter normalen Umständen niemand braucht. Ich habe an dieser Stelle auch nicht weiter gesucht, aber der Weg sollte klar sein: Schau, ob du ein Tool/ eine Bibliothek findest, die diesen Teil der USB Spezifikation umsetzt und hoffe dann, dass dein Controller den Aufruf auch beherrscht. Je nach dem, was du bereit bist, für einen Aufwand zu betreiben und was deine Vorkenntnisse sind, kannst du das natürlich auch selbst umsetzen, die Informationen sind jedenfalls öffentlich zugängig.