Aktuelle Zeit: 28.09.2020 20:21

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 10.12.2010 12:20 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
Ich mag das. Alleine den Spass diesen Code zu schreiben waren
die 4 Euronen wert. Auch wenn das Heft einfach nur Dreck ist.


Tada, Purebasic Code für den 'KartenTresor' lesen und schreiben

Code:
 
     
#DF_APP_ID_OWOK_OFFLINE = $808301
#OI_DF_FID_AESKEY = "(BYTE) 0x01"
#OI_DF_FID_AESKEY_LEN = $20
#OI_DF_FID_PWD = "(BYTE) 0x02"
#OI_DF_FID_PWD_LEN = $20
#OI_DF_FID_PWD_UNPROT = "(BYTE) 0x08"
#OI_DF_FID_PWD_UNPROT_LEN = $20
#OI_DF_FID_SECURE_NOTEPAD = "(BYTE) 0x11"
#OI_DF_FID_SECURE_NOTEPAD_LEN= $400
#OI_ERR_CARD_AUTH = 13
#OI_ERR_CARDLOCKED = 4
#OI_ERR_CHANGE_KEY = 14
#OI_ERR_CREATE_DATA_FILE = 15
#OI_ERR_DEACTIVATE = 6
#OI_ERR_ENETWORK = 3
#OI_ERR_NO_READER = 2
#OI_ERR_NOT_INIT = $13
#OI_ERR_NOT_REGISTED = 5
#OI_ERR_PARAM = $12
#OI_ERR_PCSC_CONNECT = 10
#OI_ERR_PCSC_TRANSMIT = 11
#OI_ERR_READ_CARD = 20
#OI_ERR_READ_DATA_FILE = $10
#OI_ERR_SELECT_APP = 12
#OI_ERR_TIMEOUT_PIN = 8
#OI_ERR_UNKNOWN = $3E8
#OI_ERR_USER_CANCEL = 1
#OI_ERR_WRITE_DATA_FILE = $11
#OI_ERR_WRONG_PIN = 7
#OI_LOGIN_OPTION_DEBUG = $40
#OI_LOGIN_OPTION_RETURN_ON_CARD_LOCKED = 2
#OI_LOGIN_OPTION_RETURN_ON_CARD_NOT_REG = $10
#OI_LOGIN_OPTION_RETURN_ON_NO_READER = 1
#OI_LOGIN_OPTION_RETURN_ON_PIN_TIMEOUT = $80
#OI_LOGIN_OPTION_RETURN_ON_WRONG_CARD = 8
#OI_LOGIN_OPTION_RETURN_ON_WRONG_PIN = 4
#OI_LOGIN_OPTION_SHOW_BUT_CARD_DEACTIVATE = $20
#OI_OK = 0
#OI_REG_ENT_DEF_READER_NAME = "DefReaderName"
#OI_REG_ENT_DONT_ASK_SET_PWD = "DontAskSetPwd"
#OI_REG_ENT_DONT_ASK_SET_PWD_DEF = 0
#OI_REG_ENT_MIN_PWD_LEN= "MinPwdLen"
#OI_REG_ENT_MIN_PWD_LEN_DEF = 6
#OI_REG_PATH_MAIN = "SOFTWARE\\REINER SCT\\OWOK\\OI"



; Public Structure CMemRef
;     Public m_pData As IntPtr
;     Public m_nBufferLen As UInt32
; End Structure
Structure  CMemRef
  m_pData.l
  m_nBufferLen.l
EndStructure 




; Public Structure COiReqObj

;     Public m_nSize As UInt32

;     <MarshalAs(UnmanagedType.LPStr)> _
;     Public m_zServerName As String

;     <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3, ArraySubType:=UnmanagedType.SysUInt)> _
;     Public m_zSites As IntPtr()

;     Public m_nPort As UInt16

;     Public m_nOptions As UInt32

;     <MarshalAs(UnmanagedType.LPStr)> _
;     Public m_zDialogTitle As String

;     <MarshalAs(UnmanagedType.LPStr)> _
;     Public m_zLabelButtonCancel As String

;     <MarshalAs(UnmanagedType.LPStr)> _
;     Public m_zLabelButtonDeactivate As String

