首页
社区
课程
招聘
[原创]Syscan360电子胸卡分析
发表于: 2013-10-14 13:59 42792

[原创]Syscan360电子胸卡分析

2013-10-14 13:59
42792

Syscan360电子胸卡分析

  Syscan360大会闭幕半个多月了,其中有个破解电子胸卡的环节吸引了不少眼球,而且官方提供了解题思路。经过本人研究后发现,解题方案还可以大幅优化,而且如果用USB连接到胸卡的串口,通过破解提示,大概不到1分钟就可以破解….

首先感谢360提供这个游戏 
    感谢钱老师提供胸卡供分析.
神图镇楼


让我们先从电路开始分析.
电路分为独立的两个部分,上半部分是电子胸卡,下半部分应该是USB名片功能,两个电路没有关系.

电路说明:
 


先看主控芯片: 

电子胸卡部分使用Atmega16A作主控,属于Atmel公司AVR系列8位单片机, Geek们玩的Arduino就是使用的AVR系列的芯片.

[Atmega16A引脚]

 

对照电路板我们可以知道:
  PB5,PB6,PB7连接到USBISP接口
  XTAL1,XTAL2没有连接,使用内部晶振,频率由熔丝位设置
  RXD,TXD连接到串口
  PD3(INT1)连接到LED按钮(外部中断1)
  PD5,PD6,PD7连接到74HC595
  PC0-PC7连接到KeyA
  PA0-PA7连接到KeyB
PB4连接到DS2411序列号芯片

完整的电路图: 使用Proteus 7.8绘制,可仿真
 

序列号芯片部分:
 

电路板上使用的是DS2411硅序列号芯片
DS2411只有3个引脚,1个电源,1个接地,只用1跟数据线就可以通信,连接到Atmega16A的PB4
这个芯片48位的序列号,ID就放在这里面

由于proteus没有这个芯片,只能用同样支持1-Wire协议的温度传感器DS18B20替代了,通过在proteus设置芯片属性里面的ROM Serial Number可以修改序列号,注意大小端
 


LED显示部分:
 

使用4片74HC595级联,顺序为
 

74HC595是移位寄存器,通过规定的时序可以向芯片发送8位数据,并可以控制其移位,如果使用级联的话,最高位移位时移到下一个芯片的输入.
  

74HC595的QA-QH连接到LED,RCK连接到PD5,SCK连接到PD6,SI连接到PD7,SQH连接到下一个74HC595的SI(输入)

拨码开关:
  

拨码开关刚好8位,正好接到Atmega16A的PC口和PA口 
 
 

读取程序:
把USBASP下载线,接到电路板上.注意对应引脚
 

 

使用AVR_fighter软件读取芯片信息


  
芯片加密熔丝位没有设置,意味着可以读取里面的程序 

程序分析:

顺利读出程序.拽到IDA里分析,处理器选择Atmel avr series: avr,确定后选择设备 Atmega16_L,下一步的EEPROM不用选择,程序没用到



 
IDA 只能识别静态调用的函数,剩下的可以手动识别,
全部代码大约有5000行,除去没有调用的,也有3000多行,全部分析是不可能的.只能看重点了,而且大部分代码是显示时序逻辑,没有分析价值

[main函数]


 
我们只看上面,下面是显示逻辑(左边的流程是循环闪烁,右边的流程是循环旋转.)
 

进入main函数先初始化端口,中断,设置串口波特率等.然后调用GetID函数.
GetID函数里面使用1-Wire协议读取DS2411中的序列号, 存放到内存中g_bID0-g_bID3
然后main函数中调用休眠函数,进入休眠状态,等待LED按键按下
LED按键按下后进入INT1中断处理函数
 

函数中清除通过状态,使用循环延时防止按键按下的过程中接触不良引起的抖动再次触发中断.

按键中断处理完后,休眠结束,回到main函数继续执行
 

当g_bState为1的时候,调用Check函数,检验密码


 
进入函数先点亮全部LED,然后获取KEYA和KEYB的按键状态,
 

按键的每4位作为一个单位和序列号芯片里的ID的每个字节的低4位比较,根据比较的结果设置标志位,存放到nKeyPass中,0-3位分别表示KeyB的高位,KeyB的低位,KeyA的高位,KeyA的低位是否通过.把这个结果输出到LED显示.每个位的通过与否使用90度的LED显示.
 

在Check的结尾判断是否通过,通过的话设置通过标志;没有通过的话向串口输出按键B和按键A的16进制数值,并调用SEND_COM函数显示破解提示;
 

 
向串口发送破解提示字符串,并发送g_bID0-g_bID3的ASCII码.



破解提示:
  连接到串口后,看破解提示,有个8位的ID,取每个字节的低4位,比如0324180C,密码就是348C
如果电路板拿在手里电池在左下角的话,即KEY_A的1引脚连接到Atmega的PC0, KEY_A的8引脚连接到Atmega的PC7,最高位在最右面,和我们的习惯不一样,要把电路板倒过来,让电池在右上角,这样就可以直接输入提示的密码了….
输入的顺序为:


 

