我是如何破解学校一慧通的
文章是大学的时候写的,现在毕业多年,打算将过程写出来分享下学习思路
本文章只做技术交流,请勿将文章中涉及技术用于非法或其他用途,由此产生纠纷问题均与本人无关!
一、破解打水功能
用到的工具:
读卡设备:ACCR122U一个
空白M1卡片一张
在用的一慧通一张
上图:
平台:windows7
软件:NFCGUI-Pro.exe
M1卡服务程序
具体实施:
先去打水那查看卡内的余额:
卡内余额为29.85元,然后将ACR122u插在机器上,使用M1卡服务程序破解得出卡内的DUMP文件
使用M1卡服务器程序破解:
破解成功
破解了好久终于破解成功,dump文件会生成在文件目录下:
dumpfile 09d222aa (2015-11-1210_37_36) 1K.dump
文件就是生成的破解文件 可以看到生成的dump文件为1KB大小,但是具体写入M1卡的时候是需要写入4KB大小的dump文件的
我是可以使用NFCGUI-PRO.exe修复,
如图:
打开这个软件点击选择文件-选择刚才生成的1KB文件-就会提示“是否保存为4K文件格式”—选择“是”-就是自带修复成功
然后关闭软件,刚才的1kb的DUMP文件就会自带修复为4KB文件了。
通过上面的方法再得到两个不同金额的dump文件。
通过十六进制编辑器进行dump文件的对比,找出金额控制位,我使用winhex进行编辑dump文件:
因为这三个文件都是同一张卡片不同金额的dump文件,所以假定有金额的数据不同,有刷
卡次数记录的数据不同,刷卡时间的记录不同,(假定会有这些不同之处,也许只有记录
金额的变化),通过对比两张卡片,发现在00000901有不同的数据块
如图
余额为29.85:
余额为29.83:
余额为29.33:
发现这两张卡内的不同之处在于:
将十进制金额转换为十六进制为:
2985 = BA9
2983 = BA7
2933 = B75
可以看出
A9 B
A7 B
75 B
得出结论
B2 = B
BC = B
6E = B
当时想这个B是怎么来的,想了好久,后来发现,将两个不同的数据块进行xor运算:
A9 xor B2 = 1B
A7 xor BC = 1B
75 xor 6E = 1B
xor是如何进行运算的
例如:
A9 xor B2 = 1B
将A9转换为二进制为10101001
将B2转换为二进制为10110010
10101001
10110010
————
00011011
然后将00011011转换成十六进制等于1B
我把金额改成40元
40转换成十六进制为:
40-4000-FA0
A0 xor ?= 1F
将A0转换为二进制为10100000
将1F转换为二进制为11111
10100000
?
————
11111
可以得出问好区域是10111111
10111111转换为十六进制为BF
直接在winhex内修改dump文件:
直接保存为40.dump
通过NFCGUI-PRO.exe软件将dump文件写入到空白卡片中:
如图:
打开NFCGUI-PRO.exe软件后DUMP和Key文件选择加载文件40.dump
将ACR122U插入到电脑后将空白卡片放到读卡器上后选择写入文件
写入成功:
当我拿去测试时,如图:
没错,读不出来……
然后我的思绪就这样断了…
我又拿水卡刷了几次后,卡内余额剩余25.90时,终于又发现了….
如图:
余额:29.33元
余额:25.90元
把金额转换为十六进制
29.33—2933—B75
25.90—2590—A1E
这样子应该就可以看出了
40转换成十六进制为:
40-4000-FA0
/*这些上面说过了,怕有些人看不懂我再写一下过程
A0 xor ?= 1F
将A0转换为二进制为10100000
将1F转换为二进制为11111
10100000
?
————
11111
可以得出问好区域是10111111
10111111转换为十六进制为BF
*/
在winhex内修改dump文件:
存为40.dump
写入我就不再继续说了
我拿卡去测试
破解成功!!!!
改成999.99太张扬了,而且某些原因,没数据可以分析,所以我加到40就够了!
二、破解洗澡功能
男寝装备落后,没有插卡机,花了我5块大洋激活洗澡功能。
经过妹子帮忙多次消费后(可惜那个妹子现在娃都会打酱油了),得出6次数据,4次自己卡中的数据,2次妹子卡中的数据。
经过对比扇区数据不同后,确定了金额的位置,
这4次是我自己的数据,如图:
3.14
3.20
4.22
5.00
这是妹子卡中的两次数据,如图:
0.16
4.78
将金额转换成十六进制为:
3.14 = 314 = 13A
3.20 = 320 = 140
4.22 = 422 = 1A6
5.00 = 500 = 1F4
0.16 = 16 = 10
4.78 = 478 = 1DE
我卡中的数据不同的区域用红色的标记起来:
3.14
00 00 00 35 A0 3A 01 00 00 C5 FE FF FF 3A 01 00 00
1D E2 1D E2 3A 01 00 00 C5 FE FF FF 3A 01 00 001E
3.20
00 00 00 35 A0 40 01 00 00 BF FE FF FF 40 01 00 00
1D E2 1D E2 40 01 00 00 BF FE FF FF 40 01 00 001E
4.22
00 00 00 35 A0 A6 01 00 00 59 FE FF FF A6 01 00 00
1D E2 1D E2 A6 01 00 00 59 FE FF FF A6 01 00 001E
5.00
00 00 00 35 A0 F4 01 00 00 0B FE FF FF F4 01 00 00
1D E2 1D E2 F4 01 00 00 0B FE FF FF F4 01 00 001E
我用3.14为例。3A 01区域有两处,可以看出金额3.14转换成十六进制是13A,后两位就是3A,第一位是1。这样就可以确定3A01是如何来的。
关于C5是如何来的,经过我多次分析加运算后得知
FF - 3A = C5 这样一来也可以知道C5是如何得来的
我想把金额改成40元,40转换十六进制为40.00 =4000 = FA0
FF - A0 = 5F
可以得出40的数据为
00 00 00 35 A0 A0 0F 00 00 5F FE FF FF A0 0F 00 00
1D E2 1D E2 A0 0F 00 00 5F FE FF FF A0 0F 00 00 1E
不过当我写进卡里时….
这是妹子拍给我的照片….
后来我对比妹子的两个数据
0.16
00 00 00 72 6A 10 00 00 00 EF FF FF FF 10 00 00 00
1D E2 1D E2 10 00 00 00 EF FF FF FF 10 00 00 00 1E
4.78
00 00 00 72 6A DE 01 00 00 21 FE FF FF DE 01 00 00
1D E2 1D E2 DE 01 00 00 21 FE FF FF DE 01 00 00 1E
又有一个地方产生了变化….
0.16时为FF,4.78为FE
计算得出加密方法:
0.16为例
FF xor EF = 10
10 + 00 = 10
经过多次运算,所有金额数据都符合这个规律
继续转到40的金额
00 00 00 35 A0 A0 0F 00 00 5F FE FF FF A0 0F 00 00
1D E2 1D E2 A0 0F 00 00 5F FE FF FF A0 0F 00 001E
这是之前的数据
A0 + 0F = AF
? Xor 5F =AF
关于xor的运算之前已经说过这里就不多说了
得出结果为F0
将数据改为
00 00 00 35 A0 A0 0F 00 00 5F F0 FF FF A0 0F 00 00
1D E2 1D E2 A0 0F 00 00 5F F0 FF FF A0 0F 00 00 1E
写进卡中后
成功,据说每次插进去都会少0.06,这就是传说中的吞钱??
结尾
一卡通有三个功能,吃饭的功能没去研究,就这样吧。
文章写得简单,可过程经过多次测试与计算。
最后祝各位看到此文章的学子们在大学期间都能找到自己的真爱。
本文章只做技术交流,请勿将文章中涉及技术用于非法或其他用途,由此产生纠纷问题均与本人无关!
本文作者: iceH
本文链接: http://www.secice.cn/p/c92f138d
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!