Android使用NFC模拟M卡实现 (二)

 

Android使用NFC模拟M卡实现 (一)

Android使用NFC模拟M卡实现 (二)

Android使用NFC模拟M卡实现 (三)

 

前几天写的第一篇关于NFC的官方文档的翻译,今天才更新第二篇。没等我更新,就有人留言,具体怎么实现了!

我写文章不易,你搜索也不易,进行了,就请细看,细读。不会让你失望,失望没懂的地方,请留言 !

这里应该是写总结,和,怎么去实现模拟卡。

下面对上篇文章的总结,1.2.3.4.5.6....几条。一条一条写的,用最通信简要的表达写。

第1条。从上篇文章中得知,NFC功能或者通信,首先得有NFC相关的芯片对吧 !

安卓对NFC模拟卡的两种结构,这里其实就指出了硬件相关的事儿了。

第一种结构:【 还是将Secure Element,译:安全元素。】即在手机含有NFC通信安全芯片的基础上进行通信。

市场一般是这样的:

a.手机厂商在进行电路设计时,电路中就要设计带有安全芯片。

b.手机硬件中没有安全芯片,即手机不支持NFC功能,那[移联电]运营商的SIM卡,就设计带NFC安全元素的SIM卡。

然而这些都依赖,手机厂商,或者,电信运营商。google想办法了。

搞出,HCE服务 【即Host-based card emulation services的简写】

即,第二种结构:HCE服务

HCE的最大好处就是不需要使用NFC-SIM或者eSE,不会受制于移动运营商和手机厂商。如图:

 

第2条。google肯定在推广上面的第二种结构方式。那问题就来了,HCE它到底是什么梗 !

其实它还是跑在NFC通信芯片上的一套基于软件实现安全通信协议的实现。

第3条。HCE的特点是模拟智能IC卡(ISO 7816-4),可用于金融和行业应用。如果想模拟MifareClassic就只能,呵呵了!

智能卡的HCE支持协议;ISO 7816-4、14443-4 A、14443-2、14443-1

第4条。博客上一堆的模拟文章,大都是想模拟门禁,市面大都门禁用的M1卡。

且方法是,ROOT手机,修改配置文件中的内容。从而达到修改芯片UID的效果 !

     门禁系统中,大都是基于,读卡的ID,对上就能开门。且大都为MifareClassic卡,1K,即所谓的M1卡。

     修改/system/etc/libnfc_nxp.conf文件,修改UUID的值,从而达到门禁效果。

 

第5条。优惠卡,金融卡,交通卡,可不是就读个卡的ID这么简单,然后就给扣钱的。

     即现在的安卓手机能刷地铁,能读银行卡,等等,看上只要一刷就行,其实后面有复杂的交互的 !

    这些卡在使用时,不需要打开APP应用,就可以直接使用。为什么不需要打开APP。

    因为它有基于android service 无需要启动的应用,也可以在服务中启动其UI界面。这一句,好像表达有不通顺 !

 

第6条。前面我写过几篇,NFC读卡篇。尝试过下面的卡,得到的类型。

      Android使用NFC读卡实现 (一)        Android使用NFC读卡实现 (二)

     HCE中的模拟卡,就使用到其中的 IsoDep 类型,官方也模拟使用这种类型,模拟这种类型。

     这里一看, IsoDep好像很安全,银行都在用这种协议 !!!

二代身份证

显示为 NfcB

华北电力大学校园卡

北京市政交通卡

厦门公交卡

北京农商银行

中国建设银行

显示为 IsoDep

日常普通卡

显示MifareClassic

门禁卡MifareClassic

第7条。IsoDep 类型。IsoDep是什么鬼?

    说来话长,是一种规范。简单讲:

    银行卡是智能卡,智能卡那就不简单了,因为智能所以它能进行一些基本的通信了。

    再是以前的磁条卡,只记录信息,读/写两种操作了。或,M1卡,读个UID,或者,扇区中存点简单数据。

   相互之间是有点半自动的通信在里头了。  谈到通信过程,那就要有两端,1.卡端, 2.读卡器端。

   例:你拿手机银行卡,去消费,刷了卡,小额的,可以不要指纹,直接付款了。超过你限定的,自己调起需要你指纹确认。

         通信过程,a.读卡器向手机银行卡发信息,要银行卡号,什么的....

                               卡不是收到什么,都回复。那收到什么,卡才给回复。按PBOC 3.0中国银联的规范。指定的发....才回复!

                          b.,收到信息要对比,是对的,那就回给他信息。不对,那就不理他。

                                如果读卡器反复尝试发信息,都不对,卡还可以拒绝通信。为什么能拒绝,因为他是智能卡。

                          c.对上号了[验证],通信就可以开始了!读卡器向卡发信息,还想要姓名,余额,什么的....

                               那还是要按规范来,你问什么,对的上号,那就给你回复的。

第8条。简单的M卡模拟不了,那就只能模拟,智能卡了。

        a.模拟银行卡去给POS机读, 

        b.模拟自己的卡去给自己的读卡器读。

        c.模拟交通卡去给地铁站的读卡器读。

        那就是说,这个通信的过程规则协议是可以自己制定。

        例:北京公交卡,卡,按设定的通信规则协议设计的出来的,读卡器,车上和地铁上的读器也要用相对的通信规则协议。

       且读卡器,读取后需要处理的,所谓读卡器有对应的后台系统,是需要有你的记录信息的。

第9条。不知不觉,又写了这么长。分下篇吧!

            写一个, 模拟自己定义的智能卡 去给 自己定义的读卡器读。

原文地址:https://www.cnblogs.com/ncepu/p/13694950.html