[gelöst] SmartCard auslesen mit SCardTransmit!!!



  • Ich weiß nichtmehr weiter -.-
    ich finde einfach nichts passendes....

    Ich mache momentan ein Praktikum in einem größeren Betrieb und ich habe die Aufgabe ein Programm zu entwickeln (zu "Nachforschungszwecken"), welches die Daten einer Kreditkarte ausliest.

    Ich benutze BDS 2006 (C++Builder) und habe die Methoden SCardEstablishContext bis SCardTransmit in der richtigen Reihenfolge (aus Beispielen aus dem Netz) zusammengesetzt.

    Programm funktioniert auch soweit, dass ich den ATR herauslesen kann, aber hier ist dann auch die Frage: Wie geht es weiter??

    In der Hilfe habe ich gesehen, dass ich per SCardTransmit ein Bytebuffer übertragen kann:

    // Der Puffer der gesendet werden soll:
    	BYTE pbSendBuffer[] = { 0xC0, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00 }; 
    	DWORD cbSendLength = sizeof(pbSendBuffer);
    	BYTE pbRecvBuffer[255];
    	DWORD pcbRecvLength;
    	switch ( dwAP )
    	{
    		case SCARD_PROTOCOL_T1:
    
    			lReturn = SCardTransmit(hCardHandle,  
    						SCARD_PCI_T1, 
    						pbSendBuffer, 
    						cbSendLength, 
    						NULL,         // Kann es vll. hierdran liegen?
    						pbRecvBuffer,
    						&pcbRecvLength);
    		/**
    			Hier wandle ich nun die Bytes aus pbRecvBuffer
    			bis zur Länge pcbRecvLength in Hexadezimal-Codes um.
    		*/
    
    	}
    

    Das Lesegerät ist in der USB-Tastatur integriert:
    SCM Microsystems Inc. SCR338 USB Keyboard Smart Card

    Was ich eben nicht weiß ist, was muss ich bei pbSendBuffer senden, damit ich irgendwelche Daten empfange??

    oder habe ich irgendwo einen Denkfehler???

    Das meißte zeug was ich gefunden habe war für Linux bestimmt und da es die Firma nur unter Windows verwenden möchte, passt das nicht 😞

    Bitte sagt mir irgendwer, der das schonmal gemacht hat, wenigstens eine Quelle wo ich die Daten herbekomme die ich brauche...
    ich bin seit Freitag am googeln-.-

    Was ihr vielleicht noch wissen solltet, ich bin Informatik Student und bin jetzt ab Oktober im 1. Semester....
    Ich programmiere allerdings schon seit knapp 3 Jahren "normale" Anwendungen mittels Delphi (Schulinformatik).

    MfG
    itw



  • Hat niemand eine idee?



  • Nun, in der Schule lernt man in Info das Wesentliche z.T. nicht^^:
    nämlich: "Wo bekomme ich Informationen her?"
    Dazu gibt es ein einfaches kleines Ding, nämlich das Manual bzw. das Datenblatt von dem Gerät. Du sagst, du hast Informationen für den Linuxbetrieb - nun, das ist doch schon was. Das Gerät wird unter Linux genauso reagieren wie unter Windows.
    Das Clientprogramm unter Windows hat halt eine andere Syntax.

    Ach ja: Deine Fehlerbeschreibung war (für mich und sciher für die meisten, die das Gerät nicht kennen) nicht wirklich sinnvoll - worauf willst du genau hinaus?



  • 1.) Falsches Unterforum.
    2.) Kennt sich damit eh niemand aus.
    3.) Du machst dich unbeliebt wenn du einen Thread schon nach 2 Stunden hochholst.



  • Checker&Murckser schrieb:

    Nun, in der Schule lernt man in Info das Wesentliche z.T. nicht^^:
    nämlich: "Wo bekomme ich Informationen her?"
    Dazu gibt es ein einfaches kleines Ding, nämlich das Manual bzw. das Datenblatt von dem Gerät.

    Okay, infos habe ich aus der Borland-Hilfe herausbekommen...

    Du sagst, du hast Informationen für den Linuxbetrieb - nun, das ist doch schon was.

    Jop, aber das ist 100% nicht brauchbar, weil ich das ganze bereits mittels C++-Bulder hinbekommen habe -> http://pcsclite.alioth.debian.org/pcsc-lite/node1.html

    Ach ja: Deine Fehlerbeschreibung war (für mich und sciher für die meisten, die das Gerät nicht kennen) nicht wirklich sinnvoll - worauf willst du genau hinaus?

    Okay, also.
    Auftrag: lese Daten von Karte.
    und ich bin mittlerweile soweit, dass ich den ATR-String herausgelesen habe.
    Nur wie ich dann weiter komme ist die eigentliche Frage.
    Ich denke mal, dass es mittels SCardTransfer geht (oben gezeigt), weiß es aber überhaupt nicht.

    1.) Falsches Unterforum.

    Ach ja, was hättest du vorgeschlagen?
    meines erachtens geht es hier um "reines" C++.
    Ich habe eine Lib ins Projekt importiert:
    z.b. ich spreche eine DLL an, die mir die möglichkeit gibt mit der Karte zu komunizieren: winscard.lib

    2.) Kennt sich damit eh niemand aus.

    Klar kennt sich da sicher jemand aus...
    schließlich sind die sachen eigentlich so weit verbreitet und die Basics findet man ja auch (schließlich hab ich ja genug gefunden um so weit zu kommen wie ich jetzt bin, aber es fehlt mir eben jetzt an einem Wissen, wie ich da weiter vorgehen muss.... -.-

    3.) Du machst dich unbeliebt wenn du einen Thread schon nach 2 Stunden hochholst.

    Es ist ungemein wichtig, dass ich jemanden finde der sich auskennt ...
    Schließlich bin ich jetzt nicht umsonst so weit gekommen...

    Auf Anfrage sehe ich mich jetzt bereit den Quelltext morgen kommentiert hier reinzustellen.
    Jetzt ist aber gleich Feierabend, und ich muss meine Fahrgelegenheit wahrnehmen, da ich sonst 50 km laufen darf xD
    Zuhause gehts wieder an Delphi 😋



  • Kenn mich mit Kreditkarten nicht aus, aber kleiner Tipp: Unregistrierte reden oft Unsinn 🙂



  • itw schrieb:

    Checker&Murckser schrieb:

    Nun, in der Schule lernt man in Info das Wesentliche z.T. nicht^^:
    nämlich: "Wo bekomme ich Informationen her?"
    Dazu gibt es ein einfaches kleines Ding, nämlich das Manual bzw. das Datenblatt von dem Gerät.

    Okay, infos habe ich aus der Borland-Hilfe herausbekommen...

    Davon, dass du über C++ Bescheid weißt, gehe ich einfach aus.
    Ich meinte eher den Kartenleser -
    und der Link (
    http://pcsclite.alioth.debian.org/pcsc-lite/node17.html) war doch gut, unter SCardTransmit gibt's doch n guten Beispielcode.



  • jo des beispiel habe ich ja verarbeitet hat prima geklappt.
    (btw. wieso gibt es hier Public-Write-Access??
    aber wo wir grad mal dabei sind, das board ist trotz dessen super! so viele Eingabemöglichkeiten (Schaltflächen beim Editor 🙂 ))
    C++ bin ich noch kein Meister, aber ich kenne mich in Delphi super aus, und den Umstieg habe ich auch innerhalb drei Tage hinbekommen 🙂

    (edit: Quelltext wieder entfernt, da Lösung hierfür im nächsten Beitrag 🙂 )



  • grad schnell noch zur Info 🙂
    habe es fast selbst gelöst
    hab hier ne beschriebung gefunden wie ich des ganze ansprechen muss...
    das wird binärarbeit morgen xD
    http://smartcard.sourceforge.net/doc/mkt/mktv1_T2.pdf (Seite 12)
    Die Fragen nun:
    1. geht das irgendwie einfacher`? gibts da schon eine Klasse die ich verwenden kann?
    2. Was muss ich im Information-Block schicken, um die gewünschten Daten zu bekommen?

    Bis morgen dann
    und danke all denen die sich die mühe gemacht haben und machen werden 🙂

    MfG
    itw



  • ne einfacher geht's wohl nicht, du kannst dir aber selber natürlich ne Klasse basteln 😉
    und zu 2 - arbeitest du mit T = 1 oder T = 2 ?
    (wie auch immer 😉 - die Antwort auf deine Frage sollte im Kapitel 6 zu finden sein^^)



  • jo Checker&Murckser, da setz ich mich jetzt mal gediegen dran 😉

    kann aber sein, dass ich mich mal heut mittag wieder wegen was melde
    (auch wenns nur dafür ist, um mal die Lösung hier festzuhalden 😃 )

    bis dann mal

    MfG
    itw



  • find ich gut, wenn [ernste probleme] besonders gekennzeichnet werden. damit wird auch wirklich jeder besucher des forums auf die *wirklich* wichtigen threads gelenkt, statt sich mit den absolut [nebensächlichen] und [unernsten problemen] der anderen rumzuschlagen.

    manche probleme sind einfach ernster als andere, dem muss irgendwie rechnung getragen werden. ich bin deshalb für eine entsprechende kennzeichungspflicht in allen foren.



  • hätte ich ja fast vergessen: regelmäßige statusupdates im topic sollten auch pflicht werden, damit all die leute, deren aufmerksamkeit man von den unernsten, unwichtigen problemen der anderen teilnehmer abgelenkt hat, auch jederzeit wissen wie es um das ernste problem denn nun steht. (man ist ja schließlich besorgt!)

    beispiel:

    [ernstes problem] Wie schreibt man SmardCard richtig?!?!?
    [denke nochmal nach] Wie schreibt man SmardCard richtig?!?!?!?
    [warte auf antworten] Wie schreibt man SmardCard richtig?!?!?!?
    [suche englischen duden] Wie schreibt man SmardCard richtig?!?!?!?
    [beinahe gelöst] Wie schreibt man SmardCard richtig?!?!?
    [gelöst] Wie schreibt man SmardCard richtig?!?!?

    bitte in die forenregeln aufnehmen. danke.



  • prima klappt das 🙂
    (aber ist doch mehr arbeit als das ganze heute zu schaffen xD)
    wens interessiert, der kann alles hier (PDF) nachlesen 😉

    Gruß
    itw™



  • beinahe gelöster unreg schrieb:

    hätte ich ja fast vergessen: regelmäßige statusupdates im topic sollten auch pflicht werden, damit all die leute, deren aufmerksamkeit man von den unernsten, unwichtigen problemen der anderen teilnehmer abgelenkt hat, auch jederzeit wissen wie es um das ernste problem denn nun steht. (man ist ja schließlich besorgt!)

    beispiel:

    [ernstes problem] Wie schreibt man SmardCard richtig?!?!?
    [denke nochmal nach] Wie schreibt man SmardCard richtig?!?!?!?
    [warte auf antworten] Wie schreibt man SmardCard richtig?!?!?!?
    [suche englischen duden] Wie schreibt man SmardCard richtig?!?!?!?
    [beinahe gelöst] Wie schreibt man SmardCard richtig?!?!?
    [gelöst] Wie schreibt man SmardCard richtig?!?!?

    bitte in die forenregeln aufnehmen. danke.

    An sich ist die Idee nett, aber es kommt öfters vor, dass Diskussionen weitergeführt werden, auch wenn sich die Fragestellung für den OP geklärt hat, öfters stellt jemand noch eine Frage dazu, der würde dann keine Antwort bekommen und ich gucke sowieso in jeden Thread rein 🤡 Also Unfug, es funktioniert doch super so wie es ist.



  • Badestrand schrieb:

    Also Unfug, es funktioniert doch super so wie es ist.

    sarkasmusdetektoren sollten auch pflicht werden.



  • und schrieb:

    Badestrand schrieb:

    Also Unfug, es funktioniert doch super so wie es ist.

    sarkasmusdetektoren sollten auch pflicht werden.

    nicht registrierte Benutzer sollten keine dummen Antworten geben dürfen 🤡


Anmelden zum Antworten