對(duì)單片機(jī)程序的動(dòng)態(tài)加密措施
該程序是將RAM地址為20H開始的數(shù)據(jù)組(設(shè)有5個(gè))進(jìn)行動(dòng)態(tài)變換, 因?yàn)槌跏嫉臄?shù)據(jù)組是密碼形式的, 它需要在程序運(yùn)行中改變,在程序的其他段中要使用改變后的數(shù)據(jù)。這里是用SUB1程序段中的指令代碼(代碼為:24H,94H,63H,54H,13H)與55H進(jìn)行動(dòng)態(tài)解碼,數(shù)據(jù)55H是加密數(shù)據(jù),它"異或"指令代碼后得到正確的數(shù)據(jù)存入20H開始的單元中(結(jié)果為:71H,C1H,36H,01H,46H)。為了說明動(dòng)態(tài)數(shù)據(jù)解碼過程, 這個(gè)例子比較簡單, 實(shí)際在轉(zhuǎn)入該程序段時(shí), 可以由某些運(yùn)算生成數(shù)據(jù)單元地址, 以增強(qiáng)程序的抗分析能力。
2 程序段防修改
在加密程序中, 所設(shè)置的障礙不會(huì)只有一處。為了使加密措施完善, 在一些關(guān)鍵地方程序的前后呼應(yīng)是反破譯的有效方法。解密者為了一些目的, 必然要修改某段程序指令;而程序段防修改就是針對(duì)這種解密方法所采用的技術(shù)手段。為了達(dá)到加密程序的完整性, 可以在程序的關(guān)鍵處取指令或數(shù)據(jù)代碼參加某種運(yùn)算, 其結(jié)果作為判斷程序是否被變動(dòng)的依據(jù)。下面是程序防修改的程序段:
……
SUB2: ADD A,#35H
SUBB A,#05H
……
MOV DPTR,#SUB2
MOV R0,#30H
MOV A,#1
MOV R1,#3
MOV @R0,#24H ;SUB2段第一個(gè)指令代碼為24H
LOOP2: PUSH A
MOVC A,@A+DPTR
XRL 30H,A ;異或運(yùn)算
POP A
INC A
DJNZ R1,LOOP2
MOV A,30H
……
評(píng)論