欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種可執(zhí)行應(yīng)用的混淆方法和裝置的制造方法

文檔序號(hào):8259297閱讀:197來源:國知局
一種可執(zhí)行應(yīng)用的混淆方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及信息安全技術(shù)領(lǐng)域,尤其涉及一種可執(zhí)行應(yīng)用的混淆方法和裝置。
【背景技術(shù)】
[0002] 在信息安全技術(shù)領(lǐng)域,為了對(duì)可執(zhí)行應(yīng)用或代碼進(jìn)行保護(hù),一般都會(huì)使用混淆技 術(shù)對(duì)發(fā)布出去的可執(zhí)行應(yīng)用進(jìn)行重新組織和處理,使得處理后的代碼與處理前代碼完成相 同的功能,但混淆后的代碼卻很難被反編譯,即使反編譯成功也將難以閱讀,很難得出程序 的真正語義。
[0003] 在現(xiàn)有技術(shù)中,國內(nèi)外已經(jīng)在混淆技術(shù)領(lǐng)域做了大量的研宄,也提出了一些可行 的技術(shù)方法,并且構(gòu)造了相應(yīng)的混淆工具。目前,主要的混淆方法主要包括數(shù)據(jù)混淆、控制 流混淆和切片混淆等。
[0004] 數(shù)據(jù)混淆的原理是通過對(duì)常量、變量和數(shù)據(jù)結(jié)構(gòu)這些程序的基本組成元素進(jìn)行修 改的方式,增大攻擊者進(jìn)行逆向工程的難度。數(shù)據(jù)混淆方法包括:變量存儲(chǔ)和編碼混淆、變 量聚合混淆、順序調(diào)整混淆、詞法混淆以及移除注釋和調(diào)試信息混淆。
[0005] 關(guān)于控制流混淆,程序的控制轉(zhuǎn)換過程的信息是追蹤定位程序狀態(tài)的重要線索, 如何保護(hù)這部分信息也是軟件保護(hù)中很重要的一個(gè)環(huán)節(jié)??刂屏鲌D(Control Flow Graph, CFG)是程序可能執(zhí)行流程的圖形化表示,它可以用來描述程序的控制轉(zhuǎn)換。一個(gè)程序可以 被分成由一系列無分支的代碼組成的基本代碼塊,這些基本塊作為控制流圖的結(jié)點(diǎn),而圖 的邊即為各個(gè)基本塊之間可能的跳轉(zhuǎn)關(guān)系。控制流混淆的目的就是改變或復(fù)雜化程序的 控制流,使程序更難以破譯??刂苹煜刹捎玫氖侄魏芏啵热鐟?yīng)用不透明謂詞增加偽造分 支、加入可導(dǎo)致反編譯錯(cuò)誤的指令(例如在Java字節(jié)碼中添加goto語句等)、將一段代碼 轉(zhuǎn)換為內(nèi)聯(lián)函數(shù)調(diào)用等。
[0006] 關(guān)于切片混淆,切片通常是用來幫助理解程序,而混淆的目的是使程序更難以被 理解。在現(xiàn)有技術(shù)中,Drape等人提出了切片混淆算法,使得混淆過的程序能夠更好地對(duì)抗 切片分析攻擊。切片混淆(slicing obfuscation)算法的主要思想就是盡可能多地將多個(gè) 變量的值放入到切片的觀察范圍之內(nèi),增加使用切片分析程序的攻擊者的困難程度。切片 混淆的主要方法有:增加恒假謂詞、變量編碼和增加循環(huán)變量。增加恒假謂詞是在恒假謂詞 的假分支上增加令x與Y相關(guān)的函數(shù);變量編碼是在不改變語義的情況下將Y的表達(dá)式重 新編碼為與x相關(guān)的表達(dá)式;增加循環(huán)變量是在循環(huán)變量中添加與x,Y相關(guān)的變量。
[0007]目前,主流的混淆工具基本都是基于上述方法來實(shí)現(xiàn)的,混淆的評(píng)估一般從強(qiáng)度、 開銷、隱蔽性、彈性等方面對(duì)混淆算法進(jìn)行評(píng)估。雖然現(xiàn)有技術(shù)中的上述方法能夠滿足應(yīng)用 混淆的指標(biāo),但是仍然具有一定的局限性:
[0008]1、傳統(tǒng)應(yīng)用軟件混淆大多數(shù)基于軟件源碼
[0009] ProGuard及APKProtect等應(yīng)用軟件混淆工具都是基于源碼的混淆方法,需要在 獲取開發(fā)者源代碼的基礎(chǔ)上進(jìn)行保護(hù),因此,各大軟件廠商和應(yīng)用商店無法直接對(duì)已經(jīng)發(fā) 布的可執(zhí)行程序進(jìn)行混淆。
[0010] 2、靜態(tài)混淆難以防止動(dòng)態(tài)調(diào)試
[0011] 傳統(tǒng)的混淆算法大多屬于靜態(tài)混淆技術(shù),通過傳統(tǒng)方法進(jìn)行混淆后,雖然能夠增 加攻擊者的閱讀難度,但是仍然可以理解大部分的程序代碼,同時(shí)也難以抵擋IDA等工具 的動(dòng)態(tài)調(diào)試。
[0012] 3、混淆方法易被發(fā)現(xiàn)
[0013] 經(jīng)過傳統(tǒng)方法的混淆后,攻擊者能夠從混淆后的應(yīng)用程序代碼片段中發(fā)現(xiàn)各種可 能被利用的特征,從特征中可以分析判斷出使用的混淆方法,然后通過各種針對(duì)性分析方 法對(duì)目標(biāo)應(yīng)用去混淆,甚至可以通過自動(dòng)化去混淆工具進(jìn)行攻擊。
[0014] 目前,移動(dòng)應(yīng)用軟件中暴露出大量的安全問題。經(jīng)研宄發(fā)現(xiàn),大部分安全問題并不 是應(yīng)用本身存在問題,而是應(yīng)用軟件在發(fā)布后被惡意開發(fā)者破解后加入惡意代碼重新打包 發(fā)布所導(dǎo)致的問題?,F(xiàn)有技術(shù)中已經(jīng)有大量工具對(duì)應(yīng)用軟件進(jìn)行保護(hù),例如,傳統(tǒng)混淆工具 會(huì)對(duì)應(yīng)用進(jìn)行各種混淆,加固工具會(huì)使用解殼程序?qū)⒃汲绦蜻M(jìn)行解密后運(yùn)行。但是,由于 傳統(tǒng)混淆工具和加固工具具有鮮明的特征,可以通過隨機(jī)性、熵等各種指標(biāo)進(jìn)行量化區(qū)分, 各種自動(dòng)去混淆、脫殼工具已經(jīng)應(yīng)運(yùn)而生,從而使得應(yīng)用安全保護(hù)手段都受到了一定程度 的威脅。

