<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于STM32F103的ID號對應用程序的保護方法

基于STM32F103的ID號對應用程序的保護方法

作者: 時(shí)間:2018-08-01 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/201808/384805.htm

由于現在市場(chǎng)激烈競爭、混亂的市場(chǎng)機制及已失去的市場(chǎng)道德,迫使在產(chǎn)品設計時(shí),必需要考慮到對產(chǎn)品的保護,以防產(chǎn)品的技術(shù)被第三方所用。無(wú)論是從硬件方面來(lái)保護,還是從軟件方面來(lái)保護,都無(wú)法保證產(chǎn)品100%的安全。由于嵌入式系統的特點(diǎn)就是軟件、硬件相結合,才具有實(shí)際的意義,失去任何一個(gè)平臺都是廢品一堆,因此將系統的軟件、硬件結合起來(lái)對產(chǎn)品進(jìn)行加密保護,可靠性會(huì )大大地增加。STM32F103系列ARM處理器芯片就內置了唯一的96位ID號,同時(shí)也有以后備電池為電源的SRAM,還有入侵檢測(打開(kāi)機殼等)功能,以提供這方面的應用需求。

因此可以有幾種產(chǎn)品保護的方法:

1、 將ID號寫(xiě)入內部Flash貯存器

如使用方法,基本思路為:程序首次運行,則檢測ID號存貯區的Flash的數據,以判斷是否需要將該系統的CPU的ID號更新到Flash中。當以后系統再重新啟動(dòng)時(shí),就直接讀取Flash中的ID號并與本機CPU的ID號進(jìn)行比較。但有一點(diǎn)是,該存貯區的數據不能單一化存貯,最好是與系統校正、系統設置、系統參數等數據混合存放在一起,這時(shí),系統離開(kāi)這組數據,也就不會(huì )運行了。該數據在出廠(chǎng)時(shí)由工廠(chǎng)指定寫(xiě)入。這樣一來(lái),就算讀出CPU中的程序代碼,反編譯后,也不清楚這組數據的目的,從而起到對應用代碼的保護作用。

2、 將ID號寫(xiě)入SRAM,并配合電池電源及入侵檢測

該方法可能相對復雜一些?;舅悸窞椋撼绦蚴状芜\行后,設置好后備電源保護的RAM區,并讀出CPU的ID號存貯起來(lái),同時(shí)在應用程序中設置入侵檢測功能。在系統正常運行的情況下,RAM中的ID號始終都能與本機的ID號一致,如有侵入,則可觸發(fā)相應的中斷,刪除RAM中的ID號,但不要清除系統中運行狀態(tài),從而引導應用程序進(jìn)入錯誤的運行狀態(tài),或觸發(fā)系統內核刪除代碼進(jìn)行“自殺”,以保證系統軟件的安全。

對于上述的兩種方法中,如何判定系統為第一次啟動(dòng),只能根據各自的思路來(lái)作為一個(gè)準則,非常規的方法,應該會(huì )相對好一些。而這種應用運態(tài)讀入ID號的方法,不同的CPU有不同的校驗,所以破解CPU的ID號也就失去了任何意義了。

應用的例子:智能液位控制器

應用的是第一種方法:在Flash區域,我開(kāi)了一個(gè)扇區,用來(lái)存貯我的標識符(廠(chǎng)家標識符)、系統參數、CPU-ID、系統是否是第一次運行、自定義數據的CRC代碼。我的代碼程序有兩部份,一部份是應用程序,第二部份是除上述系統參數及CPU-ID以外的數據,而系統首次運行標識是一組特定字符。系統運行時(shí),首先判斷廠(chǎng)家標識符,接著(zhù)判斷系統是否是首次運行,如不是,更新CPU-ID,啟始化系統運行參數,最后破壞掉系統首次運行標識數據,并將新的數據存貯起來(lái)。這之后系統再次運行,則在這一區域就多了很多數據(不看代碼,我自己也不知道這些數據是些什么東西),每次啟動(dòng),系統都會(huì )校驗CPU-ID,從面每一個(gè)系統,在每一臺設備上都有一個(gè)唯一的標識符。

可能的破解分析:

1、 如有人直接抄板后,讀出CPU程序后,只寫(xiě)第一部份數據,不寫(xiě)入第二部份數據,則系統無(wú)法識別廠(chǎng)家標識符,則系統不運行。

2、 如有人直接抄板后,讀出CPU全部程序數據,則第二部份數據對于新的系統無(wú)效,程序不會(huì )正常運行

3、 如有人想分析第二部份數據,也不會(huì )有任何結果。因為離開(kāi)原來(lái)的系統,數據無(wú)任何意義。

4、 由于CPU-ID號是無(wú)法再重新更改的,CPU-ID無(wú)法進(jìn)行復制而使其一致。

以上的方法,僅是個(gè)人的一些思維方式而已,是否有效,還需要各位提出各自的意見(jiàn),來(lái)整改修繕以達到較好的一種效果。對于如何更有效的對產(chǎn)品進(jìn)行保護,相信不同的人、不同的應用,會(huì )有不同的處理方法。沒(méi)有絕對的保護,只有更多的方法,以萬(wàn)變應萬(wàn)變了。

讀取STM32F103的ID號的代碼如下:

/*

功能描述: 讀取STM32F103 CPU序列號

輸入參數:無(wú)

輸出參數:返回STM32處理器96位長(cháng)度的序列號

聯(lián)合嵌入式中心提供:http://www.uectr.com

*/

void Get_SerialNum(unsigned int* SerialID)

{

SerialID[0] = *(unsigned int*)(0x1FFFF7E8);

SerialID[1] = *(unsigned int*)(0x1FFFF7EC);

SerialID[2] = *(unsigned int*)(0x1FFFF7F0);

}

//使用方法:

u32 Device_Serial[3];//用以存貯96位ID號

Get_SerialNum(Device_Serial);//讀取ID號



關(guān)鍵詞: 單片機 程序保護

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>