Forum: Mikrocontroller und Digitale Elektronik Seriennummer einer CF Karte vortäuschen


von Torben (torbenluckypilz)


Lesenswert?

Moin,
ich habe ein Gerät welches Standardmäßig von einer CF Karte bootet.
Dieses Gerät liest dabei auch die Seriennummer der CF Karte.
Nun möchte ich mithilfe eines Mikrocontrollers eine selbst erstellte 
Seriennummer vortäuschen. Das Gerät kann auch von USB booten, liest aber 
trotzdem die Seriennummer der CF Karte. Sprich es müssen keine hohen 
Geschwindigkeiten erreicht werden. Ich stehe im prinzip bei null, da ich 
weder weiss wie so ein Befehl zum Abfragen der Seriennummer aussieht 
noch wie man den Controller an den CF Kartenanschluss anschliesst.
Kann mir da jemand weiterhelfen?

von Guest (Gast)


Lesenswert?

Frag den Softwarehersteller wie man im Lizenzfile eine neue Seriennummer 
einträgt

von Klaus (feelfree)


Lesenswert?


von MaWin (Gast)


Lesenswert?

CF hat eine ATA/IDE-Schnittstelle.

von Falk B. (falk)


Lesenswert?

Torben schrieb:
> Nun möchte ich mithilfe eines Mikrocontrollers eine selbst erstellte
> Seriennummer vortäuschen.

Warum? Hast du die originale Karte nicht mehr? Man könnte versuchen, 
mittels CF-Adapter am PC und passenden Tools auf die Low Level 
Funktionen zuzugreifen und das Original 1:1 kopieren. Eine CF Karte 
mittels Mikrocontroller zu emulieren ist DEUTLICH mehr Aufwand. Lohnt 
sich das? Was soll der machen, außer die Seriennummer vortäuschen? Und 
damit einen Kopierschutz oder ähnliches umgehen? tststststs

von Torben (torbenluckypilz)


Lesenswert?

Nein die Originale Karte habe ich leider nicht mehr. Das ist das 
Problem. Die Seriennummer ist fest mit einem Lizenzkey verknüpft. Ich 
habe beides in einer Textdatei gespeichert. Ausserdem habe ich ein 
Datenträgerabbild. Dieses enthält aber nicht diese Low-Level 
Informationen denke ich. Zumindest werden diese nicht auf den neuen 
Datenträger übertragen. Was gibt es denn für Tools um auf die Low-Level 
Funktionen zuzugreifen?

von Klaus (feelfree)


Lesenswert?

Torben schrieb:
> Was gibt es denn für Tools um auf die Low-Level Funktionen zuzugreifen?

Keine Ahnung. Wenn du in die oben verlinkte Spec. reingeschaut hättest, 
dann wüsstest du aber, dass es zwar einen Befehl gibt um die 
Seriennummer einer Karte abzufragen, aber keinen um sie zu ändern.

von Hmmm (Gast)


Lesenswert?

Es dürfte deutlich einfacher sein, die Software passend zu modifizieren.

Ob Dein Vorhaben legal ist, steht auf einem anderen Blatt.

von Torben (torbenluckypilz)


Lesenswert?

Ich hab da reingeschaut und habe auch keinen Befehl dazu gefunden. Und 
das liest man ja auch sehr häufig wenn man danach sucht, dass es eben 
nicht geht. Es interessiert mich aber trotzdem was es so für Tools gibt. 
Aber trotzdem vielen Dank für das Dokument.

von Torben (torbenluckypilz)


Lesenswert?

Hmmm schrieb:
> Es dürfte deutlich einfacher sein, die Software passend zu modifizieren.

Da bin ich tatsächlich auch dran mich schlau zu machen.

von Thomas Z. (usbman)


Lesenswert?

Hmmm schrieb:
> Es dürfte deutlich einfacher sein, die Software passend zu modifizieren.

Das sehe ich auch so. Was bootet denn da für ein OS? Bei einem Win 
Programm ist es ziemlich trivial den API Aufruf zum lesen der 
Seriennummer zu patchen.

Achtung es gibt mehrere Nummern die HW Seriennummer gibts per ATA cmd.

Torben schrieb:
> ich hab da reingeschaut und habe auch keinen Befehl dazu gefunden.
nun der Umgang mit Disassembler und Debugger sollte man schon 
beherrschen. Nur vom reinschauen wird das sicher nichts. Es ist 
allerdings zu vermuten dass da noch mehr Schutz eingebaut ist. Nur die 
SN wäre schon ziemlich trivial.

von Klaus (feelfree)


Lesenswert?

Torben schrieb:
> Ich hab da reingeschaut und habe auch keinen Befehl dazu gefunden

Kapitel 6.2.1.6 Identify Drive – ECh
Kapitel 6.2.1.6.6 Words 10-19: Serial Number

von Torben (torbenluckypilz)


Lesenswert?

Klaus schrieb:
> Kapitel 6.2.1.6 Identify Drive – ECh
> Kapitel 6.2.1.6.6 Words 10-19: Serial Number

