0×00 前言
我租住的杭州一个老小区一年前出现了所谓的“出租房杀人事件”,事件过后民警叔叔们给小区的每个单元都装上了门禁,所有住户都需要在物业处登记,物业的工作人员会让你提供身份证或者公交卡用来注册,注册之后就可以刷卡进门了。
但由于某些原因,我并不想去登记注册一张门禁卡,正好手头有一部nexus5,众所周知nexus5是有nfc功能的,我便想能不能用nexus5的nfc功能伪造一张门禁卡呢? 一番尝试之后,就有了下文的方法。 (从来没接触过无线安全,对Proxmark3,acr122u 等设备也是一窍不通,各位大牛见笑了)
0×01分析
由于身份证,公交卡等很多卡都可以用来当门禁卡,那基本上有九成把握这个门禁只是简单读取卡的id,并不会去解密里面的内容,只要简单模拟一个相同id的卡就可以刷开门禁。
0×02“采样”
我们下载一款名为“TagInfo”的android应用,用它来读取一下现在可以刷开门禁的卡信息。(跟同楼的妹子借的)
如下图:
卡的id为:D2:::5B
接着我们找另一台nexus5看一下手机原来的id,扫描出来这台nexus5的id是在不停变化的,如下图:
原来出于安全考虑,android手机的id是一个4个字节长度的随机id,每次连接都会变化,并且都以 “0×80”开头。
android官方并没有提供任何的api可以指定修改nfc的id,但是我们可以用直接修改配置文件的方式来实现,前提当然是手机必须root过了。
0×03Just Do IT
1、到手机的 /etc/ 目录找一个文件名为libnfc-brcm-20791b05.conf,默认情况下,文件中NFA_DM_START_UP_CFG 的配置项是这样的值:
{:CB:::A5:::CA:::::::::::0F:::::E0:::::::::B5::::FF::::C9:::0F:AB:5B:::B2::E8::::CF::::B1::::::::C2:::C8}
2、通过修改这个值就可以改变id。把该文件下载到电脑上,先在最后面增加一个0×33作为标志位,接着接上要指定的id长度,在当前的情况下就是0×04,最后在后面接上要制定的id:“0xD2,0×69,0×76,0x5B”,接着改变最首的数字,加上我们总共增加的字符串长度,这里我们需要加上6,所以最后配置项变成:
{4B:CB:::A5:::CA:::::::::::0F:::::E0:::::::::B5::::FF::::C9:::0F:AB:5B:::B2::E8::::CF::::B1::::::::C2:::C8:::D2:::5B}
3、采用adb的方式覆盖系统中原来的文件,然后重启
adb root
adb remount
adb push libnfc-brcm-20791b05.conf /etc/
adb reboot
重启之后我们发现,这台nexus5的id已经被改成了我们想要的。
拿着修改好的nexus5去试试看?记得必须在唤醒屏幕的情况下nfc才有效。
0×04 演示视频:
成功!