[发明专利]一种基于控制流复杂化的Java代码混淆方法有效
申请号: | 201610891258.4 | 申请日: | 2016-10-13 |
公开(公告)号: | CN106650339B | 公开(公告)日: | 2019-06-11 |
发明(设计)人: | 周超;郭雅娟;黄伟;朱道华;姜海涛;郭静;李斌;王黎明;陈锦铭 | 申请(专利权)人: | 国网江苏省电力公司电力科学研究院;国家电网公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 南京纵横知识产权代理有限公司 32224 | 代理人: | 董建林 |
地址: | 211103 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 控制 复杂化 java 代码 混淆 方法 | ||
本发明公开了一种基于控制流复杂化的Java代码混淆方法,包括步骤1,构建不透明谓词集合;步骤2,发现循环结构;步骤3,拆开循环结构;步骤4,在拆开的循环结构中插入不透明谓词集合;步骤5,复杂化循环结构。本发明克服了现有代码混淆方法对循环结构利用不足的缺点,实现了利用循环结构的控制流复杂化方法。
技术领域
本发明涉及一种基于控制流复杂化的Java代码混淆方法,属于计算机安全领域。
背景技术
伴随着移动互联网的兴起,移动端应用越来越普及,这些应用充分利用了移动设备的计算能力和便携性,方便了人们的生活,但是移动端应用中有大量的Java程序。Java程序在编译后以打包的.class文件的形式分发,这些.class文件都是Java字节码,并且原始的Java字节码可以通过反编译的方法还原出与原代码差别只在注释的源代码。这就给了攻击者或者其他的不法分子机会。这带来的主要问题如下:
1.软件盗版,不法分子通过反编译之后的源代码可以轻易的复制出与原来的软件功能相同或相近的软件,或者破解出不需要激活的软件。
2.篡改,修改软件源代码,不改变软件的使用功能,但是在其中添加了广告或者其他的恶意代码和病毒。
为了解决这些问题,提出了代码混淆的方法,主要分为四类:布局混淆转换、控制混淆转换、数据混淆转换以及预防性混淆转换。这些方法主要是用来应对反编译,对循环结构利用不足。
发明内容
为了解决上述技术问题,本发明提供了一种基于控制流复杂化的Java代码混淆方法。
为了达到上述目的,本发明所采用的技术方案是:
一种基于控制流复杂化的Java代码混淆方法,包括以下步骤,
步骤1,构建不透明谓词集合;
步骤2,发现循环结构;
步骤3,拆开循环结构;
步骤4,在拆开的循环结构中插入不透明谓词集合;
步骤5,复杂化循环结构。
不透明谓词集合包括构造恒为真的谓词集合T以及恒为假的谓词集合F。
发现循环结构的过程为,
S11,遍历class文件寻找条件跳转指令M;
S12,找到条件跳转指令M的跳转标签E;
S13,查看跳转标签E所在位置的上一条指令是否为无条件跳转指令N,如果是,找到无条件跳转指令N的跳转标签B;
S14,判断跳转标签B是否在条件跳转指令M之前,如果是,遍历跳转标签B到条件跳转指令M之间的代码段,查看是否还有其余跳转指令,如果没有,那么从跳转标签B到跳转标签E之间的代码段为一个循环结构。
拆开循环结构的过程为,
S21,定义从跳转标签B到无条件跳转指令N之前的代码段为循环结构的循环体,定义循环结构原先具有的循环体的跳转标签B记为B0,定义复制循环体的次数为k,计数器i=0;
S22,i=i+1;
S23,在无条件跳转指令N之前插入一循环体,插入的循环体的跳转标签记为Bi;
S24,判断i是否大于等于k,如果否,则转至步骤S22,如果是,则转至步骤S25;
S25,去掉无条件跳转指令N,在同样的位置插入代码块D,所述代码块D根据输入和局部变量的状态跳转B0到Bk中的任何一个.
在拆开的循环结构中插入不透明谓词集合的过程为,
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于国网江苏省电力公司电力科学研究院;国家电网公司,未经国网江苏省电力公司电力科学研究院;国家电网公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610891258.4/2.html,转载请声明来源钻瓜专利网。