在项目开始之前,我想使用 s32k144 进行后门测试验证。
我有一个关于 unsecureProject 的示例代码。(示例_S32K144_验证后门访问密钥_S32DS1.3_v2.zip)
与示例代码和参考手册对比后,我有一些疑问。
1.根据《验证后门访问密钥参考手册》,其内容如下表所示。
FCCOB 编号 0 用于执行命令。
但在代码中,当发出命令时,会使用 FCCOB 编号 4。
所以我很好奇。
FTFC->FCCOB[0x0] = 0x45; // 后门密钥验证命令 (0x45)
FTFC->FCCOB[0x3] = 0x45; // 后门密钥验证命令 (0x45)
哪个才是正确的?
2. 我想检查锁定和解锁(验证后门访问权限)机制。
第一的。使用 T32 设置后门钥匙。(我知道这不是正常的方式。)通常插入代码)
例如) Data.Set SD:0x400 %LE %Long &pwd_Head
数据集 SD:0x404 %LE %Long &pwd_Tail
数据集 SD:0x40C %LE %Long 0xFFFF7FBF
第二。upon RESET, the FSEC register (0x40020002) is initialized with the value stored in the security 字节 of the Flash Configuration Field (0x40C).
问:2-1。这是否意味着设备在 RESET 前一直处于不安全状态,RESET 后,FSEC 寄存器 (0x40020002) 会更新为从 0x40C 读取的值,从而使设备进入安全状态?
第三。验证后门访问权限时,参考手册中提到如下截图所示。
Q. 2-2.这是否意味着 FSEC 寄存器会暂时更改为非安全模式,然后在 RESET 后恢复?On RESET, FSEC 寄存器 (0x40020002) 会再次从 0x40C 读取值,对吗?
问题 2-3。发生此更新时,是否仅更改与网络安全相关的位,还是会覆盖整个 FSEC 字节?
例如,转变是 BF → FE 还是 BF → BE?
3. 根据此描述,一旦密钥不匹配,设备将保持安全状态,直到 RESET 为止。在这种情况下,如果后门访问被禁用,如何重置设备?
4. 当我执行以下命令时:
数据集 AD:0x40020000 %字节 0x30
然后立即使用以下命令将其读出:
Data.Byte(AD:0x40020000)
该值仍然为 0x80。
这种行为背后的原因是什么?它又意味着什么?
==================================================================
所以,我认为
正确的?
另外,后门比较密钥出现在 startup_S32K144.S 中,我是否应该理解为该配置是在进入 main() 之前应用的?
=================================================
使用地址 0x40000100 或 0x40000104 检查不安全状态。
是这样吗?
我在参考手册中找不到任何相关描述。
谢谢。
#s32k144 @后门访问
嗨@LGI ,
A4后续报道:
FSTAT 寄存器位于地址 0x40020000。
如前所述,该寄存器不能以将位设置为 0 到 1 的方式写入。
向位写入“1”只会清除该位(W1C – Write‑1‑to‑Clear)。因此,写入“1”并不会设置一个位;它只会清除已经为“1”的位。
A8后续报道:
这些是 MDM-AP 状态和控制寄存器,只能通过 Arm 调试访问端口 (DAP) 访问。
例如,它在以下脚本中被使用:
此致,
丹尼尔
谢谢你的回答。@danielmartynek
那么,我有一些问题想请教您。
A4。我向地址 0x40020000 写入了 0x30,但是当我读回它时,该值没有变为 0x30,而是保持为 0x80。
这种行为背后的原因是什么?它又意味着什么?
Q8.这实际上与 Trace32 示例有关。
在 S32K144 的 Trace32 示例中,地址 0x40000100 和 0x40000104 用于安全状态信息。
但是,我找不到有关地址 0x40000100 和 0x40000104 的任何信息。这就是我问的重点。
感谢您的支持。
嗨@LGI ,
A1:
它是 FTFC->FCCOB[0x3] = 0x45; // 后门密钥验证命令 (0x45)
因为 FCCOB0 是内存映射中的第 4 个寄存器。
A2:您可以使用编程器/调试器对 Flash 配置字段进行编程,但必须事先擦除该扇区。请注意,批量擦除还会将 FSEC 字节编程为不安全状态。
A2.1:是
A2.2:是
A2.3:仅限 FSEC[SEC]。
A3:MCU 上有许多 RESET 源(RM,25.2.2 系统 RESET 源)。
调试器可以通过置位 Reset_b 引脚 (PTA5) 来重置 MCU。
A4:写入寄存器仅具有 W1C 功能:
Q5:当向 S32K144 中编程数据时,配置值写入 0x400–0x40F 区域。
A5:是的
Q6:当MCU复位或重启时,FTFC寄存器读取存储在0x400–0x40F区域中的配置值,并根据这些设置进行操作。
A6:是的,MCU 会将 Flash 配置字段中的值加载到 FTFC 寄存器中。
Q7:另外,后门比较密钥出现在 startup_S32K144.S 中,我是否应该理解为该配置是在进入 main() 函数之前应用的?
A7:RESET是必需的,但这是编程人员/调试人员在编程后通常会执行的操作。
Q8:使用地址 0x40000100 或 0x40000104 检查不安全状态。这样对吗?
A9:我不是你指的那种人。请详细说明。
此致,
丹尼尔