; End Structure
Structure COiReqObj
  m_nSize.l
  m_zServerName.s
  m_zSites.l
  m_nPort.w
  m_nOptions.l
  m_zDialogTitle.s
  m_zLabelButtonCancel.s
  m_zLabelButtonDeactivate.s
EndStructure
 


 
Procedure.s CardError(code)
     Select code
      Case 0
        ProcedureReturn  "OK"
      Case 1
            ProcedureReturn "Abbruch durch Benutzer"
           
        Case 2
            ProcedureReturn "Kein Kartenleser"
           
        Case 3
            ProcedureReturn "Netzwerkfehler"
           
        Case 4
            ProcedureReturn "Karte gesperrt"
           
        Case 5
            ProcedureReturn "Nicht registriert"
           
        Case 6
            ProcedureReturn "Deaktiviert"
           
        Case 10
            ProcedureReturn "PC/SC Connect"
           
        Case 11
            ProcedureReturn "PC/SC Transmit"
           
        Case 12
            ProcedureReturn "Anwendungsauswahl"
           
        Case 13
            ProcedureReturn "Authentifikation"
           
        Case 14
            ProcedureReturn "Schlüsseländerung"
           
        Case 15
            ProcedureReturn "Erzeugen der Datendatei"
           
        Case $10
            ProcedureReturn "Lesen der Datendatei"
           
        Case $11
            ProcedureReturn "Schreiben der Datendatei"
           
        Case $12
            ProcedureReturn "Parameter"
           
        Case $13
            ProcedureReturn "Nicht initialisiert"
           
        Case $3E8
            ProcedureReturn "unbekannt"
           
        Default
           ProcedureReturn "Unbekannter Fehlercode"
     EndSelect
     
   EndProcedure
   
 

;     <DllImport("oi32.dll")> _
;     Public Shared Function OiChangePassword() As UInt32

;     <DllImport("oi32.dll")> _
;     Public Shared Function OiInitCard() As UInt32

;     <DllImport("oi32.dll")> _
;     Public Shared Function OiLogin(ByRef p_pcOiReqObj As COiReqObj, ByRef p_pcUserId As CMemRef, ByRef p_pcCardId As CMemRef, ByRef p_pcUnProtected As CMemRef, ByRef p_pcProtected As CMemRef) As UInt32

;     <DllImport("oi32.dll")> _
;     Public Shared Function OiReadFile(ByVal p_nFileId As Byte, ByRef p_pcData As CMemRef) As UInt32

;     <DllImport("oi32.dll")> _
;     Public Shared Function OiResetPassword() As UInt32

;     <DllImport("oi32.dll")> _
;     Public Shared Function OiWriteFile(ByVal p_nFileId As Byte, ByRef p_pcData As CMemRef) As UInt32
     


 Prototype.l OiNew()
 Prototype.l OiChangePassword()
 Prototype.l OiInitCard()
 
 
 ;Damit hab ich noch Probleme
 ;Prototype.l OiLogin( p_pcOiReqObj.COiReqObj, p_pcUserId.CMemRef, p_pcCardId.CMemRef, p_pcUnProtected.CMemRef, p_pcProtected.CMemRef)
 Prototype.l OiReadFile( p_nFileId.b, p_pcData)
 Prototype.l OiResetPassword()
 Prototype.l OiWriteFile(p_nFileId.b, p_pcData)
 
 If OpenLibrary(0, "oi32.dll")
   
    OiChangePassword.OiChangePassword= GetFunction(0, "OiChangePassword")
    OiInitCard.OiInitCard=GetFunction(0,"OiInitCard")
 ;   OiLogin.OiLogin=GetFunction(0,"OiLogin")
    OiReadFile.OiReadFile=GetFunction(0,"OiReadFile")
    OiResetPassword.OiResetPassword=GetFunction(0,"OiResetPassword")
    OiWriteFile.OiWriteFile=GetFunction(0,"OiWriteFile")
   
    Result=OiInitCard() ;initialisieren
    Debug Result
   
    ref2.CMemRef
    ref2\m_pData = AllocateMemory($400)
    ref2\m_nBufferLen = $400
    Code=OiReadFile($11,@ref2)
    Debug Code
    If Code=0
     
      Debug ref2\m_pData
      Debug PeekS(ref2\m_pData) ;hier kommt der Text !
     
     
      PokeB(ref2\m_pData,'P')
      ;wieder runterschreiben
     
     
      Code=OiWriteFile($11,@ref2)
     
    Else
      Debug CardError(Code)
    EndIf 
  Else
     Debug "lib not found"
     
  EndIf

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Zuletzt geändert von Rings am 10.12.2010 14:33, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 10.12.2010 14:31 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
weitere Infos:

