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

發(fā)布時間:2023-11-02
由于固化在片外eprom里的單片機程序容易復(fù)制,所以,如不在技術(shù)上采取保護措施,則程序中所采用的處理方法易被他人分析仿制。對單片機程序進行加密是一種有效的保護措施,也是一項實用的技術(shù)。雖然本身帶有eprom的單片機可做到程序保密,但由于價格和存儲容量方面的原因,用戶仍常常采用外接eprom的單片機來開發(fā)產(chǎn)品。
本文以mcs-51單片機為例介紹一種對片外e2prom里的程序進行軟件加密和硬件解密的方法。這種方法不增加用戶應(yīng)用程序開銷。
1 基本原理
我們知道,異或運算有這樣的特點:aýbýb=a,亦即當用變量b對變量a作偶數(shù)次異或運算后,其結(jié)果恢復(fù)為變量a。例如a=32h,b=5eh,則aýb的結(jié)果為6ch,該結(jié)果再與變量b作異或運算,即6chý5eh就得到變量a的值32h。因此,我們可以利用這一特點給單片機程序加密和解密。
51系列單片機在對外部程序存儲器rom和外部數(shù)據(jù)存儲器ram操作時采用兩套不同的指令,在對ram操作時用movx指令,并產(chǎn)生相應(yīng)的讀(rd)和寫(wr)信號,而當對外部rom進行讀操作時不用rd信號,而是有一條專給外部rom使用的“讀”數(shù)控制信號(psen)線。亦即外部ram和rom的控制信號是嚴格分開的。這就為利用異或運算給外部rom里的程序進行加密后固化、解密后執(zhí)行提供了條件。
這種方法的思路是:首先對欲固化到外部rom里的目的代碼(原代碼)進行第一次異或運算(加密),再把加密后的代碼固化到rom里,程序運行時由硬件對從rom讀出的加密代碼進行第二次異或運算(解密)變?yōu)樵a后送到數(shù)據(jù)總線。這樣,外部rom
里固化的是加密代碼,即便該代碼被復(fù)制也反匯編不出原程序。另外該程序的執(zhí)行還需相應(yīng)的解密電路支持。
圖1是可以在實際中應(yīng)用的單片機解密電路。當cpu對片外eprom(u04)進行“讀”操作時,控制信號psen為低電平,這時u04送出八位加密代碼(rd0~rd7)并和“密鑰”經(jīng)由u05、u06組成的異或運算電路作第二次異或運算(解密)得到原代碼,該代碼經(jīng)三
態(tài)緩沖器(u07)由psen信號控制送入數(shù)據(jù)總線。由于電路中已將單片機的ea腳接地,故片外eprom的最低地址為0。另外,與rd0~rd7一起參與異或運算的另一個數(shù)據(jù)(“密鑰”)取自當前待解密代碼在外部eprom所在存儲單元的低八位地址,并從高位到低位按a0a2a4a6a1a3a5a7的順序組合成新的數(shù)據(jù)。例如,原地址分別為35h和36h,組合后的地址則分別為e2h和6ah。采用這樣的方法確定“密鑰”,一是可使一頁中的代碼中“密鑰”不重復(fù),二是由于同頁中的代碼字節(jié)的“密鑰”都不同,故很難找到加密規(guī)律,可增加破譯難度。
2 操作過程
現(xiàn)以sice通用單片機仿真器為例說明制作加密程序并固化到片外eprom里的操作過程。設(shè)程序一是一個待固化到片外eprom里執(zhí)行的用戶應(yīng)用程序。為簡便起見,它對外部ram的前256個單元賦于相應(yīng)的低地址后轉(zhuǎn)入死循環(huán)。因為仿真器的出借ram為從8000h開始的24k空間,故應(yīng)根據(jù)程序大小用偽指令把最低地址定位在8000h~dfffh的24k空間里(如程序一中的org8000h),否則,無法直接對該程序的目的碼進行第一次異或運算。
程序二是對程序一的目的代碼(存放于仿真ram的8000h~804ah中共4bh個字節(jié))進行第一次異或加密運算的。要加密的總代碼字節(jié)數(shù)由程序一經(jīng)匯編后得知。該程序中“密鑰”的計算應(yīng)與硬件電路中送到解密電路的低八位地址線的連接關(guān)系相一致。
程序一:main.asm
org8000h
sjmpmain
org8003h
reti
org800bh
reti
org8013h
reti
org801bh
reti
org8023h
reti
org8030h
main:clrea
clrrs0
clrrs1
mova,#0
movdptr,#0
movb,#0
acallsubr
loop:nop
sjmploop
subr:movx@dptr,a
inca
incdptr
djnzb,subr
nop
ret
end
程序二:xorm.asm
xorm:movr0,#4bh;置欲加密代碼字節(jié)數(shù)
movdptr,#8000h;置程序一首地址
lop1:movxa,@dptr
pushacc
mova,dpl;取代碼單元的低地址
movb,a
movc,b.0;組合新數(shù)據(jù)開始加密
movacc.7,c
movc,b.2
movacc.6,c
movc,b.4
movacc.5,c
movc,b.6
movacc.4,c
movc,b.1
movacc.3,c
movc,b.3
movacc.2,c
movc,b.5
movacc.1,c
movc,b.7
movacc.0,c
popb
xrla,b;“異或”產(chǎn)生加密代碼
movx@dptr,a;加密代碼存入原單元
incdptr
djnzr0,lop1
nop
stop:nop
首先把程序一調(diào)入仿真器匯編,目的是得到總的代碼字節(jié)數(shù)。即鍵入如下內(nèi)容(帶下劃線的為鍵入內(nèi)容,否則為顯示內(nèi)容)。
>asm51|
fdasm251v3.0
copyright1989microcomputerlab.fudanuniversity
noerror
displaylist?(y/n)n|
nextadr:804b;記下程序一的末地址為804bh,由此可知總代碼字節(jié)數(shù)為4bh。再把程序二添加到程序一的末尾(ret指令后,end偽指令前),調(diào)入仿真器后再匯編。即:
>asm51|
fdasm251v3.0
copyright1989microcomputerlab.fudanuniversity
noerror
displaylist?(y/n)n|
nextadr:8081
>exit|;退到監(jiān)控狀態(tài)
3map3|;仿真ram出借(8000h~dfffh)
3dx8000|;顯示未加密代碼(原代碼)
8000:802e5b32cd900798a4c05c32c994039c
8010:80e47832edb027b884e56f32e9b729b8
8020:40224f32724f188f52cf83c31292f483
8030:c2afc2d3c2d4740090000075f0001143
8040:0080fdf004a3d5f0fa0022784b908000
8050:e0c0e0e582f5f0a2f092e7a2f292e6a2
8060:f492e5a2f692e4a2f192e3a2f392e2a2
8070:f592e1a2f792e0d0f065f0f0a3d8d100
8080:0000000000a041ac4450488d434a4e45
這里應(yīng)該注意的是如果在程序一中使用了長轉(zhuǎn)移(ljmp)或長調(diào)用(lcall)指令,就應(yīng)列表顯示或打印匯編結(jié)果,查找這些指令涉及的標號地址的高八位,并把高八位地址減去80h,使其與外部eprom的地址相符。
3goxorm,stop|;執(zhí)行程序二,對程序一的目的碼進行異或加密運算
3dx8000|;顯示加密的代碼,804bh以后的代碼不變
8000:80ae53ba8d504f50a04450be8d504f50
8010:a044509a8d504f50a041439e8d534554
8020:42a045b830d8534554498d4d5454ba4d
8030:e00de879a0361eeab6a62edb96e67fad
8040:1010e56854738d28ee943e784b908000
8050:0ec0e0e582f5f0a2f092e7a2f292e6a2
8060:f492e5a2f692e4a2f192e3a2f392e2a2
8070:f592e1a2f792e0d0f065f0f0a3d8d100
8080:0000000000a041ac4450488d434a4e45
3meck0,3fff| ;檢查待固化rom
 ok