1234的位置,分别输入348C的二进制就可以了..应该不会超过1分钟吧…

附: Protues仿真软件使用
  使用Proteus打开Badge.DSN文件,设置DS18B20的序列号(注意大小端),按F12开始仿真,点击拨码开关输入密码,然后点LED按钮.密码错误的话,串口窗口可以显示提示.
   

串口窗口:
 

PS: USB名片芯片里面的程序没有读取到,可能本来就没有,或者是被我自己不小心擦除了.
PS: 泼水解法应该是DS2411被短路,GetID函数取到的ID是全0,按键全部拨到ON位置,即全部接地,PC口和PA口读到的Key为0,所以可以解开密码.
PS: 程序和电路图版权属于360,不提供下载

附: 文档
Syscan360胸卡分析_.part1.rar
Syscan360胸卡分析_.part2.rar


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (62)
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
2
都开始玩硬件了,先进,占位膜拜。
2013-10-14 14:08
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
3
支持宁哥!!!
2013-10-14 14:16
0
雪    币: 473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
人才啊,支持一下。。。
2013-10-14 14:21
0
雪    币: 181
活跃值: (134)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
膜拜老何。。。
2013-10-14 14:22
0
雪    币: 17
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个要膜拜一下..
2013-10-14 14:25
0
雪    币: 341
活跃值: (138)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
偏硬件啊。。。
2013-10-14 14:37
0
雪    币: 16
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看来学单片机还是有用的...
2013-10-14 15:47
0
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
9
大赞~

这个应该转到硬件区会更合适吧。

去开会前,我也是在琢磨用这个思路搞……但没有准备下载线。。
2013-10-14 15:48
0
雪    币: 75
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
玩硬件的大神真伤不起
2013-10-14 16:02
0
雪    币: 822
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
11
膜拜搞硬件的大大
2013-10-14 16:13
0
雪    币: 30
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
运气好,里面的程序可以读出来,如果不让读了就不好办了....
2013-10-14 16:16
0
雪    币: 680
活跃值: (68)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
好无力。。楼主把我带走吧
2013-10-14 16:50
0
雪    币: 3
活跃值: (449)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
顶何总,膜拜大神
2013-10-14 18:20
0
雪    币: 40
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主V5,我买了一个错的编程器,用progisp读不出来程序,说是找不到USB,看了楼主的贴,又重新上淘宝买了一个编程器,过两天到了再测试下。
2013-10-14 18:42
0
雪    币: 30
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
可能是驱动没装好吧?
2013-10-14 18:45
0
雪    币: 6
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
作为Syscan360_Babge的设计师,不得不承认,楼主的分析OK,可以看出这位也是个硬件方面造诣很深的达人。

此次设计因为时间很仓促,而且开始是打算做成开源硬件的,所以用的avr方案,而且LED部分是可以让大家自定义的,让每个人都能有自己的特效,所以那部分的代码是没有加密的。

这个设计的亮点其实不只是简单的硬件解密,还包括usb名片功能,原来的设想是把解密提示放在那里面,然后通过那个得到提示,再读ID,再解密。后来又考虑到这毕竟是国内首次,为了让更多的参会者能够见识到LED特效,解密的题目和难度都没敢弄太难,还加了提示功能,也就是所谓的暴力破解,每试出4位密码就会亮4个灯。

总体而言,此次设计,只是差强人意,但在会场看来,还是很有亮点的。下一代的设计,已经有基本方案了,相信到时候会让参会者耳目一新,而且,下一代的难度会因人而异哦,有兴趣的可以挑战高难度~~

PS:下一代用的芯片方案再想这样分析,估计是有点麻烦的哦 嘿嘿
2013-10-14 19:34
0
雪    币: 62
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
必须膜拜
2013-10-14 19:42
0
雪    币: 8277
活跃值: (642)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
膜拜楼主,楼主硬件功力深厚,麻烦问一下,楼主是做什么开发的?很好奇,楼主原来发的帖子也都是偏硬件的,楼主是做单片机程序开发的吗?
2013-10-14 19:56
0
雪    币: 7
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
何总厉害啊,我都看不懂了...悲剧了,什么时候单独辅导一下啊。
2013-10-14 20:50
0
雪    币: 198
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
为毛要给美女打上马赛克啊!文章没看懂,像看看美女都不行,楼主你故意的吧,故意的吧,意的吧,的吧,吧
2013-10-14 21:21
0
雪    币: 198
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
哇塞,看雪水好深啊,射击湿都从这里出来换气了,
2013-10-14 21:24
0
雪    币: 6
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主是做逆向的吧,看他发的帖子,反编译加密解密功底很深啊,恩,估计会场的5s就他拿的,期待下一次的pk~~ 哈哈
2013-10-14 22:44
0
雪    币: 30
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
24
国内首创做的很不错了,要考虑的10分钟内破解确实不能搞太复杂,....估计明年的不会这么容易就把程序读出来了....
2013-10-14 23:24
0
雪    币: 30
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
25
没有参加会议.....
2013-10-14 23:27
0
游客
登录 | 注册 方可回帖
返回
//