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

一種基于控制流和外形混淆的Python代碼混淆方法與流程

文檔序號(hào):12467461閱讀:1097來源:國(guó)知局
一種基于控制流和外形混淆的Python代碼混淆方法與流程

本發(fā)明涉及一種程序混淆方法,具體地說是一種基于控制流和外形混淆的Python代碼混淆方法。



背景技術(shù):

軟件代碼的安全保護(hù)是計(jì)算機(jī)安全領(lǐng)域的一個(gè)重點(diǎn)研究?jī)?nèi)容。隨著互聯(lián)網(wǎng)的飛速發(fā)展和大數(shù)據(jù)時(shí)代的到來,分布式計(jì)算環(huán)境在給人們帶來更強(qiáng)的計(jì)算能力和更大的靈活性的同時(shí),也使軟件代碼不可避免的地運(yùn)行在不可信的節(jié)點(diǎn)上,從而使軟件代碼面臨更加嚴(yán)峻的安全問題。相對(duì)于攻擊者并不知曉攻擊對(duì)象內(nèi)部情況的黑盒子攻擊,這種暴露軟件代碼,通過逆向分析代碼的運(yùn)行,并對(duì)代碼進(jìn)行惡意篡改或盜取的安全攻擊成為白盒子攻擊。目前白盒子攻擊的威脅正在快速上升和不斷演化。軟件代碼混淆技術(shù)是近十年來發(fā)展起來的一種軟件白盒子安全保護(hù)技術(shù)。

Python語言現(xiàn)在變得越來越流行,它是一種面向?qū)ο?、解釋型?jì)算機(jī)程序設(shè)計(jì)語言。Python語法簡(jiǎn)潔而清晰,具有豐富和強(qiáng)大的類庫,常被昵稱為膠水語言,它能夠把其他語言制作的各種模板(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。

現(xiàn)階段,由于Python語言的方便性,大量應(yīng)用開始采用Python語言來實(shí)現(xiàn)。但是現(xiàn)在存在很多開源的反編譯工具,可以直接將使用Python語言開發(fā)的程序模塊(pyc、pyo)反編譯為Python源代碼,導(dǎo)致程序中的核心代碼被攻擊者竊取或篡改,使得開發(fā)者很難保護(hù)其代碼的知識(shí)產(chǎn)權(quán)。



技術(shù)實(shí)現(xiàn)要素:

針對(duì)現(xiàn)有使用Python語言開發(fā)的程序在安全防護(hù)方面所存在的問題,本發(fā)明提供一種基于控制流和外形混淆的Python代碼混淆方法,以期能在保證語義上不發(fā)生改變,也不影響程序的正常執(zhí)行的條件下,通過控制流混淆和外形混淆的手段,使得混淆后的Python源代碼在被反編譯成源代碼之后難以閱讀和理解,以達(dá)到保護(hù)原創(chuàng)代碼的目的。

為達(dá)到上述發(fā)明目的,本發(fā)明采用如下技術(shù)方案:

本發(fā)明一種基于控制流和外形混淆的Python代碼混淆方法的特點(diǎn)按如下步驟進(jìn)行:

步驟1、以一個(gè)函數(shù)的開始與結(jié)束為單位,將Python代碼中所有函數(shù)進(jìn)行劃分,得到若干個(gè)單獨(dú)的函數(shù);

步驟2、針對(duì)任意一個(gè)單獨(dú)的函數(shù)fun,對(duì)其函數(shù)體中若干個(gè)連續(xù)執(zhí)行的代碼進(jìn)行分割,得到若干個(gè)基本塊并依次進(jìn)行編號(hào),記為B={b1,b2,…,bi,…,bn};bi表示第i個(gè)基本塊;所述第i個(gè)基本塊bi中的代碼只有一個(gè)入口和一個(gè)出口;1≤i≤n;

步驟3、使用基于分段Logistic混沌映射的密鑰生成算法,生成兩套密鑰;

步驟3.1、利用式(1)所示的分段Logistic混沌映射產(chǎn)生第i個(gè)實(shí)數(shù)ai,從而得到隨機(jī)實(shí)數(shù)序列A={a1,a2,…,ai,…,an}:

式(1)中,a0=rand(0,1);u表示Logistic參數(shù);且3.569946…≤u≤4;

步驟3.2、利用式(2)所示的映射函數(shù)將第i個(gè)實(shí)數(shù)ai映射成第i個(gè)整數(shù)Fi,從而將所述實(shí)數(shù)序列A={a1,a2,…,ai,…,an}映射成整數(shù)序列F={F1,F2,…,Fi,…,Fn}:

Fi=Round{ai×m} (2)

式(2)中,Round{ }是取整函數(shù);m表示映射參數(shù);

步驟3.3、統(tǒng)計(jì)所述整數(shù)序列F中互不相同的元素個(gè)數(shù),記為t;t∈[1,n];

步驟3.4、由所述步驟3.1~步驟3.3的處理過程構(gòu)成函數(shù)Logistic的函數(shù)體;由實(shí)數(shù)a0和Logistic參數(shù)u構(gòu)成二元組(a0,u)作為第t個(gè)基本塊bt的密鑰keyt;

步驟3.5、重復(fù)步驟3.1~步驟3.4,直到獲得所有基本塊的密鑰作為第一套KEY={key1,key2,…,keyt,…,keyn};

步驟3.6、重復(fù)步驟3.1~步驟3.4,直到獲得所有基本塊的密鑰作為第二套KEY′={key1′,key′2,…,key′t,…,key′n};

步驟4、基于控制流的混淆

步驟4.1、打亂所述函數(shù)fun中所有基本塊的順序,得到B′={b1′,b2′,…,bi′,…,b′n};bi′表示打亂后的第i個(gè)基本塊;

步驟4.2、以所述第一套密鑰KEY作為所述函數(shù)Logistic的參數(shù);經(jīng)過函數(shù)Logistic的函數(shù)體計(jì)算,得到下一個(gè)需要執(zhí)行的基本塊的編號(hào);

以所述第二套密鑰KEY′為作為所述函數(shù)Logistic的參數(shù);經(jīng)過函數(shù)Logistic的函數(shù)體計(jì)算,得到if-else控制語句中的條件變量,從而使用while循環(huán)語句和if-else控制語句對(duì)打亂后的所有基本塊的順序進(jìn)行控制,使得打亂后的所有基本塊的執(zhí)行順序與原來的執(zhí)行順序相同;

步驟5、基于外形的混淆

利用無意義的字符串對(duì)所述Python代碼中局部的類名、函數(shù)名、變量名進(jìn)行替換,從而形成混淆后的Python代碼。

與已有技術(shù)相比,本發(fā)明提出的基于控制流和外形混淆的Python代碼混淆方法,使代碼的反向工程更加困難,創(chuàng)建讓人理解困難的混淆代碼,來隱藏使用Python開發(fā)的應(yīng)用的核心代碼,以便防止攻擊者對(duì)應(yīng)用進(jìn)行篡改或反向工程。具體的說,有益效果體現(xiàn)在:

1、本發(fā)明基于現(xiàn)有的Logistic混沌映射算法,提出了一種新的密鑰生成算法,基于此算法生成了兩套密鑰,并將密鑰應(yīng)用到控制流混淆中,使用while循環(huán)語句和if-else控制語句改變?cè)却a的邏輯結(jié)構(gòu),使得混淆后程序的結(jié)構(gòu)更加復(fù)雜,更難被理解,但并不改變程序的執(zhí)行過程及產(chǎn)生的結(jié)果,以此來增加攻擊者理解代碼的難度。

