當前位置:首頁 » 密碼管理 » stm8s加密

stm8s加密

發布時間: 2022-06-13 22:38:22

1. STM8S系列程序示例

/*********************************************
* STM8S105* TIM2 TIM3輸出PWM PD0 PD3 TIM3輸出PWM,*********************************************/#include "STM8S105K.h"
#include "STM8S105_CLOCK.h"
typedef unsigned char u8;
typedef unsigned int u16;u16 value;
/*******************************************************************************
*** 函數名 : void SystemInit(void)
*** 功能描述: 系統初始化
*** 函數說明: 系統全局初始化
******************************************************************************/
void SystemInit(void)
{ SystemClock_Init();
CLK_PCKENR1 |= 0x60; //使能TIM2與TIM3與主頻連接

PD_CR2 |= 0x80; //使能PD7口外部中斷
}
/*******************************************************************************
*** 函數名 : void main(void)
*** 功能描述: 主函數
*** 函數說明:
******************************************************************************/
void GPIO_init(void)
{
PD_DDR = 0x1F; //配置PD埠的方向寄存器全輸出
PD_CR1 = 0x1F; //設置PD為推挽輸出
PB_DDR|= 0x04; //PB2輸出
PB_CR1|= 0x04; //PB2推挽輸出
PB_ODR|= 0x04; //開5V電源
}
void TIM2_init(void) //TIM2 CH1 工作於模式1
{
// TIM2_CCMR2= 0x60; // PWM 模式 1
TIM2_CCMR1= 0x60; // PWM 模式 1,TIM2 CH1
TIM2_CCER1= 0x03; // CC1配置為輸出
//TIM2_CCER2= 0x03; // CC3使能
TIM2_ARRH = 0x03; // 配置PWM解析度為10位,ARR=0x3FF
TIM2_ARRL = 0xFF; // PWM頻率=8M/0x03FF=7820Hz
TIM2_CR1 |= 0x01; // 計數器使能,開始計數
}

void TIM3_init(void) //TIM3 CH1 ch2工作於模式2,1
{
TIM3_CCMR1= 0x70; //PWM模式2
TIM3_CCMR2= 0x60; // PWM 模式 1
TIM3_CCER1= 0x33; // CC1 CC2配置為輸出,CH1 CH2

TIM3_ARRH = 0x03; // 配置PWM解析度為10位,ARR=0x3FF
TIM3_ARRL = 0xFF; // PWM頻率=8M/0x03FF=7820Hz
TIM3_CR1 = 0x01; // 計數器使能,開始計數
} void Run(void)
{ //TIM2_CCR2H = (unsigned char)(value>>8); // 更新CC2比較寄存器
//TIM2_CCR2L = (unsigned char)(value);
TIM2_CCR1=value;
//TIM2_CCR3=value;
TIM3_CCR2=value;
TIM3_CCR1=value; //注意每個通道都要設CCR
} void init_devices(void)
{
_asm("sim");
SystemInit();
GPIO_init();
TIM2_init();
TIM3_init();
_asm("rim");
} void main( void )
{
init_devices();
while(1)
Run();

} /****************************************************************************
*** 函數名 : @near @interrupt void TLI_IRQHandler (void)
*** 功能描述: 中斷服務程序
*** 函數說明:
*****************************************************************************/
@near @interrupt void TLI_IRQHandler (void) {
PD_CR2 &= 0x7F; //關PD7外部中斷
value+=50;
while(value>1000)
value=0; PD_CR2 |= 0x80; //使能PD7口外部中斷
return;
}

2. iar for stm8 晶元如何加密

對代碼保護方面都是存在於Option Byte
最好的修改方式是使用stvp下載,點option byte的各種保護選項。
stvp可以再st官網或者網上下載到

歡迎追問

3. 用st-link v2給STM8S005K6燒錄程序時提示the device is protected請求各位大俠幫忙,謝謝!

加密了,選第三個先解除保護

4. 有沒有用過STM8S系列單片機的,菜鳥大俠都行。有些入門級疑惑

