public void Run(string readerName) { var reader = new SmartCardReader(readerName); var secureChannel = new Readers.SecureSession.SecureChannel(reader); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask("Establishing Secure Session"); if (!IsValidSessionKeyFormat(EncKey) || !IsValidSessionKeyFormat(MacKey)) { throw new ArgumentException("Secure session key format is incorrect, correct format of session key string is 32 character long hexadecimal string without hex specifier. Example: \"00000000000000000000000000000000\""); } secureChannel.Establish(EncKey + MacKey, KeyRelatedAccesRight); if (secureChannel.IsSessionActive) { ConsoleWriter.Instance.PrintMessage("Session established"); ConsoleWriter.Instance.PrintSplitter(); ReaderHelper.GeneralAuthenticateiClass(secureChannel, "Authenticate without implicit selection. Key from slot: ", BookNumber.Book0, PageNumber.Page0, GeneralAuthenticateCommand.ImplicitSelection.Off, GeneralAuthenticateCommand.iClassKeyType.PicoPassCreditKeyKC, 0x21); ReaderHelper.UpdateBinaryCommand(secureChannel, "Update binary, target block nr: ", UpdateBinaryCommand.Type.Plain, 0x14, "BACDEF0122345678"); ConsoleWriter.Instance.PrintSplitter(); } else { ConsoleWriter.Instance.PrintError("Failed to establish session"); } } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (secureChannel.IsSessionActive) { secureChannel.Terminate(); ConsoleWriter.Instance.PrintMessage("Secure Session terminated."); } if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); var secureChannel = new Readers.SecureSession.SecureChannel(reader); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask("Establishing SAM Secure Session"); if (!IsValidSessionKeyFormat(EncKey) || !IsValidSessionKeyFormat(MacKey)) { throw new ArgumentException("Secure session key format is incorrect, correct format of session key string is 32 character long hexadecimal string without hex specifier. Example: \"00000000000000000000000000000000\""); } secureChannel.Establish(EncKey + MacKey, KeyRelatedAccessRight); if (secureChannel.IsSessionActive) { ConsoleWriter.Instance.PrintMessage("Session established"); ConsoleWriter.Instance.PrintSplitter(); LoadKeyCommand(secureChannel, "Load Mifare Key: ", 0x00, Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._6Bytes, "FFFFFFFFFFFF"); LoadKeyCommand(secureChannel, "Load iCLASS volatile key: ", 0x41, Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Volatile, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._8Bytes, "FFFFFFFFFFFFFFFF"); LoadKeyCommand(secureChannel, "Load Secure Session ReadOnlyAccess Enc key: ", 0x48, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"); LoadKeyCommand(secureChannel, "Load Secure Session ReadOnlyAccess Mac key: ", 0x49, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"); LoadKeyCommand(secureChannel, "Load Secure Session ReadWriteAccess Enc key: ", 0x46, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); LoadKeyCommand(secureChannel, "Load Secure Session ReadWriteAccess Mac key: ", 0x47, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"); ConsoleWriter.Instance.PrintSplitter(); } else { ConsoleWriter.Instance.PrintError("Failed to establish session"); } } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (secureChannel.IsSessionActive) { secureChannel.Terminate(); ConsoleWriter.Instance.PrintMessage("SAM Secure Session terminated."); } if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }