1.一種基于控制流和外形混淆的Python代碼混淆方法,其特征是按如下步驟進行:
步驟1、以一個函數(shù)的開始與結(jié)束為單位,將Python代碼中所有函數(shù)進行劃分,得到若干個單獨的函數(shù);
步驟2、針對任意一個單獨的函數(shù)fun,對其函數(shù)體中若干個連續(xù)執(zhí)行的代碼進行分割,得到若干個基本塊并依次進行編號,記為B={b1,b2,…,bi,…,bn};bi表示第i個基本塊;所述第i個基本塊bi中的代碼只有一個入口和一個出口;1≤i≤n;
步驟3、使用基于分段Logistic混沌映射的密鑰生成算法,生成兩套密鑰;
步驟3.1、利用式(1)所示的分段Logistic混沌映射產(chǎn)生第i個實數(shù)ai,從而得到隨機實數(shù)序列A={a1,a2,…,ai,…,an}:
式(1)中,a0=rand(0,1);u表示Logistic參數(shù);且3.569946…≤u≤4;
步驟3.2、利用式(2)所示的映射函數(shù)將第i個實數(shù)ai映射成第i個整數(shù)Fi,從而將所述實數(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)計所述整數(shù)序列F中互不相同的元素個數(shù),記為t;t∈[1,n];
步驟3.4、由所述步驟3.1~步驟3.3的處理過程構(gòu)成函數(shù)Logistic的函數(shù)體;由實數(shù)a0和Logistic參數(shù)u構(gòu)成二元組(a0,u)作為第t個基本塊bt的密鑰keyt;
步驟3.5、重復步驟3.1~步驟3.4,直到獲得所有基本塊的密鑰作為第一套
KEY={key1,key2,…,keyt,…,keyn};
步驟3.6、重復步驟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個基本塊;
步驟4.2、以所述第一套密鑰KEY作為所述函數(shù)Logistic的參數(shù);經(jīng)過函數(shù)Logistic的函數(shù)體計算,得到下一個需要執(zhí)行的基本塊的編號;
以所述第二套密鑰KEY′為作為所述函數(shù)Logistic的參數(shù);經(jīng)過函數(shù)Logistic的函數(shù)體計算,得到if-else控制語句中的條件變量,從而使用while循環(huán)語句和if-else控制語句對打亂后的所有基本塊的順序進行控制,使得打亂后的所有基本塊的執(zhí)行順序與原來的執(zhí)行順序相同;
步驟5、基于外形的混淆
利用無意義的字符串對所述Python代碼中局部的類名、函數(shù)名、變量名進行替換,從而形成混淆后的Python代碼。