51單片機程序進行軟件加密和硬件解密的方法_第1頁
51單片機程序進行軟件加密和硬件解密的方法_第2頁
51單片機程序進行軟件加密和硬件解密的方法_第3頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、本文格式為Word版,下載可任意編輯51單片機程序進行軟件加密和硬件解密的方法 由于固化在片外EPROM里的單片機程序簡單復(fù)制,所以,如不在技術(shù)上實行愛護措施,則程序中所采納的處理方法易被他人分析仿制。對單片機程序進行加密是一種有效的愛護措施,也是一項有用的技術(shù)。雖然本身帶有EPROM的單片機可做到程序保密,但由于價格和存儲容量方面的緣由,用戶仍經(jīng)常采納外接EPROM的單片機來開發(fā)產(chǎn)品。 本文以MCS-51單片機為例介紹一種對片外E2PROM里的程序進行軟件加密和硬件解密的方法。這種方法不增加用戶應(yīng)用程序開銷。1基本原理我們知道,異或運算有這樣的特點:ABB=A,亦即當(dāng)用變量B對變量A作偶數(shù)次

2、異或運算后,其結(jié)果恢復(fù)為變量A。例如A=32H,B=5EH,則AB的結(jié)果為6CH,該結(jié)果再與變量B作異或運算,即6CH5EH就得到變量A的值32H。因此,我們可以利用這一特點給單片機程序加密和解密。51系列單片機在對外部程序存儲器ROM和外部數(shù)據(jù)存儲器RAM操作時采納兩套不同的指令,在對RAM操作時用MO指令,并產(chǎn)生相應(yīng)的讀(RD)和寫(WR)信號,而當(dāng)對外部ROM進行讀操作時不用RD信號,而是有一條專給外部ROM使用的“讀”數(shù)掌握信號(PSEN)線。亦即外部RAM和ROM的掌握信號是嚴(yán)格分開的。這就為利用異或運算給外部ROM里的程序進行加密后固化、解密后執(zhí)行供應(yīng)了條件。這種方法的思路是:首先

3、對欲固化到外部ROM里的目的代碼(原代碼)進行第一次異或運算(加密),再把加密后的代碼固化到ROM里,程序運行時由硬件對從ROM讀出的加密代碼進行其次次異或運算(解密)變?yōu)樵a后送到數(shù)據(jù)總線。這樣,外部ROM里固化的是加密代碼,即便該代碼被復(fù)制也反匯編不出原程序。另外該程序的執(zhí)行還需相應(yīng)的解密電路支持。圖1是可以在實際中應(yīng)用的單片機解密電路。當(dāng)CPU對片外EPROM(U04)進行“讀”操作時,掌握信號PSEN為低電平,這時U04送出八位加密代碼(RD0RD7)并和“密鑰”經(jīng)由U05、U06組成的異或運算電路作其次次異或運算(解密)得到原代碼,該代碼經(jīng)三態(tài)緩沖器(U07)由PSEN信號掌握送入

4、數(shù)據(jù)總線。由于電路中已將單片機的EA腳接地,故片外EPROM的最低地址為0。另外,與RD0RD7一起參加異或運算的另一個數(shù)據(jù)(“密鑰”)取自當(dāng)前待解密代碼在外部EPROM所在存儲單元的低八位地址,并從高位到低位按A0A2A4A6A1A3A5A7的挨次組合成新的數(shù)據(jù)。例如,原地址分別為35H和36H,組合后的地址則分別為E2H和6AH。采納這樣的方法確定“密鑰”,一是可使一頁中的代碼中“密鑰”不重復(fù),二是由于同頁中的代碼字節(jié)的“密鑰”都不同,故很難找到加密規(guī)律,可增加破譯難度。2操作過程現(xiàn)以SICE通用單片機仿真器為例說明制作加密程序并固化到片外EPROM里的操作過程。設(shè)程序一是一個待固化到片外

5、EPROM里執(zhí)行的用戶應(yīng)用程序。為簡便起見,它對外部RAM的前256個單元賦于相應(yīng)的低地址后轉(zhuǎn)入死循環(huán)。由于仿真器的出借RAM為從8000H開頭的24K空間,故應(yīng)依據(jù)程序大小用偽指令把最低地址定位在8000HDFFFH的24K空間里(如程序一中的ORG8000H),否則,無法直接對該程序的目的碼進行第一次異或運算。程序二是對程序一的目的代碼(存放于仿真RAM的8000H804AH中共4BH個字節(jié))進行第一次異或加密運算的。要加密的總代碼字節(jié)數(shù)由程序一經(jīng)匯編后得知。該程序中“密鑰”的計算應(yīng)與硬件電路中送到解密電路的低八位地址線的連接關(guān)系相全都。程序一:MAIN.ASMORG8000HSJMPMA

