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