之前讨论过,如何在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。
https://whycan.com/t_6507.html
里面利用了AES256,SHA256,ECDSA256,LZ4等算法来实现防盗版,也就是mkz工具所做的工作。
防盗版最优的方案,肯定是绑定应该ID,然后一台机器一个镜像。为了做到一台机器一个镜像,这里利用上前段时间开发的xfel工具。结合bat脚本可以很方便的实现批量生产工具。
那么该如何实现量产方案了。
先说一下思路,芯片进入fel模式后,xfel工具可以获取芯片的唯一ID,根据唯一ID,通过mkz工具可以制作一个专用镜像,然后再通过xfel工具,将镜像烧录至spi nor flash。
windows下批处理脚本
@echo off
@set UNIQUEID=""
@set ENCRYPT_KEY="679408dc82ae80d411d5d9720b65a43fc4f1534fa563fb28c6cd8928e46aaae9"
@set PUBLIC_KEY="03cfd18e4a4b40d6529448aa2df8bbb677128258b8fbfc5b9e492fbbba4e84832f"
@set PRIVATE_KEY="dc57b8a9e0e2b7f8b4c929bd8db2844e53f01f171bbcdf6e628908dbf2b2e6a9"
@set MESSAGE="https://github.com/xboot/xboot"
@for /f "delims=" %%i in ('xfel.exe sid') do (set UNIQUEID=%%i)
@echo %UNIQUEID% | findstr "ERROR" > nul && (
@echo ERROR: Can't found any FEL device
) || (
@echo Unique ID:
@echo %UNIQUEID%
@mkz.exe -majoy 3 -minior 0 -patch 0 -r 24576 -k %ENCRYPT_KEY% -pb %PUBLIC_KEY% -pv %PRIVATE_KEY% -m %MESSAGE% -g %UNIQUEID% -i %UNIQUEID% xboot.bin xboot.bin.z
@xfel.exe spinor write 0 xboot.bin.z
@xfel.exe reset
)
@pause
最近编辑记录 xboot (2021-06-25 21:39:47)
离线
防盗版最关键的就是保护aes 加密key,这里aes加密key每台机器都不一样,通过某种算法,根据唯一ID,自动生成aes加密key。
离线
板子上电进入fel模式,然后双击bat文件,等待烧录完成即可。
最近编辑记录 xboot (2021-06-25 21:45:26)
离线
此方案有一定的通用性,只要xfel能支持的芯片,都可以实现一机一镜像量产方案。
离线
提供一个在linux平台下编译xfel windows版本的步骤,用此步骤编译出来的xfel.exe体积较大,而且在使用时需要在xfel.exe文件旁边放置一个libusb-1.0.dll,还是建议大家用晕哥的方案,直接用VS2017直接来编译xfel.exe,这样编译出来的体积小,无需依赖libusb-1.0.dll文件。
1, Install some build tools
sudo apt install mingw-w64
sudo apt install autoconf
sudo apt install libtool-bin
2, Download and install libusb
git clone https://github.com/libusb/libusb.git
cd libusb
./autogen.sh
./configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32/
make
sudo make install
3, Download and build xfel source code
git clone https://github.com:xboot/xfel.git
cd xfel
CROSS=i686-w64-mingw32- make
执行这三步后,就可以生成xfel.exe,拷贝到window平台即可使用了(注意旁边放置一个libusb-1.0.dll文件)。
最近编辑记录 xboot (2021-06-27 17:00:58)
离线
当前xfel git源码树,已补全全志各种常用soc,现在的支持列表如下:
static struct chip_t * chips[] = {
&a10,
&a13_a10s_r8,
&a20,
&a23,
&a31,
&a33_r16,
&a40i_r40,
&a64,
&a80,
&a83t,
&d1,
&f1c100s_f1c200s_f1c500s,
&h3_h2,
&h5,
&h6,
&h616,
&r329,
&t507,
&v3s_s3,
&v831,
};
离线
提供一个基于当前git源码树,用mingw编译出来的一个版本,里面集成zadig-2.5.exe驱动安装工具。
xfel-git-4f8ae763e9.7z
离线
请教下 XFEL能用于STM32 LPC1788这样的芯片么?
这个xfel肯定是不可以支持STM32 LPC这类芯片的,xfel仅能支持全志的芯片,但思路是相通的,如果芯片厂家提供了usb刷机方式,且拥有执行能力,就是支持exec命令,那么也是可以造一个这样的工具,这些究竟是能做到何种层次,由SOC厂家内置rom的功能决定的,当然还有一个大杀器就是这些芯片都支持jtag,那么基于jtag同样可以实现这些功能。
离线
f1c100s无法支持加密引导,信任链是缺失的,如果spl是可信任的话,那么后面的固件按照设计就是安全的,天生芯片缺陷,也就无能为力了,对于修改id读函数这个也不容易,你仅能修改spl里面的,就是sram中的代码,但无法修改ddr中的读id函数,那个需要有完整性校验,当然spl破了,顺滕摸瓜,是可以解密固件的,解密固件后再分析,修改,重新加密,换签名文件是可以破解的,但这一圈下来,要掉层皮。
离线
xfel v1.1.2版本
xfel-windows-v1.1.2.7z
离线