瞎猫碰上死耗子之 天哪,他们实现了实时刷卡!

来源:互联网 发布:java项目如何重新编译 编辑:程序博客网 时间:2024/04/30 00:05

    据我目前所知,一般的非接触式IC卡里面包含很多扇区,每个扇区又有很多块,数据存储在块里,扇区由密码保护。通常一个软件使用几个扇区就够了,不需要使用全部扇区。

 


    卡在出厂时原始密钥为FFFFFFFFFFFF,只有经过装载初始化密钥的IC卡才能在软件中使用,初始化卡密钥工作较为繁琐,通常销售服务单位已完成,客户无需做这部分的工作,销售服务单位做的工作就是用加密狗等软件修改密钥,防止他人用于非法行径。

 


    以上为背景,以下是结论:

 


    所以,一般情况下,卡和读卡器是专款专用,一对一的,A卡只能由A读卡器读!



    研究的时候我手里有永和豆浆收银系统的读卡器M和卡M;也有当下我们公司正在使用的读卡器N和卡N,两套系统,两套读卡器,不兼容?!咋办……





    需求,或者说目的是:


    读出卡N的卡号!这样贴上卡,屏幕上就能显示该卡订餐详情!打饭时无需再去按键扣费,也省去了员工现场选餐改餐的时间


 

    不能解决刷卡问题,使用订餐系统的意义是微乎其微的!它只起到了汇总统计、减少浪费的作用,没有提升效率!时间宝贵,大家都懂,,,



 

    扯了那么多,现在咱们说下我这只"瞎猫"是怎么发现读卡器M和卡N这只"死耗子"的:

 


    1.整合现有资料,汇总分析信息

 

        1.1研究读卡器N和卡N


    一开始,我无从下手,后来想到既然读卡器N可以读N卡,那看看读卡器N的帮助文件,也看看使用读卡器的一卡通系统,还有销售服务单位给的读卡demo以及API文档,但销售单位没给dll文件,dll是最要命的,最重要的文件没给!感觉好坑的说,,现在看来也罢,,,综合几份资料,我获得的信息有:

       (1)卡N用了五个扇区,扇区号1到5,密码可能还是FFFFFFFFFFFF

       (2)读卡器读卡的运行机理是:引用硬件的dll,程序里写API中提供的函数就能得到卡的信息



        1.2研究读卡器M和卡M


    读卡器M有一个可视化驱动程序,有dll,也有demo,还有强大的永和豆浆收银系统,驱动程序里面有个功能是读写测试,如下:






 




 

    2.动手做:




    尝试用读卡器M的可视化驱动程序修改卡N的密钥,修改为出厂的FFFFFFFFFFF,表面上像是成了,读写都显示"OK",但到了订餐系统里,它就趴窝,显示"寻卡失败",所以,根上还是没修改成功




    呐呐呐,重点来了:




    后来无意间发现,卡N放到读卡器M上,当我把扇区修改成0时,使用默认密码FFFFFFFFFFFF,它就全是"ok",也就是说通信成功!其他扇区(1-15)全是密码验证失败,如下两图:

















    然后我赶紧打开订餐系统后台,哈哈,读出来了一串值,先不管这串值是什么,我要过来周围伙伴的卡,又读出来几个其他的值,而且每个人的卡每次放,那一串值不变!!!

 



    噢耶,至此,发现死耗子的过程就结束了!

    因为只要每个卡都能读出独一无二的值,那用它区别对待每个人、每份订单是再简单不过的一件事儿了





    故事讲到这里,你觉得完了吗,没完,我们想要的是是刷卡,而不是点一下读卡,它显示卡号,,,

    故事讲到这里,其他主角该上场了,还记得我说的是"我们",不是"我"吧,他们是真正的大牛哎,那代码写的,666啊



    学亮写的AJAX实时执行读卡代码,并把订单详情结果显示到前台页面上

    世超帮我调试代码,修改查询语句

    还有同桌秀娟,给出了很多建设性意见,不过她的建设性意见和捣蛋能力成正比,,,

    除了这些大牛们,身边还有好多人都提供了帮助,

    还有要说的是,我的研究是站在朋波曾经研究的基础上,





    感觉这一路下来,真的是人品爆发,好运爆棚,运气太好了!



    总结一下,

    1.办事儿讲究天时地利人和,我觉得这次的成功可以归功于它,天时不好说;但楼下就是个大公司,能提供很多帮助,是地利;最重要的人和,我算是体会到了,大家的帮助就不多说了,比如师哥师姐们,牛腩老师,,,

    2.站在前人研究的基础上,多方寻求帮助

    3.运气,运气,还是运气   




    好吧,我承认这次标题党了一回,但这样的目的是想让你看下我的博客

    小菜成长之路,大牛莫笑


2 0
原创粉丝点击