首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

银行业自动化测试设备仿真逻辑

1. 设备仿真应用背景

2. 设备仿真主体逻辑

2.1 系统调用过程

2.2 仿真逻辑

2.2 系统层仿真

2.3 应用层仿真

3. 不同设备的仿真逻辑

3.1 打印机

3.2 指纹仪、身份证扫描仪

3.3 存折、磁条卡刷卡器

3.4 密码键盘、柜外清键盘

3.5 IC卡刷卡器

3.6 备注与总结

4. 实施过程中的技术点

4.1 注入技术

4.2 设备逻辑

4.3 加密解密算法

5. 安全性规范

6. 总结

1. 设备仿真应用背景

在测试执行的过程中,有些时候并不一定具备测试实施所需要的所有设备,配置全部设备所需要的资源也比较多,在测试的时候并不一定具备这样的资源。并且,在自动化的测试实施过程中,由于快速的执行过程和无人值守的工作机制,如果不能使程序自己处理交易过程中的设备仿真环节,也无法完成自动化实施的目标。而设备的操作,在功能测试的时候对业务流程几乎无影响,可以通过仿真的形式来模拟设备,使业务流程可以正常进行,完成业务功能的测试。所以,设备仿真是自动化实施过程的一个重要环节。

设备仿真在实施过程中,由于实现方式的特性,可能会与原系统的安全机制有冲突,因为很多的设备都有加密的过程,会对原有的一些逻辑有逆向的过程,仿真过程也需要符合客户的安全机制,在理论上可以保证客户系统的安全性,也是仿真在逻辑上非常关键的部分。防止与系统成为攻击与被攻击的位置,也是仿真可以顺利实施的关键要素。

本文先介绍设备仿真的通用逻辑,再通过项目实施过程中的一些设备,来介绍这些设备在仿真实现过程中的一些关键点,来解释设备仿真如何去实现这些过程。

2. 设备仿真主体逻辑

2.1 系统调用过程

我们既然是仿真程序,就需要模拟系统的调用过程,来完成整体的设备仿真过程,那么第一点,我们就需要去了解系统是如何调用到设备的。

应用系统通过发起调用,调用到设备的驱动程序,设备的驱动程序再通过与系统接口,访问到物理的设备接口,与物理设备进行交互。设备处理后,将返回信息再通过系统接口,返回给驱动程序,驱动程序再返回给应用,完成整个的设备调用的过程。

图片的内容就是展示的基础的调用过程。越往下越靠近底层,依赖的底层技术较多,数据的可读性相对更差,但整体访问部分的逻辑通用性越强。越向上越靠近应用层,由于应用系统的个性化程度较大,通用性有限,但获取到的数据可读性更强。

通过上图,可以基本确定,仿真程序的实现方式,分为应用层仿真与系统层仿真。也有设备层仿真,所听说过的一个实例是定制了一个指模,贴在指纹仪上面,模拟了指纹扫描的过程。本次从软件的仿真角度来探讨,物理设备的仿真暂时不再讨论范畴内。

2.2 仿真逻辑

确定了整体的系统调用过程,那么我们就可以去确定我们仿真的方案,主体分为两部分:一是让应用或者系统可以访问到;二是了解设备的处理逻辑,可以返回正确的数据。

通过确定这样的逻辑,我们就可以制定不同的方案来完成设备仿真。对于访问能力,在应用层与系统层的实现是完全不一样的,而在设备处理逻辑中,是设备逻辑进行主导的,不随实现位置的变化有区别,但是可能数据格式有差异。

这样定调主体的仿真逻辑:最开始需要实体设备,通过技术将仿真程序在应用层或系统层接入到被测系统当中,通过实体设备进行操作,通过注入进去的程序,将实体设备在操作时产生的数据全部记录下来。通过设备知识与咨询,逆向数据的处理逻辑,通过编写程序,将处理逻辑进行实现。在启用仿真时,切断对设备的访问部分,将程序处理的模拟数据,直接进行返回,完成仿真过程。

主体的思路就是通过截获真实的处理数据,分析数据形成逻辑,编写程序直接返回。

对于同一类设备不同厂家的产品时,一般仿真处理的数据不同,应用层如果封装了通用的设备调用类的情况下,可以做到针对这个系统不同设备的通用仿真程序,非则仿真程序是方针的某一类中具体某个厂家的设备,但由于设备调用部分不影响主体业务逻辑,所以这两种情况影响并不大。

2.2 系统层仿真

对于这种仿真我并没有直接在项目中进行使用,但是看过这部分程序的处理逻辑,了解系统层仿真的主要过程。由于直接对操作系统进行操作,对底层技术要求较高,一般需要了解windows系统的一些API与规范,可以完成程序接入的过程。