回答都不如人意呀!分還是給自己好了,幾天下來終於有點開竅了。
1,沒有發現類似PIC (bits)的位操作的方法,有庫函數可以做這種操作,不如PIC使用方便
2,interrupt.c的用法:在STDV的安裝目錄下有cosmic tutorial文件夾,裡面有example project可以參考
3,實常式序官網有,但是用到的庫函數cosmic 和toolset里沒帶
有一個firmwarelib的擴展庫函數集,意法半導體官網http://www.st.com/internet/mcu/proct/215110.jsp下載。這些必備的庫函數和頭文件在編譯器里沒集成

5. 單片機原理的加密方法

科研成果保護是每一個科研人員最關心的事情,加密方法有軟體加密,硬體加密,軟硬體綜合加密,時間加密,錯誤引導加密,專利保護等措施有矛就有盾,有盾就有矛,有矛有盾,才促進矛盾質量水平的提高加密只講盾,也希望網友提供更新的加密思路,現先講一個軟體加密:利用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 中,程序執行時再查密碼正確與否,盡量不讓人家讀懂程序。關於單片機加密,講到這里,就算拋磚引玉。

6. STM8S使用IAR編譯時出現SWIM PROG error [4]: Memory write error,自己做的最小系統板子,跪求解答!!

Failed to set configuration with MCU name STM8L151G6: SWIM PROG error [4]: Memory write error
STM8晶元防寫了,需要解除一下防寫,使用STVP這個軟體,打開之後選擇OPTION BYTE 燒寫一下就好

7. 軒微科技 stm8 自定義演算法加密怎麼設定

盡管MASM32為我們提供了一個集成開發環境,

但我個人還是喜歡脫離系統提供的開發環境,己設置相關的環境變數。

這樣有利於掌握匯編語言的文件部署情況,便於深入了解諸如庫在哪裡、包含文件在哪裡、執行程序在哪裡等問題。

8. 單片機加密解密,有沒有很好的辦法來

晶元解密及單片機解密必須要注意的幾點★凱基迪解密
(1)在選定加密晶元前,要充分調研,了解單片機破解技術的新進展,包括哪些單片機是已經確認可以破解的。盡量不選用已可破解或同系列、同型號的晶元,選擇採用新工藝、新結構、上市時間較短的單片機,如可以使用ATMEGA88/ATMEGA88V,這種國內目前破解的費用只需要1萬元左右;其他也可以和CPLD結合加密,這樣解密費用很高,解密一般的CPLD也要1萬左右。
(2)盡量不要選用MCS51系列單片機,因為該單片機在國內的普及程度最高,被研究得也最透。
(3)產品的原創者,一般具有產量大的特點,所以可選用比較生僻、偏冷門的單片機來加大仿冒者采購的難度,選用一些生僻的單片機,比如motorola單片機,目前國內會開發使用熟悉motorola單片機的人很少,所以破解的費用也相當高,從8000~3萬左右。
(4)在設計成本許可的條件下,應選用具有硬體自毀功能的智能卡晶元,以有效對付物理攻擊;另外程序設計的時候,加入時間到計時功能,比如使用到1年,自動停止所有功能的運行,這樣會增加破解者的成本。
(5)如果條件許可,可採用兩片不同型號單片機互為備份,相互驗證,從而增加破解成本。
(6)打磨掉晶元型號等信息或者重新印上其它的型號,以假亂真。
(7)可以利用單片機未公開,未被利用的標志位或單元,作為軟體標志位。
(8)利用MCS-51中A5指令加密,其實世界上所有資料,包括英文資料都沒有講這條指令,其實這是很好的加密指令,A5功能是二位元組空操作指令加密方法在A5後加一個二位元組或三位元組操作碼,因為所有反匯編軟體都不會反匯編A5指令,造成正常程序反匯編亂套,執行程序無問題仿製者就不能改變你的源程序。
(9)應在程序區寫上你的大名單位開發時間及仿製必究的說法,以備獲得法律保護;另外寫上你的大名的時候,可以是隨機的,也就是說,採用某種演算法,外部不同條件下,你的名字不同,比如husoon1011、jisppm1012等,這樣比較難反匯編修改。
(10)採用高檔的編程器,燒斷內部的部分管腳,具體如何燒斷,可以參考:單片機管腳燒斷的方法和破解。
(11)採用保密硅膠(環氧樹脂灌封膠)封住整個電路板,PCB上多一些沒有用途的焊盤,在硅膠中還可以摻雜一些沒有用途的元件,同時把MCU周圍電路的電子元件盡量抹掉型號。
(12)對SyncMos,Winbond單片機,將把要燒錄的文件轉成HEX文件,這樣燒錄到晶元內部的程序空位自動添00,如果你習慣BIN文件,也可以用編程器把空白區域中的FF改成00,這樣一般解密器也就找不到晶元中的空位,也就無法執行以後的解密操作。

