Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ac:laboratoare:09 [2025/11/20 10:36]
marios.choudary
ac:laboratoare:09 [2025/11/20 11:37] (current)
marios.choudary
Line 316: Line 316:
 sudo apt install libpcsclite-dev swig libpcsc-perl pcsc-tools python3-dev libudev-dev python3-pyscard python3-pyserial sudo apt install libpcsclite-dev swig libpcsc-perl pcsc-tools python3-dev libudev-dev python3-pyscard python3-pyserial
 </​code>​ </​code>​
 +
 +Note: on some distributions the python3-pyserial package is python3-serial.
  
 If this doesn'​t work, then get ''​%%Pyserial%%''​ from [[https://​pypi.python.org/​pypi/​pyserial#​downloads|here]] If this doesn'​t work, then get ''​%%Pyserial%%''​ from [[https://​pypi.python.org/​pypi/​pyserial#​downloads|here]]
Line 325: Line 327:
 </​code>​ </​code>​
  
-  * You might also want to install these additional card tools from here:+  * You might also want to install these additional card tools:
  
 <​code>​ <​code>​
Line 349: Line 351:
 For Mac OS, things should work by just installing pcsc_tools through mac ports or brew: For Mac OS, things should work by just installing pcsc_tools through mac ports or brew:
 <​code>​ <​code>​
-sudo port install pcsc-tools swig+sudo port install pcsc-tools swig py-pyscard py-serial
 </​code>​ </​code>​
  
Line 364: Line 366:
  
 What is the ATR from your card ? What is the ATR from your card ?
 +
 +=== Use a terminal emulator to interact with your card ===
 +
 +Start with files for accessing the card data in {{:​ac:​laboratoare:​lab_emv_py3.zip|this}} archive.
 +
 +Create a file named ''​%%terminal.txt%%''​ that will be populated as mentioned below (perhaps already included in the zip file).
 +This file should end with a line containing the string ''​%%0000000000%%''​.
 +
 +After updating this file (see below), we can run the terminal in this manner:
 +
 +<​code>​
 +python3 sclink.py --scterminal terminal.txt gg
 +</​code>​
 +
 +
 +=== Select financial app ===
 +
 +We shall now first select the main financial application on the card via the general ''​%%1PAY.SYS.DDF01%%''​ file available on some EMV cards followed by the selection of the Application ID. See [[https://​www.emvco.com/​specifications/​book-1-application-independent-icc-to-terminal-interface-requirements-2/​ |EMV Book 1]], sections 11.3 and 12 for details.
 +
 +<​note>​
 +Newer EMV cards may not support the ''​%%1PAY.SYS.DDF01%%''​ selection method described below, but you may need to use the Application ID list method or some other variant, as explained in the [[https://​www.emvco.com/​specifications/​book-1-application-independent-icc-to-terminal-interface-requirements-2/​ |EMV Book 1]], chapter 12.
 +</​note>​
 +
 +In summary, the main steps are these:
 +
 +  - Send the first ''​%%SELECT%%''​ command with ''​%%1PAY.SYS.DDF01%%'':​ ''​%%00A404000E315041592E5359532E4444463031%%''​
 +  - Decode the response using [[http://​www.emvlab.org|emvlab]]. Use the SFI response (e.g. ''​%%01%%'',​ concatenated with the record number encoded in the last 3 bits): ​ ''​%%(SFI << 3) | REC_NUM%%''​. E.g. If ''​%%SFI=01%%''​ and ''​%%REC_NUM=1%%'',​ we get the Reference Control parameter (P2) ''​%%0x0C%%''​ for the ''​%%READ RECORD%%''​ command, leading to the ''​%%READ RECORD%%''​ command ''​%%00B2010C00%%''​.
 +  - Check the available apps by sending ''​%%READ RECORD%%''​ commands of the form  ''​%%00B2010C00%%'',​ ''​%%00B2020C00%%'',​ etc. Check the responses by decoding them with [[http://​www.emvlab.org|emvlab]]
 +  - Eventually select one of them using ''​%%SELECT%%'',​ e.g. 
 +  * Select particular app: ''​%%00A4040007XXXXXXXXXXXXXX%%''​ (replace the X values based on the Application ID response to the ''​%%00B2XXX%%''​ command above).
 +    E.g. to get something like ''​%%00A4040007A0000000041010%%''​ (if the application has 7 bytes -- 14 hex characters for the Application ID).
 +  * ''​%%00A4040007A0000000041010%%''​ (this must be updated for your card, based on the response to the ''​%%00B2XXX%%''​ command above).
 +  * Start transaction with ''​%%GET PROCESSING OPTS%%'':​ ''​%%80A80000028300%%''​
 +
 +Now your ''​%%terminal.txt%%''​ file should look something like this (but again, replace the Application ID with the correct one and also use the correct ''​%%READ RECORD%%''​ commands -- from your trials).
 +
 +<code - terminal.txt>​
 +00A404000E315041592E5359532E4444463031
 +00B2010C00
 +00A4040007A0000000041010
 +80A80000028300
 +0000000000
 +</​code>​
 +
 +As mentioned above, now run this terminal emulator with the following code:
 +
 +<​code>​
 +python3 sclink.py --scterminal terminal.txt gg
 +</​code>​
 +
 +What applications do you see on the card ?
 +
 +Are you able to start communication ?
  
 ==== Bonus 2: MAC generation (2 points) ==== ==== Bonus 2: MAC generation (2 points) ====
ac/laboratoare/09.1763627797.txt.gz · Last modified: 2025/11/20 10:36 by marios.choudary
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0