Die Karte hat 'sogenannte' 32 slots(Bänke) .
Das heisst man kann mit
Code:
Code=OiReadFile(Slot,@ref0)
 

auf 32 Bänke zugreifen(geht sicherlich auch mit OiWriteFile...) .
Allerdings sind nicht alle belegt.
Belegt sind:
1: AES Key , $20 lang
2: Passwort, $20 lang
8: Leer , $20 lang
17: Datenspeicher $400
18: Datenspeicher (Keine Ahnung wie groß)

Alle Anderen sind zur Zeit nicht initialisiert.

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 10.12.2010 15:15 
Offline
Benutzeravatar

Registriert: 12.06.2005 18:06
Kanns sein dass ich die DLL nicht benutzten kann wenn ich ein 64 bit system hab?

Code:
If FileSize("oi32.dll") >= 0
  Debug "is doch da"
EndIf

If OpenLibrary(0, "oi32.dll")
   
    OiChangePassword.OiChangePassword= GetFunction(0, "OiChangePassword")
    OiInitCard.OiInitCard=GetFunction(0,"OiInitCard")
;   OiLogin.OiLogin=GetFunction(0,"OiLogin")
    OiReadFile.OiReadFile=GetFunction(0,"OiReadFile")
    OiResetPassword.OiResetPassword=GetFunction(0,"OiResetPassword")
    OiWriteFile.OiWriteFile=GetFunction(0,"OiWriteFile")
   
    Result=OiInitCard() ;initialisieren
    Debug Result
   
    ref2.CMemRef
    ref2\m_pData = AllocateMemory($400)
    ref2\m_nBufferLen = $400
    Code=OiReadFile($11,@ref2)
    Debug Code
    If Code=0
     
      Debug ref2\m_pData
      Debug PeekS(ref2\m_pData) ;hier kommt der Text !
     
     
      PokeB(ref2\m_pData,'P')
      ;wieder runterschreiben
     
     
      Code=OiWriteFile($11,@ref2)
     
    Else
      Debug CardError(Code)
    EndIf
  Else
     Debug "lib not found"
     
  EndIf


gibt folgendes aus:

Code:
is doch da
lib not found


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 10.12.2010 15:49 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
R4z0r1989 hat geschrieben:
Kanns sein dass ich die DLL nicht benutzten kann wenn ich ein 64 bit system hab?
Wenn es sich um einen Treiber handelt, dann nicht. Ansonsten natürlich nur in einer 32-Bit Anwendung.

Gruß
Thomas

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 10.12.2010 16:09 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
Ja, habt recht.
Die Fehlermeldung sollte richtig lauten:
"cannot load library"

Ja, du kannst mit einer 64 Bit Anwendung keine 32 Bit dll laden.

oi32.dll

obs da ne oi64.dll gibt weis ich nicht.

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 11.12.2010 02:56 
Offline

Registriert: 28.11.2010 13:07
Wohnort: Germany
Hallo Rings,
verrate mir doch bitte woher Du die NET Deklarationen hast ?

Ich habe mir den Krämpel mühselig zusammen "gebastelt" in dem ich die oi32.dll Disambliert habe
und auf Grund der jeweiligen Stackframes geschaut habe (unabhängig vom genauen Datentype) wieviele Parameter welche Funktion erwartet.

z.B. OiWriteFile(p1,p2)
Da kann ich unter anderem erkennen das zwei Parameter übergeben werden und vom ersten nur das low byte benutzt wird (SlotNumber)
was aber doch sehr sehr merkwürdig ist das am Ende aller Funktionen mit "retn" keine Parameter vom Stack genommen werden
und das ist normaler weise nur bei C Funktionen der Fall CDECL = der Aufrufer restauriert den Stack.
Code:
################################################
 10006810                           OiWriteFile:
