單片機(jī)系統(tǒng)加密中的動態(tài)反跟蹤措施
發(fā)布時間:2008/9/4 0:00:00 訪問次數(shù):562
眾所周知, 有一些公司或個人專門做單片機(jī)的解密服務(wù),另外,單片機(jī)的指令不論怎樣加密最終它還要在明文的方式下才能運(yùn)行, 而且解密者可以使用單片機(jī)開發(fā)系統(tǒng)單步調(diào)試rom中的程序!‘(dāng)解密者了解了指令的運(yùn)行過程之后, 也就獲得了加密的程序, 如某些智能計價器的運(yùn)算方法等,通過修改程序并仿制新的rom芯片, 就可以達(dá)到解密的目的。因此,對單片機(jī)的加密還要在程序的運(yùn)行上進(jìn)行加密處理, 也就是程序的動態(tài)加密措施。
。薄 〕绦虻膭討B(tài)解碼
動態(tài)解碼是對加密程序的指令或數(shù)荽虢卸指礎(chǔ)?在程序運(yùn)行時, 有一段指令是專門對某一區(qū)域的指令或數(shù)據(jù)代碼解密, 而且當(dāng)解密后的代碼使用完畢, 還要將其重新加密, 使存儲器中不存在完整的程序代碼!∵@種方法對防程序的靜態(tài)分析很有效, 因為從加密程序的清單上很難看出程序的真實面目!∪欢诔绦虻姆锤櫡矫, 動態(tài)解碼又有其獨(dú)到之處, 在阻止帶斷點調(diào)試跟蹤方面, 由于程序在執(zhí)行之前是以密文方式出現(xiàn)的, 解密者很難確定斷點設(shè)置的位置, 稍有不慎就會因解密失敗造成系統(tǒng)的破壞(電擦除eprom中的數(shù)據(jù))。下面是程序動態(tài)解碼的具體例子:
……
sub1:。幔洌洹。幔#梗矗琛。惶撛O(shè)的程序段
。颍臁。担矗,#13h
……
。恚铮觥。颍埃#玻埃
。恚铮觥。颍,#5
。恚铮觥。颍,#55h
。恚铮觥。洌穑簦颍#螅酰猓
。恚铮觥。,#00h
loop1:。穑酰螅琛。
。恚铮觯恪。幔溃幔洌穑簦
。颍臁。幔颍病;異或運(yùn)算
mov。溃颍,a;存入實際數(shù)據(jù)
。穑铮稹。
inc。
inc。颍
。洌辏睿。颍保欤铮铮穑
……
該程序是將ram地址為20h開始的數(shù)據(jù)組(設(shè)有5個)進(jìn)行動態(tài)變換, 因為初始的數(shù)據(jù)組是密碼形式的, 它需要在程序運(yùn)行中改變,在程序的其他段中要使用改變后的數(shù)據(jù)。這里是用sub1程序段中的指令代碼(代碼為:24h,94h,63h,54h,13h)與55h進(jìn)行動態(tài)解碼,數(shù)據(jù)55h是加密數(shù)據(jù),它"異或"指令代碼后得到正確的數(shù)據(jù)存入20h開始的單元中(結(jié)果為:71h,c1h,36h,01h,46h)。為了說明動態(tài)數(shù)據(jù)解碼過程, 這個例子比較簡單, 實際在轉(zhuǎn)入該程序段時, 可以由某些運(yùn)算生成數(shù)據(jù)單元地址, 以增強(qiáng)程序的抗分析能力。
2 程序段防修改
在加密程序中, 所設(shè)置的障礙不會只有一處。為了使加密措施完善, 在一些關(guān)鍵地方程序的前后呼應(yīng)是反破譯的有效方法!〗饷苷邽榱艘恍┠康模”厝灰薷哪扯纬绦蛑噶;而程序段防修改就是針對這種解密方法所采用的技術(shù)手段。為了達(dá)到加密程序的完整性, 可以在程序的關(guān)鍵處取指令或數(shù)據(jù)代碼參加某種運(yùn)算, 其結(jié)果作為判斷程序是否被變動的依據(jù)。 下面是程序防修改的程序段:
……
。螅酰猓玻骸。幔洌洹。,#35h
subb。,#05h
……
。恚铮觥。洌穑簦,#sub2
mov。颍埃#常埃
。恚铮觥。,#1
。恚铮觥。颍,#3
mov。溃颍,#24h ;sub2段第一個指令代碼為24h
。欤铮铮穑玻骸。穑酰螅琛。
。恚铮觯恪。,@a+dptr
xrl。常埃瑁帷;異或運(yùn)算
。穑铮稹。
。椋睿恪。
。洌辏睿。颍,loop2
。恚铮觥。幔常埃
……
。悖辏睿濉。,#80h,err ;結(jié)果與80h比較
……
err:。恚铮觥。,#0;錯誤出口
……
在sub2程序段, 是通過指令計算某些數(shù)據(jù)的,如收費(fèi)的算法等。解密者總要修改部分指令, 達(dá)到某種目的。然而, 反解密的工作是在后面的loop2程序段中,是用到了sub2程序段中的指令字節(jié)(這里是用了4個字節(jié))進(jìn)行運(yùn)算(這里是用"異或"運(yùn)算),它的結(jié)果將直接影響下面程序的正確執(zhí)行(正確的運(yùn)算結(jié)果為80h)。如果改變該sub2程序段,則在loop2程序段中將程序引入歧途, 會不知不覺地走入迷途。如果在硬件設(shè)計上有電擦除eeprom,可以進(jìn)一步將程序中的數(shù)據(jù)修改(或刪除),使跟蹤者造成設(shè)備的"損壞",無法重新分析程序。
上面介紹的單片機(jī)加密方法,是阻止解密者非法獲得rom中的程序或者使rom中的程序無法在復(fù)制的單片機(jī)系統(tǒng)中運(yùn)行。在實際應(yīng)用中,判斷程序正常運(yùn)行與被跟蹤運(yùn)行是有很多方法的。例如,可以根據(jù)時鐘計時斷
眾所周知, 有一些公司或個人專門做單片機(jī)的解密服務(wù),另外,單片機(jī)的指令不論怎樣加密最終它還要在明文的方式下才能運(yùn)行, 而且解密者可以使用單片機(jī)開發(fā)系統(tǒng)單步調(diào)試rom中的程序!‘(dāng)解密者了解了指令的運(yùn)行過程之后, 也就獲得了加密的程序, 如某些智能計價器的運(yùn)算方法等,通過修改程序并仿制新的rom芯片, 就可以達(dá)到解密的目的。因此,對單片機(jī)的加密還要在程序的運(yùn)行上進(jìn)行加密處理, 也就是程序的動態(tài)加密措施。
。薄 〕绦虻膭討B(tài)解碼
動態(tài)解碼是對加密程序的指令或數(shù)荽虢卸指礎(chǔ)?在程序運(yùn)行時, 有一段指令是專門對某一區(qū)域的指令或數(shù)據(jù)代碼解密, 而且當(dāng)解密后的代碼使用完畢, 還要將其重新加密, 使存儲器中不存在完整的程序代碼。 這種方法對防程序的靜態(tài)分析很有效, 因為從加密程序的清單上很難看出程序的真實面目!∪欢,在程序的反跟蹤方面, 動態(tài)解碼又有其獨(dú)到之處, 在阻止帶斷點調(diào)試跟蹤方面, 由于程序在執(zhí)行之前是以密文方式出現(xiàn)的, 解密者很難確定斷點設(shè)置的位置, 稍有不慎就會因解密失敗造成系統(tǒng)的破壞(電擦除eprom中的數(shù)據(jù))。下面是程序動態(tài)解碼的具體例子:
……
。螅酰猓保骸。幔洌洹。幔#梗矗琛;虛設(shè)的程序段
。颍臁。担矗,#13h
……
。恚铮觥。颍,#20h
mov。颍保#
。恚铮觥。颍,#55h
。恚铮觥。洌穑簦,#sub1
。恚铮觥。,#00h
loop1: push。
。恚铮觯恪。幔溃幔洌穑簦
。颍臁。,r2 ;異或運(yùn)算
mov。溃颍埃帷。淮嫒雽嶋H數(shù)據(jù)
。穑铮稹。
。椋睿恪。
。椋睿恪。颍
。洌辏睿。颍保欤铮铮穑
……
該程序是將ram地址為20h開始的數(shù)據(jù)組(設(shè)有5個)進(jìn)行動態(tài)變換, 因為初始的數(shù)據(jù)組是密碼形式的, 它需要在程序運(yùn)行中改變,在程序的其他段中要使用改變后的數(shù)據(jù)。這里是用sub1程序段中的指令代碼(代碼為:24h,94h,63h,54h,13h)與55h進(jìn)行動態(tài)解碼,數(shù)據(jù)55h是加密數(shù)據(jù),它"異或"指令代碼后得到正確的數(shù)據(jù)存入20h開始的單元中(結(jié)果為:71h,c1h,36h,01h,46h)。為了說明動態(tài)數(shù)據(jù)解碼過程, 這個例子比較簡單, 實際在轉(zhuǎn)入該程序段時, 可以由某些運(yùn)算生成數(shù)據(jù)單元地址, 以增強(qiáng)程序的抗分析能力。
。病 〕绦蚨畏佬薷
在加密程序中, 所設(shè)置的障礙不會只有一處。為了使加密措施完善, 在一些關(guān)鍵地方程序的前后呼應(yīng)是反破譯的有效方法!〗饷苷邽榱艘恍┠康模”厝灰薷哪扯纬绦蛑噶;而程序段防修改就是針對這種解密方法所采用的技術(shù)手段。為了達(dá)到加密程序的完整性, 可以在程序的關(guān)鍵處取指令或數(shù)據(jù)代碼參加某種運(yùn)算, 其結(jié)果作為判斷程序是否被變動的依據(jù)!∠旅媸浅绦蚍佬薷牡某绦蚨危
……
。螅酰猓玻骸。幔洌洹。,#35h
。螅酰猓狻。,#05h
……
。恚铮觥。洌穑簦颍#螅酰猓
。恚铮觥。颍,#30h
mov。幔#
。恚铮觥。颍,#3
。恚铮觥。溃颍,#24h ;sub2段第一個指令代碼為24h
。欤铮铮穑玻骸。穑酰螅琛。
movc。,@a+dptr
xrl。常埃,a。划惢蜻\(yùn)算
。穑铮稹。
。椋睿恪。
。洌辏睿。颍,loop2
。恚铮觥。,30h
……
。悖辏睿濉。幔#福埃,err;結(jié)果與80h比較
……
err:。恚铮觥。,#0 ;錯誤出口
……
在sub2程序段, 是通過指令計算某些數(shù)據(jù)的,如收費(fèi)的算法等。解密者總要修改部分指令, 達(dá)到某種目的。然而, 反解密的工作是在后面的loop2程序段中,是用到了sub2程序段中的指令字節(jié)(這里是用了4個字節(jié))進(jìn)行運(yùn)算(這里是用"異或"運(yùn)算),它的結(jié)果將直接影響下面程序的正確執(zhí)行(正確的運(yùn)算結(jié)果為80h)。如果改變該sub2程序段,則在loop2程序段中將程序引入歧途, 會不知不覺地走入迷途。如果在硬件設(shè)計上有電擦除eeprom,可以進(jìn)一步將程序中的數(shù)據(jù)修改(或刪除),使跟蹤者造成設(shè)備的"損壞",無法重新分析程序。
上面介紹的單片機(jī)加密方法,是阻止解密者非法獲得rom中的程序或者使rom中的程序無法在復(fù)制的單片機(jī)系統(tǒng)中運(yùn)行。在實際應(yīng)用中,判斷程序正常運(yùn)行與被跟蹤運(yùn)行是有很多方法的。例如,可以根據(jù)時鐘計時斷
熱門點擊
- 單片機(jī)簡介與單片機(jī)的發(fā)展歷史
- 基于控制專用單片機(jī)的無刷直流電機(jī)控制器
- 采用混合信號高電壓單片機(jī)實現(xiàn)LED降壓-升壓
- MCS-51單片機(jī)的指令時序
- MCS51系列單片機(jī)軟件復(fù)位的方法
- MSP430單片機(jī)與nRF905無線通信系統(tǒng)
- 小型單片機(jī)系統(tǒng)延時關(guān)機(jī)電路
- 單片機(jī)通用模擬串口C程序
- 8051單片機(jī)的I2C接口并行擴(kuò)展
- 單片機(jī)應(yīng)用領(lǐng)域
推薦技術(shù)資料
- 硬盤式MP3播放器終級改
- 一次偶然的機(jī)會我結(jié)識了NE0 2511,那是一個遠(yuǎn)方的... [詳細(xì)]
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車用精準(zhǔn)定位
- 高效先進(jìn)封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究