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

文档序号:9598086阅读:来源:国知局
处理设置;
[0041] A2)进行词法分析,建立数据字典:
[0042] 从左到右一个字符一个字符地读入Lua源程序,对构成源程序的字符流进行扫 描,然后根据构词规则识别单词,建立数据字典;
[0043] A3)语法分析:对词法分析得到的单词序列进行语法分析,将单词序列组合成各 类语法短语,从而得到抽象语法树,包括抽象语法树的头结点chunk和整个抽象语法树对 象;
[0044] A4)遍历:根据选择的功能项和A2)建立的数据字典,对A3)语法分析阶段形成的 抽象语法树进行遍历,并获取遍历结果;
[0045] 遍历结果包括CommonTree对象的所有节点;保存Lua源代码中的所有模块名。
[0046] 通过预处理,得到Lua源代码模块CommonTree对象的所有节点,保存Lua源代码 中的所有模块名;然后可根据用户选择的功能项(加密或解密)执行操作。加密保证混淆 后的Lua源代码在语义上不发生改变,不影响程序的正常执行;同时使得混淆后的Lua源代 码难以理解,可起到保护版权,防止他人剽窃软件中的智力成果或对软件进行有目的的篡 改的作用。
[0047] B.在加密时,对Lua源程序进行加扰混淆时,执行如下操作:
[0048] B1)设置混淆参数;
[0049] 混淆参数包括混淆等级和混淆后源文件的输出路径等
[0050] B2)读取步骤A2)建立的数据字典;
[0051] B3)通过最小词汇排序法进行初级混淆;
[0052] 具体地,根据Lua源文件路径递归读取目录下的文件,读取数据字典,采用最小词 汇排序法产生单词对Lua源程序中的变量名、函数名、参数名、表名等进行替换,将混淆前 和混淆后的名称存储在数据字典中;
[0053] B4)通过控制流混淆方法进行高级混淆,改变源程序的执行流程,在数据字典中保 存混淆前后的调用栈信息;
[0054] B5)获得加扰混淆后的Lua代码,保存代码,结束操作。
[0055] 使用上述面向Lua语言的加扰混淆方法对Lua语言代码进行加密后,得到了加密 后的Lua代码;若需要对加密后的Lua代码进行调试,则要对代码进行解密。
[0056] C.对代码进行解密,即进行加密的逆向,具体是读取Lua源代码,根据数据字典中 存储的对应关系进行源代码的逆向,执行如下操作:
[0057] C1)读取数据字典;
[0058] C2)混淆词汇逆向;
[0059] 根据数据字典,将输入的混淆后的名称替换为混淆前的名称;
[0060] C3)读取并解析调用栈信息;
[0061] 根据数据字典,数据字典保存了混淆后的调用栈信息;根据调用栈信息解析函数 名,将混淆后的函数名转化为混淆前的函数名的名称;
[0062] C4)转换调用栈信息,得到转换后的调用栈信息,获得解密后的Lua代码,即加扰 混淆之前的Lua源程序代码。
[0063] 下面通过实例对本发明做进一步说明。
[0064] 实施例:
[0065] 为混淆某文件夹下的500个Lua源代码文件,首先对其进行预处理操作,对Lua源 代码进行词法分析、语法分析,得到数据字典和抽象语法树。数据字典中保存变量名、函数 名、参数名、表名等,抽象语法树保存源代码的抽象语法结构。根据功能项需求,选择进行加 密或者解密过程。
[0066] 在加密过程中,递归地读取Lua源代码文件,采用最小词汇排序法对Lua源代码进 行初级混淆,最小词汇排序法具体是:根据字符串在数组中的位置k,将k对26取余,设所 得余数为num,将第num个小写字母添加到新字符头部,每次取余后k除26后取整得到新 的k,重复以上操作直到k〈l,最后用新得到的字符串代替原字符串;将新得到的字符串和 原字符串都保存到数据字典中;
[0067] 最小词汇排序法的源代码如下所示:
[0069] 接下来对Lua源程序进行控制流混淆,具体步骤是:输入一个抽象语法树,根据在 最小词汇法中得到的变量名(为上述的字符串),利用不透明谓词构造函数,得到不透明谓 词P,在抽象语法树中选取合适的插入点〇,插入不透明谓词P,从而对控制流进行混淆,可 改变源程序的执行流程。
[0070] 通过上述方法,即得到了加密后的Lua代码。
[0071] 如果程序员想对加密后的Lua代码进行调试,那么要对代码进行解密。解密的步 骤具体是:读取数据字典,根据数据字典中存储的对应关系进行源代码的逆向,还原源代码 的变量名、函数名、参数名、表名等;然后读取调用栈信息,解析,将混淆后的栈名转化为混 淆前的名称;完成解密,集将加密后的代码还原成源代码。
[0072] 需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技 术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是 可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求 书界定的范围为准。
【主权项】
1. 一种面向Lua语言的加扰混淆方法,通过代码预处理方法、混淆方法和调用栈转换 方法,使得混淆后的Lua源代码在语义上不发生改变的同时还无法被理解,以达到保护程 序代码而又不影响程序的正常执行的目的;包括如下步骤: A.进行代码预处理,执行如下操作: A1)进行代码预处理设置; A2)针对代码进行词法分析,根据构词规则识别单词,建立数据字典: A3)针对词法分析得到的单词序列进行语法分析,将单词序列组合成语法短语,得到抽 象语法树; A4)根据A2)建立的数据字典和A3)形成的抽象语法树进行遍历,获取遍历结果; B.对Lua源程序进行加扰混淆,执行如下操作: B1)设置混淆参数;混淆参数包括混淆等级和混淆后源文件的输出路径; B2)读取步骤A2)建立的数据字典; B3)通过最小词汇排序法进行初级混淆,将初级混淆前和初级混淆后的名称存储在数 据字典中; B4)通过控制流混淆方法进行高级混淆,改变源程序的执行流程,在数据字典中保存高 级混淆前后的调用栈信息; B5)获得加扰混淆后的Lua代码,保存代码,结束操作。2. 如权利要求1所述面向Lua语言的加扰混淆方法,其特征是,步骤A2)所述进行词法 分析,建立数据字典,具体是:从左到右逐个字符读入Lua源程序,根据构词规则识别单词, 建立得到所述Lua源程序的数据字典。3.如权利要求1所述面向Lua语言的加扰混淆方法,其特征是,步骤A4)所述抽象语法 树包括所述抽象语法树的头结点chunk和整个抽象语法树对象;步骤A4)所述遍历结果包 括抽象语法树对象CommonTree对象的所有节点,对应Lua源代码中的所有模块名。4.如权利要求1所述面向Lua语言的加扰混淆方法,其特征是,步骤B3)所述进行初 级混淆,具体是,根据Lua源文件路径递归读取目录下的文件,读取步骤A2)得到的所述Lua 源程序的数据字典,采用最小词汇排序法产生单词对Lua源程序中的名称进行替换;同时 将混淆前和混淆后的相应名称均存储在数据字典中。5.如权利要求4所述面向Lua语言的加扰混淆方法,其特征是,所述名称包括变量名、 函数名、参数名和表名。6. -种针对使用权利要求1~5所述面向Lua语言的加扰混淆方法进行加扰混淆后 的Lua源程序代码进行解密的方法,其特征是,所述解密通过读取Lua源程序代码,根据数 据字典中存储的对应关系进行源代码的逆向,具体执行如下操作: C1)读取所述Lua源程序代码的数据字典; C2)根据数据字典,针对混淆词汇进行逆向,将混淆后的名称替换为混淆前的名称; C3)根据数据字典,读取并解析调用栈信息; C4)转换调用栈信息,得到转换后的调用栈信息,即获得解密后的Lua程序代码。7.如权利要求6所述针对使用加扰混淆方法进行加扰混淆后的Lua源程序代码进行解 密的方法,其特征是,步骤C3)所述读取并解析调用栈信息,具体包括:根据数据字典获得 混淆后的调用栈信息;根据调用栈信息解析名称;将混淆后的名称转化为混淆前的名称。
【专利摘要】本发明公布了种面向Lua语言的加扰混淆方法和解密方法,通过代码预处理方法、混淆方法和调用栈转换方法,针对代码进行词法分析,建立数据字典:将单词序列组合成语法短语,得到抽象语法树;通过最小词汇排序法进行初级混淆;通过控制流混淆方法进行高级混淆;使得混淆后的Lua源代码在语义上不发生改变的同时还无法被理解,以达到保护程序代码而又不影响程序的正常执行的目的。解密时,通过读取Lua源程序代码,根据数据字典中存储的对应关系进行源代码的逆向,获得解密后的Lua代码,即加扰混淆之前的Lua源程序代码。本发明可以有效地对Lua源程序进行版权保护,防止Lua源程序被逆向或篡改。
【IPC分类】G06F21/14
【公开号】CN105354449
【申请号】CN201510740424
【发明人】文伟平
【申请人】北京鼎源科技有限公司
【公开日】2016年2月24日
【申请日】2015年11月4日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1