專利名稱:信息處理裝置及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種信息處理裝置及其方法,并且尤其涉及一種使程 序的分析或改動困難的技術(shù)。
背景技術(shù):
為了版權(quán)保護或加密密鑰的保護的目的,需要一種創(chuàng)建難以分析 或改動的程序的技術(shù)。因此常規(guī)上已知用于加密程序的技術(shù)和用于混淆(obfuscate )程序的技術(shù)。Yuichiro Kanzaki, Akito Monden, Masahide Nakamura, Ken誦ichi Matsumoto, "A Software Protection Method Based on Instruction Camouflage", the Journal of IEICE(Denshi Joho Tsushin Gakkaishi), Vol. J87國A, No. 6, pp. 755-767, June 2004 (下文被稱為Kanzaki)描述了這些技術(shù)的特征, 并且作為一種不同于這些技術(shù)的技術(shù),提出了一種其中創(chuàng)建執(zhí)行自修 改進程的程序的配置。但是,盡管Kanzaki公開了一種其中使用自修改進程偽裝程序的 真實命令碼的配置,但是抵抗分析的保護程度并不能被認為是足夠的。 換句話說,盡管與常規(guī)技術(shù)相比,Kanzaki的配置使程序更好地4氐抗 靜態(tài)分析,在靜態(tài)分析中執(zhí)行分析而沒有執(zhí)行程序,但是存在當(dāng)執(zhí)行 足夠的靜態(tài)分析時該程序可被分析的問題。發(fā)明內(nèi)容考慮到上迷問題構(gòu)思本發(fā)明,并且本發(fā)明的一個目的是提供一種 能夠使得程序的分析或改動甚至更加困難的技術(shù)。根據(jù)本發(fā)明的一個方面, 一種信息處理裝置,包括確定單元,適于在處理目標程序中包含的指令之中確定要被修改為偽裝指令的目標指令,偽裝指令生成單元,適于生成對應(yīng)于該目標指令的偽裝指令, 還原命令生成單元,適于生成用于將生成的偽裝指令還原成對應(yīng)的目標指令的還原命令,以及適于通過生成的偽裝指令修改處理目標程序中包含的目標指令, 并將還原命令添加到該程序中的單元,其中,該還原命令通過參考存儲該處理目標程序中包含的處理命 令的輸出值的存儲器,并基于該參考值識別目標指令在程序中的位置 或該目標指令,執(zhí)行還原。根據(jù)本發(fā)明的另一方面, 一種信息處理方法,包括以下步驟 在處理目標程序中包含的指令之中確定要被修改為偽裝指令的 目標指令,生成對應(yīng)于該目標指令的偽裝指令,生成用于將生成的偽裝指令還原成對應(yīng)的目標指令的還原命令,以及通過生成的偽裝指令修改處理目標程序中包含的目標指令,并將 還原命令添加到該程序中,其中,該還原命令通過參考存儲該處理目標程序中包含的處理命 令的輸出值的存儲器,并基于該參考值識別目標指令在程序中的位置 或該目標指令,執(zhí)行還原。本發(fā)明的其它特征在下文(參照附圖)對示例性實施例的描述中 將變得清楚。
圖l是示出基于自修改進程添加程序的處理的流程的流程圖,圖2示出C源程序的示例。圖3是示出計算機裝置的內(nèi)部配置的框圖。圖4A和4B示出匯編程序的示例。圖5示出作為添加自修改進程的結(jié)果的匯編程序的示例。圖6示出C源程序的另一示例。圖7示出執(zhí)行圖2中的代碼的結(jié)果。圖8示出執(zhí)行圖6中的代碼的結(jié)果。圖9是示出流程圖示例的圖。圖IO是示出可能的流程圖的示例的圖。圖ll是示出可能的流程圖的另一示例的圖。圖12是示出可能的流程圖的另一示例的圖。圖13A和13B示出匯編程序的示例。圖14示出已添加自修改進程的匯編程序的示例。
具體實施方式
下文將參照附圖詳細描述本發(fā)明的實施例。但是,應(yīng)理解,本實施例中提及的組成元件僅是用于說明性目的而給出的,本發(fā)明的范圍不被解釋為被這些組成元件限制。此外,本實施例中所述的特征的組 合并非全部都是解決本發(fā)明的問題的手段所必需的。第一實施例 計算機裝置的配置將參照圖3描述此實施例的計算機裝置(圖像處理裝置)的內(nèi)部 配置。圖3是示出計算機裝置的內(nèi)部配置的框圖。此內(nèi)部配置是本說 明書中的所有實施例共有的。如圖3所示,計算機裝置300包括網(wǎng)絡(luò)接口 301、外部介質(zhì)讀/ 寫設(shè)備302、 CPU 303、 ROM 304、 RAM 305和硬盤306。此外,計 算機裝置300包括電源307、指示輸入設(shè)備接口 308、監(jiān)視器接口 309、 總線310等。網(wǎng)絡(luò)接口 301是用于與外部設(shè)備通信的通信接口,并且由例如 LAN接口或無線LAN接口等實現(xiàn)。外部介質(zhì)讀/寫設(shè)備302是用于從 外部介質(zhì)讀數(shù)據(jù)/向外部介質(zhì)寫數(shù)據(jù)的設(shè)備。外部介質(zhì)讀/寫設(shè)備302 從其讀數(shù)據(jù)/向其寫數(shù)據(jù)的外部介質(zhì)的示例包括軟盤、CD-R、 DVD、 USB等。CPU 303是控制計算機裝置300的總體操作的中央處理單元。 ROM304是只讀存儲器,并且存儲基本程序、基本數(shù)據(jù)等。RAM 305 是可寫存儲器,并且用作用于被CPU303執(zhí)行的操作的工作區(qū)。硬盤(下文被稱為HD) 306是大容量外部存儲裝置,并且存儲 例如在操作之前和之后的數(shù)據(jù)。電源307向計算機裝置300供電。指 示輸入設(shè)備接口 308是與指示輸入設(shè)備的接口,并且用戶經(jīng)由指示輸 入設(shè)備輸入指示和命令。連接到指示輸入設(shè)備接口 308的指示輸入設(shè) 備的示例包括鍵盤/點擊設(shè)備等。監(jiān)視器接口 309是與監(jiān)視器的接口,并且將用于顯示操作結(jié)果等 的屏幕輸出給連接到該接口的監(jiān)視器??偩€310在計算機裝置300的 組件之間提供連接,并傳輸信號。應(yīng)指出,計算機裝置300由個人計算機(PC )、工作站(WS )、 或個人數(shù)字助理(PDA)等實現(xiàn)。下文將描述的處理內(nèi)容(過程)被實現(xiàn)為程序(軟件)或模塊(硬 件)。例如,當(dāng)處理內(nèi)容被實現(xiàn)為程序時,該程序被存儲在ROM 304 或HD 306中,并且被存儲的程序被讀入CPU 303。然后,CPU 303 通過經(jīng)由總線310讀取HD 306上記錄的數(shù)據(jù)并且向HD 306寫數(shù)據(jù), 同時必要時使用RAM 305作為用于計算的空間(工作區(qū)),執(zhí)行處 理。當(dāng)處理內(nèi)容被實現(xiàn)為模塊時,執(zhí)行與程序的操作等同的操作的實 體被實現(xiàn)為例如LSI,并且被并入計算機裝置300。在此情況下,從 裝置的CPU 303向模塊(LSI)發(fā)出指示,這使得每個模塊開始操作 并執(zhí)行處理。下文,用于使計算機裝置300偽裝處理目標程序的指令以便使程 序的分析或改動困難的程序被稱為自修改進程添加程序。自修改進程 添加程序纟皮從外部介質(zhì)例如軟盤、CD-ROM或DVD經(jīng)由外部介質(zhì)讀/ 寫設(shè)備302安裝在計算機裝置300上,從而被存儲在HD 306中。作 為替換方案,自修改進程添加程序也可經(jīng)由網(wǎng)絡(luò)接口 301被存儲在HD 306中。自修改進程在此實施例中,通過編譯源程序以生成匯編程序,并對包含與條 件跳轉(zhuǎn)相關(guān)聯(lián)的命令碼的匯編程序的指令執(zhí)行自修改,使程序的分析 或改動困難。這里,條件跳轉(zhuǎn)是指根據(jù)是否滿足某一條件而分支處理 的命令。此外,自修改是指修改一指令以使其被另一指令重寫。原本 應(yīng)執(zhí)行的指令到另一指令的初步改變被稱為偽裝。圖1是示出由CPU 303基于根據(jù)此實施例的自修改進程添加程 序執(zhí)行的處理的流程的流程圖。假設(shè)要被保護的程序被作為例如用C 語言寫成的源程序記錄在RAM 305中,該程序是自修改進程添加程 序的處理目標。圖2示出C源程序的示例。在圖2的示例中,變量i的值基于j 的值和函數(shù)func(,)的內(nèi)容被確定,并且根據(jù)變量i是否為3以及變量 j是否為l執(zhí)行四個進程之一。具體地說,這四個進程如下 如果變量i為3且變量j不為1,則變量j增加10 (201)。
如果變量i為3且變量j為1,則變量j增加20 (202 )。
如果變量i不為3且變量j為1,則變量j增加30 (203 )。
如果變量i不為3且變量j不為1,則變量j增加40 (204)。 在步驟S101中,CPU 303編譯RAM 305中存儲的源程序以生成 匯編程序。圖4A和4B示出通過編譯圖2中所示的源程序生成的匯編 程序的一部分。在步驟S102中,CPU 303確定生成的匯編程序中是否存在可作 為自修改的目標的指令。也就是說,CPU 303確定匯編程序中是否存 在這樣的指令,該指令包含與條件跳轉(zhuǎn)相關(guān)聯(lián)的命令碼并且還未經(jīng)受 步驟S103至S109的處理。與條件跳轉(zhuǎn)相關(guān)聯(lián)的命令碼的示例包括je、 jz、 jnz、 jne、 jb、 jc、 jnae、 jl、 jnge、 ja、 jnbe、 jg、 jnle、 jbe、 jiia、 jle、 jng、 jnb、 jae、 jnc、 jge和jnl。應(yīng)指出,條件跳轉(zhuǎn)在處理器之間 在指令和命令碼方面是不同的,因而并不局限于這些示例。由于如稍后將描述的,CPU 303將被確定為自修改的目標的指令 記錄在RAM 305中,所以在步驟S102中,CPU 303通過參考RAM 305中的記錄執(zhí)行確定。在步驟S102中,如果存在還未被處理的分支命令 (與條件跳轉(zhuǎn)相關(guān)聯(lián)的命令碼),則處理前進到步驟S103。如果不存 在,則處理前進到步驟SllO。在此實施例中,對匯編程序中的每條包含與條件跳轉(zhuǎn)相關(guān)聯(lián)的命 令碼且還未被處理的指令執(zhí)行步驟S103及其后的處理。在步驟S103中,CPU 303隨機地確定處理目標指令是否成為自 修改的目標。應(yīng)指出,在此實施例中,匯編程序的單行對應(yīng)于單條指 令。因此,在步驟S103中,將還未被處理的匯編程序的行中的一行選 作處理目標,并且隨機地確定所選中的行上的指令是否要被偽裝。這 里,執(zhí)行通過不同指令Y偽裝的位置(例如,地址或行號)被定義為 P (Y)。執(zhí)行偽裝的位置P (Y)還可在通過匯編該匯編程序生成的機器 語言程序中被確定。具體地說,位置P (Y)還可被按以下方式確定。 匯編程序被匯編以獲得機器語言程序。機器語言程序是指令序列,CPU 303可讀取該機器語言程序,并識別各條指令和指令之間的斷點。作 為此識別的結(jié)果,從機器語言程序確定一條指令,匯編程序中的對應(yīng) 指令的位置可被用作自修改的目標位置P ( Y )。這里,假設(shè)在圖4A中,"je L5,,被確定為目標指令y,并且確定"je L5,,要被偽裝。CPU 303將已確定哪條指令作為自修改的目標存儲在 RAM 305中。這樣,在步驟S102和S103中,在處理目標程序包含的指令之中, 確定要被修改為偽裝指令的目標指令。具體地,在此實施例中,目標 指令被從處理目標程序中包含的與條件跳轉(zhuǎn)相關(guān)聯(lián)的指令中隨機確 定。接下來,在步驟S104中,CPU 303確定偽裝指令Y。在此實施 例中,包含將分支到與原始指令y的條件相反的條件的條件跳轉(zhuǎn)的指 令被確定為偽裝指令Y。換句話說,執(zhí)行與目標指令y不同的條件分 支的指令被生成作為偽裝指令Y。在圖4A和4B的示例中,目標指令 是"je L5"。因此,"jne L5,,被確定為偽裝指令Y,其是"je"的相反控制流。這些進程由在計算機裝置300上實現(xiàn)的用作偽裝指令生成單元 的功能元件執(zhí)行。在下文所述的步驟S105至S108中,生成用于通過真實指令y修 改(還原)偽裝指令Y的例程X (還原命令)。步驟S105至S108的 進程由在計算機裝置300上實現(xiàn)的用作還原命令生成單元的功能元件 執(zhí)行。然后,在步驟S109中,將例程X插入處理目標匯編程序,并 且通過偽裝指令Y修改真實指令y。在此實施例中,例程X被構(gòu)造成使得例程X基于下列三個值計 算執(zhí)行通過偽裝指令Y的偽裝的位置P ( Y),并且通過偽裝指令Y 修改在該位置P (Y)的指令。.匯編程序中的預(yù)定位置(下文被稱為BASE位置)。.匯編程序中的用于計算固定值的預(yù)定進程(下文被稱為基準值 計算進程)的計算值(下文被稱為基準值)。
P ( Y ) - BASE位置-基準值(下文被稱為掩蔽值)。例程X通過計算基準值+ BASE位置+掩蔽值,計算偽裝位置P (Y)。這里,在例程X中,基準值是通過參考存儲匯編程序中的基 準值計算進程的處理結(jié)果的存儲器獲取的。換句話說,例程X參考存 儲處理目標程序中包含的處理命令(基準值計算進程)的輸出值的存 儲器,基于該被參考的值識別程序中的指令Y的位置,并還原真實指 令y。因此,即使當(dāng)攻擊者檢查與例程X對應(yīng)的匯編程序的一部分時, 攻擊者仍難以知曉基準值。因而,難以確定匯編程序的哪一部分被偽 裝或未被偽裝,從而攻擊者難以分析匯編程序的操作或改動匯編程序 以便程序執(zhí)行希望的操作。應(yīng)指出,在此實施例中,基準值計算進程的輸出值(基準值)是 固定值,從而掩蔽值可被容易地確定。下文將描述每個步驟的細節(jié)。在步驟S105中,CPU 303確定匯 編程序中的基準值計算進程及其位置和P (X)。例程X執(zhí)行如上所 述的將真實指令y寫入P (Y)的進程,而P (X)指示例程X插入其 中的位置。P (X)在從基準值計算進程的位置到P (Y)的控制流中的任意點處被確定。圖4A示出這樣的示例,其中"call —cont""movl 。/。eax,-12(y。ebp)"被確定為基準值計算進程,"je L5"被確定為自修改 的目標指令,而基準值計算進程的下一行被確定為P (X)。應(yīng)指出,程序中執(zhí)行的各種進程可被用作基準值計算進程。例如, 背景技術(shù)中所述的方法中的計算觀測值的進程可被使用,在該方法中 程序在執(zhí)行期間驗證該程序未被改動。在此實施例的描述中,圖2中 的函數(shù)cont(,)被用作基準值計算進程以便有助于理解。但是,基準值 計算進程還可以是C源程序中不存在的而僅存在于匯編程序中的進 程。應(yīng)指出,如上所述,基準值是基準值計算進程的處理結(jié)果。此夕卜, 基準值計算進程是計算確定值的進程。也就是說,固定值作為執(zhí)行此 進程的結(jié)果被輸出。接下來,CPU 303在步驟S106中確定基準值,在步驟S107中確 定掩蔽值,并在步驟S108中生成例程X。下文將描述執(zhí)行這些步驟的 方式。例程X需要作為自修改的目標的偽裝指令Y的位置P ( Y )。為 此,CPU 303從P (Y)、程序上的某一位置和基準值計算并確定掩 蔽值,從而滿足關(guān)系"P(Y)=程序上的所述某一位置+基準值+掩 蔽值"。在圖4A的示例中,在步驟S103中偽裝指令Y的位置P (Y)已 被確定為"jeL5,,的位置。基準值計算進程是圖4A中的"call—cont", "call —cont,,計算的輸出被下一條指令"movl %eax, -12(%6& )"存儲在 "-12(。/。ebp),,中。如上所述,基準值計算進程"call jont"對應(yīng)于圖2 中的cont(,),函數(shù)main(,)中的cont(,)的計算值是cont(1,45)= cont(50,45) = 50-45 = 5。從而,CPU 303可預(yù)先計算出計算結(jié)果"5"。 下文,將描述用于從圖4A和4B中示出的匯編程序創(chuàng)建圖5中示出的 匯編程序的過程,圖5中示出的匯編程序是添加自修改進程的結(jié)果。首先,CPU 303確定程序中的任意位置(BASE位置)。這里, 假設(shè)圖4B中的"jne L8,,被選中。此指令的地址被稱為"BASE的地址"。 在匯編程序中,"BASE:,,被插在"jne L8,,之前。這里,偽裝指令Y是"jneL5",其是自修改的目標。下文,P(Y) 被稱為"TARGET的地址"。如上所述,保持關(guān)系"P(Y) -BASE位置(地址)+基準值+ 掩蔽值"。因此,"掩蔽值-P(Y) -BASE的地址-基準值"。當(dāng)如 上述示例,基準值- 5時,"掩蔽值=TARGET的地址-BASE的地址 -5"。在此示例中,P (Y)的地址小于BASE,從而可從BASE獲得 并減去掩蔽值的絕對值。因此,最終掩蔽值(的絕對值)是"BASE的 地址-TARGET的地址+ 5"。此計算可從圖4A和4B中所示的匯編 程序(必要時,通過一旦獲得其機器語言程序并使用機器語言程序的 指令序列)執(zhí)行。接下來,將參照圖5中的自修改例程X描述生成例程X的處理 內(nèi)容的方法。由于例程X的用途是將真實指令寫入P (Y),所以首 先獲得P(Y)。寄存器edx用于P (Y)的計算,以便其它進程將不 受影響。首先,CPU 303生成"movl $BASE, %edx,,。這是將BASE的地 址SBASE分配給寄存器edx的指令。接下來,CPU 303生成"addl -12(%ebp), %edx"。這是將-12(。/。ebp) 添加到寄存器edx中的指令。這里,-12(%6& )存儲基準值計算進程的 結(jié)果,并且其值為5。因而,通過將BASE的地址加5獲得的值被存 儲在寄存器edx中。在圖5中,此值指示在BASE之下5個字節(jié)處的然后,CPU 303生成"subl $0x21, %edx"。這是減去上述掩蔽值 (的絕對值)以便在寄存器edx中存儲P (Y)的指令。由于掩蔽值 是S0x21,所以從寄存器edx減去十六進制中的21 (十進制中的33 )。 得到的值指示在該在BASE之下5個字節(jié)處的位置之上33個字節(jié)處 的位置P (Y)。最后,CPU 303生成"movb $0x74, (%edx),,。這里,寄存器edx 中存儲的地址(。/oedx)是P( Y )。因此,"movb $0x74, (。/oedx)"是將S0x74 分配給(V。edx)以便將偽裝指令"jne L5,,修改成真實指令"je L5"的指令。但是,由于在機器語言中jne是0x75,所以被寫入P(Y)的一 個字節(jié)的0x75被修改為0x74。這樣,生成在圖5的上部用矩形圏起的例程X。這種例程X是一 個示例。例如,另一個位置也可被用作BASE,并且在該情況下,掩 蔽值變?yōu)椴煌闹?。?yīng)指出,執(zhí)行程序的地址計算以便計算圖5中的 P (Y)。接下來,在步驟S109中,將上述例程X插入P (X)。這里, 上述例程X被插入圖4A和4B中的基準值計算進程的下一行的位置。 此外,假指令"jneL5,,被寫入P(Y)作為指令Y,其是自修改的目標。 結(jié)果,圖4A和4B中所示的匯編程序被修改為圖5中所示的匯編程序。接下來,處理返回步驟S102,并且CPU 303確定是否存在可以 作為自修改的目標的指令,然后在步驟S103, CPU303隨機確定該指 令是否要被偽裝。如果該指令要被偽裝,則重復(fù)步驟S104至S109的 進程,而如果指令將不被偽裝,則處理返回步驟S102。如果不存在將 被修改的指令,則處理前進到步驟SllO。在步驟SllO, CPU 303通過匯編自修改程序生成機器語言程序。 必要時,CPU 303通過鏈接機器語言程序生成可執(zhí)行程序。此外,對 于該可執(zhí)行程序,CPU 303執(zhí)行進程,例如設(shè)置允許對程序的代碼區(qū) 進行寫操作的標記,從而使得在執(zhí)行期間程序能夠?qū)ζ渥陨淼拇a區(qū) 進行寫操作的進程。自修改程序的操作接下來,將描述CPU 303執(zhí)行自修改程序的機器語言程序的方 式。由于機器語言程序大致對應(yīng)于匯編程序,并且可認為在控制流方 面它們之間沒有區(qū)別,所以下文將參照圖5進行描述。首先,程序中的指令被CPU 303按從機器語言程序的頂部開始 的順序解釋,并且存儲器和寄存器被讀和寫。當(dāng)執(zhí)行點到達P (X) 時,例程X被執(zhí)行。作為此處理的結(jié)果,位于P(Y)的偽裝指令Y ("jne L5")被修改為真實指令y ( "je L5")。在機器語言程序中, 0x75被修改為0x74。然后,例程X完成,并且隨后的指令在到達P(Y)之前被解釋和執(zhí)行。P (Y)處的指令已被修改為真實指令y, 從而y被解釋和執(zhí)行。自修改程序的安全性接下來,將描述通過根據(jù)此實施例的自修改進程添加程序生成的 程序的安全性??紤]分析圖5中所示的程序的情況。如上所迷,機器 語言程序大致對應(yīng)于匯編程序,并且可認為在控制流方面它們之間沒 有區(qū)別,所以假設(shè)對應(yīng)于圖5中所示的程序的匯編程序是通過反匯編 機器語言獲得的。在圖5中,例程X的位置P (X)和偽裝指令Y的位置P (Y) 設(shè)置成相互接近。但是,在實際程序中,這些位置并不一定設(shè)置成相 距較短距離。因此,難以僅通過查看匯編程序就查明偽裝例程X和自 修改的目標Y之間的關(guān)系。接下來,考慮在閱讀和理解匯編程序的同時分析該匯編程序的操 作的情況。例程X的處理內(nèi)容由程序上的某一位置(BASE位置)、 基準值計算進程的輸出值(基準值)和掩蔽值確定,并且難以僅通過 閱讀程序而不執(zhí)行程序就獲得基準值。在程序在執(zhí)行期間驗證程序未被改動的配置中,獲得在程序的執(zhí) 行期間被計算的觀測值的進程被以這樣的方式實現(xiàn),即執(zhí)行觀測的進 程本身不大可能被容易地查明。還在此實施例中,通過將上述實現(xiàn)方 式用于基準值計算進程,可防止基準值計算進程被容易地查明。此外, 由于例程X的進程由多條指令構(gòu)成,所以通過將那些指令設(shè)置在分離 的位置而不是將它們集中在一個區(qū)域,也可防止例程X被容易地查明。 因此,難以確定P (Y)的值。另一方面,知曉此實施例的方法的分析員將知曉程序中的條件跳 轉(zhuǎn)可能已被修改。在圖5的情況下,僅僅通過查看程序,就清楚在用 從中部延伸到底部的矩形圏起的部分中存在條件分支,從而存在分析 員可反編譯此部分,并將程序解釋為如圖6所示的用C語言寫成的源 程序的可能性。但是,除非分析員可識別P(Y),否則分析員不能 查明哪個條件跳轉(zhuǎn)已被修改,從而分析員不能唯一地確定真實程序是什么,并且不得不列舉并檢查可想到的可能性。圖2和圖6之間的比 較指示圖2中所示的代碼的執(zhí)行得到圖7中所示的輸出,而圖6中所 示的代碼的執(zhí)行得到圖8中所示的輸出。因此,當(dāng)分析員確定圖6中 所示的程序是真實程序時,這意味著分析員不正確地分析該程序。因 此,攻擊者也不能改動程序以便程序執(zhí)行希望的操作?;谇笆隹紤],將參照圖9中的流程圖進一步描述根據(jù)此實施例 的配置的效果。圖9中的流程圖也對應(yīng)于圖2中所示的程序。圖9中 的分支C對應(yīng)于圖2中的if(i==3),圖9中的分支E對應(yīng)于圖2中的 if(j!-l),并且圖9中的分支I對應(yīng)于圖2中的if(j=-l)。在圖9的流程圖表示的程序的情況下,存在設(shè)置成兩級的總共三 個比較分支。因此,在匯編程序中存在三個條件跳轉(zhuǎn)。由于在圖4A 和4B中存在"jneL4"、 "je L5"和"jne L8",所以這是可以確認的。當(dāng) 此實施例應(yīng)用于此程序時,這三個條件跳轉(zhuǎn)被隨機偽裝。查明哪個條 件跳轉(zhuǎn)被偽裝的困難使得必須列舉和分析可想到的可能性。當(dāng)假設(shè)圖 9中的流程圖的分支E被偽裝時,圖IO中的流程圖可能是真實流程圖。 類似的,當(dāng)假設(shè)圖9中的分支I被偽裝時,圖ll中的流程圖可能是真 實流程圖。同樣,當(dāng)假設(shè)圖9中的分支C被偽裝時,圖12中的流程 圖可能是真實流程圖。從前文可見,當(dāng)存在一個要被偽裝的條件跳轉(zhuǎn)時,可能的流程圖 的數(shù)量增加到2。相應(yīng)地,當(dāng)存在n個條件跳轉(zhuǎn)時,可能的流程圖的 數(shù)量增加到2的n次冪。因此,分析對象的數(shù)量被設(shè)定為程序中的條 件跳轉(zhuǎn)的數(shù)量的指數(shù)函數(shù)的量級,從而可認為,此實施例的配置在計 算復(fù)雜度方面提供分析的難度。在其中使用自修改進程偽裝程序的真實命令碼的常規(guī)配置中,存 在分析的難度不能被定量地估計的問題。相反,在此實施例的配置中,在閱讀和理解程序的同時分析程序的攻擊者需要分析數(shù)量與程序內(nèi)的 條件跳轉(zhuǎn)的數(shù)量的指數(shù)函數(shù)的量級相同的控制流。因此,根據(jù)此實施 例的配置,可從條件跳轉(zhuǎn)的數(shù)量定量地估計分析的難度。此外,在其中程序在執(zhí)行期間驗證該程序未被改動的配置中,存在這樣的風(fēng)險,即使觀測進程本身不大可能被容易地查明,觀測值比 較進程也將被發(fā)現(xiàn),并且比較進程將被無效。另外,在提供多個改動 檢測例程的配置的情況下存在這樣的問題,配置的效果,即當(dāng)構(gòu)造改度,'不能用數(shù)值表示P。、 、 ' ' 、"相反,在此實施例中,程序使用基準值計算進程的結(jié)果(基準值) 在執(zhí)行期間驗證程序未被改動。換句話說,參考存儲處理目標程序中 包含的處理命令的輸出值的存儲器,并且基于參考值識別程序中的目 標指令的位置。因此,比較進程被實現(xiàn)為地址計算進程,并且程序按以下方式操作當(dāng)?shù)刂酚嬎氵M程的處理結(jié)果正確時,自修改進程是成功的。由于 與比較進程相比地址計算進程由多條指令構(gòu)成,所以通過分布這些指 令可使得攻擊者發(fā)現(xiàn)該進程的可能性降低,并且可增加對抗無效的安 全性。此外,常規(guī)改動自檢測進程中的一個比較進程對應(yīng)于此實施例的 一個自修改進程。當(dāng)常規(guī)改動自檢測進程中存在k個比較進程時,根 據(jù)此實施例生成的程序的應(yīng)被分析的控制流的數(shù)量是2的k次冪。因 此,在閱讀和理解程序的同時分析程序的攻擊者需要分析數(shù)量與改動 自檢測進程中的比較進程的數(shù)量的指數(shù)函數(shù)的量級相同的控制流。因 而,根據(jù)此實施例的配置,可從比較進程的數(shù)量定量地估計分析的難 度。此外,可獨立于改動自檢測進程的改動檢測例程之間的依賴關(guān)系 定量地估計分析的難度。第二實施例在第一實施例中,例程X被構(gòu)造成使得例程X基于BASE位置、 基準值和掩蔽值這三個值計算執(zhí)行通過偽裝指令Y的偽裝的位置P (Y ),并通過偽裝指令Y修改位置P ( Y )中的指令。在此實施例中, 將描述如下形式的自修改進程添加程序,其中例程X基于基準值和掩 蔽值這兩個值計算偽裝指令Y的操作碼或操作數(shù),并通過偽裝指令Y 修改指令y。指令由命令(操作碼)和操作數(shù)構(gòu)成,操作數(shù)是命令的對象,并且操作數(shù)可以是例如寄存器或存儲器的內(nèi)容或數(shù)值本身。圖13A和13B示出通過編譯圖2中所示的源程序生成的匯編程 序的一部分。接近圖13A的底部發(fā)現(xiàn)用矩形團起的指令"addl $0x4, (%eax),,。此指令由命令(操作碼)"addl,,以及操作數(shù)"S0x4,,和 "(。/。eax)"構(gòu)成,并且表示將數(shù)值"4"(十六進制)作為32位的數(shù)據(jù)添 加到寄存器"eax,,中的進程。這里,"addl,,的"l,,指示"長,,即32位。此 指令的機器語言程序是"83 00 04"(十六進制),"addl"和"(o/oeax)" 對應(yīng)于"83 00",而"S0x4,,對應(yīng)于"04"。在Intel x86 CPU中,保持下列對應(yīng)關(guān)系。匯編語言中的"addl $0x4, (。/。eax)"在機器語言中是"83 00 十 六進制)。匯編語言中的"addl $0x4, (。/。edx)"在機器語言中是"83 02 04" (十六進制)。匯編語言中的"sublS0x4, (。Aeax)"在機器語言中是"83 28 十 六進制)。匯編語言中的"sub $0x4, (Q/。edx)"在機器語言中是"83 EA 十 六進制)。匯編語言中的"movb $0x4, (Q/oeax),,在機器語言中是"C0 00 04,, (十六進制)。匯編語言中的"rolb $0x4, (。/oeax),,在機器語言中是"C6 00 0 4" (十六進制)。因此,當(dāng)對應(yīng)于上述指令"addl $0x4, (。/。eax)"的機器語言程序"83 00 04"(十六進制)的第一字節(jié)被修改為"C0"時,修改后的機器語言 程序"C0 00 04,,對應(yīng)于指令"movb $0x4, (%eax),,。類似地,當(dāng)?shù)谝蛔?節(jié)被修改為"C6"時,修改后的機器語言程序"C6 00 04"對應(yīng)于指令 "rolb $0x4, (%eax),,。當(dāng)?shù)诙止?jié)"00,,被修改為"28,,時,修改后的機 器語言程序"83 28 04,,對應(yīng)于指令"sublS0x4,(。/。eax)"。也就是i兌,通 過修改機器語言程序的一個字節(jié),可將命令(操作碼)改變?yōu)椴煌?命令(操作碼)。此外,當(dāng)對應(yīng)于上述指令"addl $0x4, (。/。eax),,的機器語言程序"83 00 (M,,的第二字節(jié)"00"被修改為"02"時,修改后的機器語言程序"83 02 04"對應(yīng)于指令"addlS0x4, (%edx)"。也就是說,通過修改機器語言程 序的一個字節(jié),還可將操作數(shù)的寄存器改變?yōu)椴煌募拇嫫鳌W詈?,?dāng)對應(yīng)于上述指令"addl $0x4, (。/。eax)"的機器語言"83 00 04,,的第三字節(jié)"04,,被修改為"03,,時,修改后的機器語言程序"83 00 03"對應(yīng)于指令"addlS0x3,(。/neax)"。也就是說,通過修改機器語言程 序的一個字節(jié),還可將操作數(shù)的數(shù)值改變?yōu)椴煌臄?shù)值。從前文可見,例程X可被構(gòu)造成使得要被偽裝的目標是操作碼或 操作數(shù),并且例程X基于基準值和掩蔽值這兩個值計算原始操作碼或 操作數(shù),并通過偽裝指令Y修改指令。將如同第一實施例一樣,參照圖1和2描迷由CPU 303基于根 據(jù)此實施例的自修改進程添加程序執(zhí)行的處理的流程。假設(shè)要被保護 的程序作為例如用C語言寫成的源程序被記錄在RAM 305中,該程 序是自修改進程添加程序的處理目標。在步驟SIOI中,CPU 303編譯RAM 305中存儲的源程序以生成 匯編程序。圖13A和13B示出通過編譯圖2中所示的源程序生成的匯 編程序的一部分。在步驟S102中,CPU 303利用確定算法確定生成的匯編程序中 是否存在可作為自修改的目標的指令。盡管從筒單算法到復(fù)雜算法的 各種類型的算法可被用作該確定算法,但是這里所述的確定算法是從 生成的匯編程序中隨機選擇單行的算法。由于如下文將說明的,CPU 303將被確定為自修改的目標的指令 記錄在RAM 305中,所以在步驟S102中,CPU 303通過參考RAM 305 中的記錄執(zhí)行該確定。在步驟S102中,如果確定算法確定存在目標, 則處理前進到步驟S103。如果確定算法確定不存在目標,則處理前進 到步驟SllO。假設(shè)接近圖13A的底部的用矩形圏住的"addl $4, (0/。eax),,被選作目標指令y,并且確定存在目標。在步驟S103中,CPU 303隨機確定處理目標指令是否成為自修改的目標。應(yīng)指出,在此實施例中,匯編程序的單行對應(yīng)于單條指令。因此,在步驟S103中,將還未被處理的匯編程序的行中的一行選作處 理目標,并且隨機地確定所選中的行上的指令是否要被偽裝。假設(shè)確 定目標指令<formula>formula see original document page 19</formula>要被偽裝。CPU 303將哪條指令已被 確定為自修改的目標存儲在RAM 305中。執(zhí)行通過不同指令Y的偽 裝的位置(例如,地址或行號)被定義為P ( Y )。以這種方式,在步驟S102和S103中,在處理目標程序包含的指 令之中,確定要被修改為偽裝指令的目標指令。接下來,在步驟S104中,CPU 303確定偽裝指令Y。在此實施 例中,這樣的指令被確定為偽裝指令Y:該指令具有與原始指令y "addl $4, (。/。eax),,的操作數(shù)的數(shù)值S4不同的數(shù)值$3作為操作數(shù)。這些 進程由在計算機裝置300上實現(xiàn)的用作偽裝指令生成單元的功能元件 執(zhí)行。在下文所述的步驟S105至S108中,生成用于通過真實指令y修 改(還原)偽裝指令Y的例程X (還原命令)。步驟S105至S108的 進程由在計算機裝置300上實現(xiàn)的用作還原命令生成單元的功能元件 執(zhí)行。然后,在步驟S109中,例程X被插入處理目標匯編程序,并 且真實指令y通過偽裝指令Y被修改。在此實施例中,例程X被構(gòu)造成使得例程X基于下列兩個值計 算原始操作數(shù),并通過偽裝指令Y修改在位置P (Y)的指令,以便 將偽裝指令Y的偽裝操作數(shù)修改回原始操作數(shù)。.匯編程序中的用于計算固定值的預(yù)定進程(下文被稱為基準值 計算進程)的計算值(下文被稱為基準值)。.原始操作數(shù)的機器語言XOR基準值(下文被稱為掩蔽值)。例程X通過計算"基準值XOR掩蔽值,,計算原始操作數(shù)。這里, 在例程X中,通過參考存儲匯編程序中的基準值計算進程的處理結(jié)果 的存儲器獲取基準值。換句話說,例程X參考存儲處理目標程序中包 含的處理命令(基準值計算進程)的輸出值的存儲器,基于該參考值 識別指令y的操作數(shù),并且還原真實指令y。因此,即使當(dāng)攻擊者檢查對應(yīng)于例程X的匯編程序的一部分時,攻擊者也難以知曉基準值。因而,難以確定匯編程序的原始操作數(shù),從而攻擊者難以分析匯編程 序的操作或者改動匯編程序以便程序執(zhí)行希望的操作。應(yīng)指出,在此實施例中,基準值計算進程的輸出值(基準值)是 固定值,從而掩蔽值可被容易地確定。下文將描述每個步驟的細節(jié)。在步驟S105中,CPU 303確定匯 編程序中的基準值計算進程及其位置和P (X)。例程X執(zhí)行如上所 述的將真實指令y寫入P ( Y)的進程,而P (X)指示例程X所被插 入的位置。P (X)在從基準值計算進程的位置到P (Y)的控制流中 的任意位置處被確定。圖13A示出這樣的示例,其中"ca11—cont""movl %eax, -12(%6&口)"被確定為基準值計算進程,"addl $4, (。/。eax)"被確 定為自修改的目標指令,"$4"被確定為目標操作數(shù),而基準值計算進 程的下一行被確定為P (X)。應(yīng)指出,程序中執(zhí)行的各種進程可被用作基準值計算進程。例如, 背景技術(shù)中所述的方法中的計算觀測值的進程可被使用,在該方法中 程序在執(zhí)行期間驗證該程序未被改動。在此實施例的描述中,圖2中 的函數(shù)cont(,)被用作基準值計算進程以便有助于理解。但是,基準值 計算進程還可以是C源程序中不存在的而僅存在于匯編程序中的進 程。應(yīng)指出,如上所述,基準值是基準值計算進程的處理結(jié)果。此外, 基準值計算進程是計算確定值的進程。也就是說,固定值作為執(zhí)行該 進程的結(jié)果被輸出。接下來,CPU 303在步驟S106中確定基準值,在步驟S107中確 定掩蔽值,并在步驟S108中生成例程X。下文將描述執(zhí)行這些步驟的 方式。例程X需要作為自修改的目標的偽裝指令Y的原始操作數(shù)。為 此,CPU 303從原始操作數(shù)的機器語言和基準值計算并確定掩蔽值, 從而滿足關(guān)系"掩蔽值=原始操作數(shù)的機器語言XOR基準值"。在圖4A和4B的示例中,在步驟S103中,偽裝指令Y的位置P (Y)已被確定為"addlS4,(。/。eax)"的位置。基準值計算進程是圖4A中的"call _cont", "call —cont,,計算的輸出被下一條指令"movl %eax, -12(%ebp)"存儲在"-12(%ebp)"中。如上所述,基準值計算進程"call jont"對應(yīng)于圖2中的cont(,),函數(shù)main(,)中的cont(,)的計算值是 cont(1,45) - cont(50,45) = 50 - 45 = 5。從而,CPU 303可預(yù)先計算出計 算結(jié)果"5"。下文,將描述從圖13A和13B中示出的匯編程序創(chuàng)建圖 14中示出的匯編程序的過程,圖14中示出的匯編程序是添加自修改 進程的結(jié)果。首先,CPU 303確定程序中的自修改的目標的位置(LABEL位 置)。這里,假設(shè)圖13A中的"addl $4, (。/。eax)"的位置被選中。此指 令的地址被稱為"LABEL的地址"。在匯編程序中,"LABEL:,,被插在 "addl $4, (。/。eax),,之前。應(yīng)指出,如同第一實施例,自修改的目標的 位置也可通過選擇另一位置而不是直接選擇自修改的目標的位置,并 基于這樣選中的位置執(zhí)行計算被間接獲得。這里,偽裝指令Y是"addlS4,(。/。eax)",其是自修改的目標。下 文,P (Y)被稱為"TARGET的地址"。如上所述,保持關(guān)系"原始操作數(shù)的機器語言=基準值XOR掩蔽 值"。因此,"掩蔽值-原始操作數(shù)的機器語言XOR基準值"。當(dāng)如上 述示例,基準值-5時,"掩蔽值-原始操作數(shù)的機器語言XOR 5"。 因此,掩蔽值是"4 XOR 5" = "100 XOR 101" ( 二進制)=1 ( 二進制)。接下來,將參照圖14中的自修改例程X,描述生成例程X的處 理內(nèi)容的方法。由于例程X的用途是將原始操作數(shù)寫入P (Y)中的 指令的操作數(shù),所以首先獲得原始操作數(shù)。寄存器edx用于其計算, 從而其它進程將不受影響。首先,CPU 303生成"movl-12(。/。ebp), %edx,,。這是將-12(。/oebp) 存儲在寄存器edx中的指令。這里,-12(°/"& )存儲基準值計算進程的 結(jié)果,并且其值為5。從而,值5被存儲在寄存器edx中。然后,CPU 303生成"movl $1, %ecx"。這是將值1存儲在寄存 器ecx中的指令。然后,CPU 303生成"xorl %ecx, %edx,,。這是計算寄存器edx的值與寄存器ecx的值之間的XOR,并將結(jié)果存儲在edx中的指令。 寄存器ecx和edx都是32位,并且值4被存儲在寄存器edx中,值4 是XOR值5和值1的結(jié)果。在Intel x86 CPU的情況下,十六進制下 的"04 00 00 00 00 00 00 OO,,被存儲在edx中。
接下來,CPU 303生成"movl $LABEL+2, %ebx"。這是將在從 LABEL的地址SLABEL起兩個字節(jié)處的地址SLABEL+2分配給寄存 器ebx的指令。原始指令y "addl $4, (。/。eax),,在機器語言中是"83 00 04"。因此,$LABEL+2代表機器語言"04,,所位于的地址,并且寄存 器ebx存儲該地址。
最后,CPU 303生成"movb $dl, (%ebx),,。這里,寄存器ebx中 存儲的地址(。/。ebx)是SLABEL+2。因此,"movb $dl, (。/oebx),,是將4 寫入(。/。ebx)以便將偽裝指令Y修改為真實指令"addl $4, (。/。eax),,的指 令。但是,%dl是。/。edx的高階字節(jié),因而是十六進制的"04 00 00 00 00 00 00 00"中的高階字節(jié)"04"。從而,機器語言"04"被寫入SLABEL+2。
這樣,生成在圖5的上部用實線矩形圏起的例程X。這種例程X 僅是一個示例。例如,另一個位置也可被用作如上所述的LABEL, 并且加法、減法、移位運算和邏輯運算也可代替XOR被用作用于確
定掩蔽值的運算。
接下來,在步驟S109中,上述例程X被插入P (X)。這里, 上述例程X被插入圖13A和13B中的基準值計算進程的下一行的位 置。此外,假指令被生成作為指令Y,其是自修改的目標。在此實施 例中,假設(shè)"addl $4, (y。eax),,的操作數(shù)S4被偽裝為$3,并且"addl $3, (。/。eax),,被寫入P (Y)。結(jié)果,圖UA和1SB中所示的匯編程序被修 改為圖14中所示的匯編程序。
接下來,處理返回步驟S102,并且CPU 303確定是否存在可作 為自修改的目標的指令,然后在步驟S103, CPU303隨機確定指令是 否要被偽裝。如果該指令要被偽裝,則重復(fù)步驟S104至S109的進程, 而如果該指令將不被偽裝,則處理返回步驟S102。如果不存在要被修 改的指令,則處理前進到步驟SllO。在步驟SllO, CPU 303通過匯編自修改程序生成機器語言程序。 必要時,CPU303通過鏈接機器語言程序生成可執(zhí)行程序。此外,對 于可執(zhí)行程序,CPU303執(zhí)行進程,例如設(shè)置允許對該程序的代碼區(qū) 進行寫操作的標記,從而使程序可在執(zhí)行期間對其自己的代碼區(qū)進行 寫操作的進程。
偽裝指令Y應(yīng)該是通過其的自修改而恢復(fù)回原始指令y的指令。 因此,當(dāng)對于一個字節(jié)執(zhí)行自修改時,原始指令與偽裝指令之間的差 異必須在一個字節(jié)內(nèi)。在Intel x86 CPU的情況下,可以一個字節(jié)、兩 個字節(jié)或四個字節(jié)為單位執(zhí)行修改。因此,只要原始指令與偽裝指令 之間的最大差異在四個字節(jié)內(nèi),偽裝指令就可在單個自修改操作中恢 復(fù)回原始指令。
第三實施例
第一實施例和第二實施例可組合。在第一實施例中,生成圖5中 所示的匯編程序。第二實施例中所述的自修改進程添加程序應(yīng)用于此 匯編程序。此時,假設(shè)例如圖5中的X的第三行上的"subl $0x21, 。/。edx"或第四行上的"movb $0x74, (。/oedx)"被選作自修改的目標指 令,并且確定此指令要被偽裝。顯然,這樣生成的自修改程序更加難 以分析或改動。
此外,還可能存在這樣的配置,其中相同指令被進行一次以上的 自修改。在此配置的示例中,命令(操作碼)的自修改在第一輪自修 改中執(zhí)行,操作數(shù)之一的自修改在第二輪自修改中執(zhí)行,而另一操作 數(shù)的自修改在第三輪自修改中執(zhí)行。
其它實施例
當(dāng)然,本發(fā)明的目的還可通過在系統(tǒng)或裝置上執(zhí)行實現(xiàn)上述實施 例的功能的軟件的程序代碼實現(xiàn)。在此情況下,程序代碼本身實現(xiàn)上 述實施例的功能,并且該程序代碼被包含在本發(fā)明的技術(shù)范圍中。
程序代碼可以例如被記錄在計算機可讀存儲介質(zhì)上,并且被提供 給系統(tǒng)或裝置。本發(fā)明的目標還可由系統(tǒng)或裝置的計算機(或CPU或 MPU)通過讀取并執(zhí)行存儲介質(zhì)中存儲的程序代碼實現(xiàn)。因此,存儲該程序代碼的存儲介質(zhì)也被包含在本發(fā)明的技術(shù)范圍中。
可用于提供程序代碼的存儲介質(zhì)的示例包括軟盤、硬盤、光盤、
磁光盤、CD-ROM、 CD-R、磁帶、非易失性存儲卡、ROM、 DVD等。 應(yīng)指出,程序代碼并不局限于那些這樣的代碼,該代碼具有被計 算機通過讀取和執(zhí)行程序代碼實現(xiàn)上迷實施例的功能所需要的所有元 素。也就是說,程序代碼還包括通過與計算機中合并的軟件和硬件中 的至少任何一個配合以實現(xiàn)目的的程序代碼。
例如,即使在計算機上運行的os等基于來自程序代碼的指示執(zhí) 行實際處理的一部分或全部,并且上述實施例的功能通過此處理實現(xiàn)
的情況下,該程序代碼也被包含在本發(fā)明的技術(shù)范圍中。應(yīng)指出,OS
是操作系統(tǒng)的簡稱。
作為替換方案,例如,存在這樣的情況,其中插入或連接到計算
機的功能擴展板或功能擴展單元中包括的CPU等基于來自程序代碼
的指示執(zhí)行實際處理的一部分或全部,并且上述實施例的功能通過此 處理實現(xiàn)。即使在此情況下,該程序代碼也被包含在本發(fā)明的技術(shù)范 圍內(nèi)。應(yīng)指出,功能擴展板或功能擴展單元可通過將該程序代碼讀入 其存儲器,并執(zhí)行該程序代碼,執(zhí)行這種處理。
如上所述,根據(jù)本實施例的配置,生成這樣的例程,該例程基于 在要被保護的程序的執(zhí)行期間獲得的值確定自修改的目標指令的地 址。然后,目標指令被修改為偽裝指令,并且此例程被插入這樣的位 置,在該位置該例程在目標指令的執(zhí)行之前被執(zhí)行,從而自修改進程 被添加到要被保護的程序中。當(dāng)執(zhí)行已經(jīng)添加了自修改進程的要被保 護的程序時,獲得目標指令的地址,并作為上述例程的執(zhí)行的結(jié)果執(zhí) 行自修改。因而,偽裝指令被恢復(fù)回真實指令,并且進程如預(yù)期地被 執(zhí)行。
為了分析程序,必須知曉哪一指令通過自修改被偽裝并且被修 改。但是,在要被保護的程序的執(zhí)行期間獲得的值對于試圖閱讀和理 解程序的攻擊者是不明確的,因此攻擊者不能確定偽裝指令。因而, 要被保護的程序的分析和改動變得困難。此外,包含條件跳轉(zhuǎn)的指令被偽裝成執(zhí)行與原始指令的進程相反 的進程的指令,并且在執(zhí)行期間偽裝指令被恢復(fù)回原始指令。因此, 攻擊者應(yīng)該分析的控制流的數(shù)量是條件跳轉(zhuǎn)的數(shù)量的指數(shù)函數(shù)。因而, 要被保護的程序的分析的難度可被用數(shù)值表示。
根據(jù)本發(fā)明,可提供一種能夠使程序的分析或改動變得甚至更加 困難的技術(shù)。
盡管已經(jīng)參照示例性實施例描迷了本發(fā)明,但是應(yīng)理解,本發(fā)明 并不局限于公開的示例性實施例。下文權(quán)利要求的范圍應(yīng)被給予最寬 的理解,以便包含所有這樣的修改和等同結(jié)構(gòu)及功能。
權(quán)利要求
1.一種信息處理裝置,包括確定單元,適于在處理目標程序包含的指令之中確定要被修改為偽裝指令的目標指令,偽裝指令生成單元,適于生成對應(yīng)于所述目標指令的偽裝指令,還原命令生成單元,適于生成用于將所生成的偽裝指令還原成所對應(yīng)的目標指令的還原命令,以及適于通過所生成的偽裝指令修改所述處理目標程序中包含的所述目標指令,并將所述還原命令添加到所述程序中的單元,其中,所述還原命令通過參考存儲所述處理目標程序中包含的處理命令的輸出值的存儲器,并基于參考值識別所述程序中的所述目標指令的位置或所述目標指令,執(zhí)行還原。
2. 根據(jù)權(quán)利要求1的信息處理裝置,其中,所述還原命令參考 存儲所述處理目標程序中的計算固定值的處理命令的計算值的存棍' 器,并基于所述參考值識別所述目標指令的位置或所述目標指令。
3. 根據(jù)權(quán)利要求2的信息處理裝置,其中,所述確定單元從所 述處理目標程序中包含的與條件跳轉(zhuǎn)相關(guān)聯(lián)的指令隨機確定所述目標 指令。
4. 根據(jù)權(quán)利要求3的信息處理裝置,其中,所述偽裝指令生成 單元生成執(zhí)行與所述目標指令的條件分支不同的條件分支的指令作為 所述偽裝指令。
5. —種信息處理方法,包括以下步驟在處理目標程序中包含的指令之中確定要被修改為偽裝指令的目標指令,生成對應(yīng)于所述目標指令的偽裝指令,生成用于將所生成的偽裝指令還原成所對應(yīng)的目標指令的還原 命令,以及通過所生成的偽裝指令修改所述處理目標程序中包含的所述目標指令,并將所述還原命令添加到所述程序中,其中,所述還原命令通過參考存儲所述處理目標程序中包含的處 理命令的輸出值的存儲器,并基于參考值識別所述程序中的所述目標 指令的位置或所述目標指令,執(zhí)行還原。
全文摘要
本發(fā)明涉及一種信息處理裝置及其方法,所述信息處理裝置包括適于在處理目標程序中包含的指令之中確定要被修改為偽裝指令的目標指令的確定單元,適于生成對應(yīng)于所述目標指令的偽裝指令的偽裝指令生成單元,適于生成用于將所生成的偽裝指令還原成所對應(yīng)的目標指令的還原命令的還原命令生成單元,以及適于通過所生成的偽裝指令修改所述處理目標程序中包含的所述目標指令,并將所述還原命令添加到所述程序中的單元,其中,所述還原命令通過參考存儲所述處理目標程序中包含的處理命令的輸出值的存儲器,并基于參考值識別所述程序中的所述目標指令的位置或所述目標指令,執(zhí)行還原。
文檔編號G06F9/45GK101403977SQ20081016808
公開日2009年4月8日 申請日期2008年9月27日 優(yōu)先權(quán)日2007年10月5日
發(fā)明者大石和臣 申請人:佳能株式會社