Syscan360会议胸牌破解揭秘
背景
有幸参加今年11月份的上海Syscan360安全会议,会议期间有一个亮点就是360的独角兽团队设计了一款电子badge(胸牌)供参加人员进行破解尝试,类似于美国Defcon上面的那种解密puzzle的比赛,在参会现场的人都可以参加这种破解,总共9道题,规则是现场会给每道题谜面,在这块胸牌上面输入正确的谜底才能进入下一题,解题需要开脑洞,有好些人参与破解,而且有好些人都解出来了,今天笔者从这块胸牌的硬件和软件层面去揭密这个胸牌的一些有意思的功能和如何在不需要知道谜面的情况下,快速解密答案,算是硬件破解方面抛砖引玉。
初识篇
我这边看到有两块板,一块黑色一块红色,其中黑色如下
硬件配置如下:
MCU: 德州仪器TI CC1310 型号(CC1310F64RGZ)VQFN (48) 7.00 mm × 7.00 mm
ARM Cortex-M3处理器,时钟速度高达48Mhz
64KB片上可编程flash,20KB静态内存SRAM,30个GPIO口
RF Core支持收发1Ghz以下的无线信号
外置存储器: Winbond 25Q32bvsig
32Mbits存储空间
一个LCD液晶屏
四个led灯,若干电阻和电容,6个按键和开关,所有的这些构成一个小型的嵌入式系统
使用方法:
6个按键,分别负责切换不同的可打印的ASCII码,删除,进入和返回等功能
只有所有的关卡通过后才能出现控制闪灯和产生红外信号去关闭遥控电视的功能,这是后话,后面细讲。
硬件篇
要想了解里面的原理和功能,必须得拿到里面的代码逻辑。通过查阅MCU CC1310芯片的数据手册,我们发现它支持jtag仿真调试,我们只需要外挂支持ARM的仿真器,就可以进行整个内存空间的访问和片上动态调试,这一点对于我们逆向来讲非常有帮助,CC1310芯片布局如下。
DIO_16 26 Digital I/O GPIO, JTAG_TDO, high-drive capability
DIO_17 27 Digital I/O GPIO, JTAG_TDI, high-drive capability
我们知道要进行jtag调试需要至少4根信号线分别是TMS,TCK,TDI,TDO,(RST可选)最后是GND(接地), 具体JTAG的定义和各个信号线的定义大家可以网上搜索,我就不赘述了,找到这几个信号线接到相应的仿真器上就可以进行调试了。
从该MCU的电子手册我们得知这四个信号线的Pin脚位置如下。
TMS——24
TCK——25
TDO——26
TDI——27
然后我们可以通过万电表量出这几个引脚引出来的位置,刚好这板子已经把这几个信号脚引出来了,也省去我们不少麻烦。
好了,焊好线后,需要我们的仿真器出场了,笔者使用的ft2232h mini module,当然大家也可以选用别的仿真器,像jlink之类的,简单说一下这个mini module,它是一个多硬件协议(MPSSE)集一身的小模块,比如SPI/JTAG/I2C等,共用GPIO口,非常方便,接下来就是连线了,连接图如下。
右边是mini module CN-2接口Pin脚,左边是CC1310的引脚,GND随便找一个板子接地的地方接上就好了。
下面就是ft2232h mini module
好了,接下来就是激动人心的时刻了。
软件篇
硬件连接准备就绪后,我们开始驱动仿真器来进行片上调试。
调试工具准备如下:
OpenOCD (开源的硬件调试软件)
Arm-none-eabi-gdb (arm版的gdb)
在使用openocd