Wie müsste denn so ein Befehl dazu aussehen um auf diese Adresse 
zuzugreifen?

von Rüdiger B. (rbruns)


Lesenswert?


von Thomas Z. (usbman)


Lesenswert?

unter Windows wäre die Api Funktion GetVolumeInformation().

von DerEinzigeBernd (Gast)


Lesenswert?

Thomas Z. schrieb:
> GetVolumeInformation().

Liefert die (willkürliche) Seriennummer des Volumes, nicht aber die 
Hardwareseriennummer des Laufwerks.
Ein Volume kann z.B. eine Partition auf einem Laufwerk sein.

Das hilft hier also nicht.


https://stackoverflow.com/questions/24049367/how-do-i-get-the-disk-drive-serial-number-in-c-c

von J. S. (jojos)


Lesenswert?

Die Hersteller haben sicher Tools um die CF Daten zu ändern, nur wird 
man da nicht drankommen. Von SanDisk gab es mal was um das ‚removable‘ 
Bit für XP Embedded zu ändern, aber auch das nur gegen NDA.

von DerEinzigeBernd (Gast)


Lesenswert?

Hier wird ja anscheinend die CF-Karte gar nicht als solche verwendet, 
sondern nur ihre Seriennummer ausgewertet. Theoretisch also ist es 
durchaus möglich, mit einem µC eine CF-Karte soweit nachzubilden, daß 
sie das "Identify Drive"- und andere ATAPI-Kommandos auswertet und 
passend darauf antwortet.
Der µC muss halt 16-Bit-I/O-Zugriffe mit ISA-Bus-Geschwindigkeit 
bewältigen können. UDMA und dergleichen sind für das Auslesen der 
Seriennummer nicht erforderlich.

Das ganze ist natürlich eine fragwürdige Angelegenheit, denn der 
Hersteller des Gerätes resp. der Software wird sich irgendwas dabei 
gedacht haben, die Software mit der Hardware (der CF-Karte) zu 
"verdongeln". Diesen Mechanismus zu umgehen verstößt gegen die 
Lizenzbedingungen des Herstellers.

Warum hat man ein Gerät mit einer Software, aber die CF-Karte dazu ist 
"abhandengekommen" (und doch so vorhanden gewesen, daß untaugliche 
Kopierversuche unternommen wurden)?

Die Situation sähe anders aus, wenn der Hersteller der Software nicht 
mehr existiert und auch keine Nachfolgeinstitution bereit ist, bei einem 
Hardwaredefekt auszuhelfen, aber die Geschichte des Threadstarters 
klingt irgendwie anders.

von oszi40 (Gast)


Lesenswert?

Bevor ich Klimmzüge machen würde, wäre eine Anfrage beim Hersteller die 
einfache Lösung. Leider sind einige Hersteller nicht mehr da. Dann 
helfen nur noch Zaubertricks wie evtl. ein Diskeditor (falls nur 
veränderliche Speicherdaten).

von Torben (torbenluckypilz)


Lesenswert?

Moin, ich habe mir mittlerweile eine Schnüffelplatine gebaut, mit der 
ich jeden Pin der CF Karte abgreifen kann. Dort habe ich an die 
Data-lines (D15-D00) einen Logic-analyzer (Digital Discovery von 
Digilent) angeschlossen. Das funktioniert auch ohne Probleme. Nun weiss 
ich aber im Programm des Logic-analyzers (WaveForms) nicht mehr weiter.
Welches Protokoll muss ich wie anwenden, um die Daten "lesen" zu können?


Klaus schrieb:
> 
https://engineering.purdue.edu/ece477/Archive/2004/Spring/S04-Grp07/documentation/cfspc2_0_compact_flash.pdf

In diesem Dokument steht folgendes zu den Data-lines:
"These lines carry the Data, Commands and Status information
between the host and the controller. D00 is the LSB of the Even
Byte of the Word. D08 is the LSB of the Odd Byte of the Word."

Daraus schließe ich, dass mit 16bit (WORD) kommuniziert wird, oder?
Nur wie muss ich die einzelnen Signale "verbinden"?

Vielen Dank schonmal

von Falk B. (falk)


Lesenswert?

Torben schrieb:
> Moin, ich habe mir mittlerweile eine Schnüffelplatine gebaut, mit der
> ich jeden Pin der CF Karte abgreifen kann. Dort habe ich an die
> Data-lines (D15-D00) einen Logic-analyzer (Digital Discovery von
> Digilent) angeschlossen. Das funktioniert auch ohne Probleme.

Das ist auch nur 1% der Problemlösung.

> Nun weiss
> ich aber im Programm des Logic-analyzers (WaveForms) nicht mehr weiter.
> Welches Protokoll muss ich wie anwenden, um die Daten "lesen" zu können?

Aha.

> In diesem Dokument steht folgendes zu den Data-lines:
> "These lines carry the Data, Commands and Status information
> between the host and the controller. D00 is the LSB of the Even
> Byte of the Word. D08 is the LSB of the Odd Byte of the Word."
>
> Daraus schließe ich, dass mit 16bit (WORD) kommuniziert wird, oder?

