JTAG串口调试入门

2021-06-01 14,653





0x00.准备工作

PREPARATION


软件部分

SEGGER J-Link V6.98e

硬件部分

H-Link在线仿真器

NUCLEO-746ZG板子


0x01.JTAG/SWD

INTRODUCE


JTAG是联合测试工作组(Joint Test Action Group)的简称,是在名为标准测试访问端口和边界扫描结构的IEEE的标准1149.1的常用名称。此标准用于验证设计与测试生产出的印刷电路板功能。

1.下载器,固件下载到设备中

2.DEBUG,调试模式

3.边界扫描,可以访问芯片内部的信号逻辑状态,还有芯片引脚的状态等

JTAG根本没有标准的接口定义,甚至每家公司定义都不一样,下面是常见的JTAG引脚


在JTAG接口中,最常用的信号有四个,分别是TCK/TMS/TDO/TDI

TCK:测试时钟

TMS:测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式

TDO:测试数据输出,数据通过TDO引 脚从JTAG接口输出

TDI:测试数据输入,数据通过TDI引脚输入JTAG接口


SWD接口,算是一种和JTAG不同的调试模式,使用的调试协议也应该不一样,所以最直接的体现在调试接口上,与JTAG的20个引脚相比,SWD只需要4个(或者5个)引脚,结构简单,但是使用范围没有JTAG广泛,主流调试器上也是后来才加的SWD调试模式。


SWD和传统的调试方式区别:

SWD模式比JTAG在高速模式下面更加可靠。在大数据量的情况下面JTAG下载程序会失败,但是SWD发生的几率会小很多。基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的,只要你的仿真器支持,所以推荐大家使用这个模式。

GPIO刚好缺一个的时候,可以使用SWD仿真,这种模式支持更少的引脚。

板子的体积有限的时候推荐使用SWD模式,它需要的引脚少。

当我们进行调试的时候,只要连接这四个接口就能进行通信。

0x02.H-Link烧录

         Jlink固件

INTRODUCE



如果使用正版的J-Link可以直接使用SEGGER J-Link使用,但是由于我们使用的国内的H-Link,我们需要烧录J-Link的固件,烧录过程如下

H-Link 默认为离线烧录模式,调试需要进在线模式

驱动安装完毕,再运行jlinkDownloader.exe

默认会进行烧录,烧录成功


这里由于H-Link已经烧录成功,所以看不到HP_CMSIS_DAP串口了,但是查看管理接口,可以看到对应的接口

接下来,就能使用SEGGER J-Link进行调试了


0x03.JTAG调试

DEBUGGING



查看NUCLEO-F746ZG的手册,可以找到对应的SWD引脚的位置及功能

在H-Link的后面,我们可以看到H-Link的引脚对应关系

接下来,我们只需要根据连接线序将对应的引脚使用杜邦线连接即可,连接线序可以参考:

连接完成的效果如下:

现在,我们已经连接成功,接下来使用SEGGER J-Link Commander和调试器H-Link建立连接即可

:进行连接之前将测试的板子进行通电

接下来,我们使用connect进行连接,输入?选择对应芯片的型号,这里使用的芯片是STM32F746ZG

选择完毕,我们选择使用使用SWD进行通信,使用默认的4000kHz,这里的speed可以根据情况进行自定义设置

这里我们输入?,进行SWD接口连接,看到如下内容可以确定,SWD接口已经连接成功

使用?可以查看可以使用的命令


0x04.J-Link固件提取

EXTRACT


上面我们已经成功使用J-Link连接设备,接下来进行固件的提取。

为了提取固件,我们需要找到芯片的对应手册,我们可以在https://www.datasheet5.com/网站上查找,这里我们查找的是STM32F746ZG的数据手册,查看内存布局情况如下:


由于范围有限,这里只展示关键的位置,固件存储的地址从0x8000000起始。

这里我们使用mem将对应的内存位置的数据进行输出显示

这里我们只显示50字节。由于这个固件是我们自己编译的,我们使用Sublime Text将编译的固件以十六进制的形式打开得到如下内容:

可以看到固件的十六机制数据与内存中的前50字节移植,所以,这也就说明,0x8000000处存储的就是我们的固件。


我们根据Flash的实际内存布局0x8000000~0x80FFFFF,得到整个大小为0xFFFFF,我们直接使用savebin直接全部Dump下来

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

我们在jlink软件的安装目录下,可以看到DUMP下来的的aaa文件,使用Sublime Text打开查看

可以看到数据和之前编译的固件一致,往下查看,会看到很多FF。

这是由于我们编译的固件没有0xFFFFF这么大,后面的内容没有覆盖,以FF的形式输出。我们将后面的FF全部删除就能得到最后的固件了。

通过Sublime Text进行文件比较,可以看出没有任何不同。



到这里,固件已经全部提取成功。后面的就是进行二进制的逆向分析即可。




本文作者:0431实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/160020.html

Tags:
评论  (0)
快来写下你的想法吧!

0431实验室

文章数:8 积分: 45

吉林省信睿网络信息安全有限公司 物联网安全我们更专业

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号