3mep8000,804b,0,5| ;將仿真ram中8000h~804bh的加密代碼
 ok固化到外部rom的0地址開始的單元里
3map0| ;使用片外rom,取消仿真ram出借
3ex0|;執(zhí)行片外rom里的程序
3dx0|;顯示外部ram從0地址開始的單元內(nèi)容可見程序執(zhí)行無誤(顯示略)對于大的用戶應(yīng)用程序,其操作過程仍如上述,但需改變程序二的加密字節(jié)數(shù),并注意不要把程序二的代碼固化到eprom里,否則,加密方法會暴露。
3 討論
由于單片機程序是固化在eprom里的,所以不能象個人計算機那樣利用類似磁盤防復(fù)制等這一類的方法對單片機程序防復(fù)制(帶保密位的單片機除外),而只能在程序本身和相應(yīng)的硬件上做文章。
本文雖然以mcs-51單片機為例介紹了一種用異或運算對片外eprom里的單片機程序進行軟件加密和硬件解密的方法,但本方法也適用于其它外接e2prom的單片機,此法一直應(yīng)用在筆者于1993年研制成功并生產(chǎn)了20余套的一種分布式數(shù)控測井系統(tǒng)中。
使用上面介紹的方法,如果解密電路做得隱蔽,使非設(shè)計者不知道加密方法,則要破譯片外eprom里的程序具有一定的難度。實際使用中還可采用更為復(fù)雜的方法產(chǎn)生“密鑰”,“密鑰”周期還可進一步加長;在硬件上也應(yīng)做得隱蔽,解密電路亦可用編程器件實現(xiàn),以進一步增加破譯難度。
screen.width-333)this.width=screen.width-333 dypop=按此在新窗口瀏覽圖片>
上一個:桌面音量圖標不見了怎么辦(電腦右下角音量圖標不見了怎么辦)
下一個:蘋果6splus連接不上電腦怎么辦(iphone6連接不上電腦)

修電腦的地方,附近有沒有修電腦的地方
碧桃的生長習性及用途介紹
RS-06K43R0FT在線查庫存,今日報價
茶席的奧秘
電機馬達:電力泵水最有效的動力源
微信電腦版換行怎么弄(微信電腦版換行是哪個鍵子)
三相交流電機換向器外圓變形怎么辦?
移動4g網(wǎng)絡(luò)怎么這么不穩(wěn)定,4G網(wǎng)絡(luò)怎么這么卡
普通家用電腦配置清單,求一個普通電腦配置清單
不重裝系統(tǒng)擴大c盤 win10,不重裝系統(tǒng)如何升級到win10原win7軟件和設(shè)置不都變直接升級
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos