亚洲国产成人,色呦呦内射午夜,无码一级片,无码人妻少妇色欲AV一区二区

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><delect id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></delect><acronym id="jg8hh"><dd id="jg8hh"></dd></acronym><button id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></button><samp id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></samp>

<p id="jg8hh"></p>

<samp id="jg8hh"><legend id="jg8hh"></legend></samp>
<samp id="jg8hh"><legend id="jg8hh"><samp id="jg8hh"></samp></legend></samp>

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><acronym id="jg8hh"></acronym><p id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></p><p id="jg8hh"></p>

<p id="jg8hh"></p><delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect><button id="jg8hh"><listing id="jg8hh"><i id="jg8hh"></i></listing></button>
<delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect>

51單片機(jī)程序進(jìn)行軟件加密和硬件解密的方法

發(fā)布時(shí)間:2023-11-02
由于固化在片外eprom里的單片機(jī)程序容易復(fù)制,所以,如不在技術(shù)上采取保護(hù)措施,則程序中所采用的處理方法易被他人分析仿制。對(duì)單片機(jī)程序進(jìn)行加密是一種有效的保護(hù)措施,也是一項(xiàng)實(shí)用的技術(shù)。雖然本身帶有eprom的單片機(jī)可做到程序保密,但由于價(jià)格和存儲(chǔ)容量方面的原因,用戶仍常常采用外接eprom的單片機(jī)來(lái)開發(fā)產(chǎn)品。
本文以mcs-51單片機(jī)為例介紹一種對(duì)片外e2prom里的程序進(jìn)行軟件加密和硬件解密的方法。這種方法不增加用戶應(yīng)用程序開銷。
1 基本原理
我們知道,異或運(yùn)算有這樣的特點(diǎn):aýbýb=a,亦即當(dāng)用變量b對(duì)變量a作偶數(shù)次異或運(yùn)算后,其結(jié)果恢復(fù)為變量a。例如a=32h,b=5eh,則aýb的結(jié)果為6ch,該結(jié)果再與變量b作異或運(yùn)算,即6chý5eh就得到變量a的值32h。因此,我們可以利用這一特點(diǎn)給單片機(jī)程序加密和解密。
51系列單片機(jī)在對(duì)外部程序存儲(chǔ)器rom和外部數(shù)據(jù)存儲(chǔ)器ram操作時(shí)采用兩套不同的指令,在對(duì)ram操作時(shí)用movx指令,并產(chǎn)生相應(yīng)的讀(rd)和寫(wr)信號(hào),而當(dāng)對(duì)外部rom進(jìn)行讀操作時(shí)不用rd信號(hào),而是有一條專給外部rom使用的“讀”數(shù)控制信號(hào)(psen)線。亦即外部ram和rom的控制信號(hào)是嚴(yán)格分開的。這就為利用異或運(yùn)算給外部rom里的程序進(jìn)行加密后固化、解密后執(zhí)行提供了條件。
這種方法的思路是:首先對(duì)欲固化到外部rom里的目的代碼(原代碼)進(jìn)行第一次異或運(yùn)算(加密),再把加密后的代碼固化到rom里,程序運(yùn)行時(shí)由硬件對(duì)從rom讀出的加密代碼進(jìn)行第二次異或運(yùn)算(解密)變?yōu)樵a后送到數(shù)據(jù)總線。這樣,外部rom
里固化的是加密代碼,即便該代碼被復(fù)制也反匯編不出原程序。另外該程序的執(zhí)行還需相應(yīng)的解密電路支持。
圖1是可以在實(shí)際中應(yīng)用的單片機(jī)解密電路。當(dāng)cpu對(duì)片外eprom(u04)進(jìn)行“讀”操作時(shí),控制信號(hào)psen為低電平,這時(shí)u04送出八位加密代碼(rd0~rd7)并和“密鑰”經(jīng)由u05、u06組成的異或運(yùn)算電路作第二次異或運(yùn)算(解密)得到原代碼,該代碼經(jīng)三
態(tài)緩沖器(u07)由psen信號(hào)控制送入數(shù)據(jù)總線。由于電路中已將單片機(jī)的ea腳接地,故片外eprom的最低地址為0。另外,與rd0~rd7一起參與異或運(yùn)算的另一個(gè)數(shù)據(jù)(“密鑰”)取自當(dāng)前待解密代碼在外部eprom所在存儲(chǔ)單元的低八位地址,并從高位到低位按a0a2a4a6a1a3a5a7的順序組合成新的數(shù)據(jù)。例如,原地址分別為35h和36h,組合后的地址則分別為e2h和6ah。采用這樣的方法確定“密鑰”,一是可使一頁(yè)中的代碼中“密鑰”不重復(fù),二是由于同頁(yè)中的代碼字節(jié)的“密鑰”都不同,故很難找到加密規(guī)律,可增加破譯難度。
2 操作過(guò)程
現(xiàn)以sice通用單片機(jī)仿真器為例說(shuō)明制作加密程序并固化到片外eprom里的操作過(guò)程。設(shè)程序一是一個(gè)待固化到片外eprom里執(zhí)行的用戶應(yīng)用程序。為簡(jiǎn)便起見,它對(duì)外部ram的前256個(gè)單元賦于相應(yīng)的低地址后轉(zhuǎn)入死循環(huán)。因?yàn)榉抡嫫鞯某鼋鑢am為從8000h開始的24k空間,故應(yīng)根據(jù)程序大小用偽指令把最低地址定位在8000h~dfffh的24k空間里(如程序一中的org8000h),否則,無(wú)法直接對(duì)該程序的目的碼進(jìn)行第一次異或運(yùn)算。
程序二是對(duì)程序一的目的代碼(存放于仿真ram的8000h~804ah中共4bh個(gè)字節(jié))進(jìn)行第一次異或加密運(yùn)算的。要加密的總代碼字節(jié)數(shù)由程序一經(jīng)匯編后得知。該程序中“密鑰”的計(jì)算應(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)該注意的是如果在程序一中使用了長(zhǎng)轉(zhuǎn)移(ljmp)或長(zhǎng)調(diào)用(lcall)指令,就應(yīng)列表顯示或打印匯編結(jié)果,查找這些指令涉及的標(biāo)號(hào)地址的高八位,并把高八位地址減去80h,使其與外部eprom的地址相符。
3goxorm,stop|;執(zhí)行程序二,對(duì)程序一的目的碼進(jìn)行異或加密運(yùn)算
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í)行無(wú)誤(顯示略)對(duì)于大的用戶應(yīng)用程序,其操作過(guò)程仍如上述,但需改變程序二的加密字節(jié)數(shù),并注意不要把程序二的代碼固化到eprom里,否則,加密方法會(huì)暴露。
3 討論
由于單片機(jī)程序是固化在eprom里的,所以不能象個(gè)人計(jì)算機(jī)那樣利用類似磁盤防復(fù)制等這一類的方法對(duì)單片機(jī)程序防復(fù)制(帶保密位的單片機(jī)除外),而只能在程序本身和相應(yīng)的硬件上做文章。
本文雖然以mcs-51單片機(jī)為例介紹了一種用異或運(yùn)算對(duì)片外eprom里的單片機(jī)程序進(jìn)行軟件加密和硬件解密的方法,但本方法也適用于其它外接e2prom的單片機(jī),此法一直應(yīng)用在筆者于1993年研制成功并生產(chǎn)了20余套的一種分布式數(shù)控測(cè)井系統(tǒng)中。
使用上面介紹的方法,如果解密電路做得隱蔽,使非設(shè)計(jì)者不知道加密方法,則要破譯片外eprom里的程序具有一定的難度。實(shí)際使用中還可采用更為復(fù)雜的方法產(chǎn)生“密鑰”,“密鑰”周期還可進(jìn)一步加長(zhǎng);在硬件上也應(yīng)做得隱蔽,解密電路亦可用編程器件實(shí)現(xiàn),以進(jìn)一步增加破譯難度。
screen.width-333)this.width=screen.width-333 dypop=按此在新窗口瀏覽圖片>
上一個(gè):桌面音量圖標(biāo)不見了怎么辦(電腦右下角音量圖標(biāo)不見了怎么辦)
下一個(gè):蘋果6splus連接不上電腦怎么辦(iphone6連接不上電腦)

修電腦的地方,附近有沒有修電腦的地方
碧桃的生長(zhǎng)習(xí)性及用途介紹
RS-06K43R0FT在線查庫(kù)存,今日?qǐng)?bào)價(jià)
茶席的奧秘
電機(jī)馬達(dá):電力泵水最有效的動(dòng)力源
微信電腦版換行怎么弄(微信電腦版換行是哪個(gè)鍵子)
三相交流電機(jī)換向器外圓變形怎么辦?
移動(dòng)4g網(wǎng)絡(luò)怎么這么不穩(wěn)定,4G網(wǎng)絡(luò)怎么這么卡
普通家用電腦配置清單,求一個(gè)普通電腦配置清單
不重裝系統(tǒng)擴(kuò)大c盤 win10,不重裝系統(tǒng)如何升級(jí)到win10原win7軟件和設(shè)置不都變直接升級(jí)