[发明专利]一种控制流平坦化的源代码混淆生成方法及装置有效
申请号: | 201911347739.9 | 申请日: | 2019-12-24 |
公开(公告)号: | CN113031930B | 公开(公告)日: | 2022-07-05 |
发明(设计)人: | 吴鑫 | 申请(专利权)人: | 武汉斗鱼鱼乐网络科技有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 刘杰 |
地址: | 430000 湖北省武汉市东湖新技术开发区软件园东路*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 控制 平坦 源代码 混淆 生成 方法 装置 | ||
本发明涉及Web源代码技术领域,具体涉及一种控制流平坦化的源代码混淆生成方法及装置,通过将源代码中函数所包含的复合语句进行分割,并把分割好的语句保存在中间语句块缓存中,然后在语句块缓存的基础上按照语句块数量进一步的划分,把语句块缓存按照一定的层次结构切分成多个小的语句块缓存,最后用多个switch语句多维嵌套的方式把多个小的语句块缓存中的语句按原有的代码执行路径生成平坦化代码。本发明创新性地提出了使用中间语句块缓存保存复合语句分割后的基本语句,将平坦化算法和抽象语法树中的细节进行隔离,降低了实现平坦化功能代码的复杂性,生成多层级的平坦化代码,能够完全的打乱原有代码的执行路径,有效的提高了代码的安全性。
技术领域
本发明涉及web开发技术领域,具体涉及一种控制流平坦化的源代码混淆生成方法及装置。
背景技术
在实际的Web应用中,开发者编写的javascript(后面简称JS)代码会以源码的形式加载到用户浏览器中运行,这意味着用户具有访问和修改本地JS源码的权限。因此在一些数据敏感的Web应用场景下JS的源码安全就显得尤为重要。
目前比较有效的保护手段是对JS源代码做混淆处理,以保护代码的真实逻辑信息不被人窃取。业界的JS混淆方案中最常用的手段之一就是控制流平坦化技术,它把易读的代码转换成一种离散的复杂结构,可以有效的隐藏JS代码的原始执行流程。目前已公开的JS控制流平坦化技术都是基于抽象语法树把函数中的复合语句分割成最基本的语句块,然后用一个switch控制语句把切分好的语句块按原有的代码执行路径生成控制流平坦化代码。
但是使用该方案时,用switch控制语句实现的平坦化结构是一维的,攻击者利用浏览器的动态调试功能很容易就能逆向出代码的真正执行路径。因此,目前亟需一种安全高效的源代码混淆处理方法。
发明内容
本发明的目的是提供一种控制流平坦化的源代码混淆生成方法及装置,以解决目前web开发中源代码容易被攻击、存在安全隐患的问题。
本发明实施例提供了以下方案:
第一方面,本发明实施例提供一种控制流平坦化的源代码混淆生成方法,包括:
依据源代码生成抽象语法树;
判断所述抽象语法树的当前节点是否为一个复合语句;
若是,则对所述复合语句进行语句分割;
对所述语句分割后的复合语句进行三维控制平坦化处理,确定每一维度中的节点数量;其中,所述每一维度包括第一维度;
依据第二维度中的节点生成第一选择判断语句;
依据第一维度中的节点数量对所述第一选择判断语句进行分组;
将每组所述第一选择判断语句生成相对应的第二选择判断语句;
依据所述语句分割后的复合语句以及所述第二选择判断语句生成第三选择判断语句;
生成循环语句,并将所述第三选择判断语句加到所述循环语句中生成三维控制流平坦化代码。
在一种可能的实施例中,所述对复合语句进行语句分割具体包括:
依据所述复合语句的类型确定对应的语句块分割器;
利用所述语句块分割器将对应的复合语句划分为基本语句;
将所述基本语句缓存到语句块中;
将所述语句块保存至全局语句块缓存中。
在一种可能的实施例中,所述三维控制平坦化处理具体包括:
对所述全局语句块缓存的原始索引列表进行乱序处理;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼鱼乐网络科技有限公司,未经武汉斗鱼鱼乐网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911347739.9/2.html,转载请声明来源钻瓜专利网。