开发本软件的起因是因为本人从1999年开始从事智能卡COS的开发,后来又陆续开发了USB Key产品以及POS产品,所有这些产品都有一个共性,就是在开发阶段需要通过大量的指令集对嵌入式固件做大量的测试工作,而且这些指令中会大量涉及加解密相关内容,例如外部认证、MAC计算、RSA加解密、签名验签等内容,而且很多指令中还有随机数参与计算,这大大提高了测试的复杂度,如果每次测试都需要人工重复执行大量的工作,其复杂度可想而知。因此,我开发了这款测试工具,旨在降低嵌入式固件测试工作的难度。该工具主要具有如下特点:
- 一次性写好测试脚本后,以后可反复重复执行,这使得回归测试变得非常容易。并且可以建立测试工程文件,回归测试时只需重新Run一遍测试工程即可。
- 本工具内部集成了强大的加密算法功能和数学函数功能,测试命令行中很容易增加这些功能,可以避免手工执行各种运算的困难。
- 脚本文件中支持变量定义与引用,并且可以包括判断、循环以及自定义函数,这让脚本的功能变得强大起来。脚本语法格式非常简单,参考所提供的例子很容易就能理解。
- 该工具不仅能支持PC/SC读卡器,用户还可以自己写一个DLL,简单实现几个函数就可以和本工具对接起来。本文档后面提供了相关方法。
- 用户可以通过插件的形式扩充脚本的功能,让脚本中增加对私有函数的支持。
在我以往开发的产品中,该工具发挥了重要作用。该工具不仅适用于智能卡、USB Key、POS等产品,只要是需要基于命令行测试的嵌入式产品,理论上都是适用的。如果有疑问,可以咨询我,本文后面有我的联系方式。
补充说一下,所有的测试脚本只要在本工具中能正常执行,通过调用本工具包含的CmdParser.dll动态库就可以直接与目标设备交互,如果需要CmdParser.dll提供的API接口,请邮件联系我。
软件主界面如下图所示:
下面是PBOC 3.0卡片读记录的实例:
;==============================================================================
;PBOC 3.0卡片读取卡内所有记录
;注意: 执行当前脚本需要连接读卡器, 并插入PBOC 3.0卡片
;------------------------------------------------------------------------------
;选择应用
MsgBox "Please connect a smart card reader to the computer, and then insert a PBOC-3.0 card."
00 A4 04 00 07 A0000003330101 ;这里需要人工参与,设定AID
compsta 9000
;这个函数在插件plugin_lzh.dll中实现.
PDOL = GetTlvItem(9f38, %respdata)
;PDOL = 9F7A019F02065F2A02
offset = 00
pdol_len = L(%pdol)
pdol_data =
LenLen =
;根据PDOL构造PDOL数据
while(%offset < %pdol_len)
FirstByte = %pdol[%offset,01]
if( (%FirstByte & 1F) == 1F )//Tag 为 2 字节
TagLen = 02
Tag = %pdol[%offset,02]
offset = (%offset + 02)
Len = %pdol[%offset, 01]
offset = (%offset + 01)
if(%Tag == 9F7A) ;现金指示器
pdol_data = %pdol_data 01
else if(%Tag == 9F02) //授权金额
pdol_data = %pdol_data 000000000123 ;Amount = 1.23
else if(%Tag == 5F2A) //交易货币代码
pdol_data = %pdol_data 0156
else
pdol_data = %pdol_data Fill(00, %Len)
endif
else
TagLen = 01
Tag = %FirstByte
offset = (%offset + 01)
Len = %pdol[%offset,01]
offset = (%offset + 01)
pdol_data = %pdol_data F