[发明专利]一种基于控制流和外形混淆的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.vipzhuanli.com/pat/books/201611123380.3/1.html,转载请声明来源钻瓜专利网。