CN101876937B - 一种模拟智能卡信息交互的方法 - Google Patents

一种模拟智能卡信息交互的方法 Download PDF

Info

Publication number
CN101876937B
CN101876937B CN2009102372008A CN200910237200A CN101876937B CN 101876937 B CN101876937 B CN 101876937B CN 2009102372008 A CN2009102372008 A CN 2009102372008A CN 200910237200 A CN200910237200 A CN 200910237200A CN 101876937 B CN101876937 B CN 101876937B
Authority
CN
China
Prior art keywords
file
data
client
information interaction
sign
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2009102372008A
Other languages
English (en)
Other versions
CN101876937A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Beijing Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN2009102372008A priority Critical patent/CN101876937B/zh
Publication of CN101876937A publication Critical patent/CN101876937A/zh
Application granted granted Critical
Publication of CN101876937B publication Critical patent/CN101876937B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种模拟智能卡信息交互的方法,包括以下步骤:在PC平台上启动模拟智能卡的软卡;软卡运行COS;使用信息交互文件的IO流模拟软卡运行COS时与客户端之间的信息交互。本发明通过PC平台模拟软卡,并用文件IO流来模拟智能卡与客户端的数据交互,从而解决了开发板资源短缺所带来的问题,可以极大地提高大型COS的开发效率。

Description

