stm32id加密
1. 如何用 stm32的單片機 id做加密
由於ID號是不可修改的,你可以先讀出來,然後進行一個演算法,把演算法產生的數據存到FLASH裡面,然後每次程序開始時候把演算法數據讀出來,把ID號進行運算,看看是否匹配,不能匹配,程序停止,否則程序程序正常運行;
2. 如何獲得stm32 cpu的唯一ID
每個型渣碰號的地址不一樣的,但做軟體加密時不要直接地址,不然很容易被破解
#define SOC_STM32F0_ID_ADDR 0x1FFFF7AC
#define SOC_STM32F1_ID_ADDR 0x1FFFF7E8
#define SOC_STM32F2_ID_ADDR 0x1FFF7A10
#define SOC_STM32F3_ID_ADDR 0x1FFFF7AC
#define SOC_STM32F4_ID_ADDR 0x1FFF7A10
#define SOC_STM32F7_ID_ADDR 0x1FF0F420
#define SOC_STM32L0_ID_ADDR 0x1FF80050
#define SOC_STM32L1_ID_ADDR 0x1FF80050
#define SOC_STM32L4_ID_ADDR 0x1FFF7590
#define SOC_STM32H7_ID_ADDR 0x1FF0F420
1,不要在程序中直接出逗梁脊現id地山滲址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0 STM8: 0x4865~0x4870
2, 利用校驗和或是crc對程序區進行校驗,防止改程序
3. stm32加密怎麼可以看出來
stm32加密這樣可以看出來:
1、讀出完整程序段,搜索關鍵位元組E8F7FF1F,因為STM32唯一的96位(12位元組)ID基地址位於0x1FFF7E8,若程序段中涉及ID校驗必然會讀取晶元中ID索引該地址。
2、用工具讀取此晶元該地址的96位(12位元組)ID碼,找到空片區寫入此地址,更改索引地址:例如此晶元ID碼為34FFDA054E50383119651843選取起始地址區域0x80000020,在前四個位元組輸入"34FF1843",後12位元組輸入34FFDA054E50383119651843,晶元中索引的E8F7FF1F均改成20000008,這是常用軟加密的去除方法。
4. 單片機原理的加密方法
科研成果保護是每一個科研人員最關心的事情,加密方法有軟體加密,硬體加密,軟硬體綜合加密,時間加密,錯誤引導加密,專利保護等措施有矛就有盾,有盾就有矛,有矛有盾,才促進矛盾質量水平的提高加密只講盾,也希望網友提供更新的加密思路,現先講一個軟體加密:利用MCS-51 中A5 指令加密,其實世界上所有資料,包括英文資料都沒有講這條指令,其實這是很好的加密指令A5 功能是二位元組空操作指令加密方法在A5 後加一個二位元組或三位元組操作碼,因為所有反匯編軟體都不會反匯編A5 指令,造成正常程序反匯編亂套,執行程序無問題仿製者就不能改變你的源程序。
硬體加密:8031/8052單片機就是8031/8052掩模產品中的不合格產品,內部有ROM,可以把8031/8052 當8751/8752 來用,再擴展外部程序器,然後調用8031 內部子程序當然你所選的同批8031晶元的首地址及所需用的中斷入口均應轉到外部程序區。
硬體加密
用高電壓或激光燒斷某條引腳,使其讀不到內部程序,用高電壓會造成一些器件損壞重要RAM 數據採用電池(大電容,街機採用的辦法)保護,拔出晶元數據失去機器不能起動,或能初始化,但不能運行。
用真假方法加密
擦除晶元標識
把8X52單片機,標成8X51 單片機,並用到後128B的RAM 等方法,把AT90S8252 當AT89C52,初始化後程序段中並用到EEPROM 內容,你再去聯想吧!
用激光(或絲印)打上其它標識如有的單片機引腳兼容,有的又不是同一種單片機,可張冠李戴,只能意會了,這要求你知識面廣一點 。
用最新出廠編號的單片機,如2000 年後的AT89C 就難解密,或新的單片機品種,如AVR 單片機。
DIP 封裝改成PLCC,TQFP,SOIC,BGA等封裝,如果量大可以做定製ASIC,或軟封裝,用不需外晶振的單片機工作(如AVR 單片機中的AT90S1200),使用更復雜的單片機,FPGA+AVR+SRAM=AT40K系列。
硬體加密與軟體加密只是為敘說方便而分開來講,其實它們是分不開的,互相支撐,互相依存的軟體加密:其目的是不讓人讀懂你的程序,不能修改程序,你可以………….....
利用單片機未公開,未被利用的標志位或單元,作為軟體標志位,如8031/8051有一個用戶標志位,PSW.1 位,是可以利用的程序入口地址不要用整地址,如:XX00H,XXX0H,可用整地址-1,或-2,而在整地址處加二位元組或三位元組操作碼,在無程序的空單元也加上程序機器碼,最好要加巧妙一點用大容量晶元,用市場上模擬器不能模擬的晶元,如內部程序為64KB 或大於64KB 的器件,如:AVR 單片機中ATmega103 的Flash 程序存儲器為128KBAT89S8252/AT89S53中有EEPROM,關鍵數據存放在EEPROM 中,或程序初始化時把密碼寫到EEPROM 中,程序執行時再查密碼正確與否,盡量不讓人家讀懂程序。關於單片機加密,講到這里,就算拋磚引玉。
5. STM32破解有多難
現在寫昌轎程序,STM都有好多死加密的程序了。比如讀取耐源肆晶元唯一編碼,然後再根據這些燒寫程序。這些東西,一個程序就只能在這個芯裂知片運行,解密成本大,結果還沒有用,多費力啊。
6. STM32的加密庫在哪兒
關於STM32加密
摘要:
知識產權的保護,如何讓自已辛勤的勞動成果不被別人抄襲,採用有效的手段對IC加密是值得每一個設計者關注的問題。
當然,有人說,沒有解不了密的IC,的確,解密是一項技術,只要有人類在不斷的研究,它就有破解的一天;但是加密後的IC會增加破解的難度與破解成本,當破解的成本大於收益時,自然就會使破解者望而卻步。
STM32晶元這兩年銷量很好,它的性能和價格都很不錯,但如何對STM32進行加密呢,本人結合自已使用STM32 MCU一年多的經驗,總結一下我對它加密的理解與方法。
關鍵字: STM32 加密 讀保護
加密,最基本的方法是置讀保護,這樣可以防止外部工具非法訪問,在STM32官網發布的 串口ISP軟體中有置讀保護和加密選項,選擇一個就可以了,這樣外部工具就無法對FLASH進行讀寫操作,但我要重新燒寫FLASH怎麼辦?只能清讀保護,而清讀保護後,晶元內部會自動擦除FLASH全部內容。
還有人說,置讀保護還不夠安全,說要採用晶元內的唯一ID來加密,在程序里識別晶元的ID,如果ID不對,則程序不運行,當然,這樣安全性又要更高一些,但每個晶元的ID不一樣,因此對應的程序也應該不一樣,那如何處理呢?有網友說:采購的時候,產品同批生產的ID號應該是連續的,可以通過判別ID的范圍;還有網友說,在燒錄工具里做一個演算法,讀取晶元ID,再修改相應的二進制文件。當然還會有很多種方法,這里不展開討論。
以上介紹的只是一種情況,在實際的應用中還會發生第二種情況。
我們知道,STM32的內部FLASH是用戶可編程的,也就是說它支持IAP,而IAP中的APP代碼一般是需要開放的,那麼只有保證BOOT的代碼安全,才能確保不被破解。
前面提到,當IC置讀保護後,外部工具不能訪問內部FLASH,但CPU可以訪問,破解者完全可以自已編寫一段代碼通過BOOT下載到IC 運行,然後在程序中讀出你的BOOT代碼。
只能加以限制,使別人的代碼運行不了,才能保證BOOT不被讀出。
常用的方法是採用加密演算法,如AES;流程如下:
APP代碼加密,下載時,在BOOT中解密,這樣,只有通過正確加密的APP代碼才能正常的運行,因此加密的演算法就成了你的密鑰,而這個是你獨有的。
參考資料:《STM32F1x Flash Programming.pdf》作者:STMicroelectronics
7. 怎樣對STM32加密,防止被讀出復制
1,如果板子上有外部存儲器,可以先編寫一個程序,利用演算法把id計算得到一些值存入外部存儲器,然後再燒寫真正的程序,真正的程序去校驗外部存儲器的數據是否合法即可
2,利用板子上按鍵組合,或是上電按住某些鍵,程序在這個時候利用演算法把id計算得到一些值存入程序區(stm8為EE區),程序運行時去驗證程序區數據是否正確
3,軒微編程器有軟體加密的功能,編程器會讀晶元id,根據演算法直接改寫緩沖區,達到軟體加密的作用
4,讀出的id通過一定演算法,例如異或加上一個數,得到的數據存入flash(只運行一次,運行後標志位也存入flash),下次讀到這個標志位,就不運行這個程序。
四、做軟體加密時注意
1,不要在程序中直接出現id地址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0 STM8: 0x4865~0x4870
2, 利用校驗和或是crc對程序區進行校驗,防止改程序