[发明专利]一种基于控制流和外形混淆的Python代码混淆方法有效
申请号: | 201611123380.3 | 申请日: | 2016-12-08 |
公开(公告)号: | CN106778101B | 公开(公告)日: | 2019-05-14 |
发明(设计)人: | 顾乃杰;王岩;陈悟;王小强 | 申请(专利权)人: | 合肥康捷信息科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 陆丽莉;何梅生 |
地址: | 230000 安徽省合肥市望江西路和创新大*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于控制流和外形混淆的Python代码混淆方法,包括:将Python代码以函数为单位将每个函数中的代码分割成相应的基本块;对函数中的基本块进行编号;使用基于分段Logistic混沌映射的密钥生成算法,生成两套与前面的编号对应的密钥;打乱函数中基本块的顺序,并使用控制语句进行控制,封装控制基本块执行顺序的控制变量,使用两套密钥作为生成下一步需要执行的基本块的编号和if语句中的条件变量;对之前进行控制流混淆后的代码进行外形混淆,将其替换成无意义的字符串。本发明能保护使用Python语言开发的软件的知识产权。 | ||
搜索关键词: | 一种 基于 控制 外形 混淆 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代码。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于合肥康捷信息科技有限公司,未经合肥康捷信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201611123380.3/,转载请声明来源钻瓜专利网。