的偏移量進(jìn)行跳轉(zhuǎn)執(zhí)行。在指令1執(zhí)行后通過其末尾增加的跳轉(zhuǎn)指令從保存在上述固定位置處的偏移量表中獲取對(duì)應(yīng)的具體偏移量(即:偏移量A),即可計(jì)算出實(shí)際下條指令的位置(jmp+A),從而正確地跳轉(zhuǎn)到指令2處執(zhí)行。后續(xù)指令3、指令4采用同樣的方式根據(jù)偏移量表中的偏移量信息跳轉(zhuǎn)執(zhí)行。
[0030]本實(shí)施例通過將固件待保護(hù)代碼段中的指令打亂順序,給各指令增加跳轉(zhuǎn)指令,并將其偏移量等信息存儲(chǔ)在硬件設(shè)備外部,運(yùn)行時(shí)從外部載入偏移量表保存到硬件設(shè)備內(nèi)存的某個(gè)固定位置,根據(jù)偏移量表中的偏移量找到正確的指令執(zhí)行順序并執(zhí)行指令,因此,即使非法破解者繞過硬件設(shè)備芯片的內(nèi)存保護(hù)獲取到存儲(chǔ)在芯片內(nèi)部的固件的二進(jìn)制代碼,由于受保護(hù)代碼段中的指令已經(jīng)完全無序打亂,在沒有偏移量表的情況下,即使翻譯出指令代碼,也無法獲得指令正確的執(zhí)行順序,由此可以增加破解的難度,保護(hù)關(guān)鍵代碼,提高安全性。
[0031]圖2為本發(fā)明的用于固件的保護(hù)方法的第二實(shí)施例的流程圖。
[0032]本實(shí)施例不同于上述第一實(shí)施例之處在于,在固件的待保護(hù)代碼段打亂指令順序后,應(yīng)當(dāng)首先被執(zhí)行的第一條指令并不一定位于最前面。
[0033]仍以指令1-4為例,打亂后的指令順序例如為指令2、指令4、指令3和指令1。由于在固件運(yùn)行到受保護(hù)代碼段時(shí),順序錯(cuò)亂的四條指令中的最后一條指令是實(shí)際應(yīng)當(dāng)首先執(zhí)行的指令,因此本實(shí)施例中將關(guān)聯(lián)于該第一條指令的位置的入口點(diǎn)信息存儲(chǔ)在偏移量表中,該入口點(diǎn)信息可以是特定的偏移量。
[0034]可以將入口點(diǎn)跳轉(zhuǎn)指令添加到緊接所述待保護(hù)代碼段之前,即受保護(hù)代碼的前一代碼段的末尾處,在固件運(yùn)行到受保護(hù)代碼段處時(shí),該跳轉(zhuǎn)指令用于直接跳轉(zhuǎn)到受保護(hù)代碼段中的指令1處執(zhí)行。具體而言,固件程序運(yùn)行時(shí),從硬件設(shè)備外部載入偏移量表并保存到硬件設(shè)備內(nèi)存的某個(gè)固定位置,在運(yùn)行完受保護(hù)代碼段的前一段代碼后,添加在該前一段代碼末尾處的入口點(diǎn)跳轉(zhuǎn)指令根據(jù)存儲(chǔ)在該固定位置處的偏移量表中的入口點(diǎn)信息(如上述特定偏移量)找到受保護(hù)代碼段的程序入口點(diǎn)(即受保護(hù)代碼段中應(yīng)當(dāng)首先被執(zhí)行的指令1的位置)并跳轉(zhuǎn)執(zhí)行(即在亂序后的指令2、4、3、1中跳轉(zhuǎn)到最后一條),指令1執(zhí)行后通過其末尾增加的跳轉(zhuǎn)指令以及偏移量表中的偏移量A,即可計(jì)算出實(shí)際下條指令2的位置(jmp+A),從而跳轉(zhuǎn)到指令2處執(zhí)行。后續(xù)指令3、指令4采用同樣的方式根據(jù)偏移量表中的偏移量信息跳轉(zhuǎn)執(zhí)行。
[0035]本實(shí)施例通過混淆和隱藏受保護(hù)代碼段中的應(yīng)當(dāng)首先執(zhí)行的第一條指令的位置,同時(shí)混淆其他指令的排布順序,使得非法破解者難以獲知正確的指令順序,進(jìn)一步增加了固件的破解難度,提高了安全性。
[0036]圖3為本發(fā)明的用于固件的保護(hù)方法的第三實(shí)施例的流程圖。
[0037]本實(shí)施例不同于第一實(shí)施例之處在于,偏移量表的生成在指令打亂順序之前執(zhí)行。
[0038]具體為,先設(shè)計(jì)好每條指令打亂后的順序,將所設(shè)計(jì)的順序中每條指令與下一條指令間的預(yù)定偏移量保存到偏移量表中,然后根據(jù)設(shè)計(jì)好的偏移量表將固件的待保護(hù)的代碼段中的各條指令打亂順序,再在各條指令末尾添加跳轉(zhuǎn)指令。其他與第一實(shí)施例相同部分的描述在此省略。
[0039]通過本實(shí)施例的方式,能夠在固件的保護(hù)中對(duì)如何打亂指令順序進(jìn)行規(guī)劃安排,減輕程序操作人員的負(fù)擔(dān),尤其適用于受保護(hù)代碼段中指令較多的情況。
[0040]在一些實(shí)施例中,存儲(chǔ)在硬件設(shè)備外部的上述偏移量表中還可以存儲(chǔ)有受保護(hù)的代碼段中指令的實(shí)際執(zhí)行順序等附加信息,以便于程序操作人員查看。
[0041]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種用于固件的保護(hù)方法,所述固件存儲(chǔ)在硬件設(shè)備中,所述保護(hù)方法包括: 將所述固件的待保護(hù)的代碼段中的各條指令打亂順序; 將每條指令與實(shí)際應(yīng)當(dāng)執(zhí)行的下一條指令之間的偏移量保存到偏移量表中,將偏移量表保存在所述硬件設(shè)備的外部; 在每條指令末尾添加跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令用于根據(jù)所述偏移量表在指令順序打亂后的所述代碼段內(nèi)執(zhí)行從每條指令到實(shí)際應(yīng)當(dāng)執(zhí)行的下一條指令的跳轉(zhuǎn)。2.如權(quán)利要求1所述的固件保護(hù)方法,其特征在于, 所述偏移量表還包括入口點(diǎn)信息,所述入口點(diǎn)信息為關(guān)聯(lián)于指令順序打亂后的所述代碼段中實(shí)際應(yīng)當(dāng)首先執(zhí)行的指令的偏移量。3.如權(quán)利要求2所述的固件保護(hù)方法,其特征在于, 在緊接所述代碼段之前添加入口點(diǎn)跳轉(zhuǎn)指令,其用于根據(jù)偏移量表中的所述入口點(diǎn)信息跳轉(zhuǎn)到所述待保護(hù)代碼段中實(shí)際應(yīng)當(dāng)首先執(zhí)行的指令。4.如權(quán)利要求1至3中任一項(xiàng)所述的固件保護(hù)方法,其特征在于,預(yù)先生成所述偏移量表并根據(jù)所述偏移量表將固件的所述待保護(hù)的代碼段中的各條指令打亂順序。5.如權(quán)利要求1至3中任一項(xiàng)所述的固件保護(hù)方法,其特征在于,在將所述待保護(hù)的代碼段中的各條指令打亂順序之后生成所述偏移量表。6.如權(quán)利要求1至3中任一項(xiàng)所述的固件保護(hù)方法,其特征在于,根據(jù)自定義算法或隨機(jī)亂序算法自動(dòng)將所述各條指令打亂順序。7.如權(quán)利要求1至3中任一項(xiàng)所述的固件保護(hù)方法,其特征在于,根據(jù)用戶指令將所述各條指令打亂順序。8.如權(quán)利要求1至3中任一項(xiàng)所述的固件保護(hù)方法,其特征在于,所述偏移量表通過文件的方式存儲(chǔ)或通過變量的方式記錄。9.如權(quán)利要求1至3中任一項(xiàng)所述的固件保護(hù)方法,其特征在于,將所述偏移量表經(jīng)過加密后保存在所述硬件設(shè)備外部。10.如權(quán)利要求1至3中任一項(xiàng)所述的固件保護(hù)方法,其特征在于,所述偏移量表中還包括指令順序打亂后的所述代碼段中各指令的實(shí)際執(zhí)行順序信息。
【專利摘要】本發(fā)明公開了一種用于固件的保護(hù)方法,所述固件存儲(chǔ)在硬件設(shè)備中,所述保護(hù)方法包括:將所述固件的待保護(hù)的代碼段中的各條指令打亂順序;將每條指令與實(shí)際應(yīng)當(dāng)執(zhí)行的下一條指令之間的偏移量保存到偏移量表中,將偏移量表保存在所述硬件設(shè)備的外部;在每條指令末尾添加跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令用于根據(jù)所述偏移量表在指令順序打亂后的所述代碼段內(nèi)執(zhí)行從每條指令到實(shí)際應(yīng)當(dāng)執(zhí)行的下一條指令的跳轉(zhuǎn)。通過本發(fā)明的用于固件的保護(hù)方法,可以保護(hù)固件中的關(guān)鍵代碼段,增加破解固件的難度,從而提高固件的安全性。
【IPC分類】G06F9/30, G06F21/12
【公開號(hào)】CN105354009
【申請(qǐng)?zhí)枴緾N201510662037
【發(fā)明人】吳曉龍, 孫吉平
【申請(qǐng)人】北京深思數(shù)盾科技有限公司
【公開日】2016年2月24日
【申請(qǐng)日】2015年10月14日