################################################
 10006810  55                          push ebp
 10006811  8BEC                        mov ebp,esp
 10006813  83E4F8                      and esp,FFFFFFF8h
 10006816  6AFF                        push FFFFFFFFh
 10006818  686B7A0410                  push L10047A6B
 1000681D  64A100000000                mov eax,fs:[00000000h]
 10006823  50                          push eax
 10006824  81EC18040000                sub esp,00000418h
 1000682A  A110CC0510                  mov eax,[L1005CC10]
 1000682F  33C4                        xor eax,esp
 10006831  89842410040000              mov [esp+00000410h],eax
 10006838  56                          push esi
 10006839  A110CC0510                  mov eax,[L1005CC10]
 1000683E  33C4                        xor eax,esp
 10006840  50                          push eax
 10006841  8D842420040000              lea eax,[esp+00000420h]
 10006848  64A300000000                mov fs:[00000000h],eax
 1000684E  8B750C                      mov esi,[ebp+0Ch]
 10006851  8D44240C                    lea eax,[esp+0Ch]
 10006855  50                          push eax
 10006856  E825150000                  call SUB_L10007D80
 1000685B  C744240C64F00410            mov dword ptr [esp+0Ch],L1004F064
 10006863  8A4D08                      mov cl,[ebp+08h]
 10006866  C7842428040000000000+       mov dword ptr [esp+00000428h],00000000h
 10006871  888C240C040000              mov [esp+0000040Ch],cl
 10006878  8D4C240C                    lea ecx,[esp+0Ch]
 1000687C  89B42410040000              mov [esp+00000410h],esi
 10006883  FF15B0F10410                call [L1004F1B0]
 10006889  C7842428040000FFFFFF+       mov dword ptr [esp+00000428h],FFFFFFFFh
 10006894  8D4C240C                    lea ecx,[esp+0Ch]
 10006898  8BF0                        mov esi,eax
 1000689A  C744240C64F00410            mov dword ptr [esp+0Ch],L1004F064
 100068A2  E819160000                  call SUB_L10007EC0
 100068A7  8BC6                        mov eax,esi
 100068A9  8B8C2420040000              mov ecx,[esp+00000420h]
 100068B0  64890D00000000              mov fs:[00000000h],ecx
 100068B7  59                          pop ecx
 100068B8  5E                          pop esi
 100068B9  8B8C2410040000              mov ecx,[esp+00000410h]
 100068C0  33CC                        xor ecx,esp
 100068C2  E826550200                  call SUB_L1002BDED
 100068C7  8BE5                        mov esp,ebp
 100068C9  5D                          pop ebp
 100068CA  C3                          retn


Grüsse Joshy

EDIT
Bist Du Dir bei "m_zSites.l" sicher ?
Könnte doch auch ein Pointer auf Pointers sein oder ein Array mit Pointers !

