CN107437005B - 一种基于混沌不透明谓词的代码混淆方法及装置 - Google Patents
一种基于混沌不透明谓词的代码混淆方法及装置 Download PDFInfo
- Publication number
- CN107437005B CN107437005B CN201710586189.0A CN201710586189A CN107437005B CN 107437005 B CN107437005 B CN 107437005B CN 201710586189 A CN201710586189 A CN 201710586189A CN 107437005 B CN107437005 B CN 107437005B
- Authority
- CN
- China
- Prior art keywords
- mapping
- chaotic
- expression
- opaque
- iteration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000000739 chaotic effect Effects 0.000 title claims abstract description 340
- 238000000034 method Methods 0.000 title claims abstract description 71
- 238000013507 mapping Methods 0.000 claims abstract description 297
- 230000014509 gene expression Effects 0.000 claims abstract description 266
- 238000010276 construction Methods 0.000 claims abstract description 60
- 238000011156 evaluation Methods 0.000 claims description 89
- 238000005192 partition Methods 0.000 claims description 19
- 230000011218 segmentation Effects 0.000 claims description 18
- 238000004422 calculation algorithm Methods 0.000 abstract description 33
- 230000008569 process Effects 0.000 abstract description 28
- 238000005516 engineering process Methods 0.000 abstract description 27
- 238000004458 analytical method Methods 0.000 abstract description 12
- 230000003068 static effect Effects 0.000 abstract description 12
- 238000010586 diagram Methods 0.000 description 14
- 238000009826 distribution Methods 0.000 description 6
- 238000012854 evaluation process Methods 0.000 description 6
- 230000002441 reversible effect Effects 0.000 description 6
- 101100221174 Mus musculus Cnst gene Proteins 0.000 description 4
- LXEKPEMOWBOYRF-UHFFFAOYSA-N [2-[(1-azaniumyl-1-imino-2-methylpropan-2-yl)diazenyl]-2-methylpropanimidoyl]azanium;dichloride Chemical compound Cl.Cl.NC(=N)C(C)(C)N=NC(C)(C)C(N)=N LXEKPEMOWBOYRF-UHFFFAOYSA-N 0.000 description 4
- 238000005336 cracking Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000009827 uniform distribution Methods 0.000 description 4
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 238000012804 iterative process Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000003449 preventive effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 235000009854 Cucurbita moschata Nutrition 0.000 description 1
- 240000001980 Cucurbita pepo Species 0.000 description 1
- 235000009852 Cucurbita pepo Nutrition 0.000 description 1
- 229960001948 caffeine Drugs 0.000 description 1
- 238000005291 chaos (dynamical) Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000010187 selection method Methods 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 235000020354 squash Nutrition 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- RYYVLZVUVIJVGH-UHFFFAOYSA-N trimethylxanthine Natural products CN1C(=O)N(C)C(=O)C2=C1N=CN2C RYYVLZVUVIJVGH-UHFFFAOYSA-N 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了基于混沌不透明谓词的代码混淆方法及装置;本方案借助混沌映射的复杂性构造的混沌不透明表达式抵抗静态分析的能力较强,效率较高,可以构造出任意值的混沌不透明表达式,因此用来进行代码混淆时更加方便与安全。通过混沌不透明表达式与数论表达式来构造混沌不透明谓词的技术,既具备数论表达式构造不透明谓词的方便性,又容纳了混沌不透明表达式抵抗静态攻击的安全性,使得整体上不透明谓词的构造更加方便与安全。并且,本方案通过混沌映射与二次映射的组合来构造不透明表达式的算法框架,利用混沌映射与二次映射的不同组合,可以产生不同的不透明表达式构造方式,因此使得代码混淆过程具有多样性与不确定性,通用性和安全性更高。
Description
技术领域
本发明涉及软件保护技术领域,更具体地说,涉及一种基于混沌不透明谓词的代码混淆方法及装置。
背景技术
计算机软件作为人机交互的媒介,大大增加了计算机的便捷程度并降低了用户使用计算机的门槛。那些功能和技术完备的商业软件体现着开发人员的智慧,软件的实现也蕴藏了软件厂商的核心商业机密。软件盗版是软件产业发展的一个重要安全问题,软件逆向工程通过非法途径破解软件,窃取软件的核心算法和商业机密,导致软件的知识产权遭受重大的损害,得不到应有的权益保护。鉴于目前软件安全形势的严峻性,软件保护技术也就应运而生。软件保护通过一种或多种技术手段,对抗攻击者的恶意破解行为,试图使得在软件的生命周期内,攻击者的代价等于或大于重新开发一款相同类软件的代价,从而迫使攻击者放弃攻击行为。目前主流的软件安全保护技术主要分为基于硬件的保护技术和基于软件的保护技术。基于软件的保护技术主要有防篡改技术、软件水印技术、软件加密技术、代码混淆技术等。
代码混淆技术作为一种新兴的软件保护技术,在软件保护领域受到越来越多的关注和应用。代码混淆技术起源于对JAVA字节码的编译优化和保护,之后通过对其的深入研究,目前被广泛的应用于对软件本身内容的保护和抵御软件逆向工程的攻击。代码混淆技术可分为布局混淆、数据混淆、控制流混淆和预防性混淆四类,其中不透明谓词混淆技术具有形式简单,不显著增加程序开销的优点,成为热点的控制流混淆技术之一。
目前,现有不透明谓词技术的缺点包括:
1、Arboit使用二次剩余理论来构造不透明谓词,并结合软件数字水印技术设计了一种基于不透明谓词的Java程序水印方案,但经过分析和评估验证,该方案的密码安全性不佳。
2、袁征等人提出利用初等数论中的同余方程来构造不透明谓词,相比二次剩余方式在安全性和代价开销方面都更具有优越性。但不透明谓词存在的形式过于简单,且不透明谓词的构造没有考虑广泛的适用性,即没有给出具体构造算法保证不透明谓词的多样化实现。
3、近年来,随着混沌理论的发展和应用,苏庆等人提出了基于混沌映射Logistic及其改进的En_Logistic混沌映射来构造不透明谓词簇的方法,并通过实验验证了整个混淆转换系统对密钥的高度敏感性,证明该方法密码安全性较强的特点。但其仅局限于两种混沌映射,通用性不高。
4、Xie Xin等人针对静态反汇编可以准确分析控制流图的问题,提出了基于超混沌不透明谓词的重叠指令和自修改代码的混合混淆,并通过实验证明可以有效的增加静态反汇编的难度。但其只局限于一种混沌映射,通用性不高。并且3、4两种算法都只给出了混沌不透明谓词的安全性证明以及密钥的选取方法,没有涉及不透明谓词的具体构造过程。
因此,如何提供一种安全性高、通用性好、实现方式多样的代码混淆技术,提高攻击者的破解难度和代价,是本领域技术人员需要解决的问题。
发明内容
本发明的目的在于提供一种基于混沌不透明谓词的代码混淆方法及装置,以实现提供一种安全性高、通用性好、实现方式多样的代码混淆技术,提高攻击者的破解难度和代价。
为实现上述目的,本发明实施例提供了如下技术方案:
一种基于混沌不透明谓词的代码混淆方法,包括:
按照预定规则确定混沌映射,以及与所述混沌映射对应的二次映射;
随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;
根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;
确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
其中,随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列,包括:
S11、随机生成所述混沌映射的输入初值;
S12、根据所述混沌映射及所述输入初值,迭代生成目标迭代状态;
S13、设立一个从目标迭代状态空间到任意不透明表达式值的所有可能出现的数字构成的集合的映射,称为子映射;若根据所述二次映射判定,在所述表达式结果空间的不透明表达式值中存在某一位与目标迭代状态经子映射后得到的数字相同,则将目标迭代状态的迭代次数以及与目标迭代状态对应的状态映射数字构成有序对依次添加至映射集合;
S14、判断当前迭代次数是否大于预定阈值;若是,则重新执行S12;若否,则继续执行S15;
S15、判断所述表达式结果空间中的不透明表达式值的每一位在映射集合中是否都至少有一个状态映射数字与其相同;若是,则继续执行S16;若否,则执行S17;
S16、根据映射集合中的迭代次数确定迭代步长序列;
S17、根据所述混沌映射及目标迭代状态迭代生成新的迭代状态,将所述新的迭代状态作为目标迭代状态继续执行所述S13。
其中,根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数,包括:
根据所述混沌映射T、所述输入初值x0、所述迭代步长序列{an}和所述二次映射sec_map构造混沌不透明表达式E(T,x0,{an},sec_map),以及所述混沌不透明表达式对应的求值函数eval_exp(x0,{an});
其中,所述求值函数eval_exp(x0,{an})用于计算所述表达式结果空间的不透明表达式值val。
其中,根据所述求值函数对表达式结果空间的不透明表达式值val的求值过程包括:
根据所述迭代步长序列{an}确定最大迭代次数amax;
根据所述输入初值x0,对所述混沌映射T迭代amax次,获得混沌状态序列;
从所述混沌状态序列中查找与所述迭代步长序列{an}中记录的迭代次数相对应的目标混沌状态,并根据所述迭代步长序列{an}中各迭代次数的排列顺序对目标混沌状态进行排列,生成不透明表达式值val。
其中,所述预定阈值通过阈值设定规则、构造时长以及求值时长进行确定;所述构造时长为构造迭代步长序列的时长,所述求值时长为对不透明表达式值val的求值时长。
其中,所述确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码,包括:
确定所述数论表达式中待替换的整数常量,所述整数常量的值为num;
根据所述混沌不透明表达式的求值函数eval_exp(x0,{an}),生成值为num的混沌不透明表达式的求值函数eval_exp(x0,{an})=num;
将所述值为num的混沌不透明表达式的求值函数eval_exp(x0,{an})=num对所述整数常量进行替换,生成替换后的数论表达式;
将所述替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
其中,所述混沌映射为符合预定规则的混沌映射,包括二维帐篷混沌映射或者TD-ERCS混沌映射。
其中,所述二次映射中的子映射的确定方法包括:
若所述混沌映射为一维混沌映射,则所述二次映射中的子映射为一维二次映射;
所述一维二次映射包括:一维均匀分割函数或者一维同余分割函数;
所述一维均匀分割函数为:fun(xi)=Round(xi×10),xi∈Ω;Ω为一维混沌映射的混沌映射空间的,Round()为取整函数;
所述一维同余分割函数为:fun(xi)=subInt(xi,k)%n,k≥1;k为位数,n为求余系数,subInt(xi,k)为截取xi的最后k位所组成的整数。
其中,所述二次映射中的子映射的确定方法包括:
若所述混沌映射为二维混沌映射,则所述二次映射中的子映射为二维二次映射;
所述二维二次映射包括:二维均匀分割函数或者二维同余分割函数;
所述二维均匀分割函数为:
所述二维同余分割函数为:
fun(xi,yi)=subInt((xi+yi),k)%n,k≥1。
一种基于混沌不透明谓词的代码混淆装置,包括:
第一确定模块,用于按照预定规则确定混沌映射;
第二确定模块,用于确定与所述混沌映射对应的二次映射;
构造模块,用于随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;
求值模块,用于根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;
替换模块,用于确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换;
插入模块,用于将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
通过以上方案可知,本发明实施例提供的一种基于混沌不透明谓词的代码混淆方法,包括:按照预定规则确定混沌映射,以及与所述混沌映射对应的二次映射;随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
可见,在本方案中,借助混沌映射的复杂性构造的混沌不透明表达式抵抗静态分析的能力较强,效率较高,可以构造出任意值的混沌不透明表达式,因此用来进行代码混淆时更加方便与安全。通过混沌不透明表达式与数论表达式来构造混沌不透明谓词的技术,既具备数论表达式构造不透明谓词的方便性,又容纳了混沌不透明表达式抵抗静态攻击的安全性,使得整体上不透明谓词的构造更加方便与安全。并且,本方案通过混沌映射与二次映射的组合来构造不透明表达式的算法框架,利用混沌映射与二次映射的不同组合,可以产生不同的不透明表达式构造方式。因此使得代码混淆过程具有多样性与不确定性,通用性和安全性更高;本发明还公开了一种基于混沌不透明谓词的代码混淆装置,同样能实现上述技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例公开的代码混淆的原理图;
图2为本发明实施例公开的一种基于混沌不透明谓词的代码混淆方法流程示意图;
图3为本发明实施例公开的二维均匀分割函数具体示意图;
图4为本发明实施例公开的迭代步长序列确定流程示意图;
图5为本发明实施例公开的{an}求解过程示意图;
图6a为本发明实施例公开的一不同阀值V下各参数关系示意图;
图6b为本发明实施例公开的另一不同阀值V下各参数关系示意图;
图6c为本发明实施例公开的另一不同阀值V下各参数关系示意图;
图6d为本发明实施例公开的另一不同阀值V下各参数关系示意图
图7为本发明实施例公开的val的求值流程示意图;
图8为本发明实施例公开的val的求值过程示意图;
图9为本发明实施例公开的一种基于混沌不透明谓词的代码混淆装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
具体的,代码混淆技术作为一种新兴的软件保护技术,在软件保护领域受到越来越多的关注和应用。代码混淆技术起源于对JAVA字节码的编译优化和保护,之后通过对其的深入研究,目前被广泛的应用于对软件本身内容的保护和抵御软件逆向工程的攻击。代码的有机组合形成了程序,以实现编写者想要的功能。混淆程序是指把程序转成为一种可读性更差、更难修改的形式,导致破解者的逆向分析工作变得更加困难。图1为代码混淆的原理图。Collberg给出了关于代码混淆的定义:
(1)如果P错误地终止或不能终止,则P'也错误地终止或不能终止;
(2)否则P'必须中止并且产生和P相同的输出结果。
虽然P和P'必须具有相同的可观察运行结果,但是它们的执行效率却不必是相同的。实际上,P'相对于P更加复杂、更加难以理解,所以执行起来P'往往要比P的效率低。
代码混淆技术可分为布局混淆、数据混淆、控制流混淆和预防性混淆四类,其中不透明谓词混淆技术具有形式简单,不显著增加程序开销的优点,成为热点的控制流混淆技术之一。
不透明谓词定义:对于一个谓词P,如果程序中点p的输出在嵌入程序之前就己知,则该谓词P是不透明的。如果谓词P的输出永远为真,则记为PT,如果谓词P的输出永远为假,则记为PF;如果谓词的输出有时为真有时为假,就记为P?。
通过构造不透明谓词并将其插入程序代码中,可以有效增加程序的复杂度,使得破解者的逆向工作变得更加困难。
以下是插入不透明谓词的一个实例:
Collberg等人首先提出基于别名分析和并发性分析困难性的不透明谓词。两种不透明谓词的构造方法,一定程度上增加了不透明谓词的破解难度。随后Arboit使用二次剩余理论来构造不透明谓词,并结合软件数字水印技术设计了一种基于不透明谓词的Java程序水印方案,但经过分析和评估验证,该方案的密码安全性不佳;后来袁征等人提出利用初等数论中的同余方程来构造不透明谓词,相比二次剩余方式在安全性和代价开销方面都更具有优越性。之后AnirbanMajumdar等人提出了一种将分布式全局状态检测的开放问题与众所周知的硬组合问题相结合的新方法来制造不透明谓词,从而解决在分布式计算环境中执行的进程的控制流代码混淆的问题,并将这类新的不透明谓词命名为分布式不透明谓词。同时,在恶意软件防御技术领域,Jiang Ming等人提出不透明谓词检测工具LOOP,并对不透明谓词进行了归类,分为恒定不透明谓词,上下文不透明谓词和动态不透明谓词。近年来,随着混沌理论的发展和应用,苏庆等人提出了基于混沌映射Logistic及其改进的En_Logistic混沌映射来构造不透明谓词簇的方法,并通过实验验证了整个混淆转换系统对密钥的高度敏感性,证明该方法密码安全性较强的特点,但其仅局限于两种混沌映射,通用性不高。然而Xie Xin等人针对静态反汇编可以准确分析控制流图的问题,提出了基于超混沌不透明谓词的重叠指令和自修改代码的混合混淆,并通过实验证明可以有效的增加静态反汇编的难度。但其只局限于一种混沌映射,通用性不高。并且上述两种算法都只给出了混沌不透明谓词的安全性证明以及密钥的选取方法,没有给出不透明谓词的具体构造过程。
事实上,不透明谓词是一种特殊的不透明表达式。当不透明表达式的结果空间为{TRUE,FALSE}时,不透明表达式退化为不透明谓词。
Chenxi Wang在实现压扁控制流算法过程中首先提出一种利用全局数组构造不透明表达式的算法思想。Collberg受其启发给出一组具体利用全局数组构造不透明表达式的规则,并将其应用于不透明谓词构造算法中,但通用性不高。近来,Andreas Moser等人提出一种依赖于不透明表达式的二进制代码混淆技术,并通过分析及实验证明此种技术抵抗静态分析的能力较强。林水明提出了一种利用Arnold混沌映射构造N态不透明谓词的自动化过程,本质上也是一种不透明表达式的构造算法。该算法虽然提高了不透明表达式的安全性,但构造效率过低,原因是随着不透明谓词状态数的增加,迭代次数是呈指数级增长的。
本发明实施例公开了一种基于混沌不透明谓词的代码混淆方法及装置,以实现提供一种安全性高、通用性好、实现方式多样的代码混淆技术,提高攻击者的破解难度和代价。
参见图2,本发明实施例提供的一种基于混沌不透明谓词的代码混淆方法,包括:
S101、按照预定规则确定混沌映射,以及与所述混沌映射对应的二次映射;
在本实施例,一个可应用于构造混沌不透明表达式的混沌映射应当尽可能满足以下条件:
1)对初值具有敏感依赖性。该特性有利于增加整个系统的不确定性。
2)混沌序列具有良好的伪随机特性。伪随机性越高,迭代生成的实数序列的统计特性就越不明显,从而增大了攻击者根据当前状态推测下一个状态或者表达式结果的难度。
3)混沌序列在状态空间中均匀分布。该特性有利于生成均匀的覆盖全局空间的状态序列,方便二次映射函数将状态空间均匀分割和映射,提高混沌不透明表达式的构造效率。
4)鲁棒性。是指在小的参数扰动下,系统仍然保持混沌状态的特性,但大多数混沌吸引子不是结构稳定的,而非鲁邦混沌系统具有弱密钥性。
5)离散性。是指混沌系统应是离散映射的,其相轨迹处处不连续。若是一条连续的相轨线,则相轨道的任意小邻域都会隐含系统的演化趋势,从而降低算法的安全性。
6)大的参数集。是指混沌系统要有巨大的参数和初值空间,最好是全域性混沌系统。
7)混沌映射公式较为复杂,最好有多条映射分支或者多个计算步骤。混沌序列产生的过程越复杂,破解者对于不透明表达式进行静态分析的难度也越大。
8)混沌映射公式中不能包含特殊的数学符号或数学公式,否则隐蔽性较差,容易遭到模式匹配攻击而被发现和破解。
综合上述条件,在本实施例中的混沌映射可以选择较为符合上述规则的二维帐篷混沌映射或者TD-ERCS混沌映射。
具体的,在本实施例中提供不透明表达式及混沌不透明表达式的基本定义:
不透明表达式的定义:在代码混淆中,如果一个表达式P=F(I)值p∈Θ(Θ为表达式结果空间)在嵌入程序之前就己确定,但攻击者却很难根据表达式本身推断出该值;或者能够迷惑攻击者,令其不能洞察程序设计者使用常量p的意图,则P是不透明表达式。对于P=F(I),输入为I为输入空间,采用某种实现机制f∈F,可得p=f(i)。当不透明表达式的取值为K时,记作P=K。
混沌不透明表达式的定义:运用混沌映射chaos来构造混沌不透明表达式。假设混沌映射迭代n次,则每次迭代得到的状态x1,x2,...,xn构成了混沌映射空间Ω。由于Ω不一定与表达式结果空间Θ相同,所以需要构造另一个映射map,将Ω映射至Θ。如果将混沌映射chaos看作第一次映射,则可以将从Ω到Θ的映射看作第二次映射,称为sec_map。由于必须能够构造出每一个表达式的值以保持完备性,所以sec_map必须是满射的。由此可得混沌不透明表达式的一般形式:E=M(C(I)),其映射过程为:
为表述方便,该表达式也可以用三元组E=(C,I,M)表示,其中C为混沌映射,I为输入初值空间,M为二次映射方法,C(I)即混沌映射的运行状态空间Ω。C与M是可变的,选择不同的C与M,可以产生不同的混沌不透明表达式构造方案。因此,在本实施例中,二次映射的确定是需要根据混沌映射进行确定。
需要说明的是,本实施例中的二次映射中的子映射的确定方法包括:
若所述混沌映射为一维混沌映射,则所述二次映射中的子映射为一维二次映射;若所述混沌映射为二维混沌映射,则所述二次映射中的子映射为二维二次映射;
所述一维二次映射包括:一维均匀分割函数或者一维同余分割函数;
所述一维均匀分割函数为:fun(xi)=Round(xi×10),xi∈Ω;Ω为一维混沌映射的混沌映射空间,Round()为取整函数;
所述一维同余分割函数为:fun(xi)=subInt(xi,k)%n,k≥1;k为位数,n为求余系数,subInt(xi,k)为截取xi的最后k位所组成的整数。
所述二维二次映射包括:二维均匀分割函数或者二维同余分割函数;
所述二维均匀分割函数为:
所述二维同余分割函数为:
fun(xi,yi)=subInt((xi+yi),k)%n,k≥1。
具体的,在本实施例中,当混沌映射的运行状态空间Ω与表达式的结果空间Θ不相同时,需要构建一个从Ω到Θ的二次映射,即sec_map。在本发明中,sec_map的构造思路是:将不透明表达式的值val按照“位”来分解,对于val∈Θ,假设val有n位,某一位用数字b表示,b∈Σ,Σ为每一位可能出现的所有数字的集合,称为数字表,即{0,1,2,3,4,5,6,7,8,9}。对于val中的第j个数字bj∈Σ,混沌映射的第ai次迭代的状态与bj构成一个映射关系fun:Ω→∑,称为子映射。
需要说明的是,在本实施例中根据Ω的维数的不同,创造与之匹配的二次映射中的子映射fun。在本实施例中,公开与一维混沌映射函数和二维混沌映射函数分别对应的fun的实例。在这些实例中,都只讨论映射关系fun,因为只要fun不同,就可以构造出不同的sec_map。
对应于一维混沌映射的常见的二次映射函数有:
1.一维均匀分割函数
一维均匀分割函数是将一维混沌映射的状态空间Ω平均划分为n个子空间,每个子空间映射到数字表∑中的一个数字b。例如,假设Ω=(0,1),∑={0,1,2,3,4,5,6,7,8,9},一个可能的一维均匀分割函数可以表示为:
xi对应的数字fun(xi)为:fun(xi)=Round(xi×10),xi∈Ω;
其中,Round()是取整函数,即取xi×10的整数部分。
需要说明的是,一维均匀分割函数能否将混沌映射运行状态空间Ω均匀地映射到数字表∑,取决于Ω是否具有良好的均匀分布性。因此,一维顺序分割函数可以匹配具有良好的状态空间均匀分布性的一维混沌映射,如一维帐篷混沌映射。
2.一维同余分割函数
一维同余分割函数表示如下:
fun(xi)=subInt(xi,k)%n,k≥1
其中,subInt(xi,k)表示截取xi的最后k位所组成的整数,记为num。将num对10求余,以实现混沌映射状态空间的均匀划分。在本实施例中,求余系数n为10。
例如,假设Ω=(0,1),∑={0,1,2,3,4,5,6,7,8,9},若xi=0.23456789,取k=4,则:fun(xi)=subInt(0.23456789,4)%10=6789%10=9
一维同余分割函数能否将混沌映射运行状态空间Ω均匀的映射到数字表∑,与混沌映射本身是否具有良好的状态空间无关。因此,一维同余分割函数既可以匹配状态空间均匀分布性良好的一维混沌映射,也可以匹配状态空间均匀分布性较差的一维混沌映射,其适用范围较广。
同样的,若二维混沌映射的状态空间Ω={(xi,yi)|xi∈R,yi∈R}。对应于二维混沌映射的常见的二次映射函数有:
1.二维均匀分割函数
二维均匀分割函数是将二维混沌映射的状态空间Ω平均划分为n个子空间,每个子空间映射到数字表∑中的一个数字b。例如,假设Ω={(xi,yi)|xi∈(0,1),yi∈(0,1)},∑={0,1,2,3,4,5,6,7,8,9},可以按照图3所示设计一个二维均匀分割函数。
在图3中,将(0,1)×(0,1)平面均分为10×10的小平面体,将这100个小平面方体在保证平均分配的情况下任意分为十组,并使每组小平面方体依次映射0到9之间不同的值。例如假设(xi,yi)=(0.226323,0.249763),从图3中可以查出其映射值为9,对应于图中的阴影方格。
特别地,若混沌映射自身的均匀分布性较好,根据以下公式亦可实现对Ω的均匀划分。
二维均匀分割函数能否将Ω均匀地映射到Σ,取决于混沌映射本身是否具有良好的状态空间均匀分布性。因此,二维均匀分割函数可以匹配具有良好的状态空间均匀分布性的二维混沌映射,如二维帐篷混沌映射。
2.二维同余分割函数
二维同余分割函数表示如下:
fun(xi,yi)=subInt((xi+yi),k)%n,k≥1
其中,subInt((xi+yi),k)表示截取xi与yi之和的最后k位所组成的整数。根据编号fun(xi,yi)即可以从Σ查找到对应的数字b。
例如,假Ω=(0,1),∑={0,1,2,3,4,5,6,7,8,9},若xi=0.23456789,yi=0.98765432,取k=4,则:
fun(xi,yi)=subInt((0.23456789+0.98765432),4)%10
=subInt(1.22222221,4)%10=2221%10=1
与一维同余分割函数类似,二维同余分割函数既可以匹配状态空间均匀分布性良好的二维混沌映射,也可以匹配状态空间均匀分布性较差的二维混沌映射,如TD-ERCS映射,其适用范围较广。
综上可见,在混沌不透明表达式的构造过程中,应当根据混沌映射状态空间Ω的维数不同来选择相应的fun。若选用一维混沌映射系统,则应选取与一维混沌映射相匹配的fun,例如一维帐篷混沌映射可以匹配一维均匀分割函数和一维同余分割函数;对于二维混沌映射系统,则应选取与二维混沌映射相匹配的fun,例如二维帐篷混沌映射可以匹配二维均匀分割函数和二维同余分割函数,但TD-ERCS混沌映射由于其状态空间均匀分布性较差,不能匹配二维均匀分割函数,但可以匹配二维同余分割函数。
S102、随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;
其中,在S102中确定迭代步长序列,具体包括:
S11、随机生成所述混沌映射的输入初值;
S12、根据所述混沌映射及所述输入初值,迭代生成目标迭代状态;
S13、设立一个从目标迭代状态空间到任意不透明表达式值的所有可能出现的数字构成的集合的映射,称为子映射;若根据所述二次映射判定,在所述表达式结果空间的不透明表达式值中存在某一位与目标迭代状态经子映射后得到的数字相同,则将目标迭代状态的迭代次数以及与目标迭代状态对应的状态映射数字构成有序对依次添加至映射集合;
S14、判断当前迭代次数是否大于预定阈值;若是,则重新执行S12;若否,则继续执行S15;
S15、判断所述表达式结果空间中的不透明表达式值的每一位在映射集合中是否都至少有一个状态映射数字与其相同;若是,则继续执行S16;若否,则执行S17;
S16、根据映射集合中的迭代次数确定迭代步长序列;
S17、根据所述混沌映射及目标迭代状态迭代生成新的迭代状态,将所述新的迭代状态作为目标迭代状态继续执行所述S13。
参见图4,为本实施例提供的迭代步长序列确定流程示意图。具体的,对于val中的第j个数字bj∈Σ,混沌映射的第ai次迭代的状态与bj构成一个映射关系fun:Ω→∑,将ai按照j的递增次序排列,1≤j≤n,构成一个数列{an},称为迭代步长数列。
需要说明的是,混沌不透明表达式可以表示为一个四元组E(T,x0,{an},sec_map),其中:
T为混沌映射;
x0为T的输入初值,一般情况下随机生成;
sec_map为将T的运行状态空间Ω映射至表达式结果空间Θ的映射。在sec_map中包含了映射fun:Ω→∑。
在四元组E(T,x0,{an},sec_map)中,除了{an}外,其余部分都是已知或随机产生的。所以混沌不透明表达式的构造过程,即{an}的求解过程:混沌映射T迭代生成一个混沌状态序列X,依据映射关系fun,对建立某个混沌状态xaj到bj的对应关系。所有被选中的混沌状态对应的迭代次数构成了{an}。参见图5,为本实施例提供的{an}求解过程示意图。
需要注意的是,由于fun是满射函数,所以可能出现多个混沌状态对应于一个bj的情况,此时应当采用一定的策略(例如随机选择,或者选择迭代次数最小的状态等),选定一个混沌状态。在该示例中,{an}={2,n,...,MIN(1,k),...,i,...,w}。
假设要构造的混沌不透明表达式的值,val=b1b2...bn混沌不透明表达式的构造算法描述如下:
Step1.随机生成混沌映射T的初始状态x0∈Ω。
Step2.由混沌映射T,迭代产生下一个状态xi(i=1,2,...,i为迭代次数);若存在val中第j位数字bj=fun(xi),将有序对(ordered pair)<xi,bj>放入集合U,即U=U∪{<xi,bj>}。
Step3.判断混沌映射迭代次数i是否已经达到阀值V。
如果i<V,重复step2,直至对于val中的每一位数字bj,都有<xi,bj>∈U,此时称U已完备(complete),转向Step4。关于U的完备性可分为两个层次:当要构造的混沌不透明表达式仅是等价于某个特定的val,则只需对有<xi,bj>∈U;如果要构造的混沌不透明表达式可等价于任意的val,或者要val的所有“位”包含了∑中的所有数字,则需对有<xi,bj>∈U,此时U处于最大完备状态,可构造不透明表达式结果空间Θ中的每一个可能取值val。否则,放弃本次构造,重新转向Step1。
在上述算法中,本质上是在T的迭代过程中依次指定了一个有序对<xj,bj>。如果要计算任意一个aj,则在T和fun都可逆的前提下,以xo为T的初值,有以下计算公式:aj=T-1(x0,fun-1(bj));
其中,所述预定阈值通过阈值设定规则、构造时长以及求值时长进行确定;所述构造时长为构造迭代步长序列的时长,所述求值时长为对不透明表达式值val的求值时长。
需要说明的是,本实施例中的迭代次数在构造算法中给出了阈值V,用于规定构造次数的上限。V的取值需要综合考虑构造时间和求值时间,若构造时间短、但求值时间太长,将混沌不透明表达式插入到代码中后会给混淆后的程序带来较大的执行开销;若构造时间长、求值时间短时,需要考虑用户对构造时间的容忍程度。当V取值较小时,V对构造时间和求值时间存在不同的影响。一方面,V越小,构造算法在构造不透明表达式时失败次数越多,所需的构造时间越长。另一方面,求值时间主要取决于迭代次数amax。在构造时,每当迭代次数大于V,则会构造失败,从头开始构造过程,因此必有amax<V。所以V的取值越小,则amax越小,求值时间越短。当V的取值较大时,基本上每次执行构造算法都能构造成功,平均每次构造成功所需的迭代次数也大致稳定,因此构造时间和求值时间也趋于稳定。综上所述,随着V的不断增大,V对构造时间和求值时间的影响越来越小。
为了通过实验探究阈值V与两者之间的关系,进而总结v的选择原则,本节以∑={0,1,2...9}为例,选取二维帐篷混沌映射和二维均匀分割函数进行不透明表达式的构造和求值。此外,为使实验结果具有代表性,在构造不透明表达式时,应考虑最坏情况,即不透明表达式的值val应覆盖∑中的所有数字。
实例:
假设∑={0,1,2...9},表达式结果空间为Zn,Zn为n位整数集合。对于最坏情况是,0~9中的每一个数字都在z1z2...zn中至少出现一次(比如要构造的表达式的值为1234567890),此时要求集合U达到最大完备状态。
图6a、图6b、图6c、图6d描述了在不同阀值V下,对整数1234567890成功构造1×106次,阈值V、算法执行次数count、构造成功时所需的时间cnst_time和对不透明表达式求值的时间eval_time四者的关系。图6a描述了V与count之间的关系,随着V的增大,count逐渐收敛于1×106,即基本上每次执行构造算法都能成功构造出整数1234567890。图6b描述了V与cnst_time之间的关系,随着V的增大,cnst_time快速减少,在V=50附近,cnst_time收敛,此时基本上每次算法执行都能成功构造混沌不透明表达式。另外,只有在V≥n时,每一个zi才能至少有一次被构造出来的机会,混沌不透明表达式才有可能构造成功。综上所述,在本例中,当V位于[10,50]区间内上,V越大,构造效率越高。图6c描述了阀值V与求值时间的关系,随着V的增大,求值时间快速上升,同样收敛于V=50附近。原因是在V=50附近,构造成功所需的迭代次数相对稳定,则求值时同样所需的迭代次数也相对稳定。但总体而言,求值时间是小于构造时间的,见图6d,构造时间与求值时间大致上是平行的折线。原因在于混沌不透明表达式的构造算法复杂度远远大于求值算法。这也说明一旦不透明表达式构造完成并插入至程序后,所增加程序运行时间开销远远小于构造开销。
一般来说,在选择阈值V时,应兼顾构造时间和求值时间,然而需要注意的是,构造混沌不透明表达式的过程并没有嵌入至待混淆的程序中,而是将构造完成的不透明表达式及其求值算法将其嵌入至待混淆的程序中。因此求值时间往往比构造时间更加重要,应该在可容忍的构造时间范围内,尽量选取令求值时间少的阈值V。
S103、根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;
其中,根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数,包括:
根据所述混沌映射T、所述输入初值x0、所述迭代步长序列{an}和所述二次映射sec_map构造混沌不透明表达式E(T,x0,{an},sec_map),以及所述混沌不透明表达式对应的求值函数eval_exp(x0,{an});其中,所述求值函数eval_exp(x0,{an})用于计算所述表达式结果空间的不透明表达式值val。
其中,根据所述求值函数对表达式结果空间的不透明表达式值val的求值过程包括:
根据所述迭代步长序列{an}确定最大迭代次数amax;
根据所述输入初值x0,对所述混沌映射T迭代amax次,获得混沌状态序列;
从所述混沌状态序列中查找与所述迭代步长序列{an}中记录的迭代次数相对应的目标混沌状态,并根据所述迭代步长序列{an}中各迭代次数的排列顺序对目标混沌状态进行排列,生成不透明表达式值val。
具体的,当混沌不透明表达式E(T,x0,{an},sec_map)构造完毕,就可以插入至待混淆的程序中。同时需要向待混淆的程序插入该表达式的求值过程eval_exp(x0,{an}),该求值过程是构造过程的逆过程。对要求出的表达式的值val,首先逐位求得每一位的值b,然后再将所有的b按既定策略组合成val。
在求每一个bj时,T都需要从x0开始,迭代aj次。此时有可能出现此现象:对于bj和bk,假设有aj>ak。则在求解bj时,T肯定会先迭代ak次,然后再迭代到第aj次。也就是说,其实可以在求解bj的同时求解bj。于是,可以对val的求值过程进行优化,令T一次性迭代至所需的最大次数amax,然后从得到的混沌状态序列中挑选所需要的状态xj求解得bj=fun(xj)。假设ak是{an}中最大值的元素,记amax=ak,则混沌迭代过程必须进行amax次,得到混沌状态序列X={x0,x1,x2,...,xmax},依次根据{an}中记录的各个迭代次数值aj,从X中查找到相应的混沌状态则有最后将所有的bj依次组合起来,即可得到val的值。在一般情况下,amax>>n,因而在X中会有大量的状态“剩余”,没有与b对应。
参见图7,为本实施例提供的val的求值流程示意图,参见图8,为本实施例提供的val的求值过程示意图。具体的求值算法描述如下:
Step1.在{an}中查找值最大的元素amax。
Step2.由混沌初值x0,混沌映射T进行amax次迭代,产生混沌状态序列X={x0,x1,x2,...xi...xmax},1≤i≤amax。
Step4.将所有的bj依次组合,记val=b1b2...bn。在实际应用中,该组合过程也是一个函数,记为comp({…bi,bj,bk…})。
需要说明的是,因为构造完成的混沌不透明表达式及其求值算法需要嵌入至待混淆的程序中,因此本文在求值算法具体的实现过程中,为了有效的抵抗静态分析,将混沌不透明表达式求值的过程封装在函数中,并将函数的实参存放在全局数组中,在混淆的过程中再通过调用实现。这样做是因为使用全局数组能有效地降低破解者使用的静态分析器的效果,提高程序的安全性。
S104、确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
其中,所述确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码,包括:
确定所述数论表达式中待替换的整数常量,所述整数常量的值为num;
根据所述混沌不透明表达式的求值函数eval_exp(x0,{an}),生成值为num的混沌不透明表达式的求值函数eval_exp(x0,{an})=num;
将所述值为num的混沌不透明表达式的求值函数eval_exp(x0,{an})=num对所述整数常量进行替换,生成替换后的数论表达式;
将所述替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
具体的,在数论中,存在永真和永假的表达式,这些表达式都可以用于构造不透明谓词。数论表达式的形式往往比较简单,应用这些表达式构造的不透明谓词的输出较为容易判断,因此被成功进行逆向分析破解的风险较高。将简单数论表达式中的常量运用混沌不透明表达式替换,可以大大复杂化数论表达式的形式。在混沌不透明表达式替换常量后的表达式中,由于常量被等价转换为函数形式,将大大增加攻击者对表达式进行攻击的工作量和难度,提高了安全性。
参照表1,为本实施例列举的部分永真和永假表达式及其应用混沌不透明表达式替换常量后产生的混沌不透明谓词。eval_exp()是不透明表达式的求值函数,值为num的混沌不透明表达式表示为eval_exp(x0,{an})=num。在替换时,不必完全替换所有整型常量,可选择性替换一部分即可。这些替换后的表达式即可以作为不透明谓词插入到代码中。
表1
需要说明的是,作为控制流混淆的一种热点技术,不透明谓词的生成和插入都成为研究的重点。初期基于数论中的数学表达式构造的不透明谓词形式简单,较为容易破解;近期直接应用混沌映射构造的不透明谓词则大大增强了安全性。然而本发明提出一种基于混沌不透明表达式的不透明谓词混淆方法,既可以与数论表达式相结合,又能同样发挥混沌映射的安全性特点,为不透明谓词混淆技术提供了一种新的思路。并且,通过将不透明谓词以及混沌不透明表达式求值函数一并插入到原代码C1中,得到新代码C2。需保证C1和C2的功能相同。
在此,本实施例中对不透明表达式的构造与求值进行举例:
在选定混沌映射与二次映射情况下,以构造一个具体的混沌不透明表达式为例,详述混沌不透明表达式的构造与求值过程。设val=1234567,∑={1,2,3,4,5,6,7,8,9,0},混沌不透明表达式四元组=E(Tent,x0,{an},sec_map)。其中,Tent为二维帐篷混沌映射;sec_map采用二次映射函数种类,且fun采用二维均匀分割函数;x0在构造过程中随机产生;{an}在构造过程中求得。
假设要构造的不透明表达式的值为val,实现混沌不透明表达式构造算法cnst_exp(val)的伪代码如下所示。其中,数列{an}求得的结果保存在数组a[]中,对每一个bj确定一个唯一的对应的混沌状态xi时依据的策略是迭代次数最小原则。
将val=“1234567”代入算法cnst_exp(val)中,即可求得数列{an},从而构造出一个对应的混沌不透明表达式四元组,例如:
E(Tent,0.7818154415490385,0.179301181159921,{10,17,3,12,14,7,21},sec_map)。
本文实现混沌不透明表达式求值算法cnst_exp(x0,y0,a[])的伪代码如下所示。其中,(x0,y0)为混沌映射的初值,数组a[]依次存储数列{an}中的元素,最终求得的不透明表达式的值保存在val中。sec_map仍旧采用上述二次映射函数种类,且fun采用二维均匀分割函数。
算法:eval_exp(x0,y0,a[])
假设混沌不透明表达式四元组为
E(Tent,0.7818154415490385,0.179301181159921,{10,17,3,12,14,7,21},sec_map)利用求值算法eval_exp(x0,y0,a[])即可求得val=“QQ number:1234567”。
综上可见,本方案利用混沌不透明表达式模糊化数论表达式,两者结合来构造混沌不透明谓词的方法。首先建立了一种通过混沌映射与二次映射的组合来构造不透明表达式的算法框架,并提供了一类二次映射的构造方法,利用混沌映射与二次映射的不同组合,可以产生不同的不透明表达式构造方式。然后将混沌不透明表达式与数论表达式结合来构造混沌不透明谓词,并将其插入至程序代码中。本发明的实施过程分为不透明表达式的构造、不透明谓词的构造、不透明谓词的插入三个过程,具体包括:
选取一个合适的混沌映射和一个合适的二次映射,用于构造待使用的混沌不透明表达式以及该表达式的求值函数。
选取一个合适的数论表达式,并将数论表达式中的整数常量用混沌不透明表达式替换,形成一个不透明谓词。
将不透明谓词以及混沌不透明表达式求值函数一并插入到原代码C1中,得到新代码C2。需保证C1和C2的功能相同。
以下为插入混沌不透明谓词前后的程序实例:
下面对本发明实施例提供的代码混淆装置进行介绍,下文描述的代码混淆装置与上文描述的代码混淆方法可以相互参照。
参见图9,本发明实施例提供的一种基于混沌不透明谓词的代码混淆装置,包括:
第一确定模块100,用于按照预定规则确定混沌映射;
第二确定模块200,用于确定与所述混沌映射对应的二次映射;
构造模块300,用于随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;
求值模块400,用于根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;
替换模块500,用于确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换;
插入模块600,用于将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
综上可见,在本方案提供的一种基于混沌不透明谓词的代码混淆方法,包括:按照预定规则确定混沌映射,以及与所述混沌映射对应的二次映射;随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
可见,在本方案中,借助混沌映射的复杂性构造的混沌不透明表达式抵抗静态分析的能力较强,效率较高,可以构造出任意值的混沌不透明表达式,因此用来进行代码混淆时更加方便与安全。通过混沌不透明表达式与数论表达式来构造混沌不透明谓词的技术,既具备数论表达式构造不透明谓词的方便性,又容纳了混沌不透明表达式抵抗静态攻击的安全性,使得整体上不透明谓词的构造更加方便与安全。并且,本方案通过混沌映射与二次映射的组合来构造不透明表达式的算法框架,利用混沌映射与二次映射的不同组合,可以产生不同的不透明表达式构造方式。因此使得代码混淆过程具有多样性与不确定性,通用性和安全性更高;本发明还公开了一种基于混沌不透明谓词的代码混淆装置,同样能实现上述技术效果。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (9)
1.一种基于混沌不透明谓词的代码混淆方法,其特征在于,包括:
按照预定规则确定混沌映射,以及与所述混沌映射对应的二次映射;
随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;
根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;其中,根据所述混沌映射T、所述输入初值x0、所述迭代步长序列{an}和所述二次映射sec_map构造混沌不透明表达式E(T,x0,{an},sec_map);
确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码;
其中,随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列,包括:
S11、随机生成所述混沌映射的输入初值;
S12、根据所述混沌映射及所述输入初值,迭代生成目标迭代状态;
S13、设立一个从目标迭代状态空间到任意不透明表达式值的所有可能出现的数字构成的集合的映射,称为子映射;若根据所述二次映射判定,在所述表达式结果空间的不透明表达式值中存在某一位与目标迭代状态经子映射后得到的数字相同,则将目标迭代状态的迭代次数以及与目标迭代状态对应的状态映射数字构成有序对依次添加至映射集合;
S14、判断当前迭代次数是否大于预定阈值;若是,则重新执行S12;若否,则继续执行S15;
S15、判断所述表达式结果空间中的不透明表达式值的每一位在映射集合中是否都至少有一个状态映射数字与其相同;若是,则继续执行S16;若否,则执行S17;
S16、根据映射集合中的迭代次数确定迭代步长序列;
S17、根据所述混沌映射及目标迭代状态迭代生成新的迭代状态,将所述新的迭代状态作为目标迭代状态继续执行所述S13。
2.根据权利要求1所述的代码混淆方法,其特征在于,根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数,包括:
根据所述混沌映射T、所述输入初值x0、所述迭代步长序列{an}和所述二次映射sec_map构造混沌不透明表达式E(T,x0,{an},sec_map),以及所述混沌不透明表达式对应的求值函数eval_exp(x0,{an});
其中,所述求值函数eval_exp(x0,{an})用于计算所述表达式结果空间的不透明表达式值val。
3.根据权利要求2所述的代码混淆方法,其特征在于,根据所述求值函数对表达式结果空间的不透明表达式值val的求值过程包括:
根据所述迭代步长序列{an}确定最大迭代次数amax;
根据所述输入初值x0,对所述混沌映射T迭代amax次,获得混沌状态序列;
从所述混沌状态序列中查找与所述迭代步长序列{an}中记录的迭代次数相对应的目标混沌状态,并根据所述迭代步长序列{an}中各迭代次数的排列顺序对目标混沌状态进行排列,生成不透明表达式值val。
4.根据权利要求3所述的代码混淆方法,其特征在于,所述预定阈值通过阈值设定规则、构造时长以及求值时长进行确定;所述构造时长为构造迭代步长序列的时长,所述求值时长为对不透明表达式值val的求值时长。
5.根据权利要求3所述的代码混淆方法,其特征在于,所述确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换,将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码,包括:
确定所述数论表达式中待替换的整数常量,所述整数常量的值为num;
根据所述混沌不透明表达式的求值函数eval_exp(x0,{an}),生成值为num的混沌不透明表达式的求值函数eval_exp(x0,{an})=num;
将所述值为num的混沌不透明表达式的求值函数eval_exp(x0,{an})=num对所述整数常量进行替换,生成替换后的数论表达式;
将所述替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码。
6.根据权利要求1-5中任意一项所述的代码混淆方法,其特征在于,所述混沌映射为符合预定规则的混沌映射,包括二维帐篷混沌映射或者TD-ERCS混沌映射。
7.根据权利要求1-5中任意一项所述的代码混淆方法,其特征在于,所述二次映射中的子映射的确定方法包括:
若所述混沌映射为一维混沌映射,则所述二次映射中的子映射为一维二次映射;
所述一维二次映射包括:一维均匀分割函数或者一维同余分割函数;
所述一维均匀分割函数为:fun(xi)=Round(xi×10),xi∈Ω;Ω为一维混沌映射的混沌映射空间,Round()为取整函数;
所述一维同余分割函数为:fun(xi)=subInt(xi,k)%n,k≥1;k为位数,n为求余系数,subInt(xi,k)为截取xi的最后k位所组成的整数。
9.一种基于混沌不透明谓词的代码混淆装置,其特征在于,包括:
第一确定模块,用于按照预定规则确定混沌映射;
第二确定模块,用于确定与所述混沌映射对应的二次映射;
构造模块,用于随机生成所述混沌映射的输入初值,根据所述混沌映射对所述输入初值进行迭代生成混沌映射空间;在生成混沌映射空间后,利用二次映射将生成的混沌映射空间映射到表达式结果空间,并根据映射结果构造迭代步长序列;
求值模块,用于根据所述混沌映射、所述输入初值、所述迭代步长序列和所述二次映射构造混沌不透明表达式,以及所述混沌不透明表达式对应的求值函数;其中,所述求值函数为构造所述混沌不透明表达式的逆函数;其中,根据所述混沌映射T、所述输入初值x0、所述迭代步长序列{an}和所述二次映射sec_map构造混沌不透明表达式E(T,x0,{an},sec_map);
替换模块,用于确定数论表达式,根据所述混沌不透明表达式对应的求值函数对所述数论表达式中的整数常量进行替换;
插入模块,用于将替换后的数论表达式作为不透明谓词插入原代码中,生成与所述原代码对应的混淆代码;
其中,所述构造模块具体用于执行如下步骤构造迭代步长序列:
S11、随机生成所述混沌映射的输入初值;S12、根据所述混沌映射及所述输入初值,迭代生成目标迭代状态;
S13、设立一个从目标迭代状态空间到任意不透明表达式值的所有可能出现的数字构成的集合的映射,称为子映射;若根据所述二次映射判定,在所述表达式结果空间的不透明表达式值中存在某一位与目标迭代状态经子映射后得到的数字相同,则将目标迭代状态的迭代次数以及与目标迭代状态对应的状态映射数字构成有序对依次添加至映射集合;
S14、判断当前迭代次数是否大于预定阈值;若是,则重新执行S12;若否,则继续执行S15;
S15、判断所述表达式结果空间中的不透明表达式值的每一位在映射集合中是否都至少有一个状态映射数字与其相同;若是,则继续执行S16;若否,则执行S17;
S16、根据映射集合中的迭代次数确定迭代步长序列;
S17、根据所述混沌映射及目标迭代状态迭代生成新的迭代状态,将所述新的迭代状态作为目标迭代状态继续执行所述S13。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710586189.0A CN107437005B (zh) | 2017-07-18 | 2017-07-18 | 一种基于混沌不透明谓词的代码混淆方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710586189.0A CN107437005B (zh) | 2017-07-18 | 2017-07-18 | 一种基于混沌不透明谓词的代码混淆方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107437005A CN107437005A (zh) | 2017-12-05 |
CN107437005B true CN107437005B (zh) | 2020-07-10 |
Family
ID=60460854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710586189.0A Active CN107437005B (zh) | 2017-07-18 | 2017-07-18 | 一种基于混沌不透明谓词的代码混淆方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107437005B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446537A (zh) * | 2018-02-12 | 2018-08-24 | 北京梆梆安全科技有限公司 | 基于不透明谓词的源代码混淆方法及装置 |
CN108846265B (zh) * | 2018-04-18 | 2021-07-30 | 北京奇虎科技有限公司 | 一种程序加固方法及装置 |
CN117574334B (zh) * | 2023-08-17 | 2024-05-28 | 广东工业大学 | 一种结合md5与序列到序列模型的代码混淆方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570815A (zh) * | 2016-10-21 | 2017-04-19 | 广东工业大学 | 一种基于双混沌系统和分块的图像加密方法 |
CN106778101A (zh) * | 2016-12-08 | 2017-05-31 | 合肥康捷信息科技有限公司 | 一种基于控制流和外形混淆的Python代码混淆方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03103926A (ja) * | 1989-09-19 | 1991-04-30 | Hitachi Ltd | プロローグインタプリタ・コンパイラのインタフェース方法 |
CN101702116A (zh) * | 2009-11-09 | 2010-05-05 | 东南大学 | 一种基于渐进确定性随机的伪随机序列发生方法 |
IL224743A0 (en) * | 2013-02-14 | 2013-06-27 | Harel Cain | A system for automatic obfuscation of computer programs |
CN105046636B (zh) * | 2015-07-13 | 2017-05-03 | 郑州轻工业学院 | 基于混沌系统与核酸序列库的数字图像加密方法 |
-
2017
- 2017-07-18 CN CN201710586189.0A patent/CN107437005B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570815A (zh) * | 2016-10-21 | 2017-04-19 | 广东工业大学 | 一种基于双混沌系统和分块的图像加密方法 |
CN106778101A (zh) * | 2016-12-08 | 2017-05-31 | 合肥康捷信息科技有限公司 | 一种基于控制流和外形混淆的Python代码混淆方法 |
Non-Patent Citations (2)
Title |
---|
Image scrambling and mixing encryption algorithm based on hyper-chaotic system;Jing Wang 等;《Proceedings of the 32nd Chinese Control Conference》;20131021;全文 * |
混沌不透明谓词在代码混淆中的研究与应用;苏庆 等;《计算机科学》;20130630;第40卷(第6期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107437005A (zh) | 2017-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Feng et al. | AAoT: Lightweight attestation and authentication of low-resource things in IoT and CPS | |
Wang et al. | Circuit oram: On tightness of the goldreich-ostrovsky lower bound | |
Bhasin et al. | Mind the portability: A warriors guide through realistic profiled side-channel analysis | |
Goodrich | Zig-zag sort: A simple deterministic data-oblivious sorting algorithm running in o (n log n) time | |
CN107437005B (zh) | 一种基于混沌不透明谓词的代码混淆方法及装置 | |
CN110998630A (zh) | 区块链中的随机数生成 | |
CN108366181A (zh) | 一种基于超混沌系统和多级置乱的图像加密方法 | |
CN107341374B (zh) | 一种不透明谓词的插入方法及装置 | |
CN113158190B (zh) | 一种基于生成式对抗网络的恶意代码对抗样本自动生成方法 | |
JP2017508173A (ja) | デジタル値処理装置及び方法 | |
CN1413398A (zh) | 防止通过分析无意旁生信道信号来提取数据的数据处理方法 | |
Zhang et al. | A branch and bound framework for stronger adversarial attacks of ReLU networks | |
CN112839036A (zh) | 基于拟态防御理论的软件运行环境生成方法及系统 | |
CN112260818A (zh) | 侧信道曲线的增强方法、侧信道攻击方法及装置 | |
Luo et al. | Towards secure cryptographic software implementation against side-channel power analysis attacks | |
Lou et al. | Ownership verification of dnn architectures via hardware cache side channels | |
CN107943754B (zh) | 一种基于遗传算法的异构冗余系统优化方法 | |
Wang et al. | Password authentication using Hopfield neural networks | |
CN114647824B (zh) | 一种神经网络主动保护方法、系统、存储介质及计算设备 | |
Peng et al. | Control flow obfuscation based protection method for android applications | |
Wang et al. | Tdvmp: Improved virtual machine-based software protection with time diversity | |
Noman et al. | A new generation alternation model for differential evolution | |
CN110365713B (zh) | 针对高级持续性威胁的网络防御资源最优分配方法 | |
CN109150494A (zh) | 移动端中构造加解密算法的方法、存储介质、设备及系统 | |
Mukherjee et al. | Attacks on recent dnn ip protection techniques and their mitigation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |