我在一台带有智能卡读卡器的Ubuntu VM上使用了GPShell (模型是ACR122),我使用了几种不同的恩智浦SmartMX芯片。
使用他们的Android TagInfo应用程序 ,当我扫描一个特定的SmartMX芯片时,我可以看到“卡生产生命周期数据”。
不过,我想用GPShell来获取CPLC数据。 我认为它是可访问的,因为我可以在Android设备上扫描标签时看到它。
我有一个名为connect.txt
的程序,它有以下内容:
mode_211 enable_trace establish_context card_connect get_data -identifier 9F7F card_disconnect release_context
这是输出:
josh@josh-VirtualBox:~/projects/gpshell-test$ gpshell connect.txt mode_211 enable_trace establish_context card_connect * reader name ACS ACR122U PICC Interface 00 00 get_data -identifier 9F7F Command --> 80CA9F7F00 Wrapped command --> 80CA9F7F00 Response <-- get_data() returns 0x80200000 (Unknown ISO7816 error: 0x0000)
我试图按照上述命令的GPShell文档 ( get_data -identifier 9F7F
),这应该是获取CPLC数据的命令。
我怎样才能获得CPLC数据?
至于debugging,我已经尝试了一些与GPShell一起使用的示例脚本(例如,select某个AID,或列出AID,尝试使用默认键进行身份validation等)。 所有的命令都给了我与上面相同的输出。 我也在StackOverflow上searchgpshell
并阅读大多数问题/答案,但是他们中没有一个似乎涵盖了我在这里要求的内容(如果需要,我可以提供链接)。 谢谢。
简答:我必须先选择一个应用程序,然后在发送GET DATA
命令之前使用默认密钥进行身份验证。
我结束了安装GlobalPlatformPro ,这是从智能卡获取数据的另一个命令行工具。
我使用gp -list -d
列出卡上的所有AID( -d
是调试以显示正在发送的APDU)。 事实证明,该卡正在使用默认密钥404142434445464748494a4b4c4d4e4f
(在安全通道密钥标题下的gpshell文档中找到)。
它输出几个应用程序。 AID我最终需要使用(尝试了几个之后)是:
ISD: A000000151000000 (OP_READY) Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
我改变了我的connect.txt
程序:
mode_211 enable_trace establish_context card_connect select -AID A000000151000000 open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f get_data -identifier 9f7f card_disconnect release_context
这结束了输出(使用GPShell):
josh@josh-VirtualBox:~/projects/gpshell-test$ gpshell connect.txt mode_211 enable_trace establish_context card_connect * reader name ACS ACR122U PICC Interface 00 00 select -AID A000000151000000 Command --> 00A4040008A000000151000000 Wrapped command --> 00A4040008A000000151000000 Response <-- 6F648408A000000151000000A5589F6501FF9F6E06479120813B00734906072A864886FC6B01600B06092A864886FC6B020202630906072A864886FC6B03640B06092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A026E01029000 open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f Command --> 80CA006600 Wrapped command --> 80CA006600 Response <-- 664B734906072A864886FC6B01600B06092A864886FC6B020202630906072A864886FC6B03640B06092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A026E01029000 Command --> 80500000082F7E9B47AA9F32E400 Wrapped command --> 80500000082F7E9B47AA9F32E400 Response <-- 0000518900148698000501020008402AF999F42B742FD206C0ECDA169000 Command --> 8482010010DF9FA8285DE2C6747D14AD51EFF92D3C Wrapped command --> 8482010010DF9FA8285DE2C6747D14AD51EFF92D3C Response <-- 9000 get_data -identifier 9f7f Command --> 80CA9F7F00 Wrapped command --> 84CA9F7F08EEAA80A1B0DB13D500 Response <-- REDACTED-CPLC-DATA REDACTED-CPLC-DATA card_disconnect
我关心的是最后一行输出,即CPLC数据(编辑)。 你可以从第128行开始查看globalplatform.h ,看看CPLC是如何被解析的:
/** * Whole CPLC data from ROM and EEPROM. * 9F7F // TAG * 2A // Length of data * ////////////////Data ///////////// * 4250 // ic fabricator * 3272 // ic type * 1291 // os id * 6181 // os date * 0700 // os level * 8039 // fabrication date * 0106D0BB // ic serial * 1D3C // ic batch * 0000 // module fabricator * 8148 // packing date * 0000// icc manufacturer * 8148 // ic embedding date * 0000 // pre - personalizer * 0000 // IC Pre Personalization Date * 00000000 //IC Pre Personalization Equipment Identifier * 0000// IC Personalizer * 0000 // IC Personalization Date * 00000000 // IC Personalization Equipment Identifier */
使用GlobalPlatformPro简单的gp -i
将以可读的形式为您提供CPLC。