Was könnte der fehlende ErrorCode 9 sein, eine Idee ?
Code:
Procedure.s ErrorString(ErrCode.l)
  Select ErrCode
  Case #OI_ERR_OK                : ProcedureReturn "$00_ERR_OK"
  Case #OI_ERR_USER_CANCEL       : ProcedureReturn "$01_ERR_USER_CANCEL"
  Case #OI_ERR_NO_READER         : ProcedureReturn "$02_ERR_NO_READER"
  Case #OI_ERR_ENETWORK          : ProcedureReturn "$03_ERR_ENETWORK"
  Case #OI_ERR_CARDLOCKED        : ProcedureReturn "$04_ERR_CARDLOCKED"
  Case #OI_ERR_NOT_REGISTED      : ProcedureReturn "$05_NOT_REGISTED"
  Case #OI_ERR_DEACTIVATE        : ProcedureReturn "$06_ERR_DEACTIVATE"
  Case #OI_ERR_WRONG_PIN         : ProcedureReturn "$07_ERR_WRONG_PIN"
  Case #OI_ERR_TIMEOUT_PIN       : ProcedureReturn "$08_ERR_TIMEOUT_PIN"
  Case #OI_ERR_PCSC_CONNECT      : ProcedureReturn "$0A_ERR_PCSC_CONNECT"
  Case #OI_ERR_PCSC_TRANSMIT     : ProcedureReturn "$0B_ERR_PCSC_TRANSMIT"
  Case #OI_ERR_SELECT_APP        : ProcedureReturn "$0C_ERR_SELECT_APP"
  Case #OI_ERR_CARD_AUTH         : ProcedureReturn "$0D_ERR_CARD_AUTH"
  Case #OI_ERR_CHANGE_KEY        : ProcedureReturn "$0E_ERR_CHANGE_KEY"
  Case #OI_ERR_CREATE_DATA_FILE  : ProcedureReturn "$0F_ERR_CREATE_DATA_FILE"
  Case #OI_ERR_READ_DATA_FILE    : ProcedureReturn "$10_ERR_READ_DATA_FILE"
  Case #OI_ERR_WRITE_DATA_FILE   : ProcedureReturn "$11_ERR_WRITE_DATA_FILE"
  Case #OI_ERR_PARAM             : ProcedureReturn "$12_ERR_PARAM"
  Case #OI_ERR_NOT_INIT          : ProcedureReturn "$13_ERR_NOT_INIT"
  Case #OI_ERR_READ_CARD         : ProcedureReturn "$14_ERR_READ_CARD"
  Case #OI_ERR_UNKNOWN           : ProcedureReturn "$3E8_ERR_UNKNOWN"
  Default                        : ProcedureReturn "UNKNOW_ERR_CODE " + str(code)
  EndSelect
EndProcedure

_________________
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 11.12.2010 08:30 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
D.J.Peters hat geschrieben:
Hallo Rings,
verrate mir doch bitte woher Du die NET Deklarationen hast ?

Ich habe mir den Krämpel mühselig zusammen "gebastelt" in dem ich die oi32.dll Disambliert habe


Der 'Kartentresor' ist ne -NET Anwendung,
also nimmt man den DotNetReflector.

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 11.12.2010 09:30 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:37
Anscheinend bekommt man auch Informationen wenn man ReinerSCT eine E-Mail schreibt. :lol: Aber disassemblen geht wohl schneller.

_________________
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 13.12.2010 00:10 
Offline

Registriert: 07.12.2010 17:55
Das Thema schein ja doch auf reges Interesse zu stoßen! :)

Den Perso werde ich natürlich nicht kaputt machen... aber.. naja. Bestimmt legt den mein kleiner Bruder zufällig in die Mikrowelle. ;D


Vielen Dank für den Code... werde mich jetzt weiter damit beschäftigen. Danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Personalausweis - Lesegerät
BeitragVerfasst: 19.05.2011 18:55 
Offline
Benutzeravatar

Registriert: 19.07.2008 07:47
ts-soft hat geschrieben:
Polarwolf.eu hat geschrieben:
Also der RFID-Chip in meinem neuen Perso wird definitiv zerstört. :> (Kommt im März..)

Ich bin einfach skeptisch was die Sicherheit angeht...

Bild
Aber drann denken, der Ausweis gehört nicht Dir, es handelt sich also um vorsätzliche Sachbeschädigung :wink:

Stimmt zwar nicht so ganz (es muss sich dem Gesetz nach dir gehören, da sich ein Ausweisdokument "in deinem Besitz befinden" muss), aber nun ja. Das Teil ist selbst bei "beschädigtem" Chip noch gültig. Der Polizist muss halt selber tippen statt einfach die Karte "tippen zu lassen".

Hat eigentlich einer von euch mal darüber nachgedacht, dass es in Deutschland nicht Pflicht ist, einen Perso zu haben? Nur ein Ausweisdokument ist nötig. Das kann auch ein Reisepass sein, der in Fragen der Sicherheit bestimmt noch etwas anders behaftet ist.

Irgendwie mag ich da schon meine I-Card auf den Philippinen. Das Teil hat nen Barcode mit einer Unmenge an Informationen, aber es hat bestimmt noch für lange Zeit kein RFID.

_________________
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye