Zxilly
Try to be 1%
Zxilly's Blog
使用 PN532+PL2303HX 复制 JCOP41 校园卡

起因

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

这意味着这张卡无法被直接模拟,需要解密,但常规的解密方式并不适用于这张卡,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 校园卡

learningman

文章作者

发表评论

textsms
account_circle
email

  • 路过的甲同学

    大佬 666

    2月前 回复
  • 小雷锋

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

    3周前 回复
    • learningman博主

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

      3周前 回复
      • 模范小雷锋

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

        3周前 回复
        • learningman博主

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

          3周前 回复
          • 模范小雷锋

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

            3周前
          • learningman博主

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

            3周前

Zxilly's Blog

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