본문 바로가기
개발이야기

[EMV] 해외카드 EMV 로그분석 01

by 코저씨 2019. 5. 31.
728x90

IC카드가 삽입되면 ATR을 처리하고 (T0,T1 처리)  Payment System Environment (PSE)을 SELECT한다.

P1은 0x04로 NAME으로 찾겠다로 하고 P2는 0 으로 해서 처음이라고 한다.

File Name 은 "1PAY.SYS.DDF01" 이고 이는  Directory Definition File (DDF) named '1PAY.SYS.DDF01' 로 emv book 에 나와있다.

 

send to ic:  [00,A4,04,00,0E,31,50,41,59,2E,53,59,53,2E,44,44,46,30,31,]
send to ic :  [00,C0,00,00,02,] // GET RESPONSE Command
<< 로그에는 없지만 6120를 수신받은 듯. 61xx는 xx바이트가 아직 덜 송신되었다는 뜻이고 더 보내라는 명령

read from ic:[6F,1E,84,0E,31,50,41,59,2E,53,59,53,2E,44,44,46,30,31,A5,0C,88,01,01,5F,2D,02,7A,68,9F,11,01,01,90,00,]  

수신된 데이터는 아래 표대로 출력되어 나오며 같은 방식으로 정리하면 다음과 같다.

6F : FCI Template  -> 1e : len

84 : DF name -> 0e : len -> 31,50,41,59,2E,53,59,53,2E,44,44,46,30,31 (1PAY.SYS.DDF01)

A5 : FCI Propreietary Template -> 0c : len -> 88 ~ 90 00 앞까지

       88 : SFI -> 01 : len -> 01 : SFI는  1개 

       5F 2D :  Language Preference -> len : 02 -> 7A,68 (zh, 중국어) 

       9F 11 :  Issuer Code Table Index -> len : 01 -> 01  인덱스는 1개

 90 00 : sw 1 sw2      

 다음 단계를 Read Record를 진행한다. 1번 레코드여서 p1은 01 ,  p2는 0c로 시작한다. 수신된 데이터는 70으로 시작하는 

Record Template 데이터가 있다.

 to ic :   [00,B2,01,0C,00,]
from ic : [70,32,61,30,4F,08,A0,00,00,03,33,01,01,02,50,0F,55,6E,69,6F,6E,50,61,79,20,43,72,65,64,69,74,9F,12,0F,55,6E,69,6F,6E,
              50,61,79,20,43,72,65,64,69,74,87,01,01,]
70,32,
61 Application Template -> len 30 ->
      4F AFD Name -> len 08 -> A0,00,00,03,33,01,01,02, 
     50 Application label ->len 0F -> 55,6E,69,6F,6E,50,61,79,20,43,72,65,64,69,74 (UnionPay Credit)
     9F,12 Application Preferred Name -> len 0F -> 55,6E,69,6F,6E,
50,61,79,20,43,72,65,64,69,74,(UnionPay Credit)
     87,Application Priority Indicator -> len 01 -> 01 우선순위는 1순위

to ic :  [00,B2,02,0C,00,]
from ic : [6a 83] -> 레코드 없음

레코드가 하나뿐임으로 Final Selection을 한다. 사용하는 커맨드는 Select 이다.

to ic:  [00,A4,04,00,08,A0,00,00,03,33,01,01,02,]
from ic : :  [6F,4C,84,08,A0,00,00,03,33,01,01,02,A5,40,50,0F,55,6E,69,6F,6E,50,61,79,20,43,72,65,64,69,74,87,01,01,
9F,38,06,9F,02,06,5F,2A,02,5F,2D,02,7A,68,9F,11,01,01,9F,12,0F,55,6E,69,6F,6E,50,61,79,20,43,72,65,64,69,74,BF,0C,05,
9F,4D,02,0B,0A,90,00,]

6F : FCI Template  -> 4c : len
84 : DF name -> 08 : len -> A0,00,00,03,33,01,01,02
A5 : FCI Propreietary Template -> 40 : len -> 50 ~ 90 00 앞까지
      50Application label  -> 0f : len -> 55,6E,69,6F,6E,50,61,79,20,43,72,65,64,69,74 (UnionPay Credit)
      87Application Priority Indicator -> 01 len -> 01 
      9F,38 Processing Options Data Object List (PDOL) -> 06 len -> 9F,02,06,5F,2A,02 (Get Processing Option Command 에 쓰인다.)
      5F 2D :  Language Preference -> len : 02 -> 7A,68 (zh, 중국어) 
      9F 11 :  Issuer Code Table Index -> len : 01 -> 01  인덱스는 1개
      9F,12 Application Preferred Name -> len 0f -> 55,6E,69,6F,6E,50,61,79,20,43,72,65,64,69,74(UnionPay Credit)
      BF 0C: File Control Information (FCI) Issuer Discretionary Data -> len 05
           9F,4D : Log Entry -> len 02 -> 0B,0A (로그 개수인데 이는 나중에..)
90 00 : sw 1 sw2      

AID선택이 끝났으니 이제  Get Processing Option Command 로 AID가 지원하는 설정값들을 확인한다. 

SDA인지 레코드가 몇개인지 등등.

728x90