【發(fā)明內(nèi)容】

[0015] 有鑒于此,本發(fā)明提供了一種可執(zhí)行應(yīng)用的混淆方法和裝置,從而可以降低自動(dòng) 化工具對(duì)混淆方法的識(shí)別能力,增加攻擊者閱讀代碼和破解應(yīng)用的難度。
[0016] 本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的:
[0017] -種可執(zhí)行應(yīng)用的混淆方法,該方法包括:
[0018] A、對(duì)需混淆的可執(zhí)行代碼進(jìn)行逆向分析,得到逆向分析后的指令序列;
[0019] B、對(duì)所述逆向分析后的指令序列進(jìn)行指令抽象和統(tǒng)計(jì)分析,根據(jù)統(tǒng)計(jì)分析結(jié)果進(jìn) 行編碼,生成LZW編碼表;
[0020] C、將需混淆的可執(zhí)行代碼的二進(jìn)制流根據(jù)所述LZW編碼表進(jìn)行重新編碼,生成混 渚后的指令序列;
[0021] D、將所述混淆后的指令序列進(jìn)行封裝,并打包生成混淆后的可執(zhí)行應(yīng)用。
[0022] 較佳的,在所述步驟D之后,該方法還進(jìn)一步包括:
[0023] E、對(duì)混淆后的可執(zhí)行應(yīng)用進(jìn)行分析,通過尋址找到相應(yīng)的LZW編碼表;
[0024] F、生成一個(gè)加載器,并使用該加載器將所述混淆后的可執(zhí)行應(yīng)用加載到內(nèi)存中, 啟動(dòng)所述混淆后的可執(zhí)行應(yīng)用;
[0025] G、根據(jù)所得到的LZW編碼表對(duì)該混淆后的可執(zhí)行應(yīng)用進(jìn)行解碼,得到解碼后的程 序指令并執(zhí)行。
[0026] 較佳的,所述根據(jù)統(tǒng)計(jì)分析結(jié)果進(jìn)行編碼,生成LZW編碼表包括:
[0027] B1、從逆向分析后的指令序列中截取一個(gè)指令片段,并從該指令片段中提取組成 整個(gè)指令序列的基本指令;
[0028] B2、設(shè)置初始的序列計(jì)數(shù)和初始的LZW編碼表;
[0029] B3、從所述指令序列的第一個(gè)指令開始,將所述指令序列的各個(gè)序列逐個(gè)加入到 預(yù)設(shè)的序列組合中;當(dāng)序列組合滿足預(yù)設(shè)的添加條件時(shí),將當(dāng)前的序列組合添加到所述 LZW編碼表中,輸出當(dāng)前的序列計(jì)數(shù)的值,并將當(dāng)前的序列計(jì)數(shù)的值加1。
[0030] 較佳的,所述添加條件為:
[0031]
【主權(quán)項(xiàng)】
1. 一種可執(zhí)行應(yīng)用的混淆方法,其特征在于,該方法包括: A、 對(duì)需混淆的可執(zhí)行代碼進(jìn)行逆向分析,得到逆向分析后的指令序列; B、 對(duì)所述逆向分析后的指令序列進(jìn)行指令抽象和統(tǒng)計(jì)分析,根據(jù)統(tǒng)計(jì)分析結(jié)果進(jìn)行編 碼,生成LZW編碼表; C、 將需混淆的可執(zhí)行代碼的二進(jìn)制流根據(jù)所述LZW編碼表進(jìn)行重新編碼,生成混淆后 的指令序列; D、 將所述混淆后的指令序列進(jìn)行封裝,并打包生成混淆后的可執(zhí)行應(yīng)用。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述步驟D之后,該方法還進(jìn)一步包 括: E、 對(duì)混淆后的可執(zhí)行應(yīng)用進(jìn)行分析,通過尋址找到相應(yīng)的LZW編碼表; F、 生成一個(gè)加載器,并使用該加載器將所述混淆后的可執(zhí)行應(yīng)用加載到內(nèi)存中,啟動(dòng) 所述混淆后的可執(zhí)行應(yīng)用; G、 根據(jù)所得到的LZW編碼表對(duì)該混淆后的可執(zhí)行應(yīng)用進(jìn)行解碼,得到解碼后的程序指 令并執(zhí)行。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)統(tǒng)計(jì)分析結(jié)果進(jìn)行編碼,生成 LZW編碼表包括: B1、從逆向分析后的指令序列中截取一個(gè)指令片段,并從該指令片段中提取組成整個(gè) 指令序列的基本指令; B2、設(shè)置初始的序列計(jì)數(shù)和初始的LZW編碼表; B3、從所述指令序列的第一個(gè)指令開始,將所述指令序列的各個(gè)序列逐個(gè)加入到預(yù)設(shè) 的序列組合中;當(dāng)序列組合滿足預(yù)設(shè)的添加條件時(shí),將當(dāng)前的序列組合添加到所述LZW編 碼表中,輸出當(dāng)前的序列計(jì)數(shù)的值,并將當(dāng)前的序列計(jì)數(shù)的值加1。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述添加條件為:
其中,atomm表示指令片段中的第m個(gè)指令,Table^表示LZW編碼表。
5. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所得到的LZW編碼表對(duì)該混淆后 的可執(zhí)行應(yīng)用進(jìn)行解碼包括: 根據(jù)所獲取的混淆后應(yīng)用的指令序列,從所述LZW編碼表中逐條查找到滿足預(yù)設(shè)輸 出條件的最大匹配序列,并輸出查找到的最大匹配序列在所述LZW編碼表中所以對(duì)應(yīng)的序 號(hào); 當(dāng)所述混淆后應(yīng)用的指令序列中的所有指令都查找到最大匹配序列之后,將輸出的所 有序號(hào)按照輸出時(shí)間的先后次序依次排列成一個(gè)序號(hào)隊(duì)列; 根據(jù)所述LZW編碼表以及所述序號(hào)隊(duì)列恢復(fù)出原始指令序列。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述預(yù)設(shè)輸出條件為: 當(dāng)前查找到的最大匹配序列存在于所述LZW編碼表中,且當(dāng)前查找到的最大匹配序列 與上一個(gè)查找到的最大匹配序列的最后一位所組成的序列也存在于所述LZW編碼表中。
7. 根據(jù)權(quán)利要求2所述的方法,其特征在于: 所述加載器利用AndroidLinux中的ptrace機(jī)制,動(dòng)態(tài)查詢運(yùn)行可執(zhí)行應(yīng)用的Android設(shè)備的斷點(diǎn);如果發(fā)現(xiàn)所述可執(zhí)行應(yīng)用本身被調(diào)試,則立刻中斷該可執(zhí)行應(yīng)用的 運(yùn)行。
8. -種可執(zhí)行應(yīng)用的混淆裝置,其特征在于,該裝置包括:逆向分析器、第一預(yù)處理 器、混淆器和重編譯器; 其中,所述逆向分析器,用于對(duì)需混淆的可執(zhí)行代碼進(jìn)行逆向分析,得到逆向分析后的 指令序列;將所述逆向分析后的指令序列發(fā)送給所述第一預(yù)處理器; 所述第一預(yù)處理器,用于對(duì)所述逆向分析后的指令序列進(jìn)行指令抽象和統(tǒng)計(jì)分析,根 據(jù)統(tǒng)計(jì)分析結(jié)果進(jìn)行編碼,生成LZW編碼表;將所述LZW編碼表發(fā)送給所述混淆器; 所述混淆器,用于將需混淆的可執(zhí)行代碼的二進(jìn)制流根據(jù)所述LZW編碼表進(jìn)行重新編 碼,生成混淆后的指令序列;將所述混淆后的指令序列發(fā)送給所述重編譯器; 所述重編譯器,用于將所述混淆后的指令序列進(jìn)行封裝,并打包生成混淆后的可執(zhí)行 應(yīng)用。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述可執(zhí)行應(yīng)用的混淆裝置還進(jìn)一步包 括:第二預(yù)處理器、加載器和解碼器; 所述第二預(yù)處理器,用于對(duì)混淆后的可執(zhí)行應(yīng)用進(jìn)行分析,通過尋址找到相應(yīng)的LZW編碼表;將所述LZW編碼表發(fā)送給所述解碼器; 所述加載器,用于將所述混淆后的可執(zhí)行應(yīng)用加載到內(nèi)存中,啟動(dòng)所述混淆后的可執(zhí) 行應(yīng)用; 所述解碼器,用于根據(jù)所得到的LZW編碼表對(duì)所述混淆后的可執(zhí)行應(yīng)用進(jìn)行解碼,得 到解碼后的程序指令并執(zhí)行。
【專利摘要】本發(fā)明提供了一種可執(zhí)行應(yīng)用的混淆方法和裝置,其中的方法包括:A、對(duì)需混淆的可執(zhí)行代碼進(jìn)行逆向分析,得到逆向分析后的指令序列;B、對(duì)所述逆向分析后的指令序列進(jìn)行指令抽象和統(tǒng)計(jì)分析,根據(jù)統(tǒng)計(jì)分析結(jié)果進(jìn)行編碼,生成LZW編碼表;C、將需混淆的可執(zhí)行代碼的二進(jìn)制流根據(jù)所述LZW編碼表進(jìn)行重新編碼,生成混淆后的指令序列;D、將所述混淆后的指令序列進(jìn)行封裝,并打包生成混淆后的可執(zhí)行應(yīng)用。應(yīng)用本發(fā)明可以降低自動(dòng)化工具對(duì)混淆方法的識(shí)別能力,增加攻擊者閱讀代碼和破解應(yīng)用的難度。
【IPC分類】G06F21-14
【公開號(hào)】CN104573426
【申請(qǐng)?zhí)枴緾N201510005059
【發(fā)明人】李承澤, 李祺, 張程鵬, 董楓, 胡陽雨
【申請(qǐng)人】北京郵電大學(xué)
【公開日】2015年4月29日
【申請(qǐng)日】2015年1月6日
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
潮安县| 宁明县| 鄱阳县| 海宁市| 绍兴县| 瑞金市| 多伦县| 新密市| 抚州市| 锡林浩特市| 康定县| 庆阳市| 特克斯县| 乐平市| 兴业县| 广东省| 临潭县| 隆安县| 疏勒县| 会理县| 南昌县| 内江市| 凭祥市| 瓮安县| 唐山市| 阳泉市| 夏邑县| 台江县| 怀集县| 咸丰县| 固镇县| 岳池县| 买车| 仁怀市| 裕民县| 金华市| 嘉善县| 馆陶县| 中江县| 威信县| 巴马|