前言:
在國內做產品設計開發,很難避免不被抄襲,被仿照。在沒有形成技術壁壘之前,如何防止產品被抄襲是一個不可回避的問題。
一、常規設備
常規設備主要的防護手段有:
-
專利保護
-
加密保護代碼
-
授權校驗
-
持續更新和改進
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文章
19111瀏覽量
304842 -
FlaSh
+關注
關注
10文章
1633瀏覽量
147951 -
嵌入式開發
+關注
關注
18文章
1028瀏覽量
47564 -
代碼
+關注
關注
30文章
4780瀏覽量
68530
原文標題:嵌入式開發,如何防止設備被抄襲?
文章出處:【微信號:玩點嵌入式,微信公眾號:玩點嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論