Zxilly
Calm down
Zxilly's Blog

使用PN532+PL2303HX复制JCOP41校园卡

起因

学校强制要求出入寝室需要刷校园卡,但是很多时候本来就只是临时上下楼,却不得不多带一张卡在身上。于是我想到了我常年佩戴的小米手环4NFC版,试图使用它来模拟校园卡,但是很可惜,当前小米仅支持非加密卡的模拟,而我们学校使用的却是IBM制式的JCOP41

https://learningman.top/wp-content/uploads/2019/10/Screenshot_20191013-200818.png

这意味着这张卡无法被直接模拟,需要解密,但常规的解密方式并不适用于这张卡,CPU卡的构造也注定有一部分数据无法被读取,我只能希望门禁数据没有放在CPU区里,万事俱备,开工!

材料准备

  1. 具备全功能NFC的安卓手机一台(这里使用LG G7
  2. PN532+PL2303HX
  3. 一张CUID白卡(理论上可以省下,但你买PN532一般都会送)
  4. MifareOneTool
  5. MifareClassicTool
  6. 一颗爱折腾的心

分析

首先将PN532,PL2303HX连接到你的PC上(请遵照商家提供的教程安装),这里我们使用MifareOneToolMifareClassicTool来完成破解。在我的环境下,可以使用默认密钥FFFFFFFFFFFF读取校园卡,即std.keys

file

观察读取的数据可知门禁数据很有可能存在于10扇区,接下来我们使用MifareOneTool来尝试解出该分区的密钥。

解密

file

如图所示执行,注意,需要运行HardNested两次以分别取得keyAkeyB,如果你和我是同一所大学,keyB应当为AB2016CD0310,而keyA,在每张卡上都应该不同,需要自行解出。

注意,HardNested对于CPU的要求很高. 对我而言,Ryzen 2600满载运行消耗了约200秒以求得密钥,如果你在性能更低的设备上执行此操作,消耗的时间可能更久。

file

将密钥导入MifareClassicalTool,这时就会发现,之前无法读取的10扇区已经可读,保存转储文件,我们接下来会用到。

file

file

复制

复制MiFareClassicTool读取的第一行紫色文字,使用写标签将数据写入CUID白卡,使用小米运动控制小米手环对CUID白卡进行模拟(此步骤需要实名)。

file
file
file

模拟成功后,使用MifareClassicTool将之前保存的转储文件除0扇区以外的所有扇区写入小米手环。

file

检测

读取小米手环,并与之前保存的转储文件相比较

file

关于0扇区的不同,猜测是小米对于0扇区的读写做了限制,但一般情况下门禁并不会校验0扇区

如果你的结果和我的大致一致,恭喜你,你已经成功了!

Bug & ToDo

  1. 0扇区的不同
  2. 支付功能无法使用,猜测是因为数据存于CPU区,无法被读取,暂时无解。

致谢

方方方块@coolapk:他在PM3上完成的操作为我提供了大量灵感。

filthystone@coolapk:他在PN523上进行的探索有极高的完成度,本文部分内容来自于他在酷安发表的文章

珍惜不离不弃@coolapk:他向我介绍了MifareOneTool

感谢文中所使用的所有软件和硬件的设计者,开发者。

没有标签
首页      可穿戴设备      使用PN532+PL2303HX复制JCOP41校园卡

Zxilly

文章作者

发表回复

textsms
account_circle
email

  • 路过的甲同学

    大佬666

    4 年前 回复
  • 小雷锋

    大佬,我跟着你的步骤,在HardNested运行时显示的时“已经收集***个Nonce”而不是你的“正在计算**%”,而且收集了一千多个后就显示运行完毕了,没有你那样给出key值,这是为啥呀

    4 年前 回复
    • learningman博主

      @小雷锋: 如果是CPU卡的话,不一定能解密,JCOP41比较看脸的

      4 年前 回复
      • 模范小雷锋

        @learningman: 这个问题我解决了,我发现是你解密那一步hardnested里勾选了只采集不计算的原因。后来我跑出了密码,也成功读取了原先无法读取的扇区,但我把0扇区第一行数据复制到空白的cuid卡上后,cuid卡无法被手机和手环的nfc读取了(可以被pn532读取到),你知道这是为啥吗?还有我用pn532把一模一样的数据写到cuid卡里,结果刷不开门禁。

        4 年前 回复
        • learningman博主

          @模范小雷锋: 标准的CUID卡,0扇区就应该是无法写入的,你得买那种Magic Tag。
          门禁不一定是读1k部分的数据,如果是和卡里的CPU交互的那种的话无解

          4 年前
        • 模范小雷锋

          @learningman: 应该不与CPU交互,因为据说有同学手机直接模拟的能刷开一个方向的门禁。我按你“复制”那一个步骤写入了第一行,应该是写入成功的,因为写入后我去读取了一下发现是有写入数据的。我最大的困惑就是写入了第一行后手机和手环的nfc就无法读取cuid卡了,再刷回空白卡就又可以读取了。我在想会不会是那一行数据的关系,因为我看中间的一段并没有常见的400或者200这一段数。我的第一行数据为7072FCA9570100043730053A1F191289

          4 年前
        • learningman博主

          @模范小雷锋: 有的卡0扇区是无法写入的,强行写入也许会发生问题?
          我不是很清楚这个。
          数字没有问题,本身就是无规律的,没有什么常见的说法

          4 年前
        • da

          @模范小雷锋: 为什么我没有勾选也是nonce

          4 年前

Zxilly's Blog

使用PN532+PL2303HX复制JCOP41校园卡
起因 学校强制要求出入寝室需要刷校园卡,但是很多时候本来就只是临时上下楼,却不得不多带一张卡在身上。于是我想到了我常年佩戴的小米手环4NFC版,试图使用它来模拟校园卡,但是很可惜…
扫描二维码继续阅读
2019-10-14