一种模拟智能卡信息交互的方法
技术领域
本发明涉及智能卡领域,特别涉及一种利用文件I/O流模拟智能卡信息交互的方法。
背景技术
智能卡(Smart Card,缩写为SC)内嵌有微芯片,智能卡操作系统通常称为芯片操作系统COS(Chip Operating System),其一般是紧紧围绕着它所服务的智能卡的特点而开发的。由于不可避免地受到了智能卡内微处理器芯片的性能及内存容量的影响,因此,COS在很大程度上不同于我们通常所能见到的微机上的操作系统(例如DOS、UNIX等)。
首先,COS是一个专用系统而不是通用系统。即:一种COS一般都只能应用于特定的某种(或者某些))智能卡,不同卡内的COS一般是不相同的。尽管COS在所实际完成的功能上可能大部分都遵循着同一个国际标准,但是因为COS一般都是根据某种智能卡的特点及其应用范围而特定设计开发的,所以不同卡内的COS一般是不相同的。
其次,与那些常见的微机上的操作系统相比较而言,COS在本质上更加接近于监控程序、而不是一个通常所谓的真正意义上的操作系统。
APDU(Application Protocol Data Unit)是应用协议数据单元,与智能卡交换信息的基本单元就是APDU包,从PC机应用程序传出的命令消息,以及智能卡返回给PC机应用程序的回应消息均称为APDU,智能卡与PC机的通信以APDU形式实现。
在现有技术中,COS开发通常采用芯片商提供的开发板进行开发调试。然而发明人发现,开发板的资源有限,在比较大型的COS开发中,就存在调试资源短缺的问题,给COS开发造成了不便。
发明内容
本发明的目的在于一种模拟智能卡信息交互的方法,以解决现有技术的COS开发中的开发板资源有限导致的问题。
在本发明的实施例中提供了一种模拟智能卡信息交互的方法,包括以下步骤:在PC平台上启动模拟智能卡的软卡;软卡运行COS;使用信息交互文件的IO流模拟软卡运行COS时与客户端之间的信息交互。
本发明通过PC平台模拟软卡,并用文件IO流来模拟智能卡与客户端的数据交互,从而解决了开发板资源短缺所带来的问题,可以极大地提高大型COS的开发效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的模拟智能卡信息交互的方法的流程图;
图2是实施例1提供的一种模拟智能卡信息交互的方法的流程图;
图3是实施例2提供的另一种模拟智能卡信息交互的方法的流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1是根据本发明实施例的模拟智能卡信息交互的方法的流程图,包括以下步骤:
步骤S10,在PC平台上启动模拟智能卡的软卡;
步骤S20,软卡运行COS;
步骤S30,使用信息交互文件的IO流模拟软卡运行COS时与客户端之间的信息交互。
该方法通过PC平台模拟软卡,并用文件IO流来模拟智能卡与客户端的数据交互,从而解决了开发板资源短缺所带来的问题,可以极大地提高大型COS的开发效率。
可选地,在上述的方法中,在PC平台上启动模拟智能卡的软卡包括:利用智能卡芯片开发软件创建适合智能卡芯片的软件模拟环境,设置智能卡芯片型号和访问内存的大小端模式,设置半主控,并通过设置软件中断来实现智能卡芯片和客户端的交互。
在图2和图3的实施例1和2中,首先利用智能卡芯片开发软件,即电路和系统分析软件创建适合自己智能卡芯片的软模拟,具体创建的方法为:设置智能卡芯片型号和访问内存的大小端模式,设置Semihosting(半主控),并且通过设置软件中断来实现智能卡芯片和客户端软件的交互;
并且,为了模拟真实的智能卡芯片,将客户端软件使用的PC/SC(智能卡访问WINDOWS的标准结构)规范中的APDU发送接口SCardTransmit函数换成我们预先设定的文件流接口FileSCardTransmit函数。
可选地,在上述的方法中,使用信息交互文件的IO流模拟软卡运行COS时与客户端之间的信息交互包括:
软卡通过自带的接口来判断客户端中是否存在信息交互文件,若不存在,则在客户端中创建信息交互文件,信息交互文件为一个文件,其包括:标识A,当标识A为第一标识时表示下行数据传输模式,用于模拟客户端向软卡发送数据;当标识A为第二标识时表示上行数据传输模式,用于模拟软卡向客户端发送数据;
客户端通过写入信息交互文件向软卡发送数据;
客户端或软卡监视信息交互文件,在监视过程中通过信息交互文件的IO流实现客户端与软卡之间的交互数据。
因为数据流方向包括:从软卡到客户端的上行方向;从客户端到软卡的下行方向。上述的信息交互文件设置方式都可以模拟这两种数据流方向。
可选地,在上述的方法中,客户端通过写入信息交互文件向软卡发送数据包括:将信息交互文件的标识A设置为0,即将信息交互文件设置为处于下行数据传输模式中;若在信息交互文件中预设了标识B,则客户端将标识B的值设置为特定值;若没有预设标识B,则客户端将信息交互文件的标识A之后的数据清空,或将信息交互文件设为未锁定状态;将要发送给软卡的数据写入信息交互文件中;其中标识B用于指示信息交互文件中是否含有数据,当标识B不为特定值,则说明信息交互文件中含有数据,当标识B为特定值,则说明信息交互文件中不含有数据。这是一个初始化的步骤,通过客户端首先写入信息交互文件,从而避免了软卡和客户端都在监控等待信息交互文件的可用状态,而造成死锁。
可选地,在上述的方法中,客户端或软卡监视信息交互文件包括:客户端或软卡读取信息交互文件中预先设定的标识A;当标识A为第一标识时,则判定信息交互文件处于下行数据传输模式中;当标识A为第二标识时,则判定信息交互文件处于上行数据传输模式中。客户端或软卡通过判断文件类型,就可以进行数据发送或接收的操作。
可选地,在上述的方法中,在监视过程中通过信息交互文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中客户端通过写入信息交互文件向软卡发送数据,其包括:当客户端判定信息交互文件是处于下行数据传输模式中时,客户端分析信息交互文件;如果分析结果说明不能向软卡发送数据,则客户端继续监视信息交互文件;如果分析结果说明能够向软卡发送数据,则客户端通过写入信息交互文件发送数据,然后继续监视信息交互文件。该实施例实现了客户端的数据发送。
可选地,在上述的方法中,客户端分析信息交互文件包括:判断信息交互文件中预设的标识B的值是特定值,或者判断信息交互文件的大小是一个字节,或者判断信息交互文件未被锁定,则确定能够向软卡发送数据;判断信息交互文件中预设的标识B的值不是特定值,或者判断信息交互文件的大小是大于一个字节,或者判断信息交互文件已被锁定,则确定不能够向软卡发送数据。该实施例实现了对信息交互文件是否就绪等待写入数据的状态进行判断。
可选地,在上述的方法中,在监视过程中通过信息交互文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中客户端通过读取信息交互文件接收软卡发送的数据,其包括:当客户端判定信息交互文件是处于上行数据传输模式中时,客户端分析信息交互文件;如果分析结果说明软卡没有发送数据过来,则客户端继续监视信息交互文件;如果分析结果说明软卡已经发送数据过来,则客户端通过读取信息交互文件接收数据,客户端对接收到的数据进行处理,然后继续监视信息交互文件。该实施例实现了客户端的数据接收。
可选地,在上述的方法中,客户端分析信息交互文件包括:判断信息交互文件中预设的标识B的值不是特定值,或者判断信息交互文件的大小是大于一个字节,或者判断信息交互文件已被锁定,则确定软卡是有数据发送过来;判断信息交互文件中预设的标识B的值是特定值,或者判断信息交互文件的大小是一个字节,或者判断信息交互文件未被锁定,则确定软卡没有数据发送过来;客户端通过读取信息交互文件接收数据包括:信息交互文件中预设了标识B,客户端读取标识B之后的数据;或者信息交互文件中没有预设标识B,则客户端读取标识A之后的数据。该实施例实现了对信息交互文件是否已经写入了数据的状态进行判断,并相应地读取数据。
可选地,在上述的方法中,在客户端通过读取信息交互文件接收数据之后,还包括:客户端将信息交互文件设置为处于下行数据传输模式中;并且,若在信息交互文件中预设了标识B,则客户端将标识B的值设置为特定值;若没有预设标识B,则客户端将信息交互文件的标识A之后的数据清空,或将信息交互文件设为未锁定状态。该实施例实现了数据读取之后将信息交互文件状态的还原。
可选地,在上述的方法中,在监视过程中通过信息交互文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中软卡通过写入信息交互文件向客户端发送数据,其包括:当软卡判定信息交互文件是处于上行数据传输模式中时,软卡分析信息交互文件;如果分析结果说明不能向客户端发送数据,则软卡继续监视信息交互文件;如果分析结果说明能够向客户端发送数据,则软卡通过写入信息交互文件发送数据,然后继续监视信息交互文件。该实施例实现了软卡的数据发送。
可选地,在上述的方法中,软卡分析信息交互文件包括:判断信息交互文件中预设的标识B的值是特定值,或者判断信息交互文件的大小是一个字节,或者判断信息交互文件未被锁定,则确定能够向客户端发送数据;判断信息交互文件中预设的标识B的值不是特定值,或者判断信息交互文件的大小是大于一个字节,或者判断信息交互文件已被锁定,则确定不能够向客户端发送数据。该实施例实现了对信息交互文件是否就绪等待写入数据的状态进行判断。
可选地,在上述的方法中,在监视过程中通过信息交互文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中软卡通过读取信息交互文件接收客户端发送的数据,其包括:当软卡判定信息交互文件是处于下行数据传输模式中时,软卡分析信息交互文件;如果分析结果说明客户端没有发送数据过来,则软卡继续监视信息交互文件;如果分析结果说明客户端已经发送数据过来,则软卡通过读取信息交互文件接收数据,软卡对接收到的数据进行处理,然后继续监视信息交互文件。该实施例实现了软卡的数据接收。
可选地,在上述的方法中,软卡分析信息交互文件包括:判断信息交互文件中预设的标识B的值不是特定值,或者判断信息交互文件的大小是大于一个字节,或者判断信息交互文件已被锁定,则确定客户端有数据发送过来;判断信息交互文件中预设的标识B的值是特定值,或者判断信息交互文件的大小是一个字节,或者判断信息交互文件未被锁定,则确定客户端没有数据发送过来;软卡通过读取信息交互文件接收数据包括:信息交互文件中预设了标识B,软卡读取标识B之后的数据;或者信息交互文件中没有预设标识B,则软卡读取标识A之后的数据。该实施例实现了对信息交互文件是否已经写入了数据的状态进行判断,并相应地读取数据。
可选地,在上述的方法中,在软卡通过读取信息交互文件接收数据之后,还包括:软卡将信息交互文件设置为处于上行数据传输模式中;并且,若在信息交互文件中预设了标识B,则软卡将标识B的值设置为特定值;若没有预设标识B,则软卡将信息交互文件的标识A之后的数据清空,或将信息交互文件设为未锁定状态。该实施例实现了数据读取之后将信息交互文件状态的还原。
以上描述了一个信息交互文件用两种模式来模拟数据上下行的方式,下面描述用两个文件模拟数据上下行的方式。
可选地,在上述的方法中,使用信息交互文件的IO流模拟软卡运行COS时与客户端之间的信息交互包括:
软卡通过自带的接口来判断客户端中是否存在信息交互文件,若不存在,则在客户端中创建信息交互文件,信息交互文件包括两个文件,其包括:下行数据传输文件,用于模拟客户端向软卡发送数据;下行数据传输文件中的数据包括命令头和命令体,命令头包括:指令类别,用于指示能够读取或者写入,命令体用于填充数据;上行数据传输文件,用于模拟软卡向客户端发送数据;上行数据传输包括:应答标识和数据,其中,应答标识用于指示是否包含数据;
客户端通过写入下行数据传输文件向软卡发送数据;
客户端或软卡监视下行数据传输文件或上行数据传输文件,在监视过程中通过下行数据传输文件或上行数据传输文件的IO流实现客户端与软卡之间的交互数据。
因为数据流方向包括:从软卡到客户端的上行方向;从客户端到软卡的下行方向。上述的下行数据传输文件和上行数据传输文件可以模拟这两种数据流方向。
可选地,在上述的方法中,客户端通过写入下行数据传输文件向软卡发送数据包括:将下行数据传输文件的指令类别的值设置为特定值;或如果未用特定值填充下行数据传输文件,则将下行数据传输文件的数据清空;或如果未用特定值填充下行数据传输文件,则将下行数据传输文件设为未锁定状态;将要发送给软卡的数据写入下行数据传输文件中。这是一个初始化的步骤,通过客户端首先写入下行数据传输文件,从而避免了软卡和客户端都在监控等待下行数据传输文件或上行数据传输文件的可用状态,而造成死锁。
可选地,在上述的方法中,在监视过程中通过下行数据传输文件或上行数据传输文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中客户端通过写入下行数据传输文件向软卡发送数据,其包括:当客户端监视并分析下行数据传输文件;如果分析结果说明不能向软卡发送数据,则客户端继续监视下行数据传输文件;如果分析结果说明能够向软卡发送数据,则客户端通过写入下行数据传输文件发送数据,然后监视上行数据传输文件。该实施例实现了客户端的数据发送。
可选地,在上述的方法中,客户端分析下行数据传输文件包括:判断下行数据传输文件中预设的指令类别值是特定值,或者下行数据传输文件的大小是零,或者判断下行数据传输文件未被锁定,则确定能够向软卡发送数据;判断下行数据传输文件中预设的指令类别值不是特定值,或者下行数据传输文件的大小大于零,或者判断下行数据传输文件已被锁定,则确定不能够向软卡发送数据。该实施例实现了对下行数据传输文件是否就绪等待写入数据的状态进行判断。
可选地,在上述的方法中,在监视过程中通过下行数据传输文件或上行数据传输文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中客户端通过读取上行数据传输文件接收软卡发送的数据,其包括:当客户端监视并分析上行数据传输文件;如果分析结果说明软卡没有发送数据过来,则客户端继续监视上行数据传输文件;如果分析结果说明软卡已经发送数据过来,则客户端通过读取上行数据传输文件接收数据,客户端对接收到的数据进行处理,然后监视下行数据传输文件。该实施例实现了客户端的数据接收。
可选地,在上述的方法中,客户端分析上行数据传输文件包括:判断上行数据传输文件中预设的应答标识的值不是特定值,或者判断上行数据传输文件的大小大于零,或者判断上行数据传输文件已被锁定,则确定软卡有数据发送过来;判断上行数据传输文件中预设的应答标识的值是特定值,或者判断上行数据传输文件的大小是零,或者判断上行数据传输文件未被锁定,则确定软卡没有数据发送过来;客户端通过读取上行数据传输文件接收数据包括:客户端读取上行数据传输文件的应答标识之后的数据。该实施例实现了对上行数据传输文件是否已经写入了数据的状态进行判断,并相应地读取数据。
可选地,在上述的方法中,在客户端通过读取上行数据传输文件接收数据之后,还包括:如果已经用特定值填充上行数据传输文件,客户端将应答标识的值设置为特定值;或如果未用特定值填充上行数据传输文件,则将上行数据传输文件的数据清空;或如果未用特定值填充上行数据传输文件,则将上行数据传输文件设为未锁定状态。该实施例实现了数据读取之后将上行数据传输文件状态的还原。
可选地,在上述的方法中,在监视过程中通过下行数据传输文件或上行数据传输文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中软卡通过写入上行数据传输文件向客户端发送数据,其包括:软卡监视并分析上行数据传输文件;如果分析结果说明不能向客户端发送数据,则软卡继续监视上行数据传输文件;如果分析结果说明能够向客户端发送数据,则软卡通过写入上行数据传输文件发送数据,然后监视下行数据传输文件。该实施例实现了软卡的数据发送。
可选地,在上述的方法中,软卡分析上行数据传输文件包括:判断上行数据传输文件中预设的应答标识的值是特定值,或者判断上行数据传输文件的大小是零,或者判断上行数据传输文件未被锁定,则确定能够向客户端发送数据;判断上行数据传输文件中预设的应答标识的值不是特定值,或者判断上行数据传输文件的大小大于零,或者判断上行数据传输文件已被锁定,则确定不能够向客户端发送数据。该实施例实现了对上行数据传输文件是否就绪等待写入数据的状态进行判断。
可选地,在上述的方法中,在监视过程中通过下行数据传输文件或上行数据传输文件的IO流实现客户端与软卡之间的交互数据包括:在监视过程中软卡通过读取下行数据传输文件接收客户端发送的数据,其包括:软卡监视并分析下行数据传输文件;如果分析结果说明客户端没有发送数据过来,则软卡继续监视下行数据传输文件;如果分析结果说明客户端已经发送数据过来,则软卡通过读取下行数据传输文件接收数据,软卡对接收到的数据进行处理,然后监视上行数据传输文件。该实施例实现了软卡的数据接收。
可选地,在上述的方法中,软卡分析下行数据传输文件包括:判断下行数据传输文件中预设的指令类别的值不是特定值,或者判断下行数据传输文件的大小大于零,或者判断下行数据传输文件已被锁定,则确定客户端有数据发送过来;判断下行数据传输文件中预设的指令类别的值是特定值,或者判断下行数据传输文件的大小是零,或者判断下行数据传输文件未被锁定,则确定客户端没有数据发送过来;软卡通过读取下行数据传输文件接收数据包括:软卡读取下行数据传输文件的命令头中的指令类别之后的数据。该实施例实现了对信息交互文件是否已经写入了数据的状态进行判断,并相应地读取数据。
可选地,在上述的方法中,在软卡通过读取下行数据传输文件接收数据之后,还包括:如果已经用特定值填充下行数据传输文件,软卡将指令类别的值设置为特定值;或如果未用特定值填充下行数据传输文件,则将下行数据传输文件的数据清空;或如果未用特定值填充下行数据传输文件,则将下行数据传输文件设为未锁定状态。该实施例实现了数据读取之后将下行数据传输文件状态的还原。
可选地,在上述任一项的方法中,客户端分析信息交互文件包括:客户端通过执行用户自定义的函数分析信息交互文件;或者客户端使用钩子技术(Hook技术)外挂已有的ScardTransmit函数,通过执行ScardTransmit函数分析信息交互文件。
下文将结合图2和图3详细描述实施例1和实施例2。
实施例1
本实施例1提供了一种利用文件I/O流模拟智能卡信息交互的方法,具体通过创建两个信息交互文件来模拟智能卡信息交互,在本实施例1中,设定创建的两个信息交互文件分别为pctoic.ads文件和ictopc.ads文件。具体实现步骤如下:
步骤101:芯片开发软件启动,将COS镜像加载进芯片开发软件运行环境中,启动软卡;
在本实施例中,COS镜像与真实智能卡上运行的COS除了在交换数据层的I/O接口不一样,逻辑实现层都是一样的;
其中,软卡是指模拟得到的智能卡。
步骤102:客户端与软卡建立连接;
步骤103:软卡上电,COS在软卡上运行;
在本实施例中,软卡上电的过程就是初始化COS各资源的过程,主要是使COS中的所有变量清零,达到和真实智能卡一样的效果。
步骤104:COS通过软卡自带的fopen接口来判断客户端硬盘上是否存在pctoic.ads文件和ictopc.ads文件,若不存在,则执行步骤105,若存在,则直接执行步骤108;
在本实施例中,pctoic.ads文件和ictopc.ads文件具体用于进行数据交互,pctoic.ads文件用于模拟下行数据传输,具体用于模拟客户端上层应用向软卡发送数据,ictopc.ads文件用于模拟上行数据传输,具体用于模拟软卡向客户端上层应用发送数据;
因为客户端上层应用有可能在客户端硬盘上创建pctoic.ads文件和ictopc.ads文件,所以本实施例执行步骤104以判断客户端硬盘上是否已存在pctoic.ads文件和ictopc.ads文件。
步骤105:COS调用ads_run_init接口在客户端硬盘上创建pctoic.ads文件和ictopc.ads文件;
在本实施例1的步骤105中,文件创建完成后,COS则直接执行步骤108,客户端上层应用则执行步骤106;
在创建pctoic.ads文件和ictopc.ads文件时,可以不填充文件中的数据,也可以填充文件中的数据的至少一位,在本实施例中具体可以用0xff来填充文件中的数据,其中0xff是用户自定义的,当用0xff来填充文件中的数据时,则将0xff作为类别标识;
根据7816协议,客户端上层应用发送给智能卡的数据格式为:
命令头+命令体
相应地,在本实施例中,客户端上层应用发送给软卡的数据格式,即pctoic.ads文件中的APDU命令的数据格式如下:
命令头+命令体
即为:(comCLA+comIns+comP1+comp2)+(Lc+Data+Le);
其中,comCLA+comIns+comP1+comp2为命令头,Lc+Data+Le为命令体,命令头为命令的编码,命令体中的Lc为命令体内数据data的长度,Le是期望的应答APDU数据字段的最大字节数;
命令头中的comCLA为指令类别;
comINS为指令代码;
comP1和comP2为指令参数;
相应地,根据7816协议,智能卡返回的数据应由Data+sw1+sw2组成;
在本实施例中,预先约定软卡返回的应答APDU命令由comFlag+data+sw1+sw2组成,即ictopc.ads文件中的数据由comFlag+data+sw1+sw2组成,
其中comFlag为应答标识;
data为客户数据;
sw1和sw2为状态代码;
其中comFlag这个标识不包含在7816协议,comFlag是类别标识,可自定义数据,在本实施例中自定义comFlag是否是0xff来判断当前的数据是否是应答数据。
步骤106:客户端上层应用监视pctoic.ads文件,向预先设定的函数发送向软卡发送数据的指令;
在本实施例中,预先设定的函数可以是用户自定义的函数,如FileSCardTransmit函数,因此用户首先需要用FileSCardTransmit函数在代码中替换原来的ScardTransmit函数,然后再进行编译,在编译之后,FileSCardTransmit函数就可和软卡进行通信;
其中,当预先设定的函数是FileSCardTransmit函数时,客户端与软卡建立连接后,软卡不用响应客户端上层应用发送的PPS请求;
或者,
预先设定的函数还可以是SCardTransmit函数,因此用户通过Hook技术在客户端上层应用运行时外挂ScardTransmit函数,这样不需要重新编译,该ScardTransmit函数就可以和软卡进行通信;
其中,当预先设定的函数是SCardTransmit函数时,客户端与软卡建立连接之后,软卡接收到客户端上层应用发送的PPS请求后,读取PPS请求中的数据,并在u16const FiDi_TBL数组中进行匹配,得到能够匹配成功的数据的具体位置,然后再根据该位置u16 constFD_Cycle数组中进行查找,并根据得到的数据调整数据交换的速度,再响应客户端上层应用发送的PPS请求;
FileSCardTransmit函数和ScardTransmit函数都是用于实现对文件I/O流数据的监控和读写操作,完成数据接受发送的响应过程。
步骤107:预先设定的函数通过pctoic.ads文件向软卡发送数据;
在实施例步骤107中,在数据发送完成后则返回到步骤115,客户端上层应用监视ictopc.ads文件,等待COS进行处理,同步地,在软卡这端则执行步骤108,COS监视pctoic.ads文件;
本实施例中,步骤106和步骤107之前,还包括:当创建pctoic.ads文件时,已使用0xff来填充pctoic.ads文件中的数据,则客户端上层应用将pctoic.ads文件中的comCLA设置为0xff;或者,当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则客户端上层应用将pctoic.ads文件的大小清空;或者,当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则客户端上层应用对pctoic.ads文件进行开锁,使pctoic.ads文件处于未锁定状态;
本实施例步骤107中,预先设定的函数向软卡发送数据的操作具体为:
当创建pctoic.ads文件时,已使用0xff来填充pctoic.ads文件中的数据,则操作具体为:预先设定的函数打开pctoic.ads文件,判断pctoic.ads文件中的comCLA是否为0xff,若comCLA不为0xff,则说明客户端上层应用还不能向软卡发送数据,然后预先设定的函数继续打开pctoic.ads文件,并进行判断,直到comCLA为0xff为止,若comCLA为0xff,则说明客户端上层应用可以向软卡发送数据,然后预先设定的函数将要发送给软卡的数据写入pctoic.ads文件中;
或者,
当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则操作具体为:预先设定的函数对pctoic.ads文件的大小进行判断,若pctoic.ads文件的大小不为零,则说明客户端上层应用还不能向软卡发送数据,然后预先设定的函数继续对pctoic.ads文件的大小进行判断,若pctoic.ads文件的大小为零,则说明客户端上层应用可以向软卡发送数据,然后预先设定的函数将要发送给软卡的数据写入pctoic.ads文件中;
或者,
当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则操作具体为:预先设定的函数判断pctoic.ads文件是否已被锁定,若pctoic.ads文件已被锁定,则说明客户端上层应用还不能向软卡发送数据,然后预先设定的函数继续判断pctoic.ads文件是否已被锁定,若pctoic.ads文件未被锁定,则说明客户端上层应用可以向软卡发送数据,然后预先设定的函数将要发送给软卡的数据写入pctoic.ads文件中;
在本实施例中,步骤106、步骤107与步骤108是同步进行的,在客户端上层应用通过pctoic.ads文件向软卡发送数据的过程中,COS一直监视pctoic.ads文件,判断pctoic.ads文件是否满足条件,若不满足,则COS继续等待客户端上层应用发送数据,并继续监视pctoic.ads文件,只有执行步骤107,即只有预先设定的函数通过pctoic.ads文件向软卡发送数据之后,步骤108中的当pctoic.ads文件不满足条件时的循环才能被打破,从而继续执行步骤110。
步骤108:COS监视pctoic.ads文件,判断pctoic.ads文件是否满足条件,若不满足,则说明客户端上层应用还没有将数据发送过来,执行步骤109,若满足,则说明客户端上层应用已将数据发送过来,直接执行步骤110;
在本实施例中,COS监视pctoic.ads文件,判断pctoic.ads文件是否满足条件的操作具体为:
当创建pctoic.ads文件时,已使用0xff来填充pctoic.ads文件中的数据,则COS打开pctoic.ads文件,判断pctoic.ads文件中的comCLA是否为0xff,若comCLA为0xff,则说明客户端上层应用还没有将数据发送过来,执行步骤109,即COS继续打开pctoic.ads文件,并进行判断,直到pctoic.ads文件中的comCLA不为0xff为止,若comCLA不为0xff,则说明客户端上层应用已将数据发送过来,执行步骤110;
或者,
当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则COS对pctoic.ads文件的大小进行判断,若pctoic.ads文件大小为零,则说明客户端上层应用还没有将数据没有发送过来,执行步骤109,即COS继续对pctoic.ads文件的大小进行判断,若pctoic.ads文件大小不为零,则说明客户端上层应用已将数据发送过来,执行步骤110;
或者,
当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则COS判断pctoic.ads文件是否已被锁定,若pctoic.ads文件未被锁定,则说明客户端上层应用还没有将数据没有发送过来,执行步骤109,即COS继续判断pctoic.ads文件是否已被锁定,若pctoic.ads文件已被锁定,则说明客户端上层应用已将数据发送过来,执行步骤110。
步骤109:COS继续等待客户端上层应用发送数据,并继续执行步骤108;
步骤110:COS通过pctoic.ads文件接收客户端上层应用发送的数据,即COS读取pctoic.ads文件的命令头中comCLA后面的数据;
在本实施例步骤110中,COS读取完pctoic.ads文件的命令头中comCLA后面的数据之后,还可以包括:
当创建pctoic.ads文件时,已使用0xff来填充pctoic.ads文件中的数据,则COS读将comCLA设置成0xff;
或者,
当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则COS将pctoic.ads文件的大小清空;
或者,
当创建pctoic.ads文件时,没有对pctoic.ads文件中的数据进行填充,则COS对pctoic.ads文件进行开锁,使pctoic.ads文件处于未锁定状态;
在本实施例中,步骤108到步骤110具体为模拟真实智能卡等待接收读卡器数据的过程,即客户端上层应用向软卡发送数据的过程,并且将现在技术中的COS监视硬件地址改成了COS监视pctoic文件;
步骤111:COS对步骤110中读取得到的数据进行处理;
步骤112:COS监视ictopc.ads文件,判断ictopc.ads文件是否满足条件,若不满足,则说明COS还不能向客户端上层应用发送数据,执行步骤113,若满足,则说明COS可以向客户端上层应用发送数据,直接执行步骤114;
在本实施例中,COS监视ictopc.ads文件,判断ictopc.ads文件是否满足条件的操作具体为:
当创建ictopc.ads文件时,已使用0xff来填充ictopc.ads文件中的数据,则COS打开ictopc.ads文件,判断ictopc.ads文件中的comFlag是否为0xff,若comFlag不为0xff,则说明COS还不能向客户端上层应用发送数据,执行步骤113,即COS继续打开ictopc.ads文件,并进行判断,直到ictopc.ads文件中的comFlag为0xff为止,若comFlag为0xff,则说明COS可以向客户端上层应用发送数据,执行步骤114;
或者,
当创建ictopc.ads文件时,没有对ictopc.ads文件中的数据进行填充,则COS对ictopc.ads文件的大小进行判断,若ictopc.ads文件的大小不为零,则说明COS还不能向客户端上层应用发送数据,然后执行步骤113,即COS继续对ictopc.ads文件的大小进行判断,若ictopc.ads文件的大小为零,则说明COS可以向客户端上层应用发送数据,执行步骤114;
或者,
当创建ictopc.ads文件时,没有对ictopc.ads文件中的数据进行填充,则COS判断ictopc.ads文件是否已被锁定,若ictopc.ads文件已被锁定,则说明COS还不能向客户端上层应用发送数据,执行步骤113,即COS继续判断pctoic.ads文件是否已被锁定,若pctoic.ads文件未被锁定,则说明COS可以向客户端上层应用发送数据,执行步骤114。
步骤113:COS等待向客户端上层应用发送数据,并继续执行步骤112;
步骤114:COS通过ictopc.ads文件向客户端上层应用发送数据,即COS将要发送给客户端上层应用的数据写入ictopc.ads文件中,然后返回到108;
在本实施例中,步骤114中COS在将数据写入ictopc.ads文件之后则返回到步骤108,COS监视pctoic.ads文件,等待客户端上层应用进行处理,同步地,在客户端上层应用这端,则执行步骤115,客户端上层应用开始监视ictopc.ads文件;
本实施例步骤112和步骤114是模拟真实智能卡向客户端上层应用发送数据的过程;
步骤115:客户端上层应用监视ictopc.ads文件,调用预先设定的函数接收软卡发送的数据;
相应地,在本实施例步骤115中,预先设定的函数接收软卡发送的数据的操作具体为:
当创建ictopc.ads文件时,已使用0xff来填充ictopc.ads文件中的数据,则操作具体为:预先设定的函数打开ictopc.ads文件,判断ictopc.ads文件中的comFlag是否为0xff,若comFlag为0xff,则说明软卡还没有将数据发送过来,然后预先设定的函数继续打开ictopc.ads文件,并进行判断,直到ictopc.ads文件中的comFlag不为0xff为止,若comFlag不为0xff,则说明软卡已经将数据发送过来,然后预先设定的函数接收软卡发送的数据,即预先设定的函数读取ictopc.ads文件中comFlag后面的数据;
或者,
当创建ictopc.ads文件时,没有对ictopc.ads文件中的数据进行填充,则操作具体为:预先设定的函数对ictopc.ads文件的大小进行判断,若ictopc.ads文件的大小为零,则说明软卡还没有将数据发送过来,然后预先设定的函数继续对ictopc.ads文件的大小进行判断,若ictopc.ads文件的大小不为零,则说明软卡已经将数据发送过来,然后预先设定的函数接收软卡发送的数据,即预先设定的函数读取ictopc.ads文件中comFlag后面的数据;
或者,
当创建ictopc.ads文件时,没有对ictopc.ads文件中的数据进行填充,则操作具体为:预先设定的函数判断ictopc.ads文件是否已被锁定,若ictopc.ads文件未被锁定,则说明软卡还没有将数据发送过来,然后预先设定的函数继续判断ictopc.ads文件是否已被锁定,若ictopc.ads文件已被锁定,则说明软卡已经将数据发送过来,然后预先设定的函数接收软卡发送的数据,即预先设定的函数读取ictopc.ads文件中comFlag后面的数据;
在本实施例步骤115中,客户端上层应用调用预先设定的函数接收软卡发送的数据之后,还包括:
当创建ictopc.ads文件时,已使用0xff来填充ictopc.ads文件中的数据,则预先设定的函数将comFlag设置成0xff;
或者,
当创建ictopc.ads文件时,没有对ictopc.ads文件中的数据进行填充,则预先设定的函数将ictopc.ads文件的大小清空;
或者,
当创建ictopc.ads文件时,没有对ictopc.ads文件中的数据进行填充,则预先设定的函数将ictopc.ads文件进行开锁,使ictopc.ads文件处于未锁定状态。
步骤116:客户端上层应用对步骤115中接收到的数据进行处理,然后返回到步骤106;
本实施例以不插入真实智能卡的情况下,利用软卡与客户端上层应用进行通信为例来进行说明,同样在插入真实智能卡的情况下,与客户端上层应用进行通信时,客户端上层应用只需要替换发送apdu的接口就可以,而不用修改使用软卡,比如智能卡通用协议PC/SC接口,只要将SCardTransmit接口换成FileSCardTransmit接口就可以。
实施例2
本实施例2也提供了一种利用文件I/O流模拟智能卡信息交互的方法,具体地,在本实施例2中,只创建一个信息交互文件来模拟智能卡信息交互,即只使用一个文件来模拟下行数据传输和上行数据传输,在本实施例2中设定该信息交互文件为data.ads文件。具体实现步骤如下:
步骤201:芯片开发软件启动,将COS镜像加载进芯片开发软件运行环境中,启动软卡;
在本实施例中,COS镜像与真实智能卡上运行的COS除了在交换数据层的I/O接口不一样,逻辑实现层都是一样的;
其中,软卡是指模拟得到的智能卡。
步骤202:客户端与软卡建立连接;
步骤203:软卡上电,COS在软卡上运行;
在本实施例中,软卡上电的过程就是初始化COS各资源的过程,主要是使COS中的所有变量清零,达到和真实智能卡一样的效果。
步骤204:COS通过软卡自带的fopen接口来判断客户端硬盘上是否存在data.ads文件,若不存在,则执行步骤205,若存在,则直接执行步骤209;
在本实施例2中,data.ads文件用于进行数据交互,具体用于模拟客户端上层应用向软卡发送数据,以及模拟软卡向客户端上层应用发送数据;
因为客户端上层应用有可能在客户端硬盘上创建data.ads文件和ictopc.ads文件,所以本实施例执行步骤204以判断客户端硬盘上是否已存在data.ads文件。
步骤205:COS调用ads_run_init接口在客户端硬盘上创建data.ads文件;
在本实施例2的步骤205中,在文件创建完成后,COS则直接执行步骤209,客户端上层应用则执行步骤206;
在本实施例2中,将data.ads文件中的第一个字节设定为标识A,用于区分data.ads文件是处于下行数据传输模式中还是处于上行数据传输模式中,在本实施例中自定义当标识A为0时,data.ads文件处于下行数据传输模式中,具体用于模拟客户端上层应用向软卡发送数据,自定义当标识A为1时,data.ads文件处于上行数据传输模式中,具体用于模拟软卡向客户端上层应用发送数据。
步骤206:客户端上层应用监视data.ads文件,将data.ads文件中的标识A设置为0;
本实施例中,步骤206中将data.ads文件中的标识A设置为0之后,还包括:若当创建data.ads文件时,在标识A之后还自定义了一个标识B,则客户端上层应用将data.ads文件的标识B设置为0xfe;或者,若当创建data.ads文件时,在标识A之后没有定义任何标识,则客户端上层应用将data.ads文件的标识A之后的数据清空;或者,若当创建data.ads文件时,在标识A之后没有定义任何标识,则客户端上层应用对data.ads文件进行开锁,使data.ads文件处于未锁定状态。
步骤207:客户端上层应用向预先设定的函数发送向软卡发送数据的指令;
在本实施例2中,预先设定的函数可以是FileSCardTransmit函数,与实施例1中一样,FileSCardTransmit函数也是用户自定义的,用户首先需要用FileSCardTransmit函数在代码中替换原来的ScardTransmit函数,然后再进行编译,在编译之后,FileSCardTransmit函数就可和软卡进行通信;
其中,当预先设定的函数是FileSCardTransmit函数时,客户端与软卡建立连接后,软卡不用响应客户端上层应用发送的PPS请求;
或者,
预先设定的函数还可以是SCardTransmit函数,因此用户通过Hook技术在客户端上层应用运行时外挂ScardTransmit函数,这样不需要重新编译,该ScardTransmit函数就可以和软卡进行通信;
其中,当预先设定的函数是SCardTransmit函数时,客户端与软卡建立连接之后,软卡接收到客户端上层应用发送的PPS请求后,读取PPS请求中的数据,并在u16const FiDi_TBL数组中进行匹配,得到能够匹配成功的数据的具体位置,然后再根据该位置u16constFD_Cycle数组中进行查找,并根据得到的数据调整数据交换的速度,再响应客户端上层应用发送的PPS请求;
其中,FileSCardTransmit函数和SCardTransmit函数的功能也与实施例1中的相同,都是用于实现对文件I/O流数据的监控和读写操作,完成数据接受发送的响应过程。
步骤208:预先设定的函数通过data.ads文件向软卡发送数据;
在本实施例步骤208中,预先设定的函数通过data.ads文件向软卡发送数据之后,客户端上层应用返回到步骤217,等待COS进行处理,即客户端上层应用监视data.ads文件,同步地,在软卡这端执行步骤209,COS监视data.ads文件,并对data.ads文件中的标识A进行判断;
具体地,在本实施例步骤208中,预先设定的函数向软卡发送数据的操作具体为:
若当创建data.ads文件时,在标识A之后还自定义了一个标识B,则在本步骤208中自定义当标识B为0xfe时,data.ads文件满足条件,自定义当标识B不为0xfe时,data.ads文件不满足条件,因此预先设定的函数打开data.ads文件,判断data.ads文件中的标识B是否为0xfe,若标识B不为0xfe,则说明客户端上层应用还不能向软卡发送数据,然后预先设定的函数继续打开data.ads文件,并对标识B进行判断,直到data.ads文件中的标识B为0xfe为止,若标识B为0xfe,则说明客户端上层应用可以向软卡发送数据,然后预先设定的函数将要发送给软卡的数据写入data.ads文件中;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则预先设定的函数对data.ads文件的大小进行判断,若data.ads文件的大小大于一个字节,则说明客户端上层应用还不能向软卡发送数据,然后预先设定的函数继续对data.ads文件的大小进行判断,若data.ads文件的大小为一个字节,则说明客户端上层应用可以向软卡发送数据,然后预先设定的函数将要发送给软卡的数据写入data.ads文件中;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则预先设定的函数判断data.ads文件是否已被锁定,若data.ads文件已被锁定,则说明客户端上层应用还不能向软卡发送数据,然后预先设定的函数继续判断data.ads文件是否已被锁定,若data.ads文件未被锁定,则说明客户端上层应用可以向软卡发送数据,然后预先设定的函数将要发送给软卡的数据写入data.ads文件中。
步骤209:COS监视data.ads文件,判断data.ads文件中的标识A为0还是为1,若标识A为0,则说明data.ads文件处于下行数据传输模式中,执行步骤210,若标识A为1,则说明data.ads文件处于上行数据传输模式中,执行步骤214;
步骤210:COS判断处于下行数据传输模式中的data.ads文件是否满足条件,若不满足,则说明客户端上层应用还没有将数据发送过来,执行步骤211,若满足,则说明客户端上层应用已将数据发送过来,直接执行步骤212;
在本实施例步骤210中,COS判断处于下行数据传输模式中的data.ads文件是否满足条件的操作具体为:
若当创建data.ads文件时,在标识A之后还自定义了一个标识B,则在本步骤210中自定义当标识B为0xfe时,data.ads文件不满足条件,自定义当标识B不为0xfe时,data.ads文件满足条件,因此COS打开data.ads文件,判断data.ads文件中的标识B是否为0xfe,若标识B为0xfe,则说明客户端上层应用还没有将数据发送过来,执行步骤211,即COS继续打开data.ads文件,并对标识B进行判断,直到data.ads文件中的标识B不为0xfe为止,若标识B不为0xfe,则说明客户端上层应用已将数据发送过来,直接执行步骤212;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则COS对data.ads文件的大小进行判断,若data.ads文件大小为一个字节,则说明客户端上层应用还没有将数据没有发送过来,执行步骤211,即COS继续对data.ads文件的大小进行判断,若data.ads文件大小大于一个字节,则说明客户端上层应用已将数据发送过来,执行步骤212;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则COS判断data.ads文件是否已被锁定,若data.ads文件未被锁定,则说明客户端上层应用还没有将数据没有发送过来,执行步骤211,即COS继续判断data.ads文件是否已被锁定,若data.ads文件已被锁定,则说明客户端上层应用已将数据发送过来,执行步骤212。
步骤211:COS继续等待客户端上层应用发送数据,并返回到步骤209;
步骤212:COS通过data.ads文件接收客户端上层应用发送的数据,数据接收完成后再将data.ads文件的标识A设置为1,即使data.ads文件处于上行数据传输模式中,并将处于上行数据传输模式中的data.ads文件设置为不满足条件;
在本实施例步骤212中,COS通过data.ads文件接收客户端上层应用发送的数据的操作具体为:
若当创建data.ads文件时,在标识A之后还自定义一个标识B,则软卡读取data.ads文件中标识A和标识B之后的数据,若当创建data.ads文件时,在标识A之后没有定义任何标识,则软卡读取data.ads文件中标识A之后的数据;
COS将data.ads文件的标识A设置为1的同时,还包括:
若当创建data.ads文件时,在标识A之后还自定义了一个标识B,则COS将data.ads文件的标识B设置为0xfe;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则COS将data.ads文件的标识A之后的数据清空;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则COS对data.ads文件进行开锁,使data.ads文件处于未锁定状态。
步骤213:COS对步骤212中读取得到的数据进行处理,然后返回到步骤209;
步骤214:COS判断处于上行数据传输模式中的data.ads文件是否满足条件,若不满足,则说明COS还不能向客户端上层应用发送数据,执行步骤215,若满足,则说明COS可以向客户端上层应用发送数据,直接执行步骤216;
在本实施例步骤214中,COS判断处于上行数据传输模式中的data.ads文件是否满足条件的操作具体为:
若当创建data.ads文件时,在标识A之后还自定义了一个标识B,则在本步骤214中自定义当标识B为0xfe时,data.ads文件满足条件,自定义当标识B不为0xfe时,data.ads文件不满足条件,因此COS打开data.ads文件,判断data.ads文件中的标识B是否为0xfe,若标识B不为0xfe,则说明COS还不能向客户端上层应用发送数据,执行步骤215,即COS继续打开data.ads文件,并对标识B进行判断,直到data.ads文件中的标识B为0xfe为止,若标识B为0xfe,则说明COS可以向客户端上层应用发送数据,执行步骤216;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则COS对data.ads文件的大小进行判断,若data.ads文件的大小大于一个字节,则说明COS还不能向客户端上层应用发送数据,然后执行步骤215,即COS继续对data.ads文件的大小进行判断,若data.ads文件的大小为一个字节,则说明COS可以向客户端上层应用发送数据,执行步骤216;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则COS判断data.ads文件是否已被锁定,若data.ads文件已被锁定,则说明COS还不能向客户端上层应用发送数据,执行步骤215,即COS继续判断data.ads文件是否已被锁定,若data.ads文件未被锁定,则说明COS可以向客户端上层应用发送数据,执行步骤216。
步骤215:COS等待向客户端上层应用发送数据,并继续执行步骤209;
步骤216:COS通过data.ads文件向客户端上层应用发送数据,即COS将要发送给客户端上层应用的数据写入data.ads文件中;
在本实施例步骤216中,COS将数据写入data.ads文件中之后返回到步骤209,即COS监视data.ads文件,判断data.ads文件中的标识A为0还是为1,等待客户端上层应用进行处理,同步地,由于在步骤209至步骤216COS执行操作的过程中,客户端上层应用一直在监视data.ads文件,当客户端上层应用监视到data.ads文件中的标识A为1,且data.ads文件满足条件时,则客户端上层应用读取data.ads文件中的数据。
步骤217:客户端上层应用监视data.ads文件,判断data.ads文件中的标识A为0还是为1,若标识A为0,则说明data.ads文件处于下行数据传输模式中,执行步骤207,若标识A为1,则说明data.ads文件处于上行数据传输模式中,执行步骤218;
步骤218:客户端上层应用调用预先设定的函数接收软卡发送的数据,在接收到数据后将data.ads文件的标识A设置为0,即使data.ads文件处于上行数据传输模式中;
在实施例本步骤218中,预先设定的函数接收软卡发送的数据的操作具体为:
若当创建data.ads文件时,在标识A之后还自定义了一个标识B,则在本步骤218中自定义当标识B为0xfe时,data.ads文件不满足条件,自定义当标识B不为0xfe时,data.ads文件满足条件,因此预先设定的函数打开data.ads文件,判断data.ads文件中的标识B是否为0xfe,若标识B为0xfe,则说明软卡还没有将数据发送过来,然后预先设定的函数继续打开data.ads文件,并对标识B进行判断,直到data.ads文件中的标识B不为0xfe为止,若标识B不为0xfe,则说明软卡已经将数据发送过来,然后预先设定的函数接收软卡发送的数据,即预先设定的函数读取data.ads文件中标识A和标识B之后的数据;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则预先设定的函数对data.ads文件的大小进行判断,若data.ads文件的大小为一个字节,则说明软卡还没有将数据发送过来,然后预先设定的函数继续对data.ads文件的大小进行判断,若data.ads文件的大小大于一个字节,则说明软卡已经将数据发送过来,然后预先设定的函数接收软卡发送的数据,即预先设定的函数读取data.ads文件中标识A之后的数据;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则预先设定的函数判断data.ads文件是否已被锁定,若data.ads文件未被锁定,则说明软卡还没有将数据发送过来,然后预先设定的函数继续判断data.ads文件是否已被锁定,若data.ads文件已被锁定,则说明软卡已经将数据发送过来,然后预先设定的函数接收软卡发送的数据,即预先设定的函数读取data.ads文件中标识A之后的数据;
在本实施例步骤218中,将data.ads文件的标识A设置为0的同时,还包括:
若当创建data.ads文件时,在标识A之后还自定义了一个标识B,则预先设定的函数将data.ads文件的标识B设置为0xfe;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则预先设定的函数将data.ads文件的标识A之后的数据清空;
或者,
若当创建data.ads文件时,在标识A之后没有定义任何标识,则预先设定的函数对data.ads文件进行开锁,使data.ads文件处于未锁定状态。
步骤219:客户端上层应用对步骤218中预先设定的函数接收到的数据进行处理。
本实施例以不插入真实智能卡的情况下,利用软卡与客户端上层应用进行通信为例来进行说明,同样在插入真实智能卡的情况下,与客户端上层应用进行通信时,客户端上层应用只需要替换发送apdu的接口就可以,而不用修改使用软卡,比如智能卡通用协议PC/SC接口,只要将SCardTransmit接口换成FileSCardTransmit接口就可以。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (26)