6、INORG8003HRETIORG800BHRETIORG8013HRETIORG801BHRETIORG8023HRETIORG8030HMAIN:CLREACLRRS0CLRRS1MOVA,#0MOVDPTR,#0MOVB,#0ACALLSUBRLOOP:NOPSJMPLOOPSUBR:MODPTR,AINCAINCDPTRDJNZB,SUBRNOPRETEND程序二:XORM.ASMXORM:MOVR0,#4BH;置欲加密代碼字節(jié)數(shù)MOVDPTR,#8000H;置程序一首地址LOP1:MOA,DPTRPUSHACCMOVA,DPL;取代碼單元的低地址MOVB,AMOVC,B.0;組合新數(shù)

7、據(jù)開頭加密MOVACC.7,CMOVC,B.2MOVACC.6,CMOVC,B.4MOVACC.5,CMOVC,B.6MOVACC.4,CMOVC,B.1MOVACC.3,CMOVC,B.3MOVACC.2,CMOVC,B.5MOVACC.1,CMOVC,B.7MOVACC.0,CPOPBXRLA,B;“異或”產(chǎn)生加密代碼MODPTR,A;加密代碼存入原單元INCDPTRDJNZR0,LOP1NOPSTOP:NOP首先把程序一調(diào)入仿真器匯編,目的是得到總的代碼字節(jié)數(shù)。即鍵入如下內(nèi)容(帶下劃線的為鍵入內(nèi)容,否則為顯示內(nèi)容)。ASM51|FDASM251V3.0Copyright1989Micro

8、computerLab.FudanUniversityNoERRORDisplayList?(Y/N)N|Nextadr:804B;登記程序一的末地址為804BH,由此可知總代碼字節(jié)數(shù)為4BH。再把程序二添加到程序一的末尾(RET指令后,END偽指令前),調(diào)入仿真器后再匯編。即:ASM51|FDASM251V3.0Copyright1989MicrocomputerLab.FudanUniversityNoERRORDisplayList?(Y/N)N|Nextadr:8081EXIT|;退到監(jiān)控狀態(tài)3MAP3|;仿真RAM出借(8000HDFFFH)3DX8000|;顯示未加密代碼(原代碼)

9、8000:802E5B32CD900798A4C05C32C994039C8010:80E47832EDB027B884E56F32E9B729B88020:40224F32724F188F52CF83C31292F4838030:C2AFC2D3C2D4740090000075F00011438040:0080FDF004A3D5F0FA0022784B9080008050:E0C0E0E582F5F0A2F092E7A2F292E6A28060:F492E5A2F692E4A2F192E3A2F392E2A28070:F592E1A2F792E0D0F065F0F0A3D8D1008080

10、:0000000000A041AC4450488D434A4E45這里應(yīng)當(dāng)留意的是假如在程序一中使用了長轉(zhuǎn)移(LJMP)或長調(diào)用(LCALL)指令,就應(yīng)列表顯示或打印匯編結(jié)果,查找這些指令涉及的標(biāo)號地址的高八位,并把高八位地址減去80H,使其與外部EPROM的地址相符。3GOXORM,STOP|;執(zhí)行程序二,對程序一的目的碼進行異或加密運算3DX8000|;顯示加密的代碼,804BH以后的代碼不變8000:80AE53BA8D504F50A04450BE8D504F508010:A044509A8D504F50A041439E8D5345548020:42A045B830D8534554498

11、D4D5454BA4D8030:E00DE879A0361EEAB6A62EDB96E67FAD8040:1010E56854738D28EE943E784B9080008050:0EC0E0E582F5F0A2F092E7A2F292E6A28060:F492E5A2F692E4A2F192E3A2F392E2A28070:F592E1A2F792E0D0F065F0F0A3D8D1008080:0000000000A041AC4450488D434A4E453MECK0,3FFF|;檢查待固化ROMOK3MEP8000,804B,0,5|;將仿真RAM中8000H804BH的加密代碼OK固

12、化到外部ROM的0地址開頭的單元里3MAP0|;使用片外ROM,取消仿真RAM出借3EX0|;執(zhí)行片外ROM里的程序3DX0|;顯示外部RAM從0地址開頭的單元內(nèi)容可見程序執(zhí)行無誤(顯示略)對于大的用戶應(yīng)用程序,其操作過程仍如上述,但需轉(zhuǎn)變程序二的加密字節(jié)數(shù),并留意不要把程序二的代碼固化到EPROM里,否則,加密方法會暴露。3爭論由于單片機程序是固化在EPROM里的,所以不能象個人計算機那樣利用類似磁盤防復(fù)制等這一類的方法對單片機程序防復(fù)制(帶保密位的單片機除外),而只能在程序本身和相應(yīng)的硬件上做文章。本文雖然以MCS-51單片機為例介紹了一種用異或運算對片外EPROM里的單片機程序進行軟件加密和硬件解密的方法,但本方法也適用于其它外接E2PROM的單片機,此法始終應(yīng)用在筆者于1993年研制勝利并生產(chǎn)了20余套的一種分布式數(shù)控測井系統(tǒng)中。使用上面介紹的方法,假如解密電路做得隱藏,使非設(shè)計者不知道加密

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論