Android使用NFC模拟IC卡

言:前几天不知道老板出于什么原因居然给我们研发部门安装了门禁,只有我们研发部的人员使用员工卡才能进出,每天上下班携带员工卡着实不太方便,于是想着动了点歪脑筋...

       NFC是在RFID的基础上发展而来的,两者本质上并没有太大的区别,但细节方面还是有点不同:

1.NFC增加了点对点通信功能,通信的双方是相互对等的,而RFID是主从关系。

2.工作有效距离:NFC一般不超过10cm,而RFID最远的可以有几十米。

3.工作频段:NFC仅限于13.56MHz,而RFID有低频(125KHz到135KHz),高频(13.56MHz),超高频(860MHz到960MHz)。

       联想到之前做过的一个嵌入式项目使用的富士通的SL3S4011双界面存储芯片一般都是通过***ID来识别不同的卡片初步猜测该门禁系统的原理是通过读写器读取IC卡ID后根据设定的权限策略来判定是否有权限通过。所以主要的问题有两个,一是两者使用同一个频段,二是NFC模拟IC卡的ID。

       对于第一个问题我将手机靠近了IC卡后听到一声“叮咚”证明他们确实是在同一个频段。

       第二个问题是在Stack Overflow的这篇文章找到了答案:http://*.com/a/28720342/1016460,下面的内容是对这篇文章的翻译及运用。


      前提条件:已经root了的Android手机且带NFC功能


1.使用“TagInfo”读取IC卡内部ID***:(如下图红色框内所示我的卡ID为C4 1A CA 88)

        Android使用NFC模拟IC卡


2.使用RE管理器打开/etc/libnfc-brcm-20791b05.conf:

              Android使用NFC模拟IC卡

如上图所示,原生的第一个红框内为45,第二个框内的数据是没有的。

我把它改成了上面这样,那这些数据是什么意思呢?

先看第二个红框内,0x33表示后面的数据我们是用来作为UID的,紧跟着的04代表后面有4个字节的ID,C4 1A CA 88当然就是上一步读到的IC卡ID号了;那为什么要把45改成4B呢?因为45代表的是总的数据长度,我们在后面一共添加了6个字节所以+6变成4B。

3.保存修改并重启。

大功告成啦,这个时候你去用手机靠近读卡器就能随意的出入门禁了。


补充:要是有很多IC卡需要模拟每次这样改岂不是很麻烦,后来我发现了这个APP可以方便地切换:http://nfcemulator.bmob.cn/