1.一种模拟智能卡信息交互的方法,其特征在于,包括以下步骤:
在PC平台上启动模拟智能卡的软卡;
所述软卡运行COS;
使用信息交互文件的IO流模拟所述软卡运行所述COS时与客户端之间的信息交互,
其中,使用信息交互文件的IO流模拟所述软卡运行所述COS时与客户端之间的信息交互包括:所述软卡通过自带的接口来判断所述客户端中是否存在所述信息交互文件,若不存在,则在所述客户端中创建所述信息交互文件,所述信息交互文件为一个文件,包括:标识A,当所述标识A为第一标识时表示下行数据传输模式,用于模拟所述客户端向所述软卡发送数据;当所述标识A为第二标识时表示上行数据传输模式,用于模拟所述软卡向所述客户端发送数据;所述客户端通过写入所述信息交互文件向所述软卡发送数据;所述客户端或所述软卡监视所述信息交互文件,在监视过程中通过所述信息交互文件的IO流实现所述客户端与所述软卡之间的交互数据,
其中,所述客户端通过写入所述信息交互文件向所述软卡发送数据包括:将所述信息交互文件的标识A设置为第一标识,即将所述信息交互文件设置为处于下行数据传输模式中;若在所述信息交互文件中预设了标识B,则所述客户端将所述标识B的值设置为特定值;若没有预设所述标识B,则所述客户端将所述信息交互文件的标识A之后的数据清空,或将所述信息交互文件设为未锁定状态;其中所述标识B用于指示所述信息交互文件中是否含有数据,当所述标识B不为特定值,则说明所述信息交互文件中含有数据,当所述标识B为特定值,则说明所述信息交互文件中不含有数据;将要发送给所述软卡的数据写入所述信息交互文件中。
2.根据权利要求1所述的方法,其特征在于,在PC平台上启动模拟智能卡的软卡包括:
利用智能卡芯片开发软件创建适合智能卡芯片的软件模拟环境,设置智能卡芯片型号和访问内存的大小端模式,设置半主控,并通过设置软件中断来实现智能卡芯片和客户端的交互。
3.根据权利要求1所述的方法,其特征在于,所述客户端或所述软卡监视所述信息交互文件包括:
所述客户端或所述软卡读取所述信息交互文件中预先设定的标识A;
当所述标识A为第一标识时,则判定所述信息交互文件处于下行数据传输模式中;
当所述标识A为第二标识时,则判定所述信息交互文件处于上行数据传输模式中。
4.根据权利要求3所述的方法,其特征在于,在监视过程中通过所述信息交互文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述客户端通过写入所述信息交互文件向所述软卡发送数据,包括:
当所述客户端判定所述信息交互文件是处于下行数据传输模式中时,所述客户端分析所述信息交互文件;
如果分析结果说明不能向所述软卡发送数据,则所述客户端继续监视所述信息交互文件;
如果分析结果说明能够向所述软卡发送数据,则所述客户端通过写入所述信息交互文件发送所述数据,然后继续监视所述信息交互文件。
5.根据权利要求4所述的方法,其特征在于,
所述客户端分析所述信息交互文件包括:
判断得到所述信息交互文件中预设的标识B的值是特定值,或者判断得到所述信息交互文件的大小是一个字节,或者判断得到所述信息交互文件未被锁定,则确定能够向所述软卡发送数据;
判断得到所述信息交互文件中预设的标识B的值不是特定值,或者得到判断所述信息交互文件的大小是大于一个字节,或者得到判断所述信息交互文件已被锁定,则确定不能够向所述软卡发送数据。
6.根据权利要求3所述的方法,其特征在于,在监视过程中通过所述信息交互文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述客户端通过读取所述信息交互文件接收所述软卡发送的数据,其包括:
当所述客户端判定所述信息交互文件是处于上行数据传输模式中时,所述客户端分析所述信息交互文件;
如果分析结果说明所述软卡没有发送数据过来,则所述客户端继续监视所述信息交互文件;
如果分析结果说明所述软卡已经发送数据过来,则所述客户端通过读取所述信息交互文件接收所述数据,所述客户端对接收到的数据进行处理,然后继续监视所述信息交互文件。
7.根据权利要求6所述的方法,其特征在于,
所述客户端分析所述信息交互文件包括:
判断得到所述信息交互文件中预设的标识B的值不是特定值,或者判断得到所述信息交互文件的大小是大于一个字节,或者判断得到所述信息交互文件已被锁定,则确定所述软卡是有数据发送过来;
判断得到所述信息交互文件中预设的标识B的值是特定值,或者判断得到所述信息交互文件的大小是一个字节,或者判断得到所述信息交互文件未被锁定,则确定所述软卡没有数据发送过来;
所述客户端通过读取所述信息交互文件接收所述数据包括:
所述信息交互文件中预设了标识B,所述客户端读取所述标识B之后的数据;或者所述信息交互文件中没有预设标识B,则所述客户端读取所述标识A之后的数据。
8.根据权利要求6所述的方法,其特征在于,在所述客户端通过读取所述信息交互文件接收所述数据之后,还包括:
所述客户端将所述信息交互文件的标识A设置为第一标识,即将所述信息交互文件设置为处于下行数据传输模式中;并且,若在所述信息交互文件中预设了所述标识B,则所述客户端将所述标识B的值设置为所述特定值;若没有预设所述标识B,则所述客户端将所述信息交互文件的标识A之后的数据清空,或将所述信息交互文件设为未锁定状态。
9.根据权利要求3所述的方法,其特征在于,在监视过程中通过所述信息交互文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述软卡通过写入所述信息交互文件向所述客户端发送数据,其包括:
当所述软卡判定所述信息交互文件是处于上行数据传输模式中时,所述软卡分析所述信息交互文件;
如果分析结果说明不能向所述客户端发送数据,则所述软卡继续监视所述信息交互文件;
如果分析结果说明能够向所述客户端发送数据,则所述软卡通过写入所述信息交互文件发送所述数据,然后继续监视所述信息交互文件。
10.根据权利要求9所述的方法,其特征在于,
所述软卡分析所述信息交互文件包括:
判断得出所述信息交互文件中预设的标识B的值是特定值,或者判断得出所述信息交互文件的大小是一个字节,或者判断得出所述信息交互文件未被锁定,则确定能够向所述客户端发送数据;
判断得出所述信息交互文件中预设的标识B的值不是特定值,或者判断得出所述信息交互文件的大小是大于一个字节,或者判断得出所述信息交互文件已被锁定,则确定不能够向所述客户端发送数据。
11.根据权利要求3所述的方法,其特征在于,在监视过程中通过所述信息交互文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述软卡通过读取所述信息交互文件接收所述客户端发送的数据,其包括:
当所述软卡判定所述信息交互文件是处于下行数据传输模式中时,所述软卡分析所述信息交互文件;
如果分析结果说明所述客户端没有发送数据过来,则所述软卡继续监视所述信息交互文件;
如果分析结果说明所述客户端已经发送数据过来,则所述软卡通过读取所述信息交互文件接收所述数据,所述软卡对接收到的数据进行处理,然后继续监视所述信息交互文件。
12.根据权利要求11所述的方法,其特征在于,
所述软卡分析所述信息交互文件包括:
判断得出所述信息交互文件中预设的标识B的值不是特定值,或者判断得出所述信息交互文件的大小是大于一个字节,或者判断得出所述信息交互文件已被锁定,则确定所述客户端有数据发送过来;
判断得出所述信息交互文件中预设的标识B的值是特定值,或者判断得出所述信息交互文件的大小是一个字节,或者判断得出所述信息交互文件未被锁定,则确定所述客户端没有数据发送过来;
所述软卡通过读取所述信息交互文件接收所述数据包括:
所述信息交互文件中预设了标识B,所述软卡读取所述标识B之后的数据;或者所述信息交互文件中没有预设标识B,则所述软卡读取所述标识A之后的数据。
13.根据权利要求11所述的方法,其特征在于,在所述软卡通过读取所述信息交互文件接收所述数据之后,还包括:
所述软卡将所述信息交互文件的标识A设置为第二标识,即将所述信息交互文件设置为处于上行数据传输模式中;并且,若在所述信息交互文件中预设了所述标识B,则所述软卡将所述标识B的值设置为所述特定值;若没有预设所述标识B,则所述软卡将所述信息交互文件的标识A之后的数据清空,或将所述信息交互文件设为未锁定状态。
14.根据权利要求1所述的方法,其特征在于,使用信息交互文件的IO流模拟所述软卡运行所述COS时与客户端之间的信息交互包括:
所述软卡通过自带的接口来判断所述客户端中是否存在所述信息交互文件,若不存在,则在所述客户端中创建所述信息交互文件,所述信息交互文件包括两个文件:
下行数据传输文件,用于模拟所述客户端向所述软卡发送数据;所述下行数据传输文件中的数据包括命令头和命令体,所述命令头包括:指令类别,用于指示能够读取或者写入,所述命令体用于填充数据;
上行数据传输文件,用于模拟所述软卡向所述客户端发送数据;所述上行数据传输文件包括:应答标识和数据,其中,应答标识用于指示是否包含数据;
所述客户端通过写入所述下行数据传输文件向所述软卡发送数据;
所述客户端或所述软卡监视所述下行数据传输文件或上行数据传输文件,在监视过程中通过所述下行数据传输文件或上行数据传输文件的IO流实现所述客户端与所述软卡之间的交互数据。
15.根据权利要求14所述的方法,其特征在于,所述客户端通过写入所述下行数据传输文件向所述软卡发送数据包括:
如果已用所述特定值填充所述下行数据传输文件,则将所述下行数据传输文件中的指令类别的值设置为特定值;或如果未用所述特定值填充所述下行数据传输文件,则将所述下行数据传输文件的数据清空;或如果未用所述特定值填充所述下行数据传输文件,则将所述下行数据传输文件设为未锁定状态;
将要发送给所述软卡的数据写入所述下行数据传输文件中。
16.根据权利要求14所述的方法,其特征在于,在监视过程中通过所述下行数据传输文件或上行数据传输文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述客户端通过写入所述下行数据传输文件向所述软卡发送数据,具体包括:
所述客户端监视并分析所述下行数据传输文件;
如果分析结果说明不能向所述软卡发送数据,则所述客户端继续监视所述下行数据传输文件;
如果分析结果说明能够向所述软卡发送数据,则所述客户端通过写入所述下行数据传输文件发送所述数据,然后监视所述上行数据传输文件。
17.根据权利要求16所述的方法,其特征在于,
所述客户端分析所述下行数据传输文件包括:
判断得到所述下行数据传输文件中预设的指令类别值是特定值,或者判断得到所述下行数据传输文件的大小是零,或者判断得到所述下行数据传输文件未被锁定,则确定能够向所述软卡发送数据;
判断得到所述下行数据传输文件中预设的指令类别值不是特定值,或者判断得到所述下行数据传输文件的大小大于零,或者判断得到所述下行数据传输文件已被锁定,则确定不能够向所述软卡发送数据。
18.根据权利要求14所述的方法,其特征在于,在监视过程中通过所述下行数据传输文件或上行数据传输文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述客户端通过读取所述上行数据传输文件接收所述软卡发送的数据,其包括:
当所述客户端监视并分析所述上行数据传输文件时;
如果分析结果说明所述软卡没有发送数据过来,则所述客户端继续监视所述上行数据传输文件;
如果分析结果说明所述软卡已经发送数据过来,则所述客户端通过读取所述上行数据传输文件接收所述数据,所述客户端对接收到的数据进行处理,然后监视所述下行数据传输文件。
19.根据权利要求18所述的方法,其特征在于,
所述客户端分析所述上行数据传输文件包括:
判断得到所述上行数据传输文件中预设的应答标识的值不是特定值,或者判断得到所述上行数据传输文件的大小大于零,或者判断得到所述上行数据传输文件已被锁定,则确定所述软卡有数据发送过来;
判断得到所述上行数据传输文件中预设的应答标识的值是特定值,或者判断得到所述上行数据传输文件的大小是零,或者判断得到所述上行数据传输文件未被锁定,则确定所述软卡没有数据发送过来;
所述客户端通过读取所述上行数据传输文件接收所述数据包括:
所述客户端读取所述上行数据传输文件的应答标识之后的数据。
20.根据权利要求18所述的方法,其特征在于,在所述客户端通过读取所述上行数据传输文件接收所述数据之后,还包括:
如果已经用所述特定值填充所述上行数据传输文件,所述客户端将所述应答标识的值设置为所述特定值;或如果未用所述特定值填充所述上行数据传输文件,则将所述上行数据传输文件的数据清空;或如果未用所述特定值填充所述上行数据传输文件,则将所述上行数据传输文件设为未锁定状态。
21.根据权利要求14所述的方法,其特征在于,在监视过程中通过所述下行数据传输文件或上行数据传输文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述软卡通过写入所述上行数据传输文件向所述客户端发送数据,其包括:
所述软卡监视并分析所述上行数据传输文件;
如果分析结果说明不能向所述客户端发送数据,则所述软卡继续监视所述上行数据传输文件;
如果分析结果说明能够向所述客户端发送数据,则所述软卡通过写入所述上行数据传输文件发送所述数据,然后监视所述下行数据传输文件。
22.根据权利要求21所述的方法,其特征在于,
所述软卡分析所述上行数据传输文件包括:
判断得到所述上行数据传输文件中预设的所述应答标识的值是特定值,或者判断得到所述上行数据传输文件的大小是零,或者判断得到所述上行数据传输文件未被锁定,则确定能够向所述客户端发送数据;
判断得到所述上行数据传输文件中预设的所述应答标识的值不是特定值,或者判断得到所述上行数据传输文件的大小大于零,或者判断得到所述上行数据传输文件已被锁定,则确定不能够向所述客户端发送数据。
23.根据权利要求14所述的方法,其特征在于,在监视过程中通过所述下行数据传输文件或上行数据传输文件的IO流实现所述客户端与所述软卡之间的交互数据包括:在监视过程中所述软卡通过读取所述下行数据传输文件接收所述客户端发送的数据,其包括:
所述软卡监视并分析所述下行数据传输文件;
如果分析结果说明所述客户端没有发送数据过来,则所述软卡继续监视所述下行数据传输文件;
如果分析结果说明所述客户端已经发送数据过来,则所述软卡通过读取所述下行数据传输文件接收所述数据,所述软卡对接收到的数据进行处理,然后监视所述上行数据传输文件。
24.根据权利要求23所述的方法,其特征在于,
所述软卡分析所述下行数据传输文件包括:
判断得到所述下行数据传输文件中预设的指令类别的值不是特定值,或者判断得到所述下行数据传输文件的大小大于零,或者判断得到所述下行数据传输文件已被锁定,则确定所述客户端有数据发送过来;
判断得到所述下行数据传输文件中预设的指令类别的值是特定值,或者判断得到所述下行数据传输文件的大小是零,或者判断得到所述下行数据传输文件未被锁定,则确定所述客户端没有数据发送过来;
所述软卡通过读取所述下行数据传输文件接收所述数据包括:
所述软卡读取所述下行数据传输文件的命令头中的指令类别之后的数据。
25.根据权利要求23所述的方法,其特征在于,在所述软卡通过读取所述下行数据传输文件接收所述数据之后,还包括:
如果已经用所述特定值填充所述下行数据传输文件,所述软卡将所述指令类别的值设置为所述特定值;或如果未用所述特定值填充所述下行数据传输文件,则将所述下行数据传输文件的数据清空;或如果未用所述特定值填充所述下行数据传输文件,则将所述下行数据传输文件设为未锁定状态。
26.根据权利要求4-13和16-25任一项所述的方法,其特征在于,所述客户端分析所述信息交互文件包括:
所述客户端通过执行用户自定义的函数分析所述信息交互文件;或者所述客户端使用钩子技术外挂已有的ScardTransmit函数,通过执行所述ScardTransmit函数分析所述信息交互文件。
CN2009102372008A 2009-11-11 2009-11-11 一种模拟智能卡信息交互的方法 Active CN101876937B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102372008A CN101876937B (zh) 2009-11-11 2009-11-11 一种模拟智能卡信息交互的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102372008A CN101876937B (zh) 2009-11-11 2009-11-11 一种模拟智能卡信息交互的方法

Publications (2)

Publication Number Publication Date
CN101876937A CN101876937A (zh) 2010-11-03
CN101876937B true CN101876937B (zh) 2012-06-27

Family

ID=43019496

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102372008A Active CN101876937B (zh) 2009-11-11 2009-11-11 一种模拟智能卡信息交互的方法

Country Status (1)

Country Link
CN (1) CN101876937B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102591699B (zh) * 2011-12-29 2014-10-29 飞天诚信科技股份有限公司 一种转换命令模式的方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1622674A (zh) * 2004-12-31 2005-06-01 大唐微电子技术有限公司 用户识别模块工具套件的实时模拟开发方法及系统
CN1901450A (zh) * 2006-07-13 2007-01-24 陈义 具有虚拟用户识别卡的移动通讯设备及其实现方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1622674A (zh) * 2004-12-31 2005-06-01 大唐微电子技术有限公司 用户识别模块工具套件的实时模拟开发方法及系统
CN1901450A (zh) * 2006-07-13 2007-01-24 陈义 具有虚拟用户识别卡的移动通讯设备及其实现方法

Also Published As

Publication number Publication date
CN101876937A (zh) 2010-11-03

Similar Documents

Publication Publication Date Title
US6547150B1 (en) Smart card application development system and method
US6769622B1 (en) System and method for simulating universal serial bus smart card device connected to USB host
US7739693B2 (en) Generic application program interface for native drivers
Bleuler et al. PISA—a platform and programming language independent interface for search algorithms
CN100367253C (zh) 一种扩展外设的方法及系统
CN101344899B (zh) 一种片上系统的仿真测试方法及仿真测试系统
WO1996002039A1 (en) Hardware design verification system and method
CN108141733A (zh) Nfc“拆分堆栈”体系架构
Wang et al. Modeling and integration of peripheral devices in embedded systems
Lomow et al. A tutorial introduction to object-oriented simulation and Sim++
US7130788B2 (en) Emulation components and system including distributed event monitoring, and testing of an IC design under emulation
CN101384037B (zh) 移动应用与智能卡之间的专用数据通道建立方法
CN101876937B (zh) 一种模拟智能卡信息交互的方法
US7039718B2 (en) Multiprocess computer system
US6901459B2 (en) Protocol for transmitting a plurality of multiple exchange logic flow of command/response pairs on a single physical exchange channel between master and slave and corresponding system for controlling and monitoring execution of applets
US20100100893A1 (en) Method and system for selecting one or more integrated circuit card interface devices
CN100349121C (zh) 嵌入式并行计算系统以及嵌入式并行计算方法
US7231334B2 (en) Coupler interface for facilitating distributed simulation of a partitioned logic design
US7035787B2 (en) Emulation components and system including distributed routing and configuration of emulation resources
CN111443994B (zh) 一种包含模拟智能卡驱动程序的装置、系统及方法
Navas et al. A component-based run-time evolution infrastructure for resource-constrained embedded systems
US7702764B1 (en) System and method for testing network protocols
CN103559074A (zh) 一种模拟通信插件及其工作方法
Jacobs et al. VerifiCard: A European project for smart card verification
KR101058993B1 (ko) 가상드라이브 방식의 스마트카드 테스트 장치 및 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant