[开发工具] 【PW200烧录器评测】三:UID离线授权加密

[复制链接]
1089|5
 楼主| 数码小叶 发表于 2020-7-12 15:36 | 显示全部楼层 |阅读模式
本帖最后由 数码小叶 于 2020-7-11 11:32 编辑

前面已经体验了PW200的基本烧录调试功能,但是PW200的主要特色是加密,加密分为:在线授权、离线授权、IcwKey三种,可以体验的是在线授权和离线授权。
这一篇体验的是离线加密,打开PowerWriter的烧录器Tab标签,UID加密设置



Snipaste_2020-07-08_16-04-48.jpg

加密模式选择“内置离线授权”,选择后可以设置的就是密钥地址、用户密码、Matrix编码。
用户密码有一点不太友好,不能全部显示出明码,要点一个输入框才能看到那一个框的密码。

离线授权主要的重点是Matrix编码设置,自动的按键有随机生成,检查代码,导出编码,编译并保存

Snipaste_2020-07-08_16-20-52.jpg


检查代码可以检查出哪些项没有用到,同时这个加密矩阵是可以手动编辑的,手动加入这些项以及符号。

Snipaste_2020-07-08_16-21-21.jpg

Snipaste_2020-07-08_16-21-57.jpg

导出源码就是导出MDK工程,编译保存反而是同步到PW200,按钮命名“编译并保存”有点不太容易让人直白的理解按键功能。
这个导出的工程,实际是不能直接使用的


Snipaste_2020-07-08_16-22-16.jpg


生成的模板里的启动文件是F1芯片,但是打开生成的文件里面又是正确的F4芯片,工程里包含的也是F1,所以需要自己新建工程。

Snipaste_2020-07-08_16-33-22.jpg

Snipaste_2020-07-08_16-33-37.jpg

这里还有一个问题,就是密钥地址,如果按照用户手册写的

Snipaste_2020-07-08_16-38-53.jpg

这个地址是会根据目标芯片而改变的,实际测试,确实一直保持不变的

Snipaste_2020-07-08_16-34-48.jpg

Snipaste_2020-07-08_16-35-39.jpg

打开cortex_chipid_binding.c,可以看到刚才生成的加密矩阵,默认使用的不是直接生成的加密矩阵,二是加入了花指令的矩阵,增加破译难度。

Snipaste_2020-07-08_16-40-58.jpg

手动新建一个工程,工程只保留基本的串口打印功能,测试通过后,在工程中加入m_serial_number的定义,主要是验证下实际地址和map文件的一致性。

Snipaste_2020-07-09_09-41-01.jpg

map文件中的地址0x080015AC,打开PowerWriter,添加刚刚生成的固件,查看0x080015AC的数据

Snipaste_2020-07-09_09-41-54.jpg

Snipaste_2020-07-09_09-44-43.jpg

数据确实是我们定义的“5A A5 A5 5A”

再将生成的两个加密文件,cortex_chipid_binding.c和cortex_chipid_binding.h添加到工程中,

Snipaste_2020-07-09_09-49-45.jpg

在主函数中添加验证和相应的执行信息,根据打印信息可以知道密码验证是否通过。

Snipaste_2020-07-09_10-05-22.jpg

编译、下载后,打开串口助手


Snipaste_2020-07-09_10-05-58.jpg
根据串口打印信息,可以知道,密码验证没过

Snipaste_2020-07-09_10-25-05.jpg

反复测试检查多次,依旧失败,最后才发现,这个"智能自动编程"
Snipaste_2020-07-09_10-28-28.jpg
原本以为这个和“自动编程”的区别只是擦除的flash范围不一样,结果却是差的不是一点点,智能自动编程会下载所有的内容,包括包括 SN和 Matrix 绑定数据。之前一直失败的原因就是在这,用“智能自动编程”后,程序验证通过

Snipaste_2020-07-09_10-28-02.jpg

最后来看下两个读回来的密钥区内容对比
Snipaste_2020-07-09_10-26-22.jpg

Snipaste_2020-07-09_11-28-57.jpg

可以看到通过PowerWriter授权后,读取的flash内容已经改变了。是不是这个读取回来的文件已经包含离线授权呢?那就来测试下,先把授权通过的芯片读取回的文件保存,为了排除影响,关闭PowerWriter、写入其他Matrix编码、再往芯片里烧写个未经授权的文件、串口提示密钥验证失败,说明一起都排除了,再次烧录经过授权的文件,程序验证通过

Snipaste_2020-07-11_11-22-40.png

又测试几次,效果依旧
所以说这个UID离线授权加密只要经过一次PowerWriter授权后就失去保护作用了么,或者说我就没有理解这个UID离线授权加密的意义


 楼主| 数码小叶 发表于 2020-7-20 13:06 | 显示全部楼层
本帖最后由 数码小叶 于 2020-7-20 13:07 编辑

今天在和技术讨论在线授权的时候,说到这个加密,猛然意识到问题的答案了,第一个问题,地址是否更新,再次验证了,说明确实是不变的

按照技术说的,根据容量变化而变化,选择两个不一样的,实际结果就是不变
512KB的STM32F446RE:

Snipaste_2020-07-20_12-35-21.jpg


Snipaste_2020-07-20_12-42-07.jpg


256KB的STM32F411RC:
Snipaste_2020-07-20_12-36-47.jpg

Snipaste_2020-07-20_12-41-29.jpg

第二个问题,为什么失去保护作用了,实际是自己在排除影响因素的时候,只排除了软件影响,忘了UID加密的根本含义,一直在一块芯片上操作,换一块芯片就对了


Snipaste_2020-07-20_13-00-46.jpg

gejigeji521 发表于 2020-7-20 21:15 | 显示全部楼层
没有用过啊
天灵灵地灵灵 发表于 2020-7-20 23:51 | 显示全部楼层
看起来给力啊。
AlexChiu 发表于 2020-7-21 21:41 | 显示全部楼层
打怪继续 。。。
huahuagg 发表于 2020-7-24 10:25 | 显示全部楼层
高级产品
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

2560

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部