一种利用有限自动机实现代码混淆的方法技术

技术编号:13330335 阅读:67 留言:0更新日期:2016-07-11 20:42
一种利用马尔可夫链实现代码混淆的方法,属于计算机安全领域。能够在程序源代码的编译阶段,对代码中的常量字符串进行加密,使之在反汇编中不可识别,同时,在函数调用过程中通过前插马尔可夫链代码生成无关执行指令,即通过若干状态转以后再调用被保护的函数,实现在运行内存中的函数混淆,进而实现对软件或特殊代码片段的保护。本发明专利技术可以有效地混淆常量字符串和函数地址,大大增加了逆向工程分析程序的难度。

【技术实现步骤摘要】

本专利技术涉及一种利用有限自动机实现代码混淆的方法,属于计算机程序

技术介绍
近年来,随着信息技术的进步,市面上产生了大量优秀的软件、APP,它们提供了许许多多方便的功能。目前代码混淆技术主要有两种类型,一种是源代码混淆,一种是二进制代码混淆。其中,源代码混淆有如下几种:直接源代码混淆,预处理混淆,抽象语法树,字节码混淆(JAVA)。但由于平台和语言的特性,这些软件可以很容易的被逆向工程破解,获取具有很强可读性的源代码(尤其是安卓平台和JAVA语言)。一旦被破解,不仅会直接被侵犯作者的知识产权,也会有被破解后加入恶意代码的风险,使一般用户的安全隐私受到威胁。这是一个非常严重的安全问题。为了降低被逆向工程破解的风险,代码混淆作为一种重要、较为有效的手段,应受到足够的重视和研究。
技术实现思路
为了克服现有技术的不足,本专利技术提供一种利用有限自动机实现代码混淆的方法,核心思想是通过C++11编译器的模板元编程特性实现多种混淆器,包括隐藏字符串混淆器、非显式调用函数混淆器,再混淆器内部采用自动机的模型进行各种调试识别等功能,进而实现对软件或特殊代码片段的保护。一种利用有限自动机实现代码混淆的方法,通过利用C++11\\14语言标准提供的新特性,使用编译器的模板元编程特性和有限自动机,实现多种混淆器,进而实现对软件或特殊代码片段的保护。本专利技术的实施不能认为是对本专利技术的一种限制,本领域的技术人员在本专利技术的基础上所做的非实质性的改进,如:将该方法直接用于代码混淆,应该落入本专利技术权利要求书的保护范围。一种利用马尔可夫链实现代码混淆的方法,能够在程序源代码的编译阶段,对代码中的常量字符串进行加密,使之在反汇编中不可识别,同时,在函数调用过程中通过前插马尔可夫链代码生成无关执行指令,即通过若干状态转以后再调用被保护的函数,实现在运行内存中的函数混淆,进而实现对软件或特殊代码片段的保护。本专利技术的优点是使用了多种C++11\\14提供的新的语言特性,来实现了代码混淆,可以有效地混淆常量字符串和函数地址,大大增加了逆向工程分析程序的难度。附图说明当结合附图考虑时,通过参照下面的详细描述,能够更完整更好地理解本专利技术以及容易得知其中许多伴随的优点,但此处所说明的附图用来提供对本专利技术的进一步理解,构成本专利技术的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定,如图其中:图1是本专利技术实现代码混淆的总体流程图;图2是本专利技术混淆常量字符串的工作流程图;图3是本专利技术混淆函数调用的工作流程图;图4是具体实施方式混淆函数调用时构建的一个马尔可夫链实例示意图。下面结合附图和实施例对本专利技术进一步说明。具体实施方式显然,本领域技术人员基于本专利技术的宗旨所做的许多修改和变化属于本专利技术的保护范围。实施例1:如图1、图2、图3、图4所示,一种利用有限自动机实现代码混淆的方法,不局限于过去的混淆方法再稍微创新、换汤不换药,而是基于C++11\\14提供的新的语言特性,用一种全新的方式并配合有限自动机进行代码混淆,不仅提高效率而且易于实现。通过利用C++11\\14语言标准提供的新特性,使用编译器的模板元编程特性实现多种混淆器,包括隐藏字符串混淆器、非显式调用函数混淆器,在混淆器内部采用自动机的模型进行各种调试识别等功能,进而实现对软件或特殊代码片段的保护。一种利用有限自动机实现代码混淆的方法,包括以下技术方案:加密常量字符串步骤:本方案对代码中的常量字符串进行加密,使之在反汇编中变得不可识别,有效减慢逆向工程的速度。利用有限自动机进行混淆步骤:本方案利用有限自动机,配合模板元编程特性,使函数调用在反汇编中变得难以辨识,显著提高逆向工程的难度。主要步骤:步骤一、加密常量字符串步骤:定义一个模板,之后添加如下步骤:1)通过模板特殊化,添加多种加密方式;2)通过上下文获取编译器时间,生成基于时间的随机数密钥;3)利用可变参数模板,接收长度任意的常量字符串;4)利用模板元编程加密常量字符串;步骤二、利用有限自动机进行混淆步骤:定义一个模板,之后添加如下步骤:步骤1)、利用Boost库构造有限自动机;步骤2)、通过模板特殊化,为模板添加多个有限自动机;步骤3)、通过上下文获取编译器时间,生成基于时间的随机数,选择不同的有限自动机。步骤4)、在函数调用前,运行编译时确定的有限自动机;步骤5)、对欲保护的函数的参数进行混淆。实施例2:如图1、图2、图3、图4所示,一种利用有限自动机实现代码混淆的方法,包括以下步骤:步骤1.混淆常量字符串;对于程序源代码中欲进行混淆操作的常量字符串A,进行如下步骤的操作:步骤1-1:从预设的多种加密方式中随机选取一种作为对常量字符串A的加密方式;其中,预设的加密方式需满足对称加密;此步骤应发生在程序编译过程中,即不影响程序的运行效率;步骤1-2:使用基于时间的伪随机数算法生成随机数K,数值K作为在步骤1-1中选取的加密方式中使用的密钥,参与对常量字符串A的加密;此步骤应发生在程序编译过程中,即不影响程序的运行效率;步骤1-3:创建字符串缓冲区Buffer,将常量字符串A存放到缓冲区Buffer中;步骤1-4:根据步骤1-1选取的加密方式和步骤1-2生成的随机密钥K,对步骤1-3中创建的字符串缓冲区Buffer中的常量字符串A进行加密,并将加密后的结果存放到缓冲区Buffer中;此步骤应发生在程序编译过程中;完成上述步骤后,对常量字符串A的混淆操作结束;当遭遇逆向破解时,内存中将不会显示出原本应为明文的常量字符串A,而是加密后的乱码,保护了原始信息;步骤1-5:当在程序运行时,需要将混淆后的字符串还原为原始字符串,即将字符串缓冲区Buffer中加密后的内容还原为原始字符串,还原过程中采用与步骤1-1所述加密方式对应的解密方式,并使用步骤2中的密钥K进行还原;此步骤应发生在程序运行过程中。步骤2.利用马尔可夫链进行调用混淆;对于程序源代码中欲进行混淆操作的函数F,进行如下步骤的操作:步骤2-1:若函数F的参数中包含了常量字符串,则对所述常量字符串按步骤1所述方法进行混淆;步骤2-2:预先设定多个马尔可夫链,每个马尔可夫链包含多个不同的状态,每个状态指向不同的执行指令,单本文档来自技高网...

