隨機花指令加密算法

在對已有的花指令加密策略及其存在的問題進行分析的基礎(chǔ)上,我們提出了隨機花指令加密算法。

一、花指令加密方法及研究現(xiàn)狀

1、花指令加密的工作原理

動態(tài)跟蹤是軟件破解的基本過程,如果程序代碼具有反動態(tài)跟蹤的能力,那軟件被破解的可能性就變小了?;ㄖ噶罴用芸梢詰?yīng)用在反跟蹤和反靜態(tài)分析中。

花指令加密方法需要在原始指令的適當(dāng)位置插入一些無用的字節(jié)。這些被插入的字節(jié)不能被執(zhí)行,否則原始指令的邏輯會遭到破壞,這是花指令變換的基本條件。根據(jù)反匯編的工作原理,只有當(dāng)花指令的最后一個或兩個字節(jié)同正常指令的開始幾個字節(jié)放反匯編器識別成一條指令時,才能有效破壞反匯編的結(jié)果。插入的花指令應(yīng)當(dāng)是一些不完整的指令,被插入的不完整指令可以是隨機選擇的。

2、研究狀況及存在的問題

目前采用比較多的一種花指令形式是無條件跳轉(zhuǎn)指令JMP加花指令。這種策略通過簡單變換后的各種擴展形式,在一定程度上增強了花指令的生存能力,但是這些擴展形式還是存在特征碼,用工具仍可以自動去除。

另外一種形式是直接在原代碼中的JMP指令后添加花指令,缺點是受代碼中JMP指令個數(shù)的限制,如果JMP指令過少,則代碼變換效果不明顯。

綜合而盲,要想提高模糊度(反匯編器產(chǎn)生錯誤結(jié)果的程度),就必須應(yīng)用多個方法,并保證方法使用的隨機性和方法本身的隨機性,使產(chǎn)生的花指令沒有固定的特征碼。由此,我們提出隨機袍指令加密算法的目的就是保證花指令無特征碼并且具有較高的模糊度。

二、隨機花指令加密算法

1、加密算法思想

根據(jù)的文的分析,目前采用花指令進行加密的問題主要在于存在特征碼,容易用工具自動去除,其次是模糊度不夠,效果不明顯。對于這兩個問題,本文提出兩種策略來加以解決。第一種策略是JMP加花指令的擴展形式,簡稱為“JMP擴展”。這種變換保證其具有足夠的隨機度,即使存在特征值,但特征值的數(shù)量巨大,完全列舉所有情況也需要很多工作量。第二種策略是將代碼中的條件跳轉(zhuǎn)指令變換為反條件跳轉(zhuǎn)指令加JMP指令的形式,簡稱為"JMC變換”口這個策略進一步增加JMP指令的數(shù)量以便可以添加更多花指令。

加密算法的具體思想是:首先將原始指令分成若干個候選塊并確定一個候選塊隨機序列,然后對每一個候選塊進行如下處理:應(yīng)用“JMP擴展”策略對候選塊內(nèi)指令進行變換,然后應(yīng)用“JMC變換”策略對候選塊內(nèi)條件跳轉(zhuǎn)指令進行變換,最后在變換后的代碼的JMP指令后隨機添加花指令。

2、"JMP擴展¨加密算法描述

JMP擴展是用三條JMP指令對一段正常的指令進行變換,具體方法如下:

隨機花指令加密算法

跳過的正常指令個數(shù)是隨機選取的,但是個數(shù)不能超過候選塊的指令數(shù)目。圖1給出了“JMP擴展”的工作流程。

隨機花指令加密算法

加密算法描述:

1)取到一指令候選塊B,指令指針P指示候選塊的第一條指令;

2)產(chǎn)生一隨機數(shù)m,m的大小在B的指令數(shù)目內(nèi);

3)從指針P開始處向后掃描m條指令,確定這m條指令的長度Z;

4)在P前插入第一條JMP指令JMP+(l+2),其中2是第二條JMP指令長度2字節(jié);

5)在P+m后插入第二條JMP指令JMP+2,其中2是第三條JMP指令長度2字節(jié);

6)在P+m+1后插入第三條JMP指令JMP - (l+2)。跳轉(zhuǎn)到正常指令處。

3、"JMC變換”加密算法描述

JMC變換是將一條條件跳轉(zhuǎn)指令變換為反條件跳轉(zhuǎn)指令加JMP指令,具體方法如下:

隨機花指令加密算法

所有的條件跳轉(zhuǎn)指令都可以做這種變換。Intel x86指令集中條件跳轉(zhuǎn)指令編碼方式有其特點,一條條件跳轉(zhuǎn)指令的操作碼和0x01異或就可以得到其反條件跳轉(zhuǎn)指令。根據(jù)這個特點,“JMC變換”就變得容易多了。圖2給出了“JMC變換”的工作流程。

隨機花指令加密算法

加密算法描述:

1)取到一指令候選塊B,指令指針P指示候選塊的第一條指令;

2)如果指令P為條件跳轉(zhuǎn)指令則進行如下操作,否則跳轉(zhuǎn)到8);

3)區(qū)分指令的操作碼opcode和操作數(shù)opmnd;

4)將opcode與0x01異或得到反條件跳轉(zhuǎn)操作碼opcode;

5)根據(jù)oprand判斷跳轉(zhuǎn)類型足短跳轉(zhuǎn)還是長跳轉(zhuǎn),得到oprand;

6)將指令JFI變換為opcode’+oprand’,其中oprand’是下條JMP指令的長度;

7)在P后插入JMP +oprand指令;

8)指令指針尸指向下一條指令;

9)如果8中指令全部處理完則結(jié)束,否則跳轉(zhuǎn)到2)。

4、加密算法描述

加密算法首先對原始指令進行分塊操作,每個分塊被稱為候選塊,分塊操作的目的一是為了使“JMP擴展”操作不會重疊影響,二是可以根據(jù)空閑空間的多少靈活調(diào)整分塊大小。分塊的大小可根據(jù)空閑空間多少靈活確定。確定一個分塊的隨機序列的目的是假如空閑空問不夠,那么隨機變換的候選塊都不會一樣。隨機花指令加密算法會調(diào)用
前面的兩種策略對代碼變換后,在JMP指令后添加花指令。圖3給出了隨機花指令加密算法的工作流程。

隨機花指令加密算法

隨機花指令加密算法描述:

首先對所有指令進行分塊,對候選塊產(chǎn)生一個隨機序列P,例如P(4,1,3,.7,2,5,6…),下面按照隨機序列的順序?qū)λ蟹謮K如下處理:

1)如果空間不夠則退出,否則進行下面操作;

2)對一個候選塊進行一次“JMP擴展”操作;

3)對一個候選塊中的條件跳轉(zhuǎn)指令進行“JMC變換”操作;

4)在候選塊中的JMP指令后隨機添加花指令;

5)平衡代碼段剩余可用空間;

6)如果所有候選塊處理完畢則向下執(zhí)行,否則取下一個候選塊并眺轉(zhuǎn)到1);

7)平衡所有跳轉(zhuǎn)指令跳轉(zhuǎn)位置;

8)指令地址偏移重定位;

9)其他數(shù)據(jù)、函數(shù)地址重定位。

三、隨機花指令加密算法實踐

1、隨機花指令算法的實驗步驟與結(jié)果

1)實驗環(huán)境

硬件環(huán)境:celcronl. 7GHz/256M Memoy/20G HardDisk軟件環(huán)境;操作系統(tǒng)Windows XP+SP2/JCEE變換器/W32Dasm8. 93/實驗用可執(zhí)行程序test.exe。其中JCEE變換器是為實現(xiàn)變換而編制的測試程序。W32Dasm是應(yīng)用廣泛的反匯編器調(diào)試器,程序test.cxe是用來進行變換的程序。

2)實驗步驟

a)對實驗用原程序進行反匯編,得到匯編偽碼P;

b)用JCEE變換器對原程序進行變換,得到變換后的程序;

c)用反匯編器對變換后的程序進行反匯編,得到匯編偽碼P;

d)比較P和P’得到結(jié)論R。

3)實驗結(jié)果

候選塊的大小選為10條指令,每條JMP指令后最大添加8個字節(jié)花指令。 teat. exe程序經(jīng)變換后得到的數(shù)據(jù)如表1所示。

隨機花指令加密算法

經(jīng)驗證,采用本隨機花指令加密方法對test. exe文件進行花指令變換,采用花指令去除工具對變換后的結(jié)果進行花指令搜索,均未能發(fā)現(xiàn)相關(guān)的花指令特征。

2、實驗分析

經(jīng)過‘‘JMP擴展”變換后的代碼要跳過一定數(shù)量的正常指令,然后在三條JMP指令后添加花指令,總共存在的特征值是8*8*8*10 =5120種,如果基數(shù)擴大,特征值數(shù)量更多。因此想要定義所有的特征不太實際。在JMP后添加了花指令后不能自動去除還有一個原因是JMP指令作為原始代碼的組成部分是不能被去除的,否則程序邏輯遭到破壞。

小知識之花指令

花指令是程序中有一些指令,由設(shè)計者特別構(gòu)思,希望使反匯編的時候出錯,讓破解者無法清楚正確地反匯編程序的內(nèi)容,迷失方向。經(jīng)典的是一些跳轉(zhuǎn)指令,目標(biāo)位置是另一條指令的中間,這樣在反匯編的時候便會出現(xiàn)混亂。花指令有可能利用各種指令:jmp, call, ret的一些堆棧技巧,位置運算,等等。