Ja.

> Nur wie muss ich die einzelnen Signale "verbinden"

Ist das nicht selbsterklärend? Du musst die 16 Datenleitungen + einen 
handvoll Steuerleitungen anschließen. Dann kannst du das Protokoll 
mitlesen. Viel Spaß bei der Dekodierung! Das ist die gleiche Liga wie 
Maschinencode disassemblieren! Naja, wenn Hacker sein so einfach wäre, 
wäre man kein Hacker ;-)

von Torben (torbenluckypilz)


Lesenswert?

Falk B. schrieb:
> Ist das nicht selbsterklärend? Du musst die 16 Datenleitungen + einen
> handvoll Steuerleitungen anschließen. Dann kannst du das Protokoll
> mitlesen. Viel Spaß bei der Dekodierung! Das ist die gleiche Liga wie
> Maschinencode disassemblieren! Naja, wenn Hacker sein so einfach wäre,
> wäre man kein Hacker ;-)

Ja das ist selbsterklärend. Ich weiss trotzdem nicht wie ich das in dem 
Programm umstezen kann. Kennt denn jemand dieses Programm und kann mir 
da weiterhelfen?

von Harald K. (kirnbichler)


Lesenswert?

Torben schrieb:
> Ich weiss trotzdem nicht wie ich das in dem
> Programm umstezen kann.

Welches Programm? Das Deines Logikanalysators?

Warum? Ist da keine Bedienungsanleitung dabei, oder war die auch auf 
einer CF-Karte, die Du nicht mehr hast?

von Torben (torbenluckypilz)


Lesenswert?

Harald K. schrieb:
> Welches Programm? Das Deines Logikanalysators?

Ja genau.

von Harald K. (kirnbichler)


Lesenswert?

Harald K. schrieb:
> Warum? Ist da keine Bedienungsanleitung dabei?

von Falk B. (falk)


Lesenswert?

Torben schrieb:
> Ja das ist selbsterklärend. Ich weiss trotzdem nicht wie ich das in dem
> Programm umstezen kann. Kennt denn jemand dieses Programm und kann mir
> da weiterhelfen?

Mann O Mann, du bist ja der echte Experte! Klar "dieses Programm" kennen 
alle, vor allem da du nicht einmal dessen Namen gesagt hast! Jehova, 
Jehova!
Lies mal was über Netiquette.

von Harald K. (kirnbichler)


Lesenswert?

Torben schrieb:
> an einen Logic-analyzer (Digital Discovery von Digilent)

Immerhin, den hat er genannt. Ich kann mir nicht vorstellen, daß die 
Software, die Digilent für ihre Geräte anbietet, ohne jede Dokumentation 
daherkommt.

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Torben schrieb:
> Harald K. schrieb:
>> Welches Programm? Das Deines Logikanalysators?
>
> Ja genau.

Dein Logikanalysator wird nur Decoder für gängige Busprotokolle 
besitzen, einen Decoder für CF-Karten-Low-Level-Kommandos wirst du da 
sicher nicht finden. Da bleibt dir vermutlich nur das händische 
Entschlüsseln der mitgeschnüffelten Kommunikation, da werden diverse 
Bytes hin und her gehen, bis die Karte ihre Seriennummer preisgibt.

Sehr mühsame Handarbeit!

von Harald K. (kirnbichler)


Lesenswert?

Es gibt Logikanalysatoren, bei denen man sich Decoder selbstbauen kann, 
so z.B. die Saleae-Reihe. Und das geht auch beim "Digital Discovery" von 
Digilent.

"Custom Interpreters available via scripting".

Ein erster Schritt wäre also das Zusammenfassen der vom ISA-Bus her 
bekannten Leitungen, denn das IDE-Interface ist eine Teilmenge genau 
dieses uralten Klassikers der PC-Geschichte.

https://en.wikipedia.org/wiki/Industry_Standard_Architecture
https://en.wikipedia.org/wiki/Parallel_ATA

16 Datenleitungen (D0..D15), drei Adressleitungen (A0..A2), zwei 
Chipselects, IORead, IOWrite, DDRQ, DDACK, IOCHRDY und IRQ.

Sollte die CF-Karte im UDMA-Betrieb angesteuert werden, wirds halt noch 
etwas komplizierter ...

von Torben (torbenluckypilz)


Lesenswert?

Vielen Dank für die Hilfreichen Beiträge Wolfgang R. und Harald K. .
Ich habe mir schon fast gedacht, dass es auf einen selbst geschriebenen 
Decoder hinauslaufen wird.

von Εrnst B. (ernst)


Lesenswert?

Harald K. schrieb:
> "Custom Interpreters available via scripting".

Sigrok/Pulseview haben leider auch keine fertigen.
Sowohl IDE als auch CF stehen nur als "Possible candidates for future 
protocol decoders" mit 0% completion auf

https://www.sigrok.org/wiki/Protocol_decoders

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.