在國內做產品設計開發,很難避免被抄襲,被仿照。在沒有形成技術壁壘之前,如何防止產品被抄襲是一個不可迴避的問題。
常規裝置主要的防護手段有:
對於一些比較重要的技術發明或是創新,應該儘快申請專利。雖然目前國內對於智慧財產權保護的力度有限,但申請專利還是有用的,至少可以避免專利被別人提前申請,導致自己侵權。
這裡會涉及到加密與效能和成本的平衡,如果對裝置成本不是很敏感,可以新增加密晶片;如果是要對程式進行加密,這可能會影響程式的執行效率。
在產品中引入授權驗證機制,例如使用加密金鑰或者授權證書,以驗證產品的合法性。這可以有效防止未經授權的複製和使用。
及時修復軟體中的漏洞和缺陷,持續進行功能改進和升級。這樣可以讓產品保持競爭優勢,並減少被抄襲的動力。
對於嵌入式裝置而言,主要涉及到結構外觀,硬體電路,嵌入式軟體。除上面介紹的方法,還可以有下面幾種方式,可以增加被抄襲的難度
在嵌入式系統中,不同的處理器,使用不同的交叉編譯工具,程式分割區佈局情況也不一樣,可以增加逆向工程分析難度
正常產品,在量產的時候都應該關閉偵錯串列埠,有兩個目的:
有一些MCU,在它的燒錄器中是可以設定讀保護的,也就是使用工具無法直接讀取MCU裡面的程式。常規的flash也有保護機制,但是保護等級很弱,可以增加加密晶片的方式來避免程式被直接拷貝。但是會影響程式的效率以及增加裝置成本。
在嵌入式系統中,受限於flash容量大小影響,一般都會對執行程式進行格式轉換,再壓縮。執行的時候,先解壓,再進行格式轉換,最後再執行。在這裡可以增加一個步驟,就是加密和混淆,先對關鍵資訊進行加密,然後再轉換,之後再壓縮,這樣可以大大增加逆向分析的難度。
下面以君正廣發的方案進行分析:
君正的執行程式是放置在根檔案系統上,根檔案系統掛載上之後,先進行一些初始化設定,然後就直接執行在根檔案系統的執行程式。拿到一個君正T系列官方的韌體,如果要進行破解,基本的流程應該如下:
這裡涉及到根檔案系統的起始位置和大小。一般而言,根檔案系統會是在一個獨立的分割區,而分割區資訊是可以在boot的引數中去獲取,同時可以獲取到根檔案系統的型別等資訊。對於君正官方的韌體,可以在boot中找到bootargs,bootcmd等資訊:
通過上面可以知道rootfs的大小為6048K,起始位置為5728K = 0X598000
官方打包的操作方法是:
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
檔案可以找到有啟動哪些程式,對應程式放置在什麼位置,最後可以通過反組合等資訊得到想要的資訊。
通過上面對君正官方的設計分析,對於內行的專業工程師,還是比較容易被破解。那可以通過什麼手段增加被破解的難度呢?
加密分為對稱加密和非對稱加密,在嵌入式系統中,比較推薦使用對稱加密的演演算法,比如AES演演算法
編譯打包過程
rootfs_camera.cpio.lzo
打包到韌體包裡裝置執行流程
優缺點
對嵌入式系統而言,關鍵資訊可以是:
加密和解密方式與上面根檔案系統加密方式一樣,區別是在系統執行的不同階段進行解密操作
所有的加密都有被破解的可能,實際設計產品應根據產品行業安全等級去設計不同等級的加密。不提倡大家去抄襲破解別人的裝置,但也應合理地保護好自己的智慧財產權。
持續更新和改進自己的產品設計方案,讓自己的產品和方案形成技術壁壘,這就不會過度的擔心自己產品被抄襲了。