前言:
在国内做产品设计开发,很难避免不被抄袭,被仿照。在没有形成技术壁垒之前,如何防止产品被抄袭是一个不可回避的问题。
一、常规设备
常规设备主要的防护手段有:
-
专利保护
-
加密保护代码
-
授权校验
-
持续更新和改进
1、专利保护
对于一些比较重要的技术发明或是创新,应该尽快申请专利。虽然目前国内对于知识产权保护的力度有限,但申请专利还是有用的,至少可以避免专利被别人提前申请,导致自己侵权。
2、加密保护代码
这里会涉及到加密与性能和成本的平衡,如果对设备成本不是很敏感,可以添加加密芯片;如果是要对程序进行加密,这可能会影响程序的执行效率。
3、授权校验
在产品中引入授权验证机制,例如使用加密密钥或者授权证书,以验证产品的合法性。这可以有效防止未经授权的复制和使用。
4、持续更新和改进
及时修复软件中的漏洞和缺陷,持续进行功能改进和升级。这样可以让产品保持竞争优势,并减少被抄袭的动力。
二、嵌入式设备
对于嵌入式设备而言,主要涉及到结构外观,硬件电路,嵌入式软件。除上面介绍的方法,还可以有下面几种方式,可以增加被抄袭的难度。
-
打磨关键芯片LOGO
-
关闭调试串口
-
flash 设置读保护
-
对关键信息进行加密和混淆
1、打磨关键芯片LOGO
在嵌入式系统中,不同的处理器,使用不同的交叉编译工具,程序分区布局情况也不一样,可以增加逆向工程分析难度。
2、关闭调试串口
正常产品,在量产的时候都应该关闭调试串口,有两个目的:
-
一是,避免调试串口有信号干扰,影响系统稳定性;
-
二是,调试串口一般都会把程序的一些调试和系统信息打印出来,别人可以从这些信息入手进行逆向分析。
3、flash设置读保护
有一些MCU,在它的烧录器中是可以设置读保护的,也就是使用工具无法直接读取MCU里面的程序。
常规的flash也有保护机制,但保护等级很弱,可以增加加密芯片的方式来避免程序被直接拷贝,但会影响程序的效率以及增加设备成本。
4、对关键信息进行加密和混淆
在嵌入式系统中,受限于flash容量大小影响,一般都会对执行程序进行格式转换,再压缩。运行的时候,先解压,再进行格式转换,最后再运行。
在这里可以增加一个步骤,就是加密和混淆,先对关键信息进行加密,然后再转换,之后再压缩,这样可以大大增加逆向分析的难度。
三、君正T系列程序破解
下面以君正广发的方案进行分析:
君正的执行程序是放置在根文件系统上,根文件系统挂载上之后,先进行一些初始化设置,然后就直接运行在根文件系统的执行程序。
拿到一个君正T系列官方的固件,如果要进行破解,基本的流程应该如下:
-
找到根文件系统的位置
-
解压根文件系统
-
恢复文件系统格式
-
找到可执行程序
-
对可执行程序进行反编译等操作
1、找到根文件系统的位置
这里涉及到根文件系统的起始位置和大小。
一般而言,根文件系统会是在一个独立的分区,而分区信息是可以在boot的参数中去获取,同时可以获取到根文件系统的类型等信息。
对于君正官方的固件,可以在boot中找到bootargs,bootcmd等信息:
通过上面可以知道,rootfs的大小为6048K,起始位置为5728K = 0X598000。
2、解压和恢复根文件系统
官方打包的操作方法是:
find . | cpio -H newc -o > ../rootfs_camera.cpio lzop -9 -f rootfs_camera.cpio -o rootfs_camera.cpio.lzo
find . | cpio -H newc -o > ../rootfs_camera.cpio
它是使用cpio
命令将当前文件及其子文件打包成rootfs_camera.cpio
文件,使用的是newc
文件格式。
lzop -9 -f rootfs_camera.cpio -o rootfs_camera.cpio.lzo
它是使用lzop
命令,将rootfs_camera.cpio
压缩成rootfs_camera.cpio.lzo
文件。
如果要逆向操作,可以执行下面命令:
lzop -d rootfs_camera.cpio.lzo cpio -i < rootfs_camera.cpio
lzop -d rootfs_camera.cpio.lzo
将rootfs_camera.cpio.lzo
文件解压到当前目录:
cpio -i < rootfs_camera.cpio
rootfs_camera.cpio
文件中的内容将被解包并恢复为原始的文件和目录结构,这些文件和目录将出现在当前工作目录中。
通过etc/init.d/rcS
文件可以找到有启动哪些程序,对应程序放置在什么位置,最后可以通过反汇编等信息得到想要的信息。
四、如何防止被逆向破解?
通过上面对君正官方的设计分析,对于内行的专业工程师,还是比较容易被破解。那可以通过什么手段增加被破解的难度呢?
1、对整个根文件系统进行加密
加密分为对称加密和非对称加密,在嵌入式系统中,比较推荐使用对称加密的算法,比如AES算法。
编译打包过程:
-
选择AES密钥长度
-
生成密钥
-
使用密钥对文件进行加密
-
将加密的
rootfs_camera.cpio.lzo
打包到固件包里
设备运行流程:
-
kernel 在启动过程中,会将根文件系统拷贝到内存中,然后再进行解压
-
在解压之前,使用打包时的密钥进行解密,之后再按原来流程继续执行。
优缺点对比:
-
优点是可以对整个文件系统进行加密,破解的难度会比较高;
-
缺点是会影响启动速度,如果对于快速启动系统,这种方式会有影响。
2、只对关键信息加密
对嵌入式系统而言,关键信息可以是:
-
某些关键算法库
-
产品序列号等信息
-
算法模型文件等
加密和解密方式与上面根文件系统加密方式一样,区别是在系统运行的不同阶段进行解密操作。
-
优点是不会影响系统的启动速递;
-
缺点是相对来说,比较容易被逆向分析。
结语:
所有的加密都有被破解的可能,实际设计产品应根据产品行业安全等级去设计不同等级的加密。不提倡大家去抄袭破解别人的设备,但也应合理地保护好自己的知识产权。
持续更新和改进自己的产品设计方案,让自己的产品和方案形成技术壁垒,这就不会过度的担心自己产品被抄袭了。
-
嵌入式
+关注
关注
5082文章
19104浏览量
304799 -
FlaSh
+关注
关注
10文章
1633浏览量
147939 -
嵌入式开发
+关注
关注
18文章
1028浏览量
47563 -
代码
+关注
关注
30文章
4779浏览量
68521
原文标题:嵌入式开发,如何防止设备被抄袭?
文章出处:【微信号:玩点嵌入式,微信公众号:玩点嵌入式】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论