设备一般通过com口与计算机进行连接,我同通过模拟com口,让设备走到我们模拟的com口上,进行数据截获后,再进行传输。这样就可以达到我们程序注入的目的。在实施中,也在模拟的com口上直接进行拦截,通过我们的程序进行返回,完成仿真过程。

由于是与系统深度绑定的,所以不同的系统版本,win7,win10,32位,64位,都可能会对这个注入过程产生影响。所以系统层仿真在不同版本的系统上,由于windows不同版本的安全机制与API都有变化,注入部分会有一定的差异。但是通用性相对比较强,只出利好兼容性,对于任何程序的仿真,都可以通过这个过程进行实现。

2.3 应用层仿真

应用层仿真,是将程序加在应用层访问设备驱动程序的部分,并不需要对底层的技术有较多的研究。并且由于由于与应用绑定,在不同环境中移植能力比较强,但是不具备与其他应用的通用性,属于完全个性化的仿真。

由于在应用的调用部分进行注入,不同类型的程序注入方式完全不一样,java程序会有java虚拟机提供的一系列的办法,windows程序就有windows的注入办法。我在实际项目中处理的是java程序,处理过程比较直接。由于java程序可以较好的反编译,所以截获的程序可读性非常强,调用了哪些函数,使用了哪些参数都可以直观的看到。

同样注入到程序后,截获调用的数据,进行分析后编写仿真逻辑,仿真时截断被设备驱动的调用,直接在应用中仿真。这样效率会高于系统层仿真。

3. 不同设备的仿真逻辑

在解决了注入问题后,就是实现设备逻辑的过程了。无论是在系统层仿真还是应用层仿真,在实现部分每一个不同的地方都有差异,但是主体逻辑几乎不变,每个地方都会根据现场情况按照主体逻辑进行一定的修改或重做,来完成仿真过程的定制化。

下面就针对在测试活动中常见的几类设备进行介绍。

3.1 打印机

打印机是所有的设备仿真里面最基础的部分。在相当多的前端交易当中,都会涉及到打印步骤。有些时候打印可以跳过,有些时候不能跳过。并且打印机由于不需要经过逻辑处理,几乎是单向逻辑,所以是最简单的仿真程序。

仿真程序接上后,获取打印过程设备的调用与返回结果,一般会接受到一个字符串,就是打印内容,打印完之后就直接返回。那么仿真程序只需要记录下字符串之后,按原来的返回值进行返回就可以,仿真的逻辑也比较简单,不需要经过任何的处理。

3.2 指纹仪、身份证扫描仪

指纹仪、身份证扫描仪等设备放在一起进行处理,是因为这两种设备的处理部分具有相似性。因为无论是指纹仪还是身份证扫描仪,都是通过设备读取已经录入好的部分信息。并且这些程序很少因为交易的变换进行大的变化。就如同指纹仪一样,基本上普通柜员、授权柜员录入两个,就可以完成绝大部分交易。

在仿真逻辑上,也几乎是一样的。首先接上仿真程序,通过操作实体设备,获取设备在交互时产生的数据。这里需要记录的主要是设备处理后返回的信息。基本都是以字符串的形式进行返回的。截获的字符串数据,就是指纹数据和身份证扫描仪所读取的数据。那么仿真也非常简单,就是通过记录设备返回的数据,将数据保存在本地文件中,触发仿真时,读取本地文件中的数据,进行返回,即可完成仿真过程。

身份证扫描仪可能会有部分需要字符串拼接,但是都比较容易。

3.3 存折、磁条卡刷卡器

磁条卡刷卡器是非常具有特色的设备。这两种设备都会涉及到读卡和写卡的两个过程。这个仿真过程当中,主要的信息是保存在存折和卡的二磁道信息当中,并且每张卡和存折的二磁道信息都不相同。相对容易解决的是,同一张卡和存折的二磁道信息不会变化,每次都可以直接进行返回就可以。

同样,接上设备仿真之后,通过刷卡器读卡,获取到刷卡时所触发的动作,返回的可能是一个字符串或者是多个动作的多组字符串,一般包含卡号和二磁道信息。每张卡的二磁道信息都不太一样,可以通过观察的数据,进行分析,编写字符串拼接逻辑。一般是卡号与特殊字符和二磁道信息等的一些组合,将读取的二磁道信息存在本地,再进行拼接返回,即可完成存折和磁条卡的仿真过程。

