51單片機程序進行軟體加密和硬體解密的方法

2021-01-15 電工電氣學習

 由於固化在片外EPROM 裡的單片機程序容易複製,所以,如不在技術上採取保護措施,則程序中所採用的處理方法易被他人分析仿製。對單片機程序進行加密是一種有效的保護措施,也是一項實用的技術。雖然本身帶有EPROM 的單片機可做到程序保密,但由於價格和存儲容量方面的原因,用戶仍常常採用外接EPROM 的單片機來開發產品。
本文以MCS - 51 單片機為例介紹一種對片外E2PROM 裡的程序進行軟體加密和硬體解密的方法。這種方法不增加用戶應用程式開銷。
1  基本原理
我們知道,異或運算有這樣的特點: A Ý B Ý B =A ,亦即當用變量B 對變量A 作偶數次異或運算後,其結果恢復為變量A。例如A = 32H , B = 5EH ,則AÝ B 的結果為6CH ,該結果再與變量B 作異或運算,即6CH Ý 5EH 就得到變量A 的值32H。因此,我們可以利用這一特點給單片機程序加密和解密。
51 系列單片機在對外部程序存儲器ROM 和外部數據存儲器RAM 操作時採用兩套不同的指令,在對RAM 操作時用MOVX指令,並產生相應的讀(RD) 和寫(WR) 信號,而當對外部ROM 進行讀操作時不用RD信號,而是有一條專給外部ROM 使用的「讀」數控制信號(PSEN) 線。亦即外部RAM 和ROM 的控制信號是嚴格分開的。這就為利用異或運算給外部ROM裡的程序進行加密後固化、解密後執行提供了條件。
這種方法的思路是:首先對欲固化到外部ROM裡的目的代碼(原代碼) 進行第一次異或運算(加密) ,再把加密後的代碼固化到ROM 裡,程序運行時由硬體對從ROM 讀出的加密代碼進行第二次異或運算(解密) 變為原代碼後送到數據總線。這樣,外部ROM
裡固化的是加密代碼,即便該代碼被複製也反彙編不出原程序。另外該程序的執行還需相應的解密電路支持。
圖1 是可以在實際中應用的單片機解密電路。當CPU 對片外EPROM(U04) 進行「讀」操作時,控制信號PSEN為低電平,這時U04 送出八位加密代碼(RD0~RD7) 並和「密鑰」經由U05 、U06 組成的異或運算電路作第二次異或運算(解密) 得到原代碼,該代碼經三
態緩衝器(U07) 由PSEN信號控制送入數據總線。由於電路中已將單片機的EA腳接地,故片外EPROM 的最低地址為0 。另外,與RD0~RD7 一起參與異或運算的另一個數據(「密鑰」) 取自當前待解密代碼在外部EPROM所在存儲單元的低八位地址,並從高位到低位按A0 A2 A4 A6 A1 A3 A5 A7 的順序組合成新的數據。例如,原地址分別為35H 和36H ,組合後的地址則分別為E2H 和6AH。採用這樣的方法確定「密鑰」,一是可使一頁中的代碼中「密鑰」不重複,二是由於同頁中的代碼字節的「密鑰」都不同,故很難找到加密規律,可增加破譯難度。
2  操作過程
現以SICE 通用單片機仿真器為例說明製作加密程序並固化到片外EPROM 裡的操作過程。設程序一是一個待固化到片外EPROM 裡執行的用戶應用程式。為簡便起見,它對外部RAM 的前256 個單元賦於相應的低地址後轉入死循環。因為仿真器的出借RAM 為從8000H 開始的24K空間,故應根據程序大小用偽指令把最低地址定位在8000H~DFFFH的24K空間裡(如程序一中的ORG 8000H) ,否則,無法直接對該程序的目的碼進行第一次異或運算。
程序二是對程序一的目的代碼(存放於仿真RAM的8000H~804AH 中共4BH 個字節) 進行第一次異或加密運算的。要加密的總代碼字節數由程序一經彙編後得知。該程序中「密鑰」的計算應與硬體電路中送到解密電路的低八位地址線的連接關係相一致。

未完,請點擊左下角「閱讀原文」繼續閱讀


【分享】如果有所收穫,歡迎隨手「點擊右上角」把「精彩文章」分享到朋友圈或者朋友,讓大家一起感受成長的快樂~~

