我正在我的屋子里寻找下一个逆向的潜在目标,很高兴地发现了我的XBox One控制器手柄:
我并没有真正玩过XBox,所以我认为拆掉该控制器手柄并查看可以从中提取什么样的信息可能很有趣。
0x01 分析目标
在评估嵌入式平台时,你可以做或尝试完成许多事情,在这篇文章中,奇热我想测试以下内容:
1. 可以从目标中提取固件吗?
2. 目标是否可以通过调试或检测的方式使我们能够了解其内部操作的更多信息?
3. 是否可以通过软件开发或硬件修改来修改或更改固件?
回答其中一些问题的第一步将是硬件拆解。
0x02 硬件拆解
打开外壳可以看到以下PCB:
请注意,由于主芯片上涂有环氧树脂,因此这里实际上看不到太多东西。对我们来说幸运的是,许多测试板都被标记了,但是被标记的板似乎是各种按钮按下的测试点,因此没有什么令人兴奋的地方。
电路板底部有一个标记为AK4961的IC,但这是音频编解码器芯片。数据表可以在这里找到。该芯片是有麦克风,耳机和扬声器放大器的低功耗24位立体声编解码器。
https://www.digikey.com/product-detail/en/akm-semiconductor-inc/AK4951EN/974-1064-1-ND/5180415
但是,如果我们仔细看,可以看到上面带有一些丝网印刷标签:
于是我们看到3V3,A13,A14,RES标记在丝网印刷。如果你已经阅读了我以前的有关路由器拆除和发现UART的文章,那么你可能已经对如何进行此操作有了一些想法。我们首先用万用表测量每个引脚的电压:
RES,A14或A13上没有波动或调制,因此肯定是其他原因,但那又是什么呢?假设其中一个标签是RES(可能表示系统重置),那么很有可能存在JTAG或SWD标头。
我们可以通过RES使用10k电阻将其拉低来测试该引脚是否真的将目标复位。如果你不熟悉这些类型的接头连接器或系统复位引脚的典型工作方式,它们通常为低电平有效,这意味着它们以高电平空闲并且必须拉低才能激活。因此,如果我们监控输出dmesg -w并使用10k电阻将该线切换为低电平,我们会看到什么?
[ 2108.588884] usb 1-6.4: new full-speed USB device number 10 using xhci_hcd [ 2108.691108] usb 1-6.4: New USB device found, idVendor=0e6f, idProduct=02a2, bcdDevice= 1.0f [ 2108.691113] usb 1-6.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2108.691116] usb 1-6.4: Product: PDP Wired Controller for Xbox One - Crimson Red [ 2108.691119] usb 1-6.4: Manufacturer: Performance Designed Products [ 2108.691122] usb 1-6.4: SerialNumber: 0000AE38D7650465 [ 2108.698675] input: Generic X-Box pad as /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.4/1-6.4:1.0/input/input25 [ 2131.403862] usb 1-6.4: USB disconnect, device number 10 [ 2133.420350] usb 1-6.4: new full-speed USB device number 11 using xhci_hcd [ 2133.522469] usb 1-6.4: New USB device found, idVendor=0e6f, idProduct=02a2, bcdDevice= 1.0f [ 2133.522474] usb 1-6.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2133.522478] usb 1-6.4: Product: PDP Wired Controller for Xbox One - Crimson Red [ 2133.522480] usb 1-6.4: Manufacturer: Performance Designed Products [ 2133.522483] usb 1-6.4: SerialNumber: 0000AE38D7650465 [ 2133.530103] input: Generic X-Box pad as /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.4/1-6.4:1.0/input/input26
这样做会使控制器复位,降低了1针,还剩下2针。
当查看这样的调试头时,通常的假设是它用于JTAG或某种其他形式的硬件级调试。然而,JTAG规格要求有至少4个引脚,TDO,TDI,TMS和TCK。我们的目标上只有两个,因此很有可能这是一个单线调试(SWD)端口。
0x03 SWD协议
SWD是用于ARM Cortex目标的通用调试接口。顾名思义,SWD仅需要一条数据线和一条时钟线,但是我们如何确定哪一条呢?在分析之前,我们应该多了解一些SWD的工作原理以及可以使用哪些工具与之交互。
首先,SWD与称为“调试访问端口”(DAP)的接口连接。DAP代理访问各种“访问端口”(AP),这些端口提供的功能包括典型的硬件调试ÿ