由于存折和磁条卡又是测试活动中十分常见的重空,使用量也比较大,所以一般来说,可以与客户进行协商,进行批量制卡和开存折,并且拿到二磁道信息,统一进行保存,在测试过程中,根据选取的不同的卡进行数据的拼接,返回结果。

存折和磁条卡的刷卡器与前两类仿真的差异,主要集中在增加了返回数据的处理上。

3.4 密码键盘、柜外清键盘

从密码键盘和柜外清键盘开始,处理逻辑就想到对来说比较复杂了。柜外清键盘也作为密码键盘的一个变种,一般会多一些功能,比如说点击确认按钮等一些操作,这些操作都可以通过截获数据,进行返回的方式进行处理,但是主要难点还是在柜外清的密码键盘功能上,两类并作一类,统一进行讲解。

密码键盘和柜外清在开发仿真程序的时候,都需要对应的设备开发人员或者了解设备工作原理的人员进行配合,才能解决,主要的问题就是集中在加密部分。

最简单的密码键盘,就是加上仿真程序之后,数据返回是以密码明文的形式进行返回,这样的情况只遇到过一例,这样的设备也不负责任,后续也被淘汰掉了。

主流的密码键盘,是在密码键盘的设备当中,保存了加密所使用的密钥,密码键盘在读取到输入数据之后,经过加密返回给应用程序。所以我们截获出来的数据,一般都是经过加密后的数据。我们需要去交流沟通所使用的加密算法和密钥,这样我们就能在仿真时,拿到我们想输入的明文后,通过加密算法,加密后形成密文数据,返回给应用程序,完成仿真逻辑。

还有更复杂的密码键盘加密方式,有时候密钥是变化的,需要通过截获程序与设备的交互信息,一个示例是在登陆的时候会获取密码,写入到密码键盘当中,我们需要增加函数,触发写入动作时,将新的密钥记录在我们本地,加密的时候读取本地保存的密钥,进行加密。

出了密钥变化还有另外一种是算法变化。在每次进行加密之前,应用会触发一个动作,告诉密码键盘通过哪一种加密算法进行加密,一般需要问一下相关人员,这样,只需要根据相应的加密算法,通过密钥进行加密,也可以完成仿真过程。

密码键盘的主要逻辑都集中在加密部分,无论是如何的变化,都是需要确定加密算法和密钥两个信息,加密算法一般会涉及到部分数据的转化,只要本着这两点,都可以完成仿真的开发。

3.5 IC卡刷卡器

IC卡刷卡器是仿真过程中最复杂的情况,涉及到的交互调用多,需要进行分析的数据多,并且也会涉及到加密解密,所以是比较复杂的一个仿真过程。既然涉及到加密解密,就需要相关人员提供密钥。IC卡的计算方法是规范在,定义在发布的IC卡规范当中。

IC卡由于安全性要求,每一次在读取卡片内容的时候,返回信息都不一样,这让IC卡的安全性得到大大提高。IC卡在每次读取的时候,会校验一个ARQC的数据,这个数据在正常情况下是每次都变化的。

Ic卡设备仿真逻辑分为两部分,一部分为ic卡业务逻辑部分,一部分为ic卡文件部分。Ic卡仿真是将ic卡的卡片信息,先存放到文件当中,在仿真的时候,从ic卡文件中,获取卡片的数据,经过计算与拼接,形成最终的数据。Ic卡的数据分为两类,一类为卡片数据,一类为ARQC数据。卡片数据为卡片的基本数据,存储的卡号等信息,ARQC数据为计算ARQC时所使用到的数据。ARQC数据为TLV格式(Tag-length-value 标签-长度-取值)的形式,需要将返回的ARQC数据,按照TLV格式进行解析后,得到数据。

一组示例示例数据如上图所使,信息中还包含加密算法,分为国际3DES,标记位为“01”,国密算法SM4,标记位位“04”;另外一个使每次结果都会产生变化的数据是交易计数器ATC,这个域的数据每产生一次交互都会有变化。计算时会根据拼接的卡号、交易计数器、其他相关域与密钥,进行计算,形成ARQC的计算结果。虽然实际情况中交易计数器每次都会变化,但是我们通过每次返回固定的交易计数器数据,也可以使系统计算出正确的ARQC的值。

系统会根据返回的ARQC基础数据进行计算,再与返回的ARQC数据进行比对,如果成功,则仿真完成。一般来说,我们在记录一张卡的数据后,即可复制到其他卡上面,完成方正过程。但是如果卡的特异性比较大,我们可能需要录入多张卡的信息之后,才能完成仿真过程。

3.6 备注与总结

如果客户无法提供相关的密钥的话,可以通过与客户协商,开放加密接口的办法,在加密时调用加密接口,系统返回加密后的结果,也可以完成仿真过程。

