嵌入式開發,如何防止裝置被抄襲?

2023-06-09 06:01:51

前言

在國內做產品設計開發,很難避免被抄襲,被仿照。在沒有形成技術壁壘之前,如何防止產品被抄襲是一個不可迴避的問題。

(一)常規裝置

常規裝置主要的防護手段有:

  • 專利保護
  • 加密保護程式碼
  • 授權校驗
  • 持續更新和改進

(1)專利保護

對於一些比較重要的技術發明或是創新,應該儘快申請專利。雖然目前國內對於智慧財產權保護的力度有限,但申請專利還是有用的,至少可以避免專利被別人提前申請,導致自己侵權。

(2)加密保護程式碼

這裡會涉及到加密與效能和成本的平衡,如果對裝置成本不是很敏感,可以新增加密晶片;如果是要對程式進行加密,這可能會影響程式的執行效率。

(3)授權校驗

在產品中引入授權驗證機制,例如使用加密金鑰或者授權證書,以驗證產品的合法性。這可以有效防止未經授權的複製和使用。

(4)持續更新和改進

及時修復軟體中的漏洞和缺陷,持續進行功能改進和升級。這樣可以讓產品保持競爭優勢,並減少被抄襲的動力。

(二)嵌入式裝置

對於嵌入式裝置而言,主要涉及到結構外觀,硬體電路,嵌入式軟體。除上面介紹的方法,還可以有下面幾種方式,可以增加被抄襲的難度

  • 打磨關鍵晶片LOGO
  • 關閉偵錯串列埠
  • flash 設定讀保護
  • 對關鍵資訊進行加密和混淆

在嵌入式系統中,不同的處理器,使用不同的交叉編譯工具,程式分割區佈局情況也不一樣,可以增加逆向工程分析難度

(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. 只對關鍵資訊加密

對嵌入式系統而言,關鍵資訊可以是:

  • 某些關鍵演演算法庫
  • 產品序列號等資訊
  • 演演算法模型檔案等

加密和解密方式與上面根檔案系統加密方式一樣,區別是在系統執行的不同階段進行解密操作

  • 優點是不會影響系統的啟動速遞
  • 缺點是相對來說,比較容易被逆向分析

結尾

所有的加密都有被破解的可能,實際設計產品應根據產品行業安全等級去設計不同等級的加密。不提倡大家去抄襲破解別人的裝置,但也應合理地保護好自己的智慧財產權。
持續更新和改進自己的產品設計方案,讓自己的產品和方案形成技術壁壘,這就不會過度的擔心自己產品被抄襲了。

---------------------------End---------------------------
如需獲取更多內容
請關注 liwen01 公眾號