[發明專利]一種基于控制流和外形混淆的Python代碼混淆方法有效
| 申請號: | 201611123380.3 | 申請日: | 2016-12-08 |
| 公開(公告)號: | CN106778101B | 公開(公告)日: | 2019-05-14 |
| 發明(設計)人: | 顧乃杰;王巖;陳悟;王小強 | 申請(專利權)人: | 合肥康捷信息科技有限公司 |
| 主分類號: | G06F21/14 | 分類號: | G06F21/14 |
| 代理公司: | 安徽省合肥新安專利代理有限責任公司 34101 | 代理人: | 陸麗莉;何梅生 |
| 地址: | 230000 安徽省合肥市望江西路和創新大*** | 國省代碼: | 安徽;34 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 控制 外形 混淆 python 代碼 方法 | ||
1.一種基于控制流和外形混淆的Python代碼混淆方法,其特征是按如下步驟進行:
步驟1、以一個函數的開始與結束為單位,將Python代碼中所有函數進行劃分,得到若干個單獨的函數;
步驟2、針對任意一個單獨的函數fun,對其函數體中若干個連續執行的代碼進行分割,得到若干個基本塊并依次進行編號,記為B={b1,b2,…,bi,…,bn};bi表示第i個基本塊;所述第i個基本塊bi中的代碼只有一個入口和一個出口;1≤i≤n;
步驟3、使用基于分段Logistic混沌映射的密鑰生成算法,生成兩套密鑰;
步驟3.1、利用式(1)所示的分段Logistic混沌映射產生第i個實數ai,從而得到隨機實數序列A={a1,a2,…,ai,…,an}:
式(1)中,a0=rand(0,1);u表示Logistic參數;
步驟3.2、利用式(2)所示的映射函數將第i個實數ai映射成第i個整數Fi,從而將所述實數序列A={a1,a2,…,ai,…,an}映射成整數序列F={F1,F2,…,Fi,…,Fn}:
Fi=Round{ai×m} (2)
式(2)中,Round{}是取整函數;m表示映射參數;
步驟3.3、統計所述整數序列F中互不相同的元素個數,記為t;t∈[1,n];
步驟3.4、由所述步驟3.1~步驟3.3的處理過程構成函數Logistic的函數體;由實數a0和Logistic參數u構成二元組(a0,u)作為第t個基本塊bt的密鑰keyt;
步驟3.5、重復步驟3.1~步驟3.4,直到獲得所有基本塊的密鑰作為第一套KEY={key1,key2,…,keyt,…,keyn};
步驟3.6、重復步驟3.1~步驟3.4,直到獲得所有基本塊的密鑰作為第二套KEY′={key′1,key′2,…,key′t,…,key′n};
步驟4、基于控制流的混淆
步驟4.1、打亂所述函數fun中所有基本塊的順序,得到B′={b′1,b′2,…,b′i,…,b′n};b′i表示打亂后的第i個基本塊;
步驟4.2、以所述第一套密鑰KEY作為所述函數Logistic的參數;經過函數Logistic的函數體計算,得到下一個需要執行的基本塊的編號;
以所述第二套密鑰KEY′為作為所述函數Logistic的參數;經過函數Logistic的函數體計算,得到if-else控制語句中的條件變量,從而使用while循環語句和if-else控制語句對打亂后的所有基本塊的順序進行控制,使得打亂后的所有基本塊的執行順序與原來的執行順序相同;
步驟5、基于外形的混淆
利用無意義的字符串對所述Python代碼中局部的類名、函數名、變量名進行替換,從而形成混淆后的Python代碼。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于合肥康捷信息科技有限公司,未經合肥康捷信息科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611123380.3/1.html,轉載請聲明來源鉆瓜專利網。





