CN109784009A - 代码混淆方法、***、计算机装置及计算机可读存储介质 - Google Patents
代码混淆方法、***、计算机装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN109784009A CN109784009A CN201811537503.7A CN201811537503A CN109784009A CN 109784009 A CN109784009 A CN 109784009A CN 201811537503 A CN201811537503 A CN 201811537503A CN 109784009 A CN109784009 A CN 109784009A
- Authority
- CN
- China
- Prior art keywords
- code
- obscure
- script
- index value
- obscuring
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000009434 installation Methods 0.000 title claims abstract description 29
- 238000012545 processing Methods 0.000 claims abstract description 79
- 238000011156 evaluation Methods 0.000 claims abstract description 56
- 230000006870 function Effects 0.000 claims description 44
- 238000004590 computer program Methods 0.000 claims description 22
- 238000013507 mapping Methods 0.000 claims description 18
- 238000004422 calculation algorithm Methods 0.000 claims description 12
- 230000009466 transformation Effects 0.000 claims description 12
- 238000006243 chemical reaction Methods 0.000 claims description 10
- 238000013461 design Methods 0.000 claims description 8
- 238000011161 development Methods 0.000 abstract description 7
- 238000012512 characterization method Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明提供一种代码混淆方法、***、计算机装置及计算机可读存储介质。所述代码混淆方法包括:根据预设代码混淆规则对代码文本进行扫描,以生成待混淆脚本,其中所述预设代码混淆规则包括以下一种或多种:变量关键字、函数名关键字、类名关键字、冗余内容关键字;配置代码混淆策略,并根据所述代码混淆策略对所述待混淆脚本进行混淆处理;对所述混淆处理后的脚本进行评估得到混淆评估指标值;判断所述混淆评估指标值是否不小于预设混淆指标值;当所述混淆评估指标值不小于所述预设混淆指标值时,输出混淆后的脚本。本发明可实现自动配置混淆脚本,可减少因为手动配置遗漏或者配置错误的几率,可为代码开发人员提供代码开发辅助,提升软件开发效率。
Description
技术领域
本发明涉及软件开发领域,尤其涉及一种代码混淆方法、***、计算机装置及计算机可读存储介质。
背景技术
在软件(例如:APP)开发过程中,为了方便开发与维护,通常将代码编译中的类、变量、函数的命名设置为具有一定的可读性,同时为了保护软件应用的开发代码,需将使用开发代码编译的代码文件进行代码混淆处理,以增加软件应用的安装文件被反编译的难度,实现对开发代码的保护。目前混淆脚本一般是由开发者进行手动配置,容易因为开发者的疏忽或者错误的配置,导致APP发布后才发现存在缺陷,降低了开发效率和质量。
发明内容
鉴于上述,本发明提供一种代码混淆方法、***、计算机装置及计算机可读存储介质,其可以实现自动配置混淆脚本,提升软件开发效率。
本申请一实施方式提供一种代码混淆方法,所述方法包括:
根据预设代码混淆规则对代码文本进行扫描,以生成待混淆脚本,其中所述预设代码混淆规则包括以下一种或多种:变量关键字、函数名关键字、类名关键字、冗余内容关键字;
配置代码混淆策略,并根据所述代码混淆策略对所述待混淆脚本进行混淆处理;
对所述混淆处理后的脚本进行评估得到混淆评估指标值;
判断所述混淆评估指标值是否不小于预设混淆指标值;及
当所述混淆评估指标值不小于所述预设混淆指标值时,输出所述混淆处理后的脚本。
优选地,所述判断所述混淆评估指标值是否不小于预设混淆指标值的步骤之后还包括:
当所述混淆评估指标值小于所述预设混淆指标值时,调整所述代码混淆策略,并根据调整后的代码混淆策略重新对所述待混淆脚本进行混淆处理。
优选地,所述根据所述代码混淆策略对所述待混淆脚本进行混淆处理的步骤包括:
遍历所述待混淆脚本并获取所述待混淆脚本中的变量名称;
通过随机算法为每一所述变量名称随机生成名称,并用该生成的名称替换所述变量名称;及
将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行进制变换。
优选地,所述将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行进制变换的步骤包括:
将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行八进制或者十六进制变换。
优选地,所述根据所述代码混淆策略对所述待混淆脚本进行混淆处理的步骤包括:
建立预设类型代码与哈希值类型的映射关系表;
遍历所述待混淆脚本并获取所述待混淆脚本中包含的所述预设类型代码;及
根据所述映射关系表将所述待混淆脚本的所述预设类型代码转换为与其相对应的哈希值类型的哈希值。
优选地,所述对所述混淆处理后的脚本进行评估得到混淆评估指标值的步骤包括:
对所述混淆处理后的脚本进行混淆处理强度评估、混淆处理弹性评估及混淆处理开销评估,并根据所述混淆处理强度、所述混淆处理弹性及所述混淆处理开销计算得到所述混淆评估指标值。
优选地,所述混淆处理强度的指标包括:程序长度、谓词个数、分支与循环的层次、引用的个数、方法参数的个数、继承树深度,所述混淆处理弹性的指标包括:设计反混淆器所需花费的时间以及人力、反混淆器对混淆处理后的脚本进行反混淆所花费的开销,所述混淆处理开销的指标包括:脚本混淆时所花费的开销、混淆后的脚本相对于混淆前的脚本执行时所增加的复杂度。
本申请一实施方式提供一种代码混淆***,所述***包括:
扫描模块,用于根据预设代码混淆规则对代码文本进行扫描,以生成待混淆脚本,其中所述预设代码混淆规则包括以下一种或多种:变量关键字、函数名关键字、类名关键字、冗余内容关键字;
混淆模块,用于配置代码混淆策略,并根据所述代码混淆策略对所述待混淆脚本进行混淆处理;
评估模块,用于对所述混淆处理后的脚本进行评估得到混淆评估指标值;
判断模块,用于判断所述混淆评估指标值是否不小于预设混淆指标值;及
输出模块,用于在所述混淆评估指标值不小于所述预设混淆指标值时,输出所述混淆处理后的脚本。
本申请一实施方式提供一种计算机装置,所述计算机装置包括处理器及存储器,所述存储器上存储有若干计算机程序,所述处理器用于执行存储器中存储的计算机程序时实现如前面所述的代码混淆方法的步骤。
本申请一实施方式提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前面所述的代码混淆方法的步骤。
上述代码混淆方法、***、计算机装置及计算机可读存储介质,通过代码扫描的方式自动生成待混淆脚本,无需手动配置待混淆脚本,可减少因为手动配置遗漏或者配置错误的几率,支持多种代码混淆策略,且支持用户对混淆策略进行扩展与更新,对脚本混淆完成后还通过判断混淆后的脚本的混淆评估指标值是否小于预设混淆指标值,当混淆评估指标值不小于所述预设混淆指标值时输出混淆后的脚本,进而可确保混淆后的代码脚本符合用户代码安全需求。
附图说明
为了更清楚地说明本发明实施方式的技术方案,下面将对实施方式描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中代码混淆方法的步骤流程图。
图2为本发明一实施例中代码混淆***的功能模块图。
图3为本发明一实施例中计算机装置示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行详细描述。需要说明的是,在不冲突的情况下,本申请的实施方式及实施方式中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施方式的目的,不是旨在于限制本发明。
优选地,本发明的代码混淆方法应用在一个或者多个计算机装置中。所述计算机装置是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机装置可以是桌上型计算机、笔记本电脑、平板电脑、服务器等计算设备。所述计算机装置可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
实施例一:
图1是本发明代码混淆方法较佳实施例的步骤流程图。根据不同的需求,所述流程图中步骤的顺序可以改变,某些步骤可以省略。
参阅图1所示,所述代码混淆方法具体包括以下步骤。
步骤S11、根据预设代码混淆规则对代码文本进行扫描,以生成待混淆脚本,其中所述预设代码混淆规则包括以下一种或多种:变量关键字、函数名关键字、类名关键字、冗余内容关键字。
在一实施方式中,在进行混淆操作前,可以预先定义并建立一代码混淆规则,所述代码混淆规则可以包括多个变量关键字、多个函数名关键字、多个类名关键字、多个冗余内容关键字等。当定义好代码混淆规则后,可以根据代码混淆规则中包含的关键字对所述代码文本进行扫描,将代码文本中不需要进行混淆操作的代码剔除出去,代码文本中剩余的代码即可作为所述待混淆脚本。
举例而言,所述代码文本为android代码文本。在android代码文本中不需要进行混淆操作的代码可以包括:被Android Resource文件引用到的代码,android.app.backup.BackupAgent Helper代码,android.preference.Preference代码,com.android.vending.licensing.ILicensingService代码,annotatio ns注释,Android***组件代码,Android Parcelable代码,数据库驱动函数,Java序列化方法函数,第三方库,反射相关类,实体类,JNI中调用的类,实现Serializable接口的类等。在进行代码混淆规则确定时,可以根据上述不需要进行混淆操作的代码来设定多个变量关键字、多个函数名关键字、多个类名关键字。
所述代码文本一般存在有冗余内容,在计算机执行所述代码文本的过程中,该冗余内容不会影响代码文本的正常运行,但同时会便于其他用户理解该代码文本,为了保护该代码文本不被其他用户破解,可以预先将代码文本的冗余内容去除。代码文本的冗余内容可以是解释代码含义的注释、空行、回车换行、Tab符号等,去除此类冗余内容使得其他用户不容易从代码的注释或者代码格式方面理解源代码的含义。
举例而言,代码文本中处于与“//”同一行且位于“//”之后的内容是源代码中的注释,同时位于“/*”与“*/”之间的内容也为源代码中的注释,当在识别到“//”或者“/*”与“*/”后,即可确定为注释内容,需要进行剔除操作。
在一实施方式中,不同的代码文本可以配置不同的代码混淆规则,也可以根据不同使用场景需求对代码文本的代码混淆规则进行修改、更新。
步骤S12、配置代码混淆策略,并根据所述代码混淆策略对所述待混淆脚本进行混淆处理。
在一实施方式中,所述代码混淆策略可以包括对待混淆脚本中的预设类型代码进行替换、对预设变量名称进行替换,对待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串、引用对象进行进制变换等。
在一实施方式中,可以同时采用一个或者多个代码混淆策略对所述待混淆脚本进行混淆处理。
变量名称描述了变量所代表的实体,其他用户可以通过理解变量名称来理解代码的含义,进而可以通过获取待混淆脚本的变量名称并对变量名称进行处理,可以达到混淆源代码的目的。
具体地,根据所述代码混淆策略对所述待混淆脚本进行混淆处理可以具体包括:遍历所述待混淆脚本并获取所述待混淆脚本中的变量名称;通过随机算法为每一所述变量名称随机生成名称,并用该生成的名称替换所述变量名称;及将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行进制变换。
在一实施方式中,通过随机算法随机生成的名称优选不能体现代码中的变量的真实含义的名称,该随机算法可以是HASH算法、舍伍德算法等。可以将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号(包括双引号和单引号)内字符串和引用对象进行16进制或者8进制转换。
在一实施方式中,根据所述代码混淆策略对所述待混淆脚本进行混淆处理还可以具体包括:建立预设类型代码与哈希值类型的映射关系表;遍历所述待混淆脚本并获取所述待混淆脚本中包含的所述预设类型代码;及根据所述映射关系表将所述待混淆脚本的所述预设类型代码转换为与其相对应的哈希值类型的哈希值。哈希值类型包括MD5值,MD5值具有不可逆性和唯一性。
举例而言,在进行代码混淆操作前可以预先建立一映射关系表,该映射关系表中至少包含两列,一列用于存储各个预设类型代码,另一列用于存储与各个预设类型代码对应的预设类型哈希值,相互对应的预设类型代码和预设类型哈希值处于该映射关系表的同一行,不对应的预设类型代码和预设类型哈希值处于该映射关系表的不同行。可以根据代码中的类名、变量名以及函数名与各自对应的MD5值之间的映射关系,确定代码中的类名、变量名以及函数名对应的MD5值的类型,并将代码中的类名、变量名以及函数名转换成对应的MD5值的类型。可以理解地,为了提高代码安全性,提高混淆代码的破译难度,哈希值的哈希值类型有多个,代码的类型也有多个。
步骤S13,对所述混淆处理后的脚本进行评估得到混淆评估指标值。
在一实施方式中,可以通过对所述混淆处理后的脚本进行混淆处理强度评估、混淆处理弹性评估及混淆处理开销评估,并根据所述混淆处理强度、所述混淆处理弹性及所述混淆处理开销计算得到所述混淆评估指标值。
在一实施方式中,所述混淆评估指标值代表了混淆处理为代码增加的复杂度(即混淆处理的强度),抗机器攻击的能力(即混淆处理的弹性),以及由于对代码转换而带来的额外开销(即混淆处理的开销)。具体地,混淆处理的强度表征混淆处理为程序所增加的复杂度,可以由以下属性决定它的复杂程度,分别是:程序长度,谓词个数,分支与循环的层次,引用的个数,方法参数的个数,继承树深度。混淆处理的弹性表征抵抗攻击的能力,可以由以下2个部分组成,一部分是攻击者为了攻克混淆处理而设计并实现一个相应反混淆器所需花费的时间以及人力,另一部分是反混淆器对混淆处理进行反混淆所花费的开销。混淆处理的开销表征混淆处理给代码开发带来的额外开销,可以包括有以下两个方面,一个是在对代码混淆时所花费的开销,另一个是混淆后的代码程序相对于原代码程序执行时所增加的复杂度,所述复杂度可以包括时间复杂度以及空间复杂度。
步骤S14,判断所述混淆评估指标值是否不小于预设混淆指标值。
在一实施方式中,可以根据实际的代码安全需求设置预设混淆指标值,并将步骤S13得到的混淆评估指标值与所述预设混淆指标值进行比较来判断所述混淆评估指标值是否不小于预设混淆指标值。
步骤S15,当所述混淆评估指标值不小于所述预设混淆指标值时,输出所述混淆处理后的脚本。
在一实施方式中,当所述混淆评估指标值不小于所述预设混淆指标值时,表明经过混淆处理后的待混淆脚本符合用户代码安全需求,此时可以输出混淆处理后的脚本。
步骤S16,当所述混淆评估指标值小于所述预设混淆指标值时,调整所述代码混淆策略,并根据调整后的代码混淆策略重新对所述待混淆脚本进行混淆处理。
在一实施方式中,当所述混淆评估指标值小于所述预设混淆指标值时,表明经过混淆处理的待混淆脚本不符合用户代码安全需求,此时可输出一混淆策略调整提醒(比如,以弹窗的形式输出一调整提醒),以提醒用户需调整混淆策略。当对所述代码混淆策略调整完成后,根据调整后的代码混淆策略重新对所述待混淆脚本进行混淆处理,并可再次判断调整后得到混淆评估指标值是否不小于预设混淆指标值。当调整后得到混淆评估指标值不小于预设混淆指标值时,输出混淆后的脚本,否则重复上述调整步骤直至得到的混淆评估指标值不小于预设混淆指标值。
在一实施方式中,对所述代码混淆策略调整可以包括对预设类型代码、预设变量名称替换调整,对待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串、引用对象进行不同进制变换调整等。
上述代码混淆方法通过代码扫描的方式自动生成待混淆脚本,无需手动配置待混淆脚本,可减少因为手动配置遗漏或者配置错误的几率,支持多种代码混淆策略,且支持用户对混淆策略进行扩展与更新,对脚本混淆完成后还通过判断混淆后的脚本的混淆评估指标值是否小于预设混淆指标值,当混淆评估指标值不小于所述预设混淆指标值时输出混淆后的脚本,进而可确保混淆后的代码脚本符合用户代码安全需求。
实施例二:
图2为本发明代码混淆***较佳实施例的功能模块图。
参阅图2所示,所述代码混淆***10可以包括扫描模块101、混淆模块102、评估模块103、判断模块104、输出模块105及调整模块106。
所述扫描模块101用于根据预设代码混淆规则对代码文本进行扫描,以生成待混淆脚本,其中所述预设代码混淆规则包括以下一种或多种:变量关键字、函数名关键字、类名关键字、冗余内容关键字。
在一实施方式中,在进行混淆操作前,可以预先定义并建立一代码混淆规则,所述代码混淆规则可以包括多个变量关键字、多个函数名关键字、多个类名关键字、多个冗余内容关键字等。当定义好代码混淆规则后,所述扫描模块101可以根据代码混淆规则中包含的关键字对所述代码文本进行扫描,将代码文本中不需要进行混淆操作的代码剔除出去,代码文本中剩余的代码即可作为所述待混淆脚本。
举例而言,所述代码文本为android代码文本。在android代码文本中不需要进行混淆操作的代码可以包括:被Android Resource文件引用到的代码,android.app.backup.BackupAgent Helper代码,android.preference.Preference代码,com.android.vending.licensing.ILicensingService代码,annotatio ns注释,Android***组件代码,Android Parcelable代码,数据库驱动函数,Java序列化方法函数,第三方库,反射相关类,实体类,JNI中调用的类,实现Serializable接口的类等。在进行代码混淆规则确定时,可以根据上述不需要进行混淆操作的代码来设定多个变量关键字、多个函数名关键字、多个类名关键字。
所述代码文本一般存在有冗余内容,在计算机执行所述代码文本的过程中,该冗余内容不会影响代码文本的正常运行,但同时会便于其他用户理解该代码文本,为了保护该代码文本不被其他用户破解,可以预先将代码文本的冗余内容去除。代码文本的冗余内容可以是解释代码含义的注释、空行、回车换行、Tab符号等,去除此类冗余内容使得其他用户不容易从代码的注释或者代码格式方面理解源代码的含义。
举例而言,代码文本中处于与“//”同一行且位于“//”之后的内容是源代码中的注释,同时位于“/*”与“*/”之间的内容也为源代码中的注释,当在识别到“//”或者“/*”与“*/”后,即可确定为注释内容,需要进行剔除操作。
在一实施方式中,不同的代码文本可以配置不同的代码混淆规则,也可以根据不同使用场景需求对代码文本的代码混淆规则进行修改、更新。
所述混淆模块102用于配置代码混淆策略,并根据所述代码混淆策略对所述待混淆脚本进行混淆处理。
在一实施方式中,所述代码混淆策略可以包括对待混淆脚本中的预设类型代码进行替换、对预设变量名称进行替换,对待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串、引用对象进行进制变换等。
在一实施方式中,所述混淆模块102可以同时采用一个或者多个代码混淆策略对所述待混淆脚本进行混淆处理。
变量名称描述了变量所代表的实体,其他用户可以通过理解变量名称来理解代码的含义,进而可以通过获取待混淆脚本的变量名称并对变量名称进行处理,可以达到混淆源代码的目的。
具体地,所述混淆模块102根据所述代码混淆策略对所述待混淆脚本进行混淆处理可以具体包括以下方式:遍历所述待混淆脚本并获取所述待混淆脚本中的变量名称;通过随机算法为每一所述变量名称随机生成名称,并用该生成的名称替换所述变量名称;及将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行进制变换。
在一实施方式中,所述混淆模块102通过随机算法随机生成的名称优选不能体现代码中的变量的真实含义的名称,该随机算法可以是HASH算法、舍伍德算法等。可以将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号(包括双引号和单引号)内字符串和引用对象进行16进制或者8进制转换。
在一实施方式中,所述混淆模块102根据所述代码混淆策略对所述待混淆脚本进行混淆处理还可以具体包括以下方式:建立预设类型代码与哈希值类型的映射关系表;遍历所述待混淆脚本并获取所述待混淆脚本中包含的所述预设类型代码;及根据所述映射关系表将所述待混淆脚本的所述预设类型代码转换为与其相对应的哈希值类型的哈希值。哈希值类型包括MD5值,MD5值具有不可逆性和唯一性。
举例而言,在进行代码混淆操作前可以预先建立一映射关系表,该映射关系表中至少包含两列,一列用于存储各个预设类型代码,另一列用于存储与各个预设类型代码对应的预设类型哈希值,相互对应的预设类型代码和预设类型哈希值处于该映射关系表的同一行,不对应的预设类型代码和预设类型哈希值处于该映射关系表的不同行。可以根据代码中的类名、变量名以及函数名与各自对应的MD5值之间的映射关系,确定代码中的类名、变量名以及函数名对应的MD5值的类型,并将代码中的类名、变量名以及函数名转换成对应的MD5值的类型。可以理解地,为了提高代码安全性,提高混淆代码的破译难度,哈希值的哈希值类型有多个,代码的类型也有多个。
所述评估模块103用于对所述混淆处理后的脚本进行评估得到混淆评估指标值。
在一实施方式中,所述评估模块103可以通过对所述混淆处理后的脚本进行混淆处理强度评估、混淆处理弹性评估及混淆处理开销评估,并根据所述混淆处理强度、所述混淆处理弹性及所述混淆处理开销计算得到所述混淆评估指标值。
在一实施方式中,所述混淆评估指标值代表了混淆处理为代码增加的复杂度(即混淆处理的强度),抗机器攻击的能力(即混淆处理的弹性),以及由于对代码转换而带来的额外开销(即混淆处理的开销)。具体地,混淆处理的强度表征混淆处理为程序所增加的复杂度,可以由以下属性决定它的复杂程度,分别是:程序长度,谓词个数,分支与循环的层次,引用的个数,方法参数的个数,继承树深度。混淆处理的弹性表征抵抗攻击的能力,可以由以下2个部分组成,一部分是攻击者为了攻克混淆处理而设计并实现一个相应反混淆器所需花费的时间以及人力,另一部分是反混淆器对混淆处理进行反混淆所花费的开销。混淆处理的开销表征混淆处理给代码开发带来的额外开销,可以包括有以下两个方面,一个是在对代码混淆时所花费的开销,另一个是混淆后的代码程序相对于原代码程序执行时所增加的复杂度,所述复杂度可以包括时间复杂度以及空间复杂度。
所述判断模块104用于判断所述混淆评估指标值是否不小于预设混淆指标值。
在一实施方式中,可以根据实际的代码安全需求设置预设混淆指标值,所述判断模块104将评估模块103得到的混淆评估指标值与所述预设混淆指标值进行比较来判断所述混淆评估指标值是否不小于预设混淆指标值。
所述输出模块105用于在所述混淆评估指标值不小于所述预设混淆指标值时,输出所述混淆处理后的脚本。
在一实施方式中,当所述混淆评估指标值不小于所述预设混淆指标值时,表明经过混淆处理后的待混淆脚本符合用户代码安全需求,此时所述输出模块105可以输出混淆处理后的脚本。
所述调整模块106用于在所述混淆评估指标值小于所述预设混淆指标值时,调整所述代码混淆策略,所述混淆模块102还根据调整后的代码混淆策略重新对所述待混淆脚本进行混淆处理。
在一实施方式中,当所述混淆评估指标值小于所述预设混淆指标值时,表明经过混淆处理的待混淆脚本不符合用户代码安全需求,此时所述输出模块105可输出一混淆策略调整提醒(比如,以弹窗的形式输出一调整提醒),以提醒当前需调整混淆策略。当所述调整模块106对所述代码混淆策略调整完成后,所述混淆模块102根据调整后的代码混淆策略重新对所述待混淆脚本进行混淆处理,所述判断模块104可再次判断调整后得到混淆评估指标值是否不小于预设混淆指标值。当调整后得到混淆评估指标值不小于预设混淆指标值时,所述输出模块105输出混淆后的脚本,否则重复上述调整步骤直至得到的混淆评估指标值不小于预设混淆指标值。
在一实施方式中,所述调整模块106对所述代码混淆策略调整可以包括对预设类型代码、预设变量名称替换调整,对待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串、引用对象进行不同进制变换调整等。
上述代码混淆***通过代码扫描的方式自动生成待混淆脚本,无需手动配置待混淆脚本,可减少因为手动配置遗漏或者配置错误的几率,支持多种代码混淆策略,且支持用户对混淆策略进行扩展与更新,对脚本混淆完成后还通过判断混淆后的脚本的混淆评估指标值是否小于预设混淆指标值,当混淆评估指标值不小于所述预设混淆指标值时输出混淆后的脚本,进而可确保混淆后的代码脚本符合用户代码安全需求。
图3为本发明计算机装置较佳实施例的示意图。
所述计算机装置1包括存储器20、处理器30以及存储在所述存储器20中并可在所述处理器30上运行的计算机程序40,例如代码混淆程序。所述处理器30执行所述计算机程序40时实现上述代码混淆方法实施例中的步骤,例如图1所示的步骤S11~S16。或者,所述处理器30执行所述计算机程序40时实现上述代码混淆***实施例中各模块的功能,例如图2中的模块101~106。
示例性的,所述计算机程序40可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器20中,并由所述处理器30执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,所述指令段用于描述所述计算机程序40在所述计算机装置1中的执行过程。例如,所述计算机程序40可以被分割成图2中的扫描模块101、混淆模块102、评估模块103、判断模块104、输出模块105及调整模块106。各模块具体功能参见实施例二。
所述计算机装置1可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。本领域技术人员可以理解,所述示意图仅仅是计算机装置1的示例,并不构成对计算机装置1的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述计算机装置1还可以包括输入输出设备、网络接入设备、总线等。
所称处理器30可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者所述处理器30也可以是任何常规的处理器等,所述处理器30是所述计算机装置1的控制中心,利用各种接口和线路连接整个计算机装置1的各个部分。
所述存储器20可用于存储所述计算机程序40和/或模块/单元,所述处理器30通过运行或执行存储在所述存储器20内的计算机程序和/或模块/单元,以及调用存储在存储器20内的数据,实现所述计算机装置1的各种功能。所述存储器20可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机装置1的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器20可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述计算机装置1集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,所述计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
在本发明所提供的几个实施例中,应该理解到,所揭露的计算机装置和方法,可以通过其它的方式实现。例如,以上所描述的计算机装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
另外,在本发明各个实施例中的各功能单元可以集成在相同处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在相同单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。计算机装置权利要求中陈述的多个单元或计算机装置也可以由同一个单元或计算机装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
Claims (10)
1.一种代码混淆方法,其特征在于,所述方法包括:
根据预设代码混淆规则对代码文本进行扫描,以生成待混淆脚本,其中所述预设代码混淆规则包括以下一种或多种:变量关键字、函数名关键字、类名关键字、冗余内容关键字;
配置代码混淆策略,并根据所述代码混淆策略对所述待混淆脚本进行混淆处理;
对所述混淆处理后的脚本进行评估得到混淆评估指标值;
判断所述混淆评估指标值是否不小于预设混淆指标值;及
当所述混淆评估指标值不小于所述预设混淆指标值时,输出所述混淆处理后的脚本。
2.如权利要求1所述的代码混淆方法,其特征在于,所述判断所述混淆评估指标值是否不小于预设混淆指标值的步骤之后还包括:
当所述混淆评估指标值小于所述预设混淆指标值时,调整所述代码混淆策略,并根据调整后的代码混淆策略重新对所述待混淆脚本进行混淆处理。
3.如权利要求1或2所述的代码混淆方法,其特征在于,所述根据所述代码混淆策略对所述待混淆脚本进行混淆处理的步骤包括:
遍历所述待混淆脚本并获取所述待混淆脚本中的变量名称;
通过随机算法为每一所述变量名称随机生成名称,并用该生成的名称替换所述变量名称;及
将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行进制变换。
4.如权利要求3所述的代码混淆方法,其特征在于,所述将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行进制变换的步骤包括:
将经过变量名称替换的待混淆脚本中的内置对象、eval函数后的字符串、引号内字符串及引用对象进行八进制或者十六进制变换。
5.如权利要求1或2所述的代码混淆方法,其特征在于,所述根据所述代码混淆策略对所述待混淆脚本进行混淆处理的步骤包括:
建立预设类型代码与哈希值类型的映射关系表;
遍历所述待混淆脚本并获取所述待混淆脚本中包含的所述预设类型代码;及
根据所述映射关系表将所述待混淆脚本的所述预设类型代码转换为与其相对应的哈希值类型的哈希值。
6.如权利要求1所述的代码混淆方法,其特征在于,所述对所述混淆处理后的脚本进行评估得到混淆评估指标值的步骤包括:
对所述混淆处理后的脚本进行混淆处理强度评估、混淆处理弹性评估及混淆处理开销评估,并根据所述混淆处理强度、所述混淆处理弹性及所述混淆处理开销计算得到所述混淆评估指标值。
7.如权利要求6所述的代码混淆方法,其特征在于,所述混淆处理强度的指标包括:程序长度、谓词个数、分支与循环的层次、引用的个数、方法参数的个数、继承树深度,所述混淆处理弹性的指标包括:设计反混淆器所需花费的时间以及人力、反混淆器对混淆处理后的脚本进行反混淆所花费的开销,所述混淆处理开销的指标包括:脚本混淆时所花费的开销、混淆后的脚本相对于混淆前的脚本执行时所增加的复杂度。
8.一种代码混淆***,其特征在于,所述***包括:
扫描模块,用于根据预设代码混淆规则对代码文本进行扫描,以生成待混淆脚本,其中所述预设代码混淆规则包括以下一种或多种:变量关键字、函数名关键字、类名关键字、冗余内容关键字;
混淆模块,用于配置代码混淆策略,并根据所述代码混淆策略对所述待混淆脚本进行混淆处理;
评估模块,用于对所述混淆处理后的脚本进行评估得到混淆评估指标值;
判断模块,用于判断所述混淆评估指标值是否不小于预设混淆指标值;及
输出模块,用于在所述混淆评估指标值不小于所述预设混淆指标值时,输出所述混淆处理后的脚本。
9.一种计算机装置,所述计算机装置包括处理器及存储器,所述存储器上存储有若干计算机程序,其特征在于,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1-7中任意一项所述的代码混淆方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任意一项所述的代码混淆方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811537503.7A CN109784009A (zh) | 2018-12-15 | 2018-12-15 | 代码混淆方法、***、计算机装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811537503.7A CN109784009A (zh) | 2018-12-15 | 2018-12-15 | 代码混淆方法、***、计算机装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109784009A true CN109784009A (zh) | 2019-05-21 |
Family
ID=66497028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811537503.7A Pending CN109784009A (zh) | 2018-12-15 | 2018-12-15 | 代码混淆方法、***、计算机装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109784009A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110795704A (zh) * | 2019-10-28 | 2020-02-14 | 成都超有爱科技有限公司 | 一种应用程序的源代码混淆方法、装置及存储介质 |
CN110888644A (zh) * | 2019-12-06 | 2020-03-17 | 成都安恒信息技术有限公司 | 一种自定义混淆方案的JavaScript代码混淆方法 |
CN111814120A (zh) * | 2020-07-10 | 2020-10-23 | 北京嘀嘀无限科技发展有限公司 | 程序反混淆处理方法、装置、设备及存储介质 |
CN111967014A (zh) * | 2020-07-16 | 2020-11-20 | 北京轩宇信息技术有限公司 | 一种防御StarBleed漏洞的方法及装置 |
CN112035857A (zh) * | 2020-08-26 | 2020-12-04 | 深圳市百富智能新技术有限公司 | 数据保护方法、装置、设备及介质 |
CN112528241A (zh) * | 2020-11-27 | 2021-03-19 | 北京深思数盾科技股份有限公司 | 一种代码混淆方法、代码混淆器以及计算机可读存储介质 |
CN113590624A (zh) * | 2021-07-29 | 2021-11-02 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及电子装置 |
CN113761486A (zh) * | 2021-09-10 | 2021-12-07 | 上海熙菱信息技术有限公司 | 一种基于语法糖解析的一键式代码混淆方法 |
CN113836498A (zh) * | 2021-09-01 | 2021-12-24 | 浙江岩华文化科技有限公司 | 网页源代码混淆方法、装置、电子装置和存储介质 |
CN114662063A (zh) * | 2022-04-22 | 2022-06-24 | 苏州浪潮智能科技有限公司 | 一种混淆代码的方法、装置以及介质 |
CN115473702A (zh) * | 2022-08-23 | 2022-12-13 | 广西电网有限责任公司电力科学研究院 | 一种基于在线交互式web动态防御的内容混淆方法 |
CN117313047A (zh) * | 2023-11-28 | 2023-12-29 | 深圳润世华软件和信息技术服务有限公司 | 源代码混淆方法、混淆逆转方法、相应装置及存储介质 |
CN117574334A (zh) * | 2023-08-17 | 2024-02-20 | 广东工业大学 | 一种结合md5与序列到序列模型的代码混淆方法及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101986326A (zh) * | 2010-12-01 | 2011-03-16 | 浙江核新同花顺网络信息股份有限公司 | 保护软件安全的方法及装置 |
CN103150493A (zh) * | 2013-02-28 | 2013-06-12 | 浙江中控技术股份有限公司 | 一种JavaScript代码的混淆方法和装置 |
-
2018
- 2018-12-15 CN CN201811537503.7A patent/CN109784009A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101986326A (zh) * | 2010-12-01 | 2011-03-16 | 浙江核新同花顺网络信息股份有限公司 | 保护软件安全的方法及装置 |
CN103150493A (zh) * | 2013-02-28 | 2013-06-12 | 浙江中控技术股份有限公司 | 一种JavaScript代码的混淆方法和装置 |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110795704A (zh) * | 2019-10-28 | 2020-02-14 | 成都超有爱科技有限公司 | 一种应用程序的源代码混淆方法、装置及存储介质 |
CN110888644A (zh) * | 2019-12-06 | 2020-03-17 | 成都安恒信息技术有限公司 | 一种自定义混淆方案的JavaScript代码混淆方法 |
CN110888644B (zh) * | 2019-12-06 | 2023-03-31 | 成都安恒信息技术有限公司 | 一种自定义混淆方案的JavaScript代码混淆方法 |
CN111814120A (zh) * | 2020-07-10 | 2020-10-23 | 北京嘀嘀无限科技发展有限公司 | 程序反混淆处理方法、装置、设备及存储介质 |
CN111967014A (zh) * | 2020-07-16 | 2020-11-20 | 北京轩宇信息技术有限公司 | 一种防御StarBleed漏洞的方法及装置 |
CN111967014B (zh) * | 2020-07-16 | 2023-08-11 | 北京轩宇信息技术有限公司 | 一种防御StarBleed漏洞的方法及装置 |
WO2022042103A1 (zh) * | 2020-08-26 | 2022-03-03 | 深圳市百富智能新技术有限公司 | 数据保护方法、装置、设备及介质 |
CN112035857A (zh) * | 2020-08-26 | 2020-12-04 | 深圳市百富智能新技术有限公司 | 数据保护方法、装置、设备及介质 |
CN112035857B (zh) * | 2020-08-26 | 2024-03-19 | 深圳市百富智能新技术有限公司 | 数据保护方法、装置、设备及介质 |
CN112528241A (zh) * | 2020-11-27 | 2021-03-19 | 北京深思数盾科技股份有限公司 | 一种代码混淆方法、代码混淆器以及计算机可读存储介质 |
CN112528241B (zh) * | 2020-11-27 | 2021-09-14 | 北京深思数盾科技股份有限公司 | 一种代码混淆方法、代码混淆器以及计算机可读存储介质 |
CN113590624A (zh) * | 2021-07-29 | 2021-11-02 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及电子装置 |
CN113836498A (zh) * | 2021-09-01 | 2021-12-24 | 浙江岩华文化科技有限公司 | 网页源代码混淆方法、装置、电子装置和存储介质 |
CN113761486A (zh) * | 2021-09-10 | 2021-12-07 | 上海熙菱信息技术有限公司 | 一种基于语法糖解析的一键式代码混淆方法 |
CN113761486B (zh) * | 2021-09-10 | 2023-09-05 | 上海熙菱信息技术有限公司 | 一种基于语法糖解析的一键式代码混淆方法 |
CN114662063A (zh) * | 2022-04-22 | 2022-06-24 | 苏州浪潮智能科技有限公司 | 一种混淆代码的方法、装置以及介质 |
CN114662063B (zh) * | 2022-04-22 | 2024-06-25 | 苏州浪潮智能科技有限公司 | 一种混淆代码的方法、装置以及介质 |
CN115473702A (zh) * | 2022-08-23 | 2022-12-13 | 广西电网有限责任公司电力科学研究院 | 一种基于在线交互式web动态防御的内容混淆方法 |
CN117574334A (zh) * | 2023-08-17 | 2024-02-20 | 广东工业大学 | 一种结合md5与序列到序列模型的代码混淆方法及*** |
CN117574334B (zh) * | 2023-08-17 | 2024-05-28 | 广东工业大学 | 一种结合md5与序列到序列模型的代码混淆方法及*** |
CN117313047A (zh) * | 2023-11-28 | 2023-12-29 | 深圳润世华软件和信息技术服务有限公司 | 源代码混淆方法、混淆逆转方法、相应装置及存储介质 |
CN117313047B (zh) * | 2023-11-28 | 2024-03-15 | 深圳润世华软件和信息技术服务有限公司 | 源代码混淆方法、混淆逆转方法、相应装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109784009A (zh) | 代码混淆方法、***、计算机装置及计算机可读存储介质 | |
CN109829296B (zh) | 基于联盟链的智能合约的沙箱实现方法 | |
US8498982B1 (en) | Noise reduction for content matching analysis results for protectable content | |
US10445072B1 (en) | Execution order block for graphical programming | |
CN114175027A (zh) | 基于经验证的主要资产访问的相关资产访问 | |
EP1605709A3 (en) | Method and system for validating configuration data in a private branch exchange switch | |
Dixit et al. | Towards user-centered and legally relevant smart-contract development: A systematic literature review | |
Khokhlov et al. | Android system security evaluation | |
CN109918394A (zh) | 数据查询方法、***、计算机装置及计算机可读存储介质 | |
CN107527287A (zh) | 一种风险控制方法及装置 | |
CN110457666A (zh) | 一种报表生成方法、***及电子设备和存储介质 | |
JP2020013542A (ja) | 複数のエンティティが協働して行う情報処理の方法及び装置 | |
CN110059456A (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN103679935A (zh) | 终端合成密码 | |
US20150074045A1 (en) | Business Rule Management System | |
CN109816330A (zh) | 规则校验方法、装置、电子设备及计算机可读存储介质 | |
TW202134931A (zh) | 一種自動生成數據採集模組的方法和系統 | |
CN112925914A (zh) | 数据安全分级方法、***、设备及存储介质 | |
US9336195B2 (en) | Method and system for dictionary noise removal | |
CN109471620A (zh) | 一种app的自动生成方法、装置、终端设备及可读存储介质 | |
CN105260223A (zh) | 一种scpi命令定义、解析、执行和测试的方法 | |
CN111260080A (zh) | 基于机器学习的流程优化方法、装置、终端及存储介质 | |
CN108959571A (zh) | Sql语句的运算方法、装置、终端设备及存储介质 | |
GB2432433A (en) | A validatable data structure having both changeable and unchangeable sections | |
Unruh et al. | Leveraging Flawed Tutorials for Seeding {Large-Scale} Web Vulnerability Discovery |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |