前言:
在國內(nèi)做產(chǎn)品設(shè)計(jì)開發(fā),很難避免不被抄襲,被仿照。在沒有形成技術(shù)壁壘之前,如何防止產(chǎn)品被抄襲是一個(gè)不可回避的問題。
一、常規(guī)設(shè)備
常規(guī)設(shè)備主要的防護(hù)手段有:
-
專利保護(hù)
-
加密保護(hù)代碼
-
授權(quán)校驗(yàn)
-
持續(xù)更新和改進(jìn)
1、專利保護(hù)
對于一些比較重要的技術(shù)發(fā)明或是創(chuàng)新,應(yīng)該盡快申請專利。雖然目前國內(nèi)對于知識產(chǎn)權(quán)保護(hù)的力度有限,但申請專利還是有用的,至少可以避免專利被別人提前申請,導(dǎo)致自己侵權(quán)。
2、加密保護(hù)代碼
這里會涉及到加密與性能和成本的平衡,如果對設(shè)備成本不是很敏感,可以添加加密芯片;如果是要對程序進(jìn)行加密,這可能會影響程序的執(zhí)行效率。
3、授權(quán)校驗(yàn)
在產(chǎn)品中引入授權(quán)驗(yàn)證機(jī)制,例如使用加密密鑰或者授權(quán)證書,以驗(yàn)證產(chǎn)品的合法性。這可以有效防止未經(jīng)授權(quán)的復(fù)制和使用。
4、持續(xù)更新和改進(jìn)
及時(shí)修復(fù)軟件中的漏洞和缺陷,持續(xù)進(jìn)行功能改進(jìn)和升級。這樣可以讓產(chǎn)品保持競爭優(yōu)勢,并減少被抄襲的動力。
二、嵌入式設(shè)備
對于嵌入式設(shè)備而言,主要涉及到結(jié)構(gòu)外觀,硬件電路,嵌入式軟件。除上面介紹的方法,還可以有下面幾種方式,可以增加被抄襲的難度。
-
打磨關(guān)鍵芯片LOGO
-
關(guān)閉調(diào)試串口
-
flash 設(shè)置讀保護(hù)
-
對關(guān)鍵信息進(jìn)行加密和混淆
1、打磨關(guān)鍵芯片LOGO
在嵌入式系統(tǒng)中,不同的處理器,使用不同的交叉編譯工具,程序分區(qū)布局情況也不一樣,可以增加逆向工程分析難度。
2、關(guān)閉調(diào)試串口
正常產(chǎn)品,在量產(chǎn)的時(shí)候都應(yīng)該關(guān)閉調(diào)試串口,有兩個(gè)目的:
-
一是,避免調(diào)試串口有信號干擾,影響系統(tǒng)穩(wěn)定性;
-
二是,調(diào)試串口一般都會把程序的一些調(diào)試和系統(tǒng)信息打印出來,別人可以從這些信息入手進(jìn)行逆向分析。
3、flash設(shè)置讀保護(hù)
有一些MCU,在它的燒錄器中是可以設(shè)置讀保護(hù)的,也就是使用工具無法直接讀取MCU里面的程序。
常規(guī)的flash也有保護(hù)機(jī)制,但保護(hù)等級很弱,可以增加加密芯片的方式來避免程序被直接拷貝,但會影響程序的效率以及增加設(shè)備成本。
4、對關(guān)鍵信息進(jìn)行加密和混淆
在嵌入式系統(tǒng)中,受限于flash容量大小影響,一般都會對執(zhí)行程序進(jìn)行格式轉(zhuǎn)換,再壓縮。運(yùn)行的時(shí)候,先解壓,再進(jìn)行格式轉(zhuǎn)換,最后再運(yùn)行。
在這里可以增加一個(gè)步驟,就是加密和混淆,先對關(guān)鍵信息進(jìn)行加密,然后再轉(zhuǎn)換,之后再壓縮,這樣可以大大增加逆向分析的難度。
三、君正T系列程序破解
下面以君正廣發(fā)的方案進(jìn)行分析:
君正的執(zhí)行程序是放置在根文件系統(tǒng)上,根文件系統(tǒng)掛載上之后,先進(jìn)行一些初始化設(shè)置,然后就直接運(yùn)行在根文件系統(tǒng)的執(zhí)行程序。
拿到一個(gè)君正T系列官方的固件,如果要進(jìn)行破解,基本的流程應(yīng)該如下:
-
找到根文件系統(tǒng)的位置
-
解壓根文件系統(tǒng)
-
恢復(fù)文件系統(tǒng)格式
-
找到可執(zhí)行程序
-
對可執(zhí)行程序進(jìn)行反編譯等操作
1、找到根文件系統(tǒng)的位置
這里涉及到根文件系統(tǒng)的起始位置和大小。
一般而言,根文件系統(tǒng)會是在一個(gè)獨(dú)立的分區(qū),而分區(qū)信息是可以在boot的參數(shù)中去獲取,同時(shí)可以獲取到根文件系統(tǒng)的類型等信息。
對于君正官方的固件,可以在boot中找到bootargs,bootcmd等信息:

通過上面可以知道,rootfs的大小為6048K,起始位置為5728K = 0X598000。

2、解壓和恢復(fù)根文件系統(tǒng)
官方打包的操作方法是:
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命令將當(dāng)前文件及其子文件打包成rootfs_camera.cpio文件,使用的是newc文件格式。
lzop -9 -f rootfs_camera.cpio -o rootfs_camera.cpio.lzo
它是使用lzop命令,將rootfs_camera.cpio壓縮成rootfs_camera.cpio.lzo文件。
如果要逆向操作,可以執(zhí)行下面命令:
lzop -d rootfs_camera.cpio.lzo cpio -i < rootfs_camera.cpio
lzop -d rootfs_camera.cpio.lzo
將rootfs_camera.cpio.lzo文件解壓到當(dāng)前目錄:
cpio -i < rootfs_camera.cpio
rootfs_camera.cpio文件中的內(nèi)容將被解包并恢復(fù)為原始的文件和目錄結(jié)構(gòu),這些文件和目錄將出現(xiàn)在當(dāng)前工作目錄中。
通過etc/init.d/rcS文件可以找到有啟動哪些程序,對應(yīng)程序放置在什么位置,最后可以通過反匯編等信息得到想要的信息。
四、如何防止被逆向破解?
通過上面對君正官方的設(shè)計(jì)分析,對于內(nèi)行的專業(yè)工程師,還是比較容易被破解。那可以通過什么手段增加被破解的難度呢?
1、對整個(gè)根文件系統(tǒng)進(jìn)行加密
加密分為對稱加密和非對稱加密,在嵌入式系統(tǒng)中,比較推薦使用對稱加密的算法,比如AES算法。
編譯打包過程:
-
選擇AES密鑰長度
-
生成密鑰
-
使用密鑰對文件進(jìn)行加密
-
將加密的
rootfs_camera.cpio.lzo打包到固件包里
設(shè)備運(yùn)行流程:
-
kernel 在啟動過程中,會將根文件系統(tǒng)拷貝到內(nèi)存中,然后再進(jìn)行解壓
-
在解壓之前,使用打包時(shí)的密鑰進(jìn)行解密,之后再按原來流程繼續(xù)執(zhí)行。
優(yōu)缺點(diǎn)對比:
-
優(yōu)點(diǎn)是可以對整個(gè)文件系統(tǒng)進(jìn)行加密,破解的難度會比較高;
-
缺點(diǎn)是會影響啟動速度,如果對于快速啟動系統(tǒng),這種方式會有影響。
2、只對關(guān)鍵信息加密
對嵌入式系統(tǒng)而言,關(guān)鍵信息可以是:
-
某些關(guān)鍵算法庫
-
產(chǎn)品序列號等信息
-
算法模型文件等
加密和解密方式與上面根文件系統(tǒng)加密方式一樣,區(qū)別是在系統(tǒng)運(yùn)行的不同階段進(jìn)行解密操作。
-
優(yōu)點(diǎn)是不會影響系統(tǒng)的啟動速遞;
-
缺點(diǎn)是相對來說,比較容易被逆向分析。
結(jié)語:
所有的加密都有被破解的可能,實(shí)際設(shè)計(jì)產(chǎn)品應(yīng)根據(jù)產(chǎn)品行業(yè)安全等級去設(shè)計(jì)不同等級的加密。不提倡大家去抄襲破解別人的設(shè)備,但也應(yīng)合理地保護(hù)好自己的知識產(chǎn)權(quán)。
持續(xù)更新和改進(jìn)自己的產(chǎn)品設(shè)計(jì)方案,讓自己的產(chǎn)品和方案形成技術(shù)壁壘,這就不會過度的擔(dān)心自己產(chǎn)品被抄襲了。
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20449瀏覽量
334048 -
FlaSh
+關(guān)注
關(guān)注
10文章
1748瀏覽量
155527 -
嵌入式開發(fā)
+關(guān)注
關(guān)注
18文章
1146瀏覽量
50126 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
73965
原文標(biāo)題:嵌入式開發(fā),如何防止設(shè)備被抄襲?
文章出處:【微信號:玩點(diǎn)嵌入式,微信公眾號:玩點(diǎn)嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于ARM的嵌入式開發(fā)
嵌入式開發(fā)
學(xué)嵌入式開發(fā)入門_學(xué)嵌入式開發(fā)需要看哪些書籍
嵌入式開發(fā)好學(xué)嗎_嵌入式開發(fā)職業(yè)發(fā)展方向是什么
嵌入式開發(fā)的產(chǎn)品有哪些_嵌入式開發(fā)的流程
嵌入式開發(fā)(一):嵌入式開發(fā)新手入門
嵌入式開發(fā)資料免費(fèi)分享
嵌入式開發(fā)Linux入門
python做嵌入式開發(fā)_Python和嵌入式的區(qū)別是什么?可以做嵌入式開發(fā)嗎?
嵌入式開發(fā)培訓(xùn)學(xué)什么?嵌入式開發(fā)板知識講解
嵌入式開發(fā) ---必看圖書
嵌入式開發(fā),如何防止設(shè)備被抄襲?
評論