關注電工學習網官方微信公眾號,第一時間獲取最新的經驗及基礎知識文章,請點擊標題下「電工電氣學習或直接添加帳號:「dian_gon關注。

相關焦點

  • 單片機程序加解密方法和注意事項
    單片機解密又叫單片機破解、晶片解密、IC解密等,但是這嚴格說來這幾種稱呼都不科學,但已經成了習慣叫法,我們把CPLD解密,DSP解密都習慣稱為單片機解密,單片機只是能裝載程序晶片的其中一個類。單片機(MCU)一般都有內部程序區和數據區(或者其一)供用戶存放程序和工作數據(或者其一)。
  • 加密狗的攻守之戰:加密與解密的較量
    加密狗加密軟體硬體加密鎖,俗稱「加密狗」,對於加密狗的破解大致可以分為三種方法,一種是通過硬體克隆或者複製,一種是通過SoftICE等Debug工具調試跟蹤解密,一種是通過編寫攔截程序修改軟體和加密狗之間的通訊
  • 常見的IC晶片解密方法與原理解析!
    1、軟體攻擊:  該技術通常使用處理器通信接口並利用協議、加密算法或這些算法中的安全漏洞來進行攻擊。軟體攻擊取得成功的一個典型事例是對早期ATMELAT89C系列單片機的攻擊。攻擊者利用了該系列單片機擦除操作時序設計上的漏洞,使用自編程序在擦除加密鎖定位後,停止下一步擦除片內程序存儲器數據的操作,從而使加過密的單片機變成沒加密的單片機,然後利用編程器讀出片內程序。  至於在其他加密方法的基礎上,可以研究出一些設備,配合一定的軟體,來做軟體攻擊。
  • 淺談西門子plc程序加密和程序塊加密及解密
    相信大家在使用STEP7打開一些程序時,常會遇到以下三種PLC的加密情況,現根據自己的經歷和大家一起分享探討。第一種情況。是在硬體組態中,在CPU屬性中按照保護等級設置密碼,將CPU中程序鎖住,不影響CPU的正常運行。這種情況是往往是程序設計編程人員出於安全和智慧財產權的保護等目的而進行的設置。常見的加密方式有三種,如圖一所示。
  • 51單片機擴展中斷的四種方法
    MCS—51系列單片機內部只有兩個外部中斷源輸入端,當外部中斷源多於兩個時,就必須進行擴展,下面介紹兩種簡單的擴展方法:一、採用硬體請求和軟體查詢的方法:這種方法是:把各個中斷源通過硬體
  • Proteus軟體仿真與Keil的51單片機系統設計
    單片機功能越來越強大,價格卻不斷下降的優勢無疑成為嵌入式系統方案設計的首選,同時單片機應用領域的擴大也使得更多人加入到基於單片機系統的開發行列中,推動著單片機技術的創新進步。  然而傳統的單片機系統開發除了需要購置諸如仿真器、編程器、示波器等價格不菲的電子設備外,開發過程也較繁瑣。如圖1所示,用戶程序需要在硬體完成的情況下才能進行聯調,如果在調試過程中發現需修改硬體,則要重新制板。
  • 51單片機軟體程序復位
    51單片機軟體復位彙編代碼 POP ACC ; pop return address本文引用地址:http://www.eepw.com.cn/article/201611/318163.htm POP
  • 如何對圖片進行加密解密,圖像的加密解密方法
    不管是日常工作還是私人生活,總有一些圖片涉及到重要事情需要對其進行加密,防止其他人輕易的查看,那麼如何對圖片進行加密和解密呢?一、使用壓縮文件進行加密。1、在需要加密的圖片上方點擊右鍵,在彈出的菜單中點擊添加到壓縮文件。
  • 有關Keil軟體仿真的51單片機串口調試技巧
    傳統方式串口程序的調試,往往是利用專用的單片機硬體仿真器。在編寫好程序後,利用仿真器來設置斷點,觀察變量和程序的流程,逐步對程序進行調試,修正錯誤。使用硬體仿真器的確是很有效的方法,但是也有一些缺點:  很多仿真器不能做到完全硬體仿真,因而會造成仿真時正常,而實際運行時出現錯誤的情況;也有仿真不能通過,但是實際運行正常的情況。
  • 淺談三種單片機程序調試方法
    一、仿真器調試(硬體仿真)最近咱們學院購買了廣州致遠電子有限公司的周立功DP-51PROC試驗儀,上周四下午,我們去倒騰了一番,感覺這試驗儀對學習51系列單片機還是蠻有用處的,特別是結合其仿真器進行調試程序還是很好的。
  • 51單片機指令快速記憶方法總結
    上面介紹了幾種快速記憶單片機指令的方法,希望能起到拋磚引玉的作用,相信讀者在學習單片機的過程中能找到適合自己的方法來記憶。但是,有了好的方法還不夠,還需要實踐,即多讀書上的例題和別人編寫的程序,自己再結合實際編寫一些程序。只有這樣, 才能更好更快地掌握單片機指令系統。
  • CodeMeter:軟體加密的「木桶定律」
    AxProtector外殼加密技術採用了按需解密的先進技術,不僅改變了OEP指向,並把代碼層的部份代碼進行了加密,把IAT地址重新指向,破解者如果試圖在OEP斷點處進行內存DUMP時,程序將會崩潰;同時威步的AXAN技術可以在代碼執行過程中在內存中解密該代碼
  • 學習單片機,為什麼我建議你從51單片機開始
    學習沒有捷徑,只不過想更直接到達很多人的選擇是當下流行的32位單片機,覺得既然學當然需要學習主流的產品了,可是面對32位單片機複雜的庫文件,大量的資源,即使使用項目驅動的學習方法,這就和我們小時候學習數學都是從1+1開始學習加法的,簡單+堅持我們就能學習下去,就能更好的理解。下面介紹學習51單片機的準備工作。
  • 軟體加密行業的現狀和發展趨勢
    所以,軟體加密行業的發展趨勢是無硬體化、網絡化和信息化。下面,我們從軟體加密方法說起,具體闡述一下軟體加密行業的現狀和發展趨勢。 一、軟體加密方法 前面提到過,軟體加密技術分為基於硬體的加密方式和基於軟體的加密方式。
  • 對主流MCU的程序加密進行講解
    的程序加密進行講解,希望能夠幫助你選擇最適合自己應用的微處理器。MCU加密 通常所說的MCU加密是指將用戶的程序固件保護起來,防止別人通過外部調試接口或者其他方法讀取燒寫在Flash中的程序。保護自家方案不輕易被別家抄襲,從硬體上保護自己的智慧財產權。MCU加密還指防止自家程序被惡意讀取破解。 2.
  • 51單片機程序存儲器擴展
    在單片機的擴展中,要分別考慮程序存儲器及數據存儲器的擴展。存儲器是單片機系統中使用最多的外擴晶片,對80C51系列單片機而言,由於程序存儲器與數據存儲器的空間在物理空間上的各自獨立性,使得兩者的擴展方法略有不同。
  • 51單片機、STM32單片機、PIC單片機性能對比
    51單片機 應用最廣泛的8位單片機當然也是初學者們最容易上手學習的單片機,最早由Intel推出,由於其典型的結構和完善的總線專用寄存器的集中管理,眾多的邏輯位操作功能及面向控制的豐富的指令系統,堪稱為一代「經典」,為以後的其它單片機的發展奠定了基礎。
  • 如何利用51單片機設計一個電子密碼鎖系統?
    3 單片電子密碼鎖的軟體設計 3.1 單片電子鎖的系統軟體設計整體思路 單片電子鎖的應用系統如果要完美的完成各項功能,首先必須要有比較完整的硬體當做保證,其次要得到與之想適應的設計比較合理的軟體進行支持。這是因為在信息技術飛速發展的今天,軟體編程逐漸代替了許多過去用硬體完成的工作,對於一些需要很複雜的硬體電路完成的工作,如果選用軟體編程則會簡單了許多。
  • Labview讀取硬碟序列號硬體加密
    通其他軟體一樣,Labview做的程序也可以做成使用安裝序列號或者註冊序列號之類的加密方法,用以保障作者的我目前用的還是14版的Labview,沒有找到讀取電腦硬體序列號相關的函數/模塊,所以還是用用熟悉的dll來讀取相關的硬體信息了。一般綁定硬碟ID的多,就以硬碟ID為例。
  • MCS-51單片機的結構和工作原理
    3.1.1 MCS-51單片機系列:兩大系列:MCS-51子系列和MCS-52子系列。其中51子系列是基本型,而52子系列屬於增強型。由硬體或軟體置位和清零。**在字節運算時:它表示運算結果是否有進位(或借位)。