移動終端下基于虛擬技術(shù)的代碼保護(hù)方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提出移動終端下基于虛擬技術(shù)的代碼保護(hù)方法及系統(tǒng),首先解析可執(zhí)行文件的代碼塊,獲取代碼塊中的代碼指令,之后將代碼指令拆分為機(jī)器指令,并將拆分出的標(biāo)準(zhǔn)機(jī)器指令置換為用戶自定制的私有自定義指令格式和含義,保留原有操作數(shù),在執(zhí)行過程中通過虛擬技術(shù)執(zhí)行自定義指令,從而實(shí)現(xiàn)實(shí)際執(zhí)行代碼的目的。本發(fā)明能對重要執(zhí)行代碼和邏輯進(jìn)行保護(hù),使其不被逆向工程,且自定義指令通過虛擬技術(shù)進(jìn)行執(zhí)行,不用擔(dān)心其在多硬件架構(gòu)上的跨平臺問題。
【專利說明】
移動終端下基于虛擬技術(shù)的代碼保護(hù)方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及移動安全技術(shù)領(lǐng)域,尤其涉及移動終端下基于虛擬技術(shù)的代碼保護(hù)方 法及系統(tǒng)。
【背景技術(shù)】
[0002] 安卓系統(tǒng)目前支持多種可執(zhí)行文件格式,例如APK、DEX、ELF等,并且在安卓4.4之 后添加了一種新的運(yùn)行時(shí)環(huán)境ART,該運(yùn)行時(shí)環(huán)境下的可執(zhí)行文件格式為0ΑΤ,安卓5.0以 后,便將原來的Dalvik運(yùn)行時(shí)環(huán)境完全替代ART運(yùn)行時(shí)環(huán)境,并且安卓系統(tǒng)在運(yùn)行的CPU架 構(gòu)上,除了 ARM,還增加了對X86、MIPS以及ARM64位的支持。
[0003] 由于標(biāo)準(zhǔn)的指令架構(gòu)下的可執(zhí)行代碼采用公開標(biāo)準(zhǔn)的指令格式和定義,所以其能 夠被通用的逆向分析工具進(jìn)行反編譯或反匯編。例如,對于APK及DEX文件,可以被APKTool、 dex2jar以及JEB等反編譯工具進(jìn)行反編譯,對于ELF文件,可以通過IDA及hexray反編譯工 具進(jìn)行反編譯,從而進(jìn)行代碼的分析和逆向還原。目前有很多黑客利用這一手段對代碼進(jìn) 行惡意分析,嚴(yán)重危害信息安全。
【發(fā)明內(nèi)容】
[0004] 針對目前安卓系統(tǒng)平臺中的可執(zhí)行文件易被反編譯和逆向還原,本發(fā)明提出了移 動終端下基于虛擬技術(shù)的代碼保護(hù)方法及系統(tǒng),首先解析可執(zhí)行文件的代碼塊,獲取代碼 塊中的代碼指令,之后將代碼指令拆分為機(jī)器指令,并將拆分出的標(biāo)準(zhǔn)機(jī)器指令置換為用 戶自定制的私有自定義指令格式和含義,保留原有操作數(shù),在執(zhí)行過程中通過虛擬技術(shù)執(zhí) 行自定義指令,從而實(shí)現(xiàn)實(shí)際執(zhí)行代碼的目的。
[0005] 具體
【發(fā)明內(nèi)容】
包括: 移動終端下基于虛擬技術(shù)的代碼保護(hù)方法,包括: 識別和解析安卓系統(tǒng)中的可執(zhí)行文件,并確定可執(zhí)行文件代碼塊在內(nèi)存中的分布位 置,該過程支持多種可執(zhí)行文件的格式識別和解析,包括APK、DEX、ELF、OAT等格式的可執(zhí)行 文件; 解析可執(zhí)行文件代碼塊,獲取代碼指令,并將代碼指令拆分為由操作碼和操作數(shù)構(gòu)成 的機(jī)器指令,該過程支持多種架構(gòu)下的代碼指令的獲取、識別和解析,包括Dalvik、ARM、 Thumb、ARM64、X86、MIPS等架構(gòu)下的代碼指令,并將解析的各代碼指令拆分為相應(yīng)架構(gòu)下的 機(jī)器指令; 根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為自定義指令; 當(dāng)執(zhí)行自定義指令時(shí),根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,對自定義指令的實(shí)際指令 類型進(jìn)行解析; 根據(jù)自定義指令的實(shí)際指令類型,對自定義指令進(jìn)行模擬執(zhí)行,該過程支持對不同架 構(gòu)下的機(jī)器指令進(jìn)行模擬執(zhí)行。
[0006] 進(jìn)一步地,所述標(biāo)準(zhǔn)指令與自定義指令映射表包含各指令類型的機(jī)器指令的標(biāo)準(zhǔn) 操作碼與自定義操作碼的對應(yīng)關(guān)系,且一個(gè)標(biāo)準(zhǔn)操作碼對應(yīng)至少一個(gè)自定義操作碼,一個(gè) 自定義操作碼只對應(yīng)一個(gè)標(biāo)準(zhǔn)操作碼。
[0007] 進(jìn)一步地,所述根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為自定義指 令,具體為:根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將待保護(hù)指令類型的機(jī)器指令的標(biāo)準(zhǔn)操作 碼置換為自定義操作碼,機(jī)器指令的操作數(shù)不變。
[0008] 進(jìn)一步地,所述指令類型包括:算數(shù)指令、邏輯指令、跳轉(zhuǎn)指令、過程調(diào)用指令、加 載/存儲指令。
[0009] 進(jìn)一步地,所述對自定義指令進(jìn)行模擬執(zhí)行,包括模擬實(shí)現(xiàn)自定義指令對應(yīng)的實(shí) 際機(jī)器指令,還包括模擬不同架構(gòu)的寄存器,模擬內(nèi)存分配,以及模擬產(chǎn)生的系統(tǒng)調(diào)用和 API調(diào)用;其中,所述寄存器包括通用寄存器、狀態(tài)寄存器;其中模擬不同架構(gòu)的寄存器,模 擬內(nèi)存分配具體為:根據(jù)所要模擬執(zhí)行的機(jī)器指令在執(zhí)行過程中所占的內(nèi)存,模擬分配一 定的內(nèi)存空間,實(shí)現(xiàn)模擬對內(nèi)存的操作,并將模擬分配的內(nèi)存空間中的一部分模擬為???間,利用模擬對寄存器的操作來模擬使用所述??臻g。
[0010] 移動終端下基于虛擬技術(shù)的代碼保護(hù)系統(tǒng),包括: 可執(zhí)行文件解析模塊,用于識別和解析安卓系統(tǒng)中的可執(zhí)行文件,并確定可執(zhí)行文件 代碼塊在內(nèi)存中的分布位置,該過程支持多種可執(zhí)行文件的格式識別和解析,包括APK、 DEX、ELF、0ΑΤ等格式的可執(zhí)行文件; 指令獲取模塊,用于解析可執(zhí)行文件代碼塊,獲取代碼指令,并將代碼指令拆分為由操 作碼和操作數(shù)構(gòu)成的機(jī)器指令,該過程支持多種架構(gòu)下的代碼指令的獲取、識別和解析,包 括0&1¥丨1^)1?1、1111111113)1?164486、11?3等架構(gòu)下的代碼指令,并將解析的各代碼指令拆分 為相應(yīng)架構(gòu)下的機(jī)器指令; 自定義指令置換模塊,用于根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為自 定義指令; 指令類型解析模塊,用于當(dāng)執(zhí)行自定義指令時(shí),根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,對 自定義指令的實(shí)際指令類型進(jìn)行解析; 模擬執(zhí)行模塊,用于根據(jù)自定義指令的實(shí)際指令類型,對自定義指令進(jìn)行模擬執(zhí)行。
[0011] 進(jìn)一步地,所述標(biāo)準(zhǔn)指令與自定義指令映射表包含各指令類型的機(jī)器指令的標(biāo)準(zhǔn) 操作碼與自定義操作碼的對應(yīng)關(guān)系,且一個(gè)標(biāo)準(zhǔn)操作碼對應(yīng)至少一個(gè)自定義操作碼,一個(gè) 自定義操作碼只對應(yīng)一個(gè)標(biāo)準(zhǔn)操作碼。
[0012] 進(jìn)一步地,所述自定義指令置換模塊,具體用于:根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射 表,將待保護(hù)指令類型的機(jī)器指令的標(biāo)準(zhǔn)操作碼置換為自定義操作碼,機(jī)器指令的操作數(shù) 不變。
[0013] 進(jìn)一步地,所述指令類型包括:算數(shù)指令、邏輯指令、跳轉(zhuǎn)指令、過程調(diào)用指令、加 載/存儲指令。
[0014] 進(jìn)一步地,所述對自定義指令進(jìn)行模擬執(zhí)行,包括模擬實(shí)現(xiàn)自定義指令對應(yīng)的實(shí) 際機(jī)器指令,還包括模擬不同架構(gòu)的寄存器,模擬內(nèi)存分配,以及模擬產(chǎn)生的系統(tǒng)調(diào)用和 API調(diào)用;其中,所述寄存器包括通用寄存器、狀態(tài)寄存器;其中模擬不同架構(gòu)的寄存器,模 擬內(nèi)存分配具體為:根據(jù)所要模擬執(zhí)行的機(jī)器指令在執(zhí)行過程中所占的內(nèi)存,模擬分配一 定的內(nèi)存空間,實(shí)現(xiàn)模擬對內(nèi)存的操作,并將模擬分配的內(nèi)存空間中的一部分模擬為???間,利用模擬對寄存器的操作來模擬使用所述??臻g。
[0015] 本發(fā)明的有益效果是: 針對目前安卓系統(tǒng)平臺中的可執(zhí)行文件易被反編譯和逆向還原,本發(fā)明提出了移動終 端下基于虛擬技術(shù)的代碼保護(hù)方法及系統(tǒng),將可執(zhí)行文件解析為機(jī)器指令,并按規(guī)定將機(jī) 器指令置換為自定義指令,起到了保護(hù)代碼的作用,逆向分析工具無法正確解析保護(hù)后的 自定義指令,只能獲取出無法識別的二進(jìn)制序列,故本發(fā)明能對重要執(zhí)行代碼和邏輯進(jìn)行 保護(hù),使其不被逆向工程; 本發(fā)明自定義指令通過虛擬技術(shù)進(jìn)行執(zhí)行,不用擔(dān)心其在多硬件架構(gòu)上的跨平臺問 題,且虛擬執(zhí)行過程中完全按照自定義指令與實(shí)際指令間的對應(yīng)關(guān)系進(jìn)行執(zhí)行,從而達(dá)到 執(zhí)行實(shí)際代碼的目的。
【附圖說明】
[0016] 為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù) 描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中 記載的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0017] 圖1為本發(fā)明移動終端下基于虛擬技術(shù)的代碼保護(hù)方法的自定義指令生成方法流 程圖; 圖2為本發(fā)明移動終端下基于虛擬技術(shù)的代碼保護(hù)方法的自定義指令執(zhí)行方法流程 圖; 圖3為本發(fā)明移動終端下基于虛擬技術(shù)的代碼保護(hù)系統(tǒng)結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0018] 為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實(shí)施例中的技術(shù)方案,并使本發(fā)明的 上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明中技術(shù)方案作進(jìn)一步詳 細(xì)的說明。
[0019] 本發(fā)明給出了移動終端下基于虛擬技術(shù)的代碼保護(hù)方法的自定義指令生成方法 實(shí)施例,如圖1所示,包括: S101:識別和解析安卓系統(tǒng)中的可執(zhí)行文件,并確定可執(zhí)行文件代碼塊在內(nèi)存中的分 布位置,該過程支持多種可執(zhí)行文件的格式識別和解析,包括APK、DEX、ELF、OAT等格式的可 執(zhí)行文件; S102:解析可執(zhí)行文件代碼塊,獲取代碼指令,并將代碼指令拆分為由操作碼和操作數(shù) 構(gòu)成的機(jī)器指令,該過程支持多種架構(gòu)下的代碼指令的獲取、識別和解析,包括Dalvik、 ARM、Thumb、ARM64、X86、MIPS等架構(gòu)下的代碼指令,并將解析的各代碼指令拆分為相應(yīng)架構(gòu) 下的機(jī)器指令; S103:根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為自定義指令。
[0020] 優(yōu)選地,所述標(biāo)準(zhǔn)指令與自定義指令映射表包含各指令類型的機(jī)器指令的標(biāo)準(zhǔn)操 作碼與自定義操作碼的對應(yīng)關(guān)系,且一個(gè)標(biāo)準(zhǔn)操作碼對應(yīng)至少一個(gè)自定義操作碼,一個(gè)自 定義操作碼只對應(yīng)一個(gè)標(biāo)準(zhǔn)操作碼。
[0021] 優(yōu)選地,所述根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為自定義指令, 具體為:根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將待保護(hù)指令類型的機(jī)器指令的操作碼置換 為自定義操作碼,機(jī)器指令的操作數(shù)不變,根據(jù)需求,該過程可以將全部機(jī)器指令置換為自 定義指令,也可將其中一些指令類型的機(jī)器指令置換為自定義指令,該指令置換過程的實(shí) 現(xiàn)方法有兩種,一種是通過更改機(jī)器指令格式來實(shí)現(xiàn),另一種是通過指令函數(shù)實(shí)現(xiàn),以ARM 下的mo v指令為例: 假設(shè)要求對ARM架構(gòu)下的mov指令進(jìn)行保護(hù),以其中一條mov指令為例,假設(shè)該指令為 mov rl, rO,則 若通過更改機(jī)器指令格式來實(shí)現(xiàn)指令置換,且根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,mov 指令操作碼對應(yīng)的自定義操作碼為0x88的一個(gè)字節(jié),指令mov rl, rO的機(jī)器指令格式為:
則該mov指令可以被置換為如下形式的自定義指令:
自定義指令中0x88的一個(gè)字節(jié)對應(yīng)mov指令的操作碼,操作數(shù)不變,但是換為用16bit 位表示,0x88后的第一個(gè)16bit位為mov指令操作數(shù)1,第二個(gè)16bit位為mov指令操作數(shù)2; 若通過指令函數(shù)來實(shí)現(xiàn)指令置換,則需自定義類似如下形式的置換方法: def func_mov (opl, op2) { opl=op2; } 其實(shí)現(xiàn)置換過程的偽代碼為: fake_mov rl, opl; fake_mov rO, op2; fake_push rl; fake_push rO; fake_blx func_mov; 其中rl,r0為虛擬寄存器,實(shí)現(xiàn)虛擬棧空間,首先將mov指令的操作數(shù)1移動到虛擬寄存 器rl,將mov指令的操作數(shù)2移動到虛擬寄存器r0,然后將rl、r2的值壓入棧頂,最后調(diào)用置 換方法,實(shí)現(xiàn)指令置換。
[0022] 本發(fā)明還給出了移動終端下基于虛擬技術(shù)的代碼保護(hù)方法的自定義指令執(zhí)行方 法實(shí)施例,如圖2所示,包括: S201:當(dāng)執(zhí)行自定義指令時(shí),根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,對自定義指令的實(shí)際 指令類型進(jìn)行解析; S202:根據(jù)自定義指令的實(shí)際指令類型,對自定義指令進(jìn)行模擬執(zhí)行,該過程支持對不 同架構(gòu)下的機(jī)器指令進(jìn)行模擬執(zhí)行。
[0023] 優(yōu)選地,所述指令類型包括:算數(shù)指令、邏輯指令、跳轉(zhuǎn)指令、過程調(diào)用指令、加載/ 存儲指令。
[0024] 優(yōu)選地,所述對自定義指令進(jìn)行模擬執(zhí)行,包括模擬實(shí)現(xiàn)自定義指令對應(yīng)的實(shí)際 機(jī)器指令,還包括模擬不同架構(gòu)的寄存器,模擬內(nèi)存分配,以及模擬產(chǎn)生的系統(tǒng)調(diào)用和API 調(diào)用;其中,所述寄存器包括通用寄存器、狀態(tài)寄存器; 所述模擬不同架構(gòu)的寄存器,模擬內(nèi)存分配具體為:根據(jù)所要模擬執(zhí)行的機(jī)器指令在 執(zhí)行過程中所占的內(nèi)存,模擬分配一定的內(nèi)存空間,實(shí)現(xiàn)模擬對內(nèi)存的操作,并將模擬分配 的內(nèi)存空間中的一部分模擬為棧空間,利用模擬對寄存器的操作來模擬使用所述棧空間; 所述模擬產(chǎn)生的系統(tǒng)調(diào)用和API調(diào)用具體為:對可能產(chǎn)生的,具有實(shí)際文件系統(tǒng)寫入、 網(wǎng)絡(luò)連接、通訊行為等敏感行為的系統(tǒng)調(diào)用和API調(diào)用,編寫簡易代碼,通過代碼進(jìn)行模擬 實(shí)現(xiàn);對于其他可能產(chǎn)生的,不存在上述敏感行為的系統(tǒng)調(diào)用和API調(diào)用,根據(jù)具體機(jī)器指 令類型,向系統(tǒng)和API傳遞參數(shù),并獲取返回值,實(shí)現(xiàn)模擬過程。
[0025] 本發(fā)明還給出了移動終端下基于虛擬技術(shù)的代碼保護(hù)的系統(tǒng)實(shí)施例,如圖3所示, 包括: 可執(zhí)行文件解析模塊301,用于識別和解析安卓系統(tǒng)中的可執(zhí)行文件,并確定可執(zhí)行文 件代碼塊在內(nèi)存中的分布位置,該過程支持多種可執(zhí)行文件的格式識別和解析,包括APK、 DEX、ELF、0ΑΤ等格式的可執(zhí)行文件; 指令獲取模塊302,用于解析可執(zhí)行文件代碼塊,獲取代碼指令,并將代碼指令拆分為 由操作碼和操作數(shù)構(gòu)成的機(jī)器指令,該過程支持多種架構(gòu)下的代碼指令的獲取、識別和解 析,包括〇&1¥丨1^^冊、1111111113^1?164、乂86、11?3等架構(gòu)下的代碼指令,并將解析的各代碼指令 拆分為相應(yīng)架構(gòu)下的機(jī)器指令; 自定義指令置換模塊303,用于根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為 自定義指令; 指令類型解析模塊304,用于當(dāng)執(zhí)行自定義指令時(shí),根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射 表,對自定義指令的實(shí)際指令類型進(jìn)行解析; 模擬執(zhí)行模塊305,用于根據(jù)自定義指令的實(shí)際指令類型,對自定義指令進(jìn)行模擬執(zhí) 行。
[0026] 優(yōu)選地,所述標(biāo)準(zhǔn)指令與自定義指令映射表包含各指令類型的機(jī)器指令的標(biāo)準(zhǔn)操 作碼與自定義操作碼的對應(yīng)關(guān)系,且一個(gè)標(biāo)準(zhǔn)操作碼對應(yīng)至少一個(gè)自定義操作碼,一個(gè)自 定義操作碼只對應(yīng)一個(gè)標(biāo)準(zhǔn)操作碼。
[0027]優(yōu)選地,所述自定義指令置換模塊303,具體用于:根據(jù)標(biāo)準(zhǔn)指令與自定義指令映 射表,將待保護(hù)指令類型的機(jī)器指令的操作碼置換為自定義操作碼,機(jī)器指令的操作數(shù)不 變。
[0028] 優(yōu)選地,所述指令類型包括:算數(shù)指令、邏輯指令、跳轉(zhuǎn)指令、過程調(diào)用指令、加載/ 存儲指令。
[0029] 優(yōu)選地,所述對自定義指令進(jìn)行模擬執(zhí)行,包括模擬實(shí)現(xiàn)自定義指令對應(yīng)的實(shí)際 機(jī)器指令,還包括模擬不同架構(gòu)的寄存器,模擬內(nèi)存分配,以及模擬產(chǎn)生的系統(tǒng)調(diào)用和API 調(diào)用;其中,所述寄存器包括通用寄存器、狀態(tài)寄存器;其中模擬不同架構(gòu)的寄存器,模擬內(nèi) 存分配具體為:根據(jù)所要模擬執(zhí)行的機(jī)器指令在執(zhí)行過程中所占的內(nèi)存,模擬分配一定的 內(nèi)存空間,實(shí)現(xiàn)模擬對內(nèi)存的操作,并將模擬分配的內(nèi)存空間中的一部分模擬為??臻g,利 用模擬對寄存器的操作來模擬使用所述??臻g。
[0030] 本說明書中方法的實(shí)施例采用遞進(jìn)的方式描述,對于系統(tǒng)的實(shí)施例而言,由于其 基本相似于方法實(shí)施例,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。 針對目前安卓系統(tǒng)平臺中的可執(zhí)行文件易被反編譯和逆向還原,本發(fā)明提出了移動終端下 基于虛擬技術(shù)的代碼保護(hù)方法及系統(tǒng),將可執(zhí)行文件解析為機(jī)器指令,并按規(guī)定將機(jī)器指 令置換為自定義指令,起到了保護(hù)代碼的作用,逆向分析工具無法正確解析保護(hù)后的自定 義指令,只能獲取出無法識別的二進(jìn)制序列,故本發(fā)明能對重要執(zhí)行代碼和邏輯進(jìn)行保護(hù), 使其不被逆向工程;本發(fā)明自定義指令通過虛擬技術(shù)進(jìn)行執(zhí)行,不用擔(dān)心其在多硬件架構(gòu) 上的跨平臺問題,且虛擬執(zhí)行過程中完全按照自定義指令與實(shí)際指令間的對應(yīng)關(guān)系進(jìn)行執(zhí) 行,從而達(dá)到執(zhí)行實(shí)際代碼的目的。
[0031]雖然通過實(shí)施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和 變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的 精神。
【主權(quán)項(xiàng)】
1. 移動終端下基于虛擬技術(shù)的代碼保護(hù)方法,其特征在于,包括: 識別和解析安卓系統(tǒng)中的可執(zhí)行文件,并確定可執(zhí)行文件代碼塊在內(nèi)存中的分布位 置; 解析可執(zhí)行文件代碼塊,獲取代碼指令,并將代碼指令拆分為由操作碼和操作數(shù)構(gòu)成 的機(jī)器指令; 根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為自定義指令; 當(dāng)執(zhí)行自定義指令時(shí),根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,對自定義指令的實(shí)際指令 類型進(jìn)行解析; 根據(jù)自定義指令的實(shí)際指令類型,對自定義指令進(jìn)行模擬執(zhí)行。2. 如權(quán)利要求1所述的方法,其特征在于,所述標(biāo)準(zhǔn)指令與自定義指令映射表包含各指 令類型的機(jī)器指令的標(biāo)準(zhǔn)操作碼與自定義操作碼的對應(yīng)關(guān)系,且一個(gè)標(biāo)準(zhǔn)操作碼對應(yīng)至少 一個(gè)自定義操作碼,一個(gè)自定義操作碼只對應(yīng)一個(gè)標(biāo)準(zhǔn)操作碼。3. 如權(quán)利要求2所述的方法,其特征在于,所述根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將 機(jī)器指令置換為自定義指令,具體為:根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將待保護(hù)指令類 型的機(jī)器指令的標(biāo)準(zhǔn)操作碼置換為自定義操作碼,機(jī)器指令的操作數(shù)不變。4. 如權(quán)利要求1或2或3所述的方法,其特征在于,所述指令類型包括:算數(shù)指令、邏輯指 令、跳轉(zhuǎn)指令、過程調(diào)用指令、加載/存儲指令。5. 如權(quán)利要求1或2或3所述的方法,其特征在于,所述對自定義指令進(jìn)行模擬執(zhí)行,包 括模擬實(shí)現(xiàn)自定義指令對應(yīng)的實(shí)際機(jī)器指令,還包括模擬不同架構(gòu)的寄存器,模擬內(nèi)存分 配,以及模擬產(chǎn)生的系統(tǒng)調(diào)用和API調(diào)用;其中,所述寄存器包括通用寄存器、狀態(tài)寄存器。6. 移動終端下基于虛擬技術(shù)的代碼保護(hù)系統(tǒng),其特征在于,包括: 可執(zhí)行文件解析模塊,用于識別和解析安卓系統(tǒng)中的可執(zhí)行文件,并確定可執(zhí)行文件 代碼塊在內(nèi)存中的分布位置; 指令獲取模塊,用于解析可執(zhí)行文件代碼塊,獲取代碼指令,并將代碼指令拆分為由操 作碼和操作數(shù)構(gòu)成的機(jī)器指令; 自定義指令置換模塊,用于根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,將機(jī)器指令置換為自 定義指令; 指令類型解析模塊,用于當(dāng)執(zhí)行自定義指令時(shí),根據(jù)標(biāo)準(zhǔn)指令與自定義指令映射表,對 自定義指令的實(shí)際指令類型進(jìn)行解析; 模擬執(zhí)行模塊,用于根據(jù)自定義指令的實(shí)際指令類型,對自定義指令進(jìn)行模擬執(zhí)行。7. 如權(quán)利要求6所述的系統(tǒng),其特征在于,所述標(biāo)準(zhǔn)指令與自定義指令映射表包含各指 令類型的機(jī)器指令的標(biāo)準(zhǔn)操作碼與自定義操作碼的對應(yīng)關(guān)系,且一個(gè)標(biāo)準(zhǔn)操作碼對應(yīng)至少 一個(gè)自定義操作碼,一個(gè)自定義操作碼只對應(yīng)一個(gè)標(biāo)準(zhǔn)操作碼。8. 如權(quán)利要求7所述的系統(tǒng),其特征在于,所述自定義指令置換模塊,具體用于:根據(jù)標(biāo) 準(zhǔn)指令與自定義指令映射表,將待保護(hù)指令類型的機(jī)器指令的標(biāo)準(zhǔn)操作碼置換為自定義操 作碼,機(jī)器指令的操作數(shù)不變。9. 如權(quán)利要求6或7或8所述的系統(tǒng),其特征在于,所述指令類型包括:算數(shù)指令、邏輯指 令、跳轉(zhuǎn)指令、過程調(diào)用指令、加載/存儲指令。10. 如權(quán)利要求6或7或8所述的系統(tǒng),其特征在于,所述對自定義指令進(jìn)行模擬執(zhí)行,包 括模擬實(shí)現(xiàn)自定義指令對應(yīng)的實(shí)際機(jī)器指令,還包括模擬不同架構(gòu)的寄存器,模擬內(nèi)存分 配,以及模擬產(chǎn)生的系統(tǒng)調(diào)用和API調(diào)用;其中,所述寄存器包括通用寄存器、狀態(tài)寄存器。
【文檔編號】G06F21/14GK105975816SQ201510984580
【公開日】2016年9月28日
【申請日】2015年12月25日
【發(fā)明人】潘博文, 馬志遠(yuǎn), 潘宣辰
【申請人】武漢安天信息技術(shù)有限責(zé)任公司