一种面向Lua语言的加扰混淆方法和解密方法

文档序号:9598086阅读:1245来源:国知局
一种面向Lua语言的加扰混淆方法和解密方法【
技术领域
】[0001]本发明涉及一种程序加扰混淆方法,尤其涉及一种面向Lua语言的加扰混淆方法和解密方法。【
背景技术
】[0002]随着计算机技术应用日益普及,软件产业得以飞速发展,与此同时,攻击者利用软件逆向技术对软件的各种攻击和未授权使用以及盗版复制等行为也越来越多。逆向分析技术可以被用来在不知道应用程序源代码的情况下分析应用程序的功能流程、篡改应用程序的数据代码等,逆向分析技术如果被不加限制的恶意使用,利用者可以分析获取应用程序的核心技术,也可以篡改应用程序的签名和作者信息,还可以将恶意代码注入到已有的应用程序中并通过二次打包进行伪装,这些行为都极大的危害了应用程序开发者的利益,严重损害了广大用户的隐私安全。随着i〇S平台移动的游戏开发成为热点,使得轻量级的小体积的动态脚本语言Lua在2011年6月首次突破了ΤΙ0ΒΕ编程语言的前十名。由于Lua的语法简洁美观和最快的运行速度,使得Lua已成为嵌入式脚本语言的最佳选择。Lua代码高效的运行速率取决于Lua代码是在操作系统和移动终端上编译并运行的,这样,该动态脚本语言在娱乐和用户体验的i〇S平台的发展空间是非常大的。[0003]代码混淆技术是近几年才发展并兴起的一种新技术。第一次对代码混淆进行系统研究是在上世纪90年代末开始的,是Java语言的迅速发展引起了对混淆技术的研究热潮。这是因为Java目标代码一字节代码(bytecode)很容易被反编译为Java源代码,这就迫切要求有效的保护字节代码的方法。第一次对混淆转换进行了详细的总结和分类的是Collberg,他在〈〈ATaxonomyofObfuscationTransformations.DepartmentofComputerScience》中第一次对混淆转换进行了详细的总结和分类,也首次提出了混淆转换的有效性与性能的若干评价标准。他将混淆转换分为四类:外形混淆转换、控制混淆转换、数据混淆转换和预防性混淆转换。[0004]ChenxiWang在《Asecurityarchitectureforsurvivabilitymechanisms:[dissertation]》中实现了在C语言源代码上的多种控制混淆转换与数据混淆转换;还给出了混淆转换造成的性能过载以及混淆转换对静态分析工具IBMNPICtool以及RutgerPAFtoolkit的有效性。[0005]Hohhl提出用带有时间限制的黑盒(time-limitedblackbox)方法来保护移动Agent。这里的黑盒就是指混淆转换过的Agent程序。对移动Agent进行逆向工程,做出有意义的发现或修改需要一定的时间,据此,限制移动Agent在目的主机上运行的时间。在派发移动Agent的之前,需要对其进行混淆转换,这增加了逆向工程的代价,从而延长在目的主机上的运行时间。[0006]CullenLinn在〈〈ObfuscationofexecutablecodetoimproveresistancetostaticDisassembly》中从另一个角度研究了目标代码混淆技术,通过对反汇编过程的分析,采用一种混淆方法能够阻挠逆向工程,使得获取程序的汇编指令非常困难或不能正确得到程序的汇编指令。[0007]综上所述,现有的加扰混淆方法大多是针对C语言和Java语言的,缺少面向Lua语言的成熟的混淆方法。【
发明内容】[0008]为了克服上述现有技术的不足,本发明提供一种面向Lua语言的加扰混淆方法和解密方法,包括代码预处理、混淆算法和调用栈转换,该方法能够保证混淆后的Lua源代码在语义上不发生改变,不影响程序的正常执行;同时使得混淆后的Lua源代码难以理解,可起到保护版权,防止他人剽窃软件中的智力成果或对软件进行有目的的篡改的作用。[0009]本发明提供的技术方案是:[0010]一种面向Lua语言的加扰混淆方法,通过代码预处理方法、混淆方法和调用栈转换方法,使得混淆后的Lua源代码在语义上不发生改变的同时还无法被理解,以达到保护程序代码而又不影响程序的正常执行的目的;包括如下步骤:[0011]A.进行代码预处理,执行如下操作:[0012]A1)进行代码预处理设置;[0013]A2)针对代码进行词法分析,根据构词规则识别单词,建立数据字典:[0014]A3)针对词法分析得到的单词序列进行语法分析,将单词序列组合成语法短语,得到抽象语法树;[0015]A4)根据A2)建立的数据字典和A3)形成的抽象语法树进行遍历,获取遍历结果;[0016]B.对Lua源程序进行加扰混淆,执行如下操作:[0017]B1)设置混淆参数;混淆参数包括混淆等级和混淆后源文件的输出路径;[0018]B2)读取步骤A2)建立的数据字典;[0019]B3)通过最小词汇排序法进行初级混淆,将初级混淆前和初级混淆后的名称存储在数据字典中;[0020]B4)通过控制流混淆方法进行高级混淆,改变源程序的执行流程,在数据字典中保存高级混淆前后的调用栈信息;[0021]B5)获得加扰混淆后的Lua代码,保存代码,结束操作。[0022]上述面向Lua语言的加扰混淆方法中,步骤A2)所述进行词法分析,建立数据字典,具体是:从左到右逐个字符读入Lua源程序,根据构词规则识别单词,建立得到所述Lua源程序的数据字典。[0023]上述面向Lua语言的加扰混淆方法中,步骤A4)所述抽象语法树包括所述抽象语法树的头结点chunk和整个抽象语法树对象;步骤A4)所述遍历结果包括抽象语法树对象CommonTree对象的所有节点,对应Lua源代码中的所有模块名。[0024]上述面向Lua语言的加扰混淆方法中,步骤B3)所述进行初级混淆,具体是,根据Lua源文件路径递归读取目录下的文件,读取步骤A2)得到的所述Lua源程序的数据字典,采用最小词汇排序法产生单词对Lua源程序中的名称进行替换;同时将混淆前和混淆后的相应名称均存储在数据字典中。[0025]上述面向Lua语言的加扰混淆方法中,所述名称包括变量名、函数名、参数名和表名。[0026]本发明同时还提供一种针对使用上述面向Lua语言的加扰混淆方法进行加扰混淆后的Lua源程序代码进行解密的方法,通过读取Lua源程序代码,根据数据字典中存储的对应关系进行源代码的逆向,具体执行如下操作:[0027]C1)读取所述Lua源程序代码的数据字典;[0028]C2)根据数据字典,针对混淆词汇进行逆向,将混淆后的名称替换为混淆前的名称;[0029]C3)根据数据字典,读取并解析调用栈信息;[0030]C4)转换调用栈信息,得到转换后的调用栈信息,即获得解密后的Lua程序代码。[0031]上述针对使用加扰混淆方法进行加扰混淆后的Lua源程序代码进行解密的方法中,步骤C3)所述读取并解析调用栈信息,具体包括:根据数据字典获得混淆后的调用栈信息;根据调用栈信息解析名称;将混淆后的名称转化为混淆前的名称。[0032]与现有技术相比,本发明的有益效果是:[0033]本发明提供一种面向Lua语言的加扰混淆方法和解密方法,包括代码预处理、混淆算法和调用栈转换,利用本发明提供的技术方案,能够保证混淆后的Lua源代码在语义上不发生改变,不影响程序的正常执行;同时使得混淆后的Lua源代码难以理解,可以有效地对Lua源程序进行版权保护,防止其被逆向或篡改。【附图说明】[0034]图1是本发明实施例的整体流程框图。【具体实施方式】[0035]下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。[0036]本发明提供一种面向Lua语言的加扰混淆方法,该方法能够保证混淆后的Lua源代码在语义上不发生改变,不影响程序的正常执行;同时使得混淆后的Lua源代码难以理解,可起到保护版权,防止他人剽窃软件中的智力成果或对软件进行有目的的篡改的作用。[0037]图1是本发明实施例提供的面向Lua语言的加扰混淆方法的整体流程框图,包括进行预处理、加密或解密流程;操作步骤包括进行预处理、进行加扰混淆或逆向和转换调用栈等。[0038]首先对Lua源代码进行预处理,然后根据用户选择的功能项(加密或解密)执行操作,其【具体实施方式】如下:[0039]A.进行预处理,一方面可以读取并保存Lua源代码中的所有模块名,避免混淆后的Lua源文件无法运行;另外也可以生成符号表和抽象语法树,为混淆步骤提供便利。在对Lua源代码进行预处理时,执行如下操作:[0040]A1)进行预当前第1页1 2 
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1