【技术保护点】
一种利用马尔可夫链实现代码混淆的方法,其特征在于能够在程序源代码的编译阶段,对代码中的常量字符串进行加密,使之在反汇编中不可识别,同时,在函数调用过程中通过前插马尔可夫链代码生成无关执行指令,即通过若干状态转以后再调用被保护的函数,实现在运行内存中的函数混淆,进而实现对软件或特殊代码片段的保护。

【技术特征摘要】
1.一种利用马尔可夫链实现代码混淆的方法,其特征在于能够在程序源
代码的编译阶段,对代码中的常量字符串进行加密,使之在反汇编中不可识
别,同时,在函数调用过程中通过前插马尔可夫链代码生成无关执行指令,
即通过若干状态转以后再调用被保护的函数,实现在运行内存中的函数混
淆,进而实现对软件或特殊代码片段的保护。
2.根据权利要求1所述的一种利用马尔可夫链实现代码混淆的方法,其
特征在于包括以下步骤:
步骤1.混淆常量字符串;对于程序源代码中欲进行混淆操作的常量字
符串A,进行如下步骤的操作:
步骤1-1:从预设的多种加密方式中随机选取一种作为对常量字符串A
的加密方式;其中,预设的加密方式需满足对称加密;此步骤应发生在程序
编译过程中,即不影响程序的运行效率;
步骤1-2:使用基于时间的伪随机数算法生成随机数K,数值K作为在步
骤1-1中选取的加密方式中使用的密钥,参与对常量字符串A的加密;此步
骤应发生在程序编译过程中,即不影响程序的运行效率;
步骤1-3:创建字符串缓冲区Buffer,将常量字符串A存放到缓冲区
Buffer中;
步骤1-4:根据步骤1-1选取的加密方式和步骤1-2生成的随机密钥K,
对步骤1-3中创建的字符串缓冲区Buffer中的常量字符串A进行加密,并
将加密后的结果存放到缓冲区Buffer中;此步骤应发生在程序编译过程中;
步骤1-5:当在程序运行时,需要将混淆后的字符串还原为原始字符串,
即将字符串缓冲区Buffer中加密后的内容还原为原始字符串,还原过程中<...

【专利技术属性】
技术研发人员:李京春陈瑞东杨韬向琦李冰卓中流梁利李战宝宫亚峰潘克峰刘楠孙浩云
申请(专利权)人:国家信息技术安全研究中心
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1