一種可執(zhí)行應用的混淆方法和裝置的制造方法
【技術領域】
[0001] 本發(fā)明涉及信息安全技術領域,尤其涉及一種可執(zhí)行應用的混淆方法和裝置。
【背景技術】
[0002] 在信息安全技術領域,為了對可執(zhí)行應用或代碼進行保護,一般都會使用混淆技 術對發(fā)布出去的可執(zhí)行應用進行重新組織和處理,使得處理后的代碼與處理前代碼完成相 同的功能,但混淆后的代碼卻很難被反編譯,即使反編譯成功也將難以閱讀,很難得出程序 的真正語義。
[0003] 在現(xiàn)有技術中,國內(nèi)外已經(jīng)在混淆技術領域做了大量的研宄,也提出了一些可行 的技術方法,并且構造了相應的混淆工具。目前,主要的混淆方法主要包括數(shù)據(jù)混淆、控制 流混淆和切片混淆等。
[0004] 數(shù)據(jù)混淆的原理是通過對常量、變量和數(shù)據(jù)結構這些程序的基本組成元素進行修 改的方式,增大攻擊者進行逆向工程的難度。數(shù)據(jù)混淆方法包括:變量存儲和編碼混淆、變 量聚合混淆、順序調(diào)整混淆、詞法混淆以及移除注釋和調(diào)試信息混淆。
[0005] 關于控制流混淆,程序的控制轉換過程的信息是追蹤定位程序狀態(tài)的重要線索, 如何保護這部分信息也是軟件保護中很重要的一個環(huán)節(jié)。控制流圖(Control Flow Graph, CFG)是程序可能執(zhí)行流程的圖形化表示,它可以用來描述程序的控制轉換。一個程序可以 被分成由一系列無分支的代碼組成的基本代碼塊,這些基本塊作為控制流圖的結點,而圖 的邊即為各個基本塊之間可能的跳轉關系。控制流混淆的目的就是改變或復雜化程序的 控制流,使程序更難以破譯。控制混淆可采用的手段很多,比如應用不透明謂詞增加偽造分 支、加入可導致反編譯錯誤的指令(例如在Java字節(jié)碼中添加goto語句等)、將一段代碼 轉換為內(nèi)聯(lián)函數(shù)調(diào)用等。
[0006] 關于切片混淆,切片通常是用來幫助理解程序,而混淆的目的是使程序更難以被 理解。在現(xiàn)有技術中,Drape等人提出了切片混淆算法,使得混淆過的程序能夠更好地對抗 切片分析攻擊。切片混淆(slicing obfuscation)算法的主要思想就是盡可能多地將多個 變量的值放入到切片的觀察范圍之內(nèi),增加使用切片分析程序的攻擊者的困難程度。切片 混淆的主要方法有:增加恒假謂詞、變量編碼和增加循環(huán)變量。增加恒假謂詞是在恒假謂詞 的假分支上增加令x與Y相關的函數(shù);變量編碼是在不改變語義的情況下將Y的表達式重 新編碼為與x相關的表達式;增加循環(huán)變量是在循環(huán)變量中添加與x,Y相關的變量。
[0007]目前,主流的混淆工具基本都是基于上述方法來實現(xiàn)的,混淆的評估一般從強度、 開銷、隱蔽性、彈性等方面對混淆算法進行評估。雖然現(xiàn)有技術中的上述方法能夠滿足應用 混淆的指標,但是仍然具有一定的局限性:
[0008]1、傳統(tǒng)應用軟件混淆大多數(shù)基于軟件源碼
[0009] ProGuard及APKProtect等應用軟件混淆工具都是基于源碼的混淆方法,需要在 獲取開發(fā)者源代碼的基礎上進行保護,因此,各大軟件廠商和應用商店無法直接對已經(jīng)發(fā) 布的可執(zhí)行程序進行混淆。
[0010] 2、靜態(tài)混淆難以防止動態(tài)調(diào)試
[0011] 傳統(tǒng)的混淆算法大多屬于靜態(tài)混淆技術,通過傳統(tǒng)方法進行混淆后,雖然能夠增 加攻擊者的閱讀難度,但是仍然可以理解大部分的程序代碼,同時也難以抵擋IDA等工具 的動態(tài)調(diào)試。
[0012] 3、混淆方法易被發(fā)現(xiàn)
[0013] 經(jīng)過傳統(tǒng)方法的混淆后,攻擊者能夠從混淆后的應用程序代碼片段中發(fā)現(xiàn)各種可 能被利用的特征,從特征中可以分析判斷出使用的混淆方法,然后通過各種針對性分析方 法對目標應用去混淆,甚至可以通過自動化去混淆工具進行攻擊。
[0014] 目前,移動應用軟件中暴露出大量的安全問題。經(jīng)研宄發(fā)現(xiàn),大部分安全問題并不 是應用本身存在問題,而是應用軟件在發(fā)布后被惡意開發(fā)者破解后加入惡意代碼重新打包 發(fā)布所導致的問題?,F(xiàn)有技術中已經(jīng)有大量工具對應用軟件進行保護,例如,傳統(tǒng)混淆工具 會對應用進行各種混淆,加固工具會使用解殼程序將原始程序進行解密后運行。但是,由于 傳統(tǒng)混淆工具和加固工具具有鮮明的特征,可以通過隨機性、熵等各種指標進行量化區(qū)分, 各種自動去混淆、脫殼工具已經(jīng)應運而生,從而使得應用安全保護手段都受到了一定程度 的威脅。
【發(fā)明內(nèi)容】
[0015] 有鑒于此,本發(fā)明提供了一種可執(zhí)行應用的混淆方法和裝置,從而可以降低自動 化工具對混淆方法的識別能力,增加攻擊者閱讀代碼和破解應用的難度。
[0016] 本發(fā)明的技術方案具體是這樣實現(xiàn)的:
[0017] -種可執(zhí)行應用的混淆方法,該方法包括:
[0018] A、對需混淆的可執(zhí)行代碼進行逆向分析,得到逆向分析后的指令序列;
[0019] B、對所述逆向分析后的指令序列進行指令抽象和統(tǒng)計分析,根據(jù)統(tǒng)計分析結果進 行編碼,生成LZW編碼表;
[0020] C、將需混淆的可執(zhí)行代碼的二進制流根據(jù)所述LZW編碼表進行重新編碼,生成混 渚后的指令序列;
[0021] D、將所述混淆后的指令序列進行封裝,并打包生成混淆后的可執(zhí)行應用。
[0022] 較佳的,在所述步驟D之后,該方法還進一步包括:
[0023] E、對混淆后的可執(zhí)行應用進行分析,通過尋址找到相應的LZW編碼表;
[0024] F、生成一個加載器,并使用該加載器將所述混淆后的可執(zhí)行應用加載到內(nèi)存中, 啟動所述混淆后的可執(zhí)行應用;
[0025] G、根據(jù)所得到的LZW編碼表對該混淆后的可執(zhí)行應用進行解碼,得到解碼后的程 序指令并執(zhí)行。
[0026] 較佳的,所述根據(jù)統(tǒng)計分析結果進行編碼,生成LZW編碼表包括:
[0027] B1、從逆向分析后的指令序列中截取一個指令片段,并從該指令片段中提取組成 整個指令序列的基本指令;
[0028] B2、設置初始的序列計數(shù)和初始的LZW編碼表;
[0029] B3、從所述指令序列的第一個指令開始,將所述指令序列的各個序列逐個加入到 預設的序列組合中;當序列組合滿足預設的添加條件時,將當前的序列組合添加到所述 LZW編碼表中,輸出當前的序列計數(shù)的值,并將當前的序列計數(shù)的值加1。
[0030] 較佳的,所述添加條件為:
[0031]
【主權項】
1. 一種可執(zhí)行應用的混淆方法,其特征在于,該方法包括: A、 對需混淆的可執(zhí)行代碼進行逆向分析,得到逆向分析后的指令序列; B、 對所述逆向分析后的指令序列進行指令抽象和統(tǒng)計分析,根據(jù)統(tǒng)計分析結果進行編 碼,生成LZW編碼表; C、 將需混淆的可執(zhí)行代碼的二進制流根據(jù)所述LZW編碼表進行重新編碼,生成混淆后 的指令序列; D、 將所述混淆后的指令序列進行封裝,并打包生成混淆后的可執(zhí)行應用。
2. 根據(jù)權利要求1所述的方法,其特征在于,在所述步驟D之后,該方法還進一步包 括: E、 對混淆后的可執(zhí)行應用進行分析,通過尋址找到相應的LZW編碼表; F、 生成一個加載器,并使用該加載器將所述混淆后的可執(zhí)行應用加載到內(nèi)存中,啟動 所述混淆后的可執(zhí)行應用; G、 根據(jù)所得到的LZW編碼表對該混淆后的可執(zhí)行應用進行解碼,得到解碼后的程序指 令并執(zhí)行。
3. 根據(jù)權利要求1所述的方法,其特征在于,所述根據(jù)統(tǒng)計分析結果進行編碼,生成 LZW編碼表包括: B1、從逆向分析后的指令序列中截取一個指令片段,并從該指令片段中提取組成整個 指令序列的基本指令; B2、設置初始的序列計數(shù)和初始的LZW編碼表; B3、從所述指令序列的第一個指令開始,將所述指令序列的各個序列逐個加入到預設 的序列組合中;當序列組合滿足預設的添加條件時,將當前的序列組合添加到所述LZW編 碼表中,輸出當前的序列計數(shù)的值,并將當前的序列計數(shù)的值加1。
4. 根據(jù)權利要求3所述的方法,其特征在于,所述添加條件為:
其中,atomm表示指令片段中的第m個指令,Table^表示LZW編碼表。
5. 根據(jù)權利要求2所述的方法,其特征在于,所述根據(jù)所得到的LZW編碼表對該混淆后 的可執(zhí)行應用進行解碼包括: 根據(jù)所獲取的混淆后應用的指令序列,從所述LZW編碼表中逐條查找到滿足預設輸 出條件的最大匹配序列,并輸出查找到的最大匹配序列在所述LZW編碼表中所以對應的序 號; 當所述混淆后應用的指令序列中的所有指令都查找到最大匹配序列之后,將輸出的所 有序號按照輸出時間的先后次序依次排列成一個序號隊列; 根據(jù)所述LZW編碼表以及所述序號隊列恢復出原始指令序列。
6. 根據(jù)權利要求5所述的方法,其特征在于,所述預設輸出條件為: 當前查找到的最大匹配序列存在于所述LZW編碼表中,且當前查找到的最大匹配序列 與上一個查找到的最大匹配序列的最后一位所組成的序列也存在于所述LZW編碼表中。
7. 根據(jù)權利要求2所述的方法,其特征在于: 所述加載器利用AndroidLinux中的ptrace機制,動態(tài)查詢運行可執(zhí)行應用的Android設備的斷點;如果發(fā)現(xiàn)所述可執(zhí)行應用本身被調(diào)試,則立刻中斷該可執(zhí)行應用的 運行。
8. -種可執(zhí)行應用的混淆裝置,其特征在于,該裝置包括:逆向分析器、第一預處理 器、混淆器和重編譯器; 其中,所述逆向分析器,用于對需混淆的可執(zhí)行代碼進行逆向分析,得到逆向分析后的 指令序列;將所述逆向分析后的指令序列發(fā)送給所述第一預處理器; 所述第一預處理器,用于對所述逆向分析后的指令序列進行指令抽象和統(tǒng)計分析,根 據(jù)統(tǒng)計分析結果進行編碼,生成LZW編碼表;將所述LZW編碼表發(fā)送給所述混淆器; 所述混淆器,用于將需混淆的可執(zhí)行代碼的二進制流根據(jù)所述LZW編碼表進行重新編 碼,生成混淆后的指令序列;將所述混淆后的指令序列發(fā)送給所述重編譯器; 所述重編譯器,用于將所述混淆后的指令序列進行封裝,并打包生成混淆后的可執(zhí)行 應用。
9. 根據(jù)權利要求8所述的裝置,其特征在于,所述可執(zhí)行應用的混淆裝置還進一步包 括:第二預處理器、加載器和解碼器; 所述第二預處理器,用于對混淆后的可執(zhí)行應用進行分析,通過尋址找到相應的LZW編碼表;將所述LZW編碼表發(fā)送給所述解碼器; 所述加載器,用于將所述混淆后的可執(zhí)行應用加載到內(nèi)存中,啟動所述混淆后的可執(zhí) 行應用; 所述解碼器,用于根據(jù)所得到的LZW編碼表對所述混淆后的可執(zhí)行應用進行解碼,得 到解碼后的程序指令并執(zhí)行。
【專利摘要】本發(fā)明提供了一種可執(zhí)行應用的混淆方法和裝置,其中的方法包括:A、對需混淆的可執(zhí)行代碼進行逆向分析,得到逆向分析后的指令序列;B、對所述逆向分析后的指令序列進行指令抽象和統(tǒng)計分析,根據(jù)統(tǒng)計分析結果進行編碼,生成LZW編碼表;C、將需混淆的可執(zhí)行代碼的二進制流根據(jù)所述LZW編碼表進行重新編碼,生成混淆后的指令序列;D、將所述混淆后的指令序列進行封裝,并打包生成混淆后的可執(zhí)行應用。應用本發(fā)明可以降低自動化工具對混淆方法的識別能力,增加攻擊者閱讀代碼和破解應用的難度。
【IPC分類】G06F21-14
【公開號】CN104573426
【申請?zhí)枴緾N201510005059
【發(fā)明人】李承澤, 李祺, 張程鵬, 董楓, 胡陽雨
【申請人】北京郵電大學
【公開日】2015年4月29日
【申請日】2015年1月6日