Proxmark3笔记

——Proxmark3完全入门指南

写在前面

  • 这里所有针对扇区、区块的计数都是从0开始算

一些需要知道的知识

为了能看懂笔记,需要能回答以下问题

  • ID卡和IC卡主要的区别是什么?
  • 什么是全加密卡和半加密卡,区别是什么。
  • IC卡分哪几个大类?
  • IC卡的卡号储存在哪个扇区?是前几位?
  • IC卡的卡号是唯一的吗,是顺序的还是随机的?
  • IC卡每个扇区分几个区块?
  • IC卡密钥的作用是什么,储存在每个扇区的几区块?

有了这些基础,则开始我们的探索

环境的配置

设备自然是PM3 eazy,贵的买不起

本笔记用的皆是开源项目:https://github.com/wh201906/Proxmark3GUI中的文件,无论是gui 还是命令行,亦或者是驱动、固件都由此项目提供。笔者是穷鬼,没用过好东西,不知道付费的图形界面好不好用。

关于IC卡类别的识别

命令行输入hf search,会自动识别卡类型,只需要将卡放到pm3等待。

会得到这种图(hf search

pm3会探测所有卡片类型,把他能成功读到卡号的类型显示出来

数据解释

  • UID是卡号,代表了卡的唯一识别码
  • ATQA是应答类型,用于定义卡的物理特性
  • SAK08,具体含义忘了,别管
  • possible types,就是卡片类型,这里写的很明白是MIFARE Classic 1k ,其实就是M1卡
  • Prng detection:hard,就是告诉你别想Prng攻击了,打不动,如果是Prng detection:weak 就是可以打,Prng就是所谓的知一求全(知道一个密钥,直接破其它全部秘钥)

开始破解卡牌密钥

一切的开始都是先把密钥破了,读到卡的数据,分析数据什么都是后面的事了,而且如果只是复制卡片,密钥破了就结束了

基础介绍

在命令行中,输入 hf mf 可以查看相关的命令帮助,再解释一下,hf就是所有IC卡有关的命令都在里面,mf 就是所有有关M1卡的命令都在里面,笔者手上这张卡是M1卡,自然是用hf mf ,相信各位手上差不多应该也是M1卡(笑)

hf mf

看到recovery里面,这一整块都是可以用的攻击模块,先说一下一般攻击思路,一般先用chk 他会验证一下默认密码,只要有一个密钥是默认密码,就是一张半加密卡,考虑nested,如果能解出来最好,再解不出来就hardnested ,一般走到这里就已经差不多了,就是耗费时间,哦,提一嘴nested就是所谓的知一求全,hardnested就是知一求一,咱们先试试有没有明显的漏洞和bug,就是darksidenack ,再提一嘴,如果出现auth error或者cant select card这种错误,直接看后面,后面会写(我应该会写)

破解密钥

我们先从第一个darkside开始

  1. 输入hf mf darkside开始攻击

    命令行输入(hf mf darkside)

    很明显,笔者这张卡攻击失败了,提示词写的很清楚,不支持darkside攻击,但是不慌,还有那么多手段

  2. 输入hf mf nack 看看有没有nack bug

    很明显,nack bug也不存在,咱就走个过场,没指望他有

  3. 开始走正道,用chk验证默认密码,一次验证不出来就两次,两次不行三次,三次还是没出默认密码就宣布结束,只能走嗅探的路子,笔者这里先不走(有些懒,未来写补充篇?)

    输入hf mf chk

    笔者这里出现了两个默认密码,是7区块的,7区块这里的两个数据就是密钥,KeyA是A密钥,同理,KeyB是B密钥,如果困惑于为什么有两个密钥,或者是干什么用的,请参考关键字:IC卡数据结构,b站有几位讲得很好,笔者也是那里听的

  4. 有了默认密码尝试nested攻击

    输入hf mf nested 查看相关命令帮助

    建议自己读,肯定更清楚,但是嘞,在这里也简单解释一下

    一般用得到这几个参数

      • -1k ,M1卡就用1K,笔者这里肯定是用1K
      • -blk,就是知道默认密码的区块,像笔者上图blk那一列所示,已经知道了7区块的a、b密钥
    • -a或者 -b,就是你知道KeyA还是KeyB,此时7区块的KeyA和KeyB都知道,所以这里随便填一个就可以
    • -K就是知道的密码是什么,笔者这里是FFFFFFFFFFFF,理所当然是填FFFFFFFFFFFF
    • 其他不用管

    综上所述,笔者这里的命令就写成hf mf nested --1k --blk 7 -a -k FFFFFFFFFFFF

    很可惜,这张卡nested成功不了,不然全部密码就都出来了,相信有读者到这里密码就已经出来了,请跳转到后面读卡数据的部分

    附一张nested成功的图片

    这种便是nested成功了

  5. 开始艰难的知一求一,顾名思义就是用一个密钥去求另外一个密钥,而且只能一对一的求

    输入hf mf hardnested还是从命令提示开始

    相关解释

    • 需要填什么参数:已知密码的区块,是KeyA还是KeyB,已知密码是什么,目标区块是什么,要目标区块的keyA还是KeyB
      • -blk后面跟已知密码的区块,
    • -a/-b 是KeyA还是KeyB
    • -k 已知的密码
      • -tblk 目标区块,最好是以Blk那一列为准,就是3、11、15那些
      • -ta 要目标区块的KeyA还是KeyB
    • 填完就ok了

    笔者这里已知密码是7区块,KeyA,KeyB都是FFFFFFFFFFFF,假如笔者想要3区块的a密钥,综上所述,笔者的命令应当是hf mf hardnested --blk 7 -a -k FFFFFFFFFFFF --tblk 3 --ta

    失败是正常的,3区块的a不行,就试试b,而且每个可以多试两次,有时候第二次就能跑出来了,三区块b密钥还错就试试11区块,总有能跑出来的,所以说是一个磨洋工的事情,在这里建议把之前的chk跑的复制粘贴到文本里,跑出来一个就替换一个,默认密钥跑出来新的密钥就可以换新密钥继续跑,随着解出来的密钥越来越多,密钥会越来越好解

    此处是一直试到第23区块的a,才解出第一个密钥,以此反复,直到解出所有密钥

    这边纯运气,祝你好运,解出所有密钥后我们下一节见


读卡与写卡

  1. 先把得到的密钥都记录在案

  2. 打开Proxmark3GUI.exe ,这边使用图形界面处理很方便,将密钥填进去(右边那个密钥A,密钥B)

  3. 点击普通卡的读取选中块 ,不出意外已经可以把卡的数据读到左边的区块了,如果有显示问号的,选中那个区块再点一次读取选中块

  4. 如果要复制卡,现在已经可以开始复制了,拿出一张空的CUID卡(无脑用CUID卡,真好用吧,淘宝买),放到pm3上,点上全选,点击写入选中块,慢慢等待它写就可以了,一轮写完会跳某某区块写入失败要不要选中,选中它然后继续点写入选中块,直到所有的区块全写完,显示成功 就完成了卡的复制,拿着那张卡刷一刷,应该是没什么问题了

  5. 点文件那一栏的保存,以后写卡就不用重新读了,直接加载文件就行,结束结束

一般到这里,应该大部分的目的都能达成了,就此别过


卡内数据分析

纯笔记部分,笔者满打满算才玩PM3三天(包括写笔记这天),写的不对的欢迎指正

环境介绍

  • 此卡是一张校园卡,可以用来刷校门、食堂机器、宿舍水卡、一般通过完美校园进行充值
  • 此卡在通过手机充值后,金额无法立刻更新,在宿舍水机上刷还是保持原金额,必须在食堂机器上刷了一次,卡内金额才会更新,在宿舍水机上才能使用
  • 由上可知,食堂机器必有写卡功能,并且在读取卡号后在后台查询金额,再将金额写入到卡里,所以卡必有某一扇区保存金额数据,而刷宿舍水机无法更新数据可知宿舍水机没有写权限,只有读权限。

使用到的工具

对比工具和IC卡分析工具

摆在这里:https://pan.baidu.com/s/1OREBqMODCBsZtybHyU-EKA?pwd=2333

数据分析

先薅一张室友的校园卡过来,留作备用,总共有数据的扇区只有0、2、3、9、13、14、15扇区,13扇区看IC卡分析工具里存了学号和姓名,改了一下发现没影响,直接全部改成00了,也没影响,以此为基础,每个扇区都如此试了一下,得到有效的扇区只有0扇区、2扇区、9扇区

附图

往卡里充一块钱,把卡从0充到1元,对比数据(左充值后,右未充值)

对比数据,2扇区的0区块和1区块是相同的值,只有2、8、15位的值发生了变化,下面的E4,80在消费后对比过滤掉了,同时发现3区块的4位会根据刷卡在00和64来回跳,可能用来表示是否在校?

关于金额,很明显是加密的,必须三个值都正确才能读出正确的金额,猜测复制A卡的2扇区,写入卡B里应该可行,未实验(避免 财务:?)

测试日志

一切从0开始计数
充值后,2扇区的0、1扇区的2位和10位、15位发生变化,这几位任何一位错误都不会改变卡片的金额
在刷学校机器后,2扇区的2区块的14位会发生改变,但是在刷水机后,数值并不会发生变化,此变化像是滚动码,并不重复
在刷校门和水卡后,2扇区2区块,04位将会在64和00之间来回切换
9扇区如果是无效值会使卡无效,但可在A卡里写B卡的9扇区,扇区作用未知
此卡运用一卡一密,必须卡号和密钥匹配才能被读取

常见错误处理

1. Proxmark3GUI无法连接到固件

一般是固件和软件版本不匹配,把项目文件夹里给的固件刷进去,一般就可以解决

2.出现“auth error”或者“can't select card”这种错误

auth error一般是信号干扰导致,看看周围有没有别的卡,有没有金属物品压在pm3下面,也有可能是密码不对,再确认一下密码

can't select card如果是偶发性的,还是只能归结于信号干扰,但如果频繁出现,则有可能是硬件有问题,笔者遇到了这个问题,让商家换货后解决,下图是换货前的情况

3. 有区块写不进去

把卡挪挪位置再写一下试试,翻过来再写写,反复反复写,如果实在写不进去,建议换张卡,很有可能是卡的质量不好,下次买空卡换一家买(因为我就是卡不行死活写不进去)


后记

感觉PM3方面文章还是少诶,搜到的文章要么软件里一键破解,要么nested直接就出来了,还有卖付费软件的,当初这卡nested失败了直接不知道咋继续了,也是把探索的路子写出来,后续入坑的多一篇文章参考。

Proxmark3入门指南的更多相关文章

  1. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  2. Vue.js 入门指南之“前传”(含sublime text 3 配置)

    题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...

  3. yii2实战教程之新手入门指南-简单博客管理系统

    作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...

  4. 【翻译】Fluent NHibernate介绍和入门指南

    英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...

  5. ASP.NET MVC 5 入门指南汇总

    经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...

  6. 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍

    我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...

  7. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据

    我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...

  8. 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模

    我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...

  9. 一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化

    在前面的系列文章中,我们介绍了官方有关获取数据,以及建模的原始文档和基本介绍.今天继续给大家介绍官方文档中,有关可视化的内容.实际上获获取数据和建模更注重业务关系的处理,而可视化则关注对数据的解读.这 ...

  10. 一起学微软Power BI系列-官方文档-入门指南(5)探索数据奥秘

    我们几篇系列文章中,我们介绍了官方入门文档与获取数据等基本知识.今天继续给大家另外一个重点,探索数据奥秘.有了数据源,有了模型,下一步就是如何解析数据了.解析数据的过程需要很多综合技能,不仅仅是需要掌 ...

随机推荐

  1. Visual Studio 2022 企业版 离线包 下载

    今天安装了Visual Studio 2022 企业版工具,觉得改进还是有一定的,下面提供下载及序列号: 链接:https://pan.baidu.com/s/1qvzg8WtsgaCxrD3M4Y0 ...

  2. 解决Python报错SSLError,如果试了网上一大堆方法还不行,看看这个吧!!

    前言 这个问题困扰了群友一天,我怀着好奇心去试试看,不到5分钟给解决了哈哈. 报错代码 报错代码中对相关的host和url进行了替换,大家在网上发布内容也要注意隐私哈,多长个心眼子总没错. reque ...

  3. SpringBoot中优雅地实现统一响应对象

    目录 前言 实现步骤 定义统一响应对象类 定义一个忽略响应封装的注解 实现ResponseBodyAdvice接口 定义Controller类 总结 前言 近日心血来潮想做一个开源项目,目标是做一款可 ...

  4. 教你用JavaScript实现实时字符计数器

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个实时字符计数器.用户在指定位置打字,程序实时显示字符数量. 案例演示 在编辑框内输入 ...

  5. 小知识:解决EXP-00003的报错

    客户有个需求:某用户程序(含exp导出任务)报错EXP-00003,这个错误并不会影响整个导出任务的结束,但由于是晚上的定时任务,该错误会触发夜间告警.客户想通过数据库层面来规避掉此错误. 事实上,这 ...

  6. Power BI 1 DAY

    目录 Power BI(商业智能)分析 BI 分析步骤 Power Query 表数据结构 区别 主键 Power Query中的纵向合并与横向合并 销售一表和销售二表进行纵向合并为一张销售表. 产品 ...

  7. Centos7安装MySQL5.7和Redis6.0流水账

    安装mysql 使用rpm包安装 yum remove mariadb-libs.x86_64 yum install perl rpm -ivh mysql-community-common-5.7 ...

  8. python运算符---day04

    1.python运算符 (1)算数运算符: + - * / // % ** (2)比较运算符: > < >= <= == != (3)赋值运算符:= += -= *= /= / ...

  9. 深入解析Python并发编程的多线程和异步编程

    本文分享自华为云社区<Python并发编程探秘:多线程与异步编程的深入解析>,作者:柠檬味拥抱. 在Python编程中,多线程是一种常用的并发编程方式,它可以有效地提高程序的执行效率,特别 ...

  10. toml格式配置文件介绍

    toml官方wik toml官方文档 此次文档是以v1.0.0为例,进行说明的.如果使用到的版本不同,直接去官方文档中找对应的版本即可. 谈到配置文件,大家都能说出来好几种,比如常见的ini.xml. ...