9. 最近在看STM8S單片機,頭都大了,想請問下在STM8S中,

你這是在聲明函數原型,所以應當聲明每種參數的類型。
但是當你在聲明這個函數原型的時候,還沒有告訴系統GPIOD等等類型到底是什麼。

另外你這里到底是要聲明原型、還是要調用啊???如果是後者,應當把前面的void去掉。

說白了,這是C語言的基礎能力問題,跟STM8S沒什麼太大關系。

10. 如何實現STM8的程序加密可以使用其RC校驗碼嗎

stm8具有唯一id,可以利用這個id做程序加密

例如


#define ID_ENCRYPT_EOR_RESULT_ADDRESS (0x9ff0)

#define ID_ENCRYPT_ADD_RESULT_ADDRESS (0x9ff4)

void Stm8s103EncryptDemo(void)

{

uint32 *u16IdAddress;

uint16 u32EorRslt, u16AddRslt;

//千萬別顯式的讀取ID,即要把0x4865運算成隱式的,例如此例中0x4865 = (0x1194 * 4) + 0x215;

//這樣,別人就算破解出了你的程序,也查找不到0x4865,這樣就不能輕易的軟解密,這樣處理後如果要軟解密,

//一定要反匯編出來進行復雜逆向分析,難度極大,代價極高,很難搞定軟加密了,達到保護產品的目的。

gU16IdAdressVar = 0x1194;

gU16IdAdressVar <<= 2;

u16IdAddress = (uint16*)(gU16IdAdressVar + 0x215);//0x4865

//讀取單片機的ID,並進行運算,具體演算法可以自己定,這里只用到簡單的異或及和運算

u16EorRslt = (*u16IdAddress) ^ (*(u16IdAddress + 1)) ^ (*(u16IdAddress + 2));

u16AddRslt = (*u16IdAddress) + (*(u16IdAddress + 1)) + (*(u16IdAddress + 2));

//進行對比,如果運算結果與FLASH保存的結果不一樣,說明非法,運行錯誤代碼

if(u16EorRslt != *((uint16*)ID_ENCRYPT_EOR_RESULT_ADDRESS))

{

while(1);//異或演算法結果不正確,進行錯誤分支

}

if(u16AddRslt != *((uint32*)ID_ENCRYPT_ADD_RESULT_ADDRESS))

{

while(1);//和演算法結果不正確,進行錯誤分支

}

}

1,如果板子上有外部存儲器,可以先編寫一個程序,利用演算法把id計算得到一些值存入外部存儲器,然後再燒寫真正的程序,真正的程序去校驗外部存儲器的數據是否合法即可

2,利用板子上按鍵組合,或是上電按住某些鍵,程序在這個時候利用演算法把id計算得到一些值存入程序區(stm8為EE區),程序運行時去驗證程序區數據是否正確

3,軒微編程器有軟體加密的功能,編程器會讀晶元id,根據演算法直接改寫緩沖區,達到軟體加密的作用

4,讀出的id通過一定演算法,例如異或加上一個數,得到的數據存入flash(只運行一次,運行後標志位也存入flash),下次讀到這個標志位,就不運行這個程序



熱點內容
java人才 發布:2025-05-14 12:29:10 瀏覽:647
如何打開軟密碼 發布:2025-05-14 12:28:55 瀏覽:426
七牛存儲待遇 發布:2025-05-14 12:27:20 瀏覽:420
C語言a35a4a5 發布:2025-05-14 11:53:48 瀏覽:812
android隱藏item 發布:2025-05-14 11:43:56 瀏覽:327
javawebeclipse編譯 發布:2025-05-14 11:35:24 瀏覽:937
可編程式控制制器試題 發布:2025-05-14 11:25:32 瀏覽:121
dsp混合編程 發布:2025-05-14 11:23:10 瀏覽:250
mysql添加存儲過程 發布:2025-05-14 11:23:01 瀏覽:882
房車旅遊自媒體有腳本嗎 發布:2025-05-14 11:18:18 瀏覽:127