2、本發(fā)明將控制流混淆與外形混淆相結(jié)合,提供一種更加負(fù)載的面向Python程序的代碼混淆方法,該方法能夠保證混淆后的Python源代碼在語義上不發(fā)生改變,不影響程序的正常執(zhí)行;同時(shí)使得混淆后的Python源代碼邏輯結(jié)構(gòu)變的更加復(fù)雜,并且代碼中局部的類名、函數(shù)名和變量名在外形混淆后變成無意義的字符串。從而使的混淆后的代碼更加難以理解,以此來增加Python模塊在被反編譯成源代碼之后的閱讀和理解的難度,以達(dá)到保護(hù)軟件版權(quán)的作用。

附圖說明

圖1是本發(fā)明實(shí)施例的整體流程框圖;

圖2是本發(fā)明將Python偽代碼進(jìn)行控制流混淆的示例圖。

圖3是本發(fā)明將Python偽代碼進(jìn)行外形混淆的示例圖。

具體實(shí)施方式

本實(shí)施例中,一種基于控制流和外形混淆的Python代碼混淆方法,按如圖1所示步驟進(jìn)行:

步驟1、首先,讀取需要混淆的Python代碼;其次,使用Python語言中自帶的函數(shù)獲取代碼的解析樹;然后,以一個(gè)函數(shù)的開始與結(jié)束為單位,將Python代碼中所有函數(shù)進(jìn)行劃分,得到若干個(gè)單獨(dú)的函數(shù);

步驟2、針對(duì)任意一個(gè)單獨(dú)的函數(shù)fun,如圖2所示,對(duì)其函數(shù)體中若干個(gè)連續(xù)執(zhí)行的代碼進(jìn)行分割,得到若干個(gè)基本塊并依次進(jìn)行編號(hào),記為B={b1,b2,…,bi,…,bn};圖2中基本塊個(gè)數(shù)n=4,所以得到B={b1,b2,b3,b4};bi表示第i個(gè)基本塊;第i個(gè)基本塊bi中的代碼只有一個(gè)入口和一個(gè)出口;1≤i≤n;以此來提取函數(shù)中的基本塊;

步驟3、使用基于分段Logistic混沌映射的密鑰生成算法,生成兩套密鑰;

步驟3.1、利用式(1)所示的分段Logistic混沌映射產(chǎn)生第i個(gè)實(shí)數(shù)ai,從而得到隨機(jī)實(shí)數(shù)序列A={a1,a2,…,ai,…,an}:

式(1)中,a0=rand(0,1);u表示Logistic參數(shù);且3.569946…≤u≤4;

如圖2所示,基本塊個(gè)數(shù)n=4,這里得到的隨機(jī)實(shí)數(shù)序列為A={a1,a2,a3,a4}

步驟3.2、利用式(2)所示的映射函數(shù)將第i個(gè)實(shí)數(shù)ai映射成第i個(gè)整數(shù)Fi,從而將實(shí)數(shù)序列A={a1,a2,a3,a4}映射成整數(shù)序列F={F1,F2,F3,…,F4}:

Fi=Round{ai×m} (2)

式(2)中,Round{}是取整函數(shù);m表示映射參數(shù);

步驟3.3、統(tǒng)計(jì)整數(shù)序列F中互不相同的元素個(gè)數(shù),記為t;t∈[1,n];

步驟3.4、由步驟3.1~步驟3.3的處理過程構(gòu)成函數(shù)Logistic的函數(shù)體;由實(shí)數(shù)a0和Logistic參數(shù)u構(gòu)成二元組(a0,u)作為第t個(gè)基本塊bt的密鑰keyt;

步驟3.5、重復(fù)步驟3.1~步驟3.4,直到獲得所有基本塊的密鑰作為第一套KEY={key1,key2,key3,key4};

步驟3.6、重復(fù)步驟3.1~步驟3.4,直到獲得所有基本塊的密鑰作為第二套KEY′={key1′,key′2,key3′,key′4};

步驟4、基于控制流的混淆,接下來打亂基本塊的順序并插入while和if-else語句進(jìn)行控制流混淆

步驟4.1、打亂函數(shù)fun中所有基本塊的順序,得到B′={b1′,b2′,b3′,b4′};bi′表示打亂后的第i個(gè)基本塊,其與原先基本塊的對(duì)應(yīng)順序?yàn)锽′={b1′,b2′,b3′,b4′}={b3,b1,b4,b2}

步驟4.2、以第一套密鑰KEY作為函數(shù)Logistic的參數(shù);經(jīng)過函數(shù)Logistic的函數(shù)體計(jì)算,得到下一個(gè)需要執(zhí)行的基本塊的編號(hào);

以第二套密鑰KEY′為作為函數(shù)Logistic的參數(shù);經(jīng)過函數(shù)Logistic的函數(shù)體計(jì)算,得到if-else控制語句中的條件變量,從而使用while循環(huán)語句和if-else控制語句對(duì)打亂后的所有基本塊的順序進(jìn)行控制,圖2中Logistic(keyi)=Logistic(keyi′),i∈[1,4]。因此,打亂后的基本塊的執(zhí)行順序?yàn)閧b2′,b4′,b1′,b3′},其對(duì)應(yīng)的混淆前基本塊的順序?yàn)閧b1,b2,b3,b4},因此,打亂后的所有基本塊的執(zhí)行順序與原來的執(zhí)行順序相同;

步驟5、基于外形的混淆

利用無意義的字符串對(duì)Python代碼中局部的類名、函數(shù)名、變量名進(jìn)行替換,從而形成混淆后的Python代碼。如圖3所示,使用無意義的字符串對(duì)fun函數(shù)中的函數(shù)名和變量名進(jìn)行了替換。從而增加了Python程序被反編譯后分析代碼語義的難度,保護(hù)使用Python語言開發(fā)的軟件的知識(shí)產(chǎn)權(quán)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
会泽县| 韩城市| 察雅县| 全州县| 阿坝县| 任丘市| 城市| 万山特区| 清苑县| 青铜峡市| 宁陕县| 巴南区| 霍山县| 松原市| 广安市| 垦利县| 天峨县| 安龙县| 大埔区| 探索| 庆安县| 临安市| 宁城县| 昌江| 融水| 永善县| 濮阳县| 水城县| 新密市| 敦化市| 盐城市| 宾阳县| 大同市| 梧州市| 凌云县| 赣州市| 文登市| 馆陶县| 沅陵县| 呼玛县| 阳山县|