至此,常见设备的仿真和仿真逻辑都已经进行了解释。从内容中也可以看出,在主体逻辑基本不变的情况下,每一家都会有差别,并且也有很多的信息需要进行沟通后才能进行获取。设备仿真的方法是统一的,但实现都是特异的。

4. 实施过程中的技术点

4.1 注入技术

在做仿真程序的时候,第一步就是注入,如果我们无法注入进去,后续都无法进行开展。注入部分又是非常技术向的内容,需要在某个领域专精的人员,来完成这个过程。这部分与业务无关。

如果是系统级的设备仿真,需要对windows的一些底层技术有一定掌握,实现多以C/C++进行完成,其他的语言在操作底层方面差距还是比较大的。java的注入会使用java的一套注入手段,也是特异性的。需要自身或者有团队资源,能够完成这样基石的操作。

注入部分在技术方面具有通用性,在不产生大的变化时,这样的注入技术都可以一次研究,后续使用。

4.2 设备逻辑

做设备仿真是在模拟设备的运行,完成设备的处理逻辑。所以,实现设备逻辑的人员需要熟悉不同设备的使用方法,了解设备的目的,或者在开发前实际去使用一下工具,来知道设备是如何运转的。不了解设备,是无法做仿真的。

对于很多特殊的设备,需要了解其中的处理方法,比如IC卡仿真,就需要知道IC卡的原理,这样才能对获取到的数据进行有效的分析,否则都不知道返回的数据都是做什么用的。有的时候去理解这样的原理并不容易,需要去看理论与实际的数据才能了解。

做设备逻辑可以是和注入技术区分的不同团队的同事。

4.3 加密解密算法

在密码键盘和IC卡的时候,都会遇到加密解密的情况。加密算法遇到的对称加密算法比较多,也都是使用的主流的算法,国际3DES,DES,遇到过一次2DES,国密SM4算法。这些算法也都是非常标准的,一般不会使用自开发的算法。所以实现一个通过的加密解密类,是一个比较好的方式,工具包在手,项目不愁。

除了统一的加密解密算法外,还有一部分很重要的是加密前的处理,一般会出现左补齐右补齐,截断,异或等操作,熟悉这几种操作,再加上加密算法,基本上都可以解决加密解密部分所遇到的问题。

密钥体系不同,有主密钥与工作密钥的一些区别,加密时所使用的密钥一般为工作密钥,主密钥会被用于对密钥的一些加密。由于涉及到的密钥比较多,所以需要和相关人员找到确定的工作密钥后,才能计算出正确的结果。

银联提供了一个非常好用的小工具来验证加密过程,一般在做密码键盘和IC卡仿真时,获取到数据和密钥后,先通过银联的工具进行计算,如果计算无误后,验证了密钥是正确的,计算方式是正确的,后续在程序中进行实现就可以。一般把截获的数据填好,把找到的密钥代入进去,如果能计算出来与截获的加密后数据一致,则加密过程无误。

5. 安全性规范

对于客户来说,安全性是在实现仿真时客户考虑的很重要的一部分。如果不能合理解释仿真程序的安全性,很多数据我们无法获取,开发过程困难重重甚至无法开发。其实大可不必,下面我通过仿真实现时对安全性部分的论述,表明仿真程序不会影响到实际生产的安全性。

每一个机构都会有它自己独立管理密钥的体系,并且密钥部分也是经过层层加密的。我们所使用的密钥,是与加密部分直接相关的密钥,但是在密钥管理体系当中,生产环境与测试环境,密钥体系是分离的,所以我们在测试环境中使用的密钥,无法带入到生产环境当中。即使在测试环境当中,当管理密钥的系统,对密钥进行修改后,我们的仿真程序也都无法进行最终的使用了。

所以,机构只要进行环境的区分与密钥的控制,那么整体的安全性依旧在机构的掌握之中,无需担心后续产生其它安全性事故。

6. 总结

设备仿真在自动化实施过程,是一个非常偏技术向的一个工作。由于设备仿真并不会对业务逻辑产生实际影响,所以设备仿真可以从简开发,只要可以顺利完成业务流程即可。

此过程是我对项目中方法的一个总结和提炼,从理论的角度上说明了仿真的原理,略去了技术实现的过程。但是在实现当中,也需要经过多次的磨合,细节的问题很多也都需要处理。

仿真的方法可能有多种多样的,我提供这一种方法,从理论的层面上进行说明,且这种方法具有很强的适用性,我认为是一种有效的方法,并且在技术框架成型后,可以很快针对不同的机构,实现定制化的设备仿真逻辑。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190113G0T10600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券