CN110659459B - 一种软件代码处理方法、装置、电子设备及存储介质 - Google Patents
一种软件代码处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN110659459B CN110659459B CN201910923302.9A CN201910923302A CN110659459B CN 110659459 B CN110659459 B CN 110659459B CN 201910923302 A CN201910923302 A CN 201910923302A CN 110659459 B CN110659459 B CN 110659459B
- Authority
- CN
- China
- Prior art keywords
- software code
- obfuscated
- software
- obfuscation
- code
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 15
- 238000003860 storage Methods 0.000 title claims abstract description 15
- 238000012545 processing Methods 0.000 claims abstract description 77
- 238000000034 method Methods 0.000 claims abstract description 55
- 230000006870 function Effects 0.000 claims description 21
- 238000004891 communication Methods 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005336 cracking Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 241001391944 Commicarpus scandens Species 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明实施例提供了一种软件代码处理方法、装置、电子设备及计算机可读存储介质,方法包括:获取待处理的软件代码,对软件代码进行编译,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理,识别初步混淆后的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。在对软件代码进行编译后,利用预设的混淆配置策略对编译后的软件代码进行初步混淆处理,再对初步混淆后的软件代码中的指定字段进行混淆处理,通过初步混淆和指定字段混淆的两次混淆过程,增加了混淆的复杂度,增加了破解软件代码的难度,从而提高了软件代码的安全性。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种软件代码处理方法、装置、电子设备及存储介质。
背景技术
随着软件相关技术的飞速发展,人们的生活和工作对应用程序的依赖度也随之提高,相应的,针对应用程序的破解行为也越来越多,一旦应用程序被破解,软件代码即泄露,尤其是支付类、金融类软件代码等安全更是容易受到威胁。攻击者使用jad、dex2jar、jdec、Dedexer等反编译工具就可以反编译得到软件代码,为了给攻击者反编译得到软件代码制造障碍,可以采用混淆工具,对编译后的软件代码进行混淆处理,得到混淆代码,由于混淆代码并不是原软件代码编译后的真实代码,因此,保证了在反编译时,无法直接反编译出原软件代码,增加了破解软件代码的难度。
目前,主要采用ProGuard插件,作为软件代码混淆工具,经过混淆编译后的软件代码中没用的类、字段、方法、属性等方式,对编译后的软件代码进行混淆处理。然而,ProGuard的混淆策略较为固定,攻击者易掌握,导致混淆效果较差,软件代码安全性较低、易被破解。
发明内容
本发明实施例的目的在于提供一种软件代码处理方法、装置、电子设备及存储介质,以提高软件代码的安全性。具体技术方案如下:
第一方面,本发明实施例提供了一种软件代码处理方法,所述方法包括:
获取待处理的软件代码;
对所述软件代码进行编译;
利用预设的混淆配置策略,对编译后的所述软件代码进行初步混淆处理;
识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码。
可选的,所述利用预设的混淆配置策略,对编译后的所述软件代码进行初步混淆处理,包括:
获取集成有非开源软件的规约文件包,所述非开源软件包括可配置的混淆配置策略;
从所述规约文件包中,读取已完成配置的所述混淆配置策略;
利用所述混淆配置策略,对编译后的所述软件代码进行初步混淆处理。
可选的,所述指定字段包括如下四种中的至少一种:常量字符串、函数的名称、各类中局部变量的名称、指定类型的指令;
所述识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码,包括如下步骤中的至少一个步骤:
识别初步混淆后的所述软件代码中具有预设字符串特征的常量字符串,并对所述常量字符串进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所述软件代码中函数的名称和/或各类中局部变量的名称,并对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所述软件代码中具有指定类型的指令,并删除所述指令,得到与所述软件代码对应的混淆代码。
可选的,所述对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码,包括:
针对所述识别出的名称,增加对应的描述信息及关键字;
根据所述名称及所述描述信息,利用预设的信息摘要算法,生成替换字符串;
合并所述关键字和所述替换字符串,得到所述识别出的名称对应的替换名称;
利用所述替换名称替换所述识别出的名称,得到与所述软件代码对应的混淆代码。
可选的,所述指定字段包括:具有水印标识的字符串;
所述识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码,包括:
识别初步混淆后的所述软件代码中具有水印标识的字符串;
利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
可选的,所述识别初步混淆后的所述软件代码中具有水印标识的字符串,包括:
判断初步混淆后的所述软件代码的扩展类中,方法代码的名称参数中是否包含具有水印标识的字符串;
所述利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码,包括:
若所述方法代码的名称参数中包含具有水印标识的字符串,则利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
第二方面,本发明实施例提供了一种软件代码处理装置,所述装置包括:
获取模块,用于获取待处理的软件代码;
编译模块,用于对所述软件代码进行编译;
初步混淆模块,用于利用预设的混淆配置策略,对编译后的所述软件代码进行初步混淆处理;
二次混淆模块,用于识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码。
可选的,所述初步混淆模块,具体用于:
获取集成有非开源软件的规约文件包,所述非开源软件包括可配置的混淆配置策略;
从所述规约文件包中,读取已完成配置的所述混淆配置策略;
利用所述混淆配置策略,对编译后的所述软件代码进行初步混淆处理。
可选的,所述指定字段包括如下四种中的至少一种:常量字符串、函数的名称、各类中局部变量的名称、指定类型的指令;
所述二次混淆模块,具体用于实现如下步骤中的至少一个步骤:
识别初步混淆后的所述软件代码中具有预设字符串特征的常量字符串,并对所述常量字符串进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所述软件代码中函数的名称和/或各类中局部变量的名称,并对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所述软件代码中具有指定类型的指令,并删除所述指令,得到与所述软件代码对应的混淆代码。
可选的,所述二次混淆模块在用于所述对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码时,具体用于:
针对所述识别出的名称,增加对应的描述信息及关键字;
根据所述名称及所述描述信息,利用预设的信息摘要算法,生成替换字符串;
合并所述关键字和所述替换字符串,得到所述识别出的名称对应的替换名称;
利用所述替换名称替换所述识别出的名称,得到与所述软件代码对应的混淆代码。
可选的,所述指定字段包括:具有水印标识的字符串;
所述二次混淆模块,具体用于:
识别初步混淆后的所述软件代码中具有水印标识的字符串;
利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
可选的,所述二次混淆模块在用于所述识别初步混淆后的所述软件代码中具有水印标识的字符串时,具体用于:
判断初步混淆后的所述软件代码的扩展类中,方法代码的名称参数中是否包含具有水印标识的字符串;
所述二次混淆模块在用于所述利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码时,具体用于:
若所述方法代码的名称参数中包含具有水印标识的字符串,则利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
第三方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序时,实现本发明实施例第一方面所提供的方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行本发明实施例第一方面所提供的方法。
本发明实施例所提供的方案中,获取待处理的软件代码,对软件代码进行编译,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理,识别初步混淆的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。在对软件代码进行编译后,首先利用预设的混淆配置策略对编译后的软件代码进行初步混淆处理,再对初步混淆后的软件代码中的指定字段进行混淆处理,得到混淆代码,通过初步混淆和指定字段混淆的两次混淆过程,增加了混淆的复杂度,从而增加了破解软件代码的难度,因此,提高了软件代码的安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的软件代码处理方法的流程示意图;
图2为本发明实施例的配置文件的示意图;
图3为本发明实施例的软件代码处理装置的结构示意图;
图4为本发明实施例的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了提高软件代码的安全性,本发明实施例提供了一种软件代码处理方法、装置、电子设备及计算机可读存储介质。下面,首先对本发明实施例所提供的软件代码处理方法进行介绍。
本发明实施例所提供的软件代码处理方法可以应用于运行软件代码的个人计算机、手机、智能相机、便携式计算机等设备,在此不做具体限定,为了描述方便,以下统称电子设备。
如图1所示,本发明实施例提供的一种软件代码处理方法,可以包括如下步骤:
S101,获取待处理的软件代码。
软件代码是指利用指定的编程语言编写的源代码,例如Java源代码、C++源代码等,以Java源代码为例,软件代码即为一个.java文件,或一个大型应用的.java文件集合。软件代码一般存储在电子设备本地的存储空间里,以便电子设备的处理器对其进行调用,实现某种应用程序的功能,电子设备在有对软件代码进行混淆处理的需求时,可以直接从本地的存储空间读取出软件代码。
当然,电子设备也可以不是要执行软件代码的设备,开发者可以在开发好软件代码后,将待处理的软件代码统一地发送至对软件代码进行混淆处理的电子设备。
S102,对软件代码进行编译。
在获取到待处理的软件代码后,首先需要对软件代码进行编译,可以采用现有的编译工具对软件代码进行编译,得到编译后的软件代码。具体的编译方式及编译过程为现有技术,在本发明实施例中不用重点关注,因此,这里不再赘述。
S103,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理。
在对软件代码进行编译后,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理,预设的混淆配置策略可以为现有的ProGuard工具所配置的混淆配置策略,经过初步混淆处理,可以得到初步混淆的软件代码。ProGuard工具是通过移除没用的代码、重命名相关类和方法等方式对代码进行优化、压缩、混淆的工具。当然,预设的混淆配置策略不仅限于ProGuard工具所配置的混淆配置策略,还可以是采用其他现有技术中的代码混淆工具配置的混淆配置策略。
可选的,S103具体可以为:
获取集成有非开源软件的规约文件包,其中,非开源软件包括可配置的混淆配置策略;从规约文件包中,读取已完成配置的混淆配置策略;利用混淆配置策略,对编译后的软件代码进行初步混淆处理。
为了能够更好地支持Java环境下,不同的软件框架(例如SpringBoot、第三方框架)的项目,可以通过可配置的混淆工具对编译后的软件代码进行初步混淆处理,具体的,混淆工具可以是集成有非开源软件的规约文件包,例如集成有allatori的jar包,可以手动地配置非开源软件的配置文件,例如配置allatori的配置文件allatori.xml,配置文件中对具体需要混淆哪些数据进行了配置。如图2所示,为配置文件allatori.xml的源代码示意图,<keep-names>是指该配置文件中配置的混淆配置策略限定了对编译后的软件代码进行初步混淆处理时,哪些field(范围)、class(类)和method(方法)不需要被重命名,而其他代码可以按照通用的混淆方式进行混淆,在配置文件中设置了field、class和method的匹配规则,一旦某一个field、class或者method能够和对应的匹配规则匹配上,则说明在进行初步混淆处理时,该field、class或者method不需要被重命名。
例如图2所示的配置文件中,*instanceof java.io.Serializable是指匹配所有可序列化的字段的匹配规则,也就是说,如果有一个class,能够匹配所有可序列化的字段,则该class不需要被重命名;再例如,protected+是指具有保护访问权限或更改访问权限的匹配规则,如果有一个field或者method,具有保护访问权限或更改访问权限,则该field或者method不需要被重命名。
电子设备可以从规约文件包中,读取已完成配置的混淆配置策略,基于已配置的混淆配置策略,对编译后的软件代码进行初步混淆处理,得到初步混淆的软件代码,由于混淆配置策略是可配置的,不具有固定形式,因此,能够更好地支持不同的软件框架的项目,保证不同软件框架下的初步混淆程度可以更为全面。
S104,识别初步混淆后的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。
对软件代码进行初步混淆处理后,可以对初步混淆后的软件代码中的指定字段进行识别,例如对函数名、变量名、常量字符串、无用的指令等进行识别,这些指定字段都是可以进行混淆处理的字段,混淆处理后,攻击者无法直接反编译出原软件代码,而又不会影响软件代码的正常执行。
可选的,指定字段可以包括如下四种中的至少一种:常量字符串、函数的名称、各类中局部变量的名称、指定类型的指令。
S104具体可以为如下三个步骤中的至少一个步骤:
步骤一:识别初步混淆后的软件代码中具有预设字符串特征的常量字符串,并对常量字符串进行替换处理,得到与软件代码对应的混淆代码。
步骤二:识别初步混淆后的软件代码中函数的名称和/或各类中局部变量的名称,并对识别出的名称进行替换处理,得到与软件代码对应的混淆代码。
步骤三:识别初步混淆后的软件代码中具有指定类型的指令,并删除指令,得到与软件代码对应的混淆代码。
在对初步混淆后的软件代码中的指定字段进行混淆时,主要可以是对常量字符串、函数的名称、各类中局部变量的名称、指定类型的指令中的至少一种指定字段进行混淆处理。具体的,可以是对初步混淆后的软件代码,替换常量字符串、替换函数的名称、替换各类中局部变量的名称、删除指定的无用类型的指令等方式实现对指定字段的混淆处理。
以Java源代码为例,具体的混淆指定字段的方式可以是:继承Java的ClassVisitor和MethodVisitor类;在ClassVisitor类的子类中处理成员变量,对成员变量的名称进行替换处理;在ClassVisitor类的子类中处理方法、构造函数及静态与示例代码块等函数,对以上函数的名称进行替换处理;在MethodVisitor类的子类中处理局部变量,对局部变量的名称进行替换处理,并处理使用成员变量的指令、操作指令等无用指令,删除使用成员变量的指令、操作指令等无用指令。
可选的,对识别出的名称进行替换处理,得到与软件代码对应的混淆代码的步骤,具体可以为:
针对识别出的名称,增加对应的描述信息及关键字;根据名称及描述信息,利用预设的信息摘要算法,生成替换字符串;合并关键字和替换字符串,得到识别出的名称对应的替换名称;利用替换名称替换识别出的名称,得到与软件代码对应的混淆代码。
在进行名称替换的混淆处理时,可以采用关键字+名称+描述信息作为参数,针对识别出的名称,增加对应的描述信息和关键字,例如,针对某一函数名称,增加该函数实现功能的描述和关键字标识,根据名称及描述信息,利用MD5(Message Digest Algorithm5,第五版消息摘要算法)等信息摘要算法,即可生成一个随机的替换字符串,将关键字作为前缀和替换字符串进行合并,组装成识别出的名称对应的替换名称,直接利用替换名称去替换原本识别出的名称,即可得到与软件代码对应的混淆代码。
可选的,指定字段还可以包括:具有水印标识的字符串。
S104具体还可以为:
识别初步混淆后的软件代码中具有水印标识的字符串;利用预先定义的字符串,替换具有水印标识的字符串,得到与软件代码对应的混淆代码。
在利用预设的混淆配置策略进行初步混淆之后,一般会在初步混淆后的软件代码中留下水印标识,可以理解为一个特定的字符串或者代码,为了不能够让攻击者轻易地或者进行了何种方式的初步混淆,可以识别出初步混淆后的软件代码中具有水印标识的字符串,利用预先定义的字符串去替换具有水印标识的字符串,预先定义的字符串不具有水印标识,因此在替换之后,攻击者并不会识别出初步混淆过程具体进行了何种混淆,进一步增加了软件代码被破解的难度。
可选的,识别初步混淆后的软件代码中具有水印标识的字符串的步骤,具体可以为:判断初步混淆后的软件代码的扩展类中,方法代码的名称参数中是否包含具有水印标识的字符串。
利用预先定义的字符串,替换具有水印标识的字符串,得到与软件代码对应的混淆代码的步骤,具体可以为:若方法代码的名称参数中包含具有水印标识的字符串,则利用预先定义的字符串,替换具有水印标识的字符串,得到与软件代码对应的混淆代码。
在进行初步混淆后,一般会在初步混淆后的软件代码中留下galaxy-obfusion水印项目,通过继承Java的ClassVisitor和MethodVisitor类,在扩展类中,修改visitField等方法代码,判断方法代码的名称参数中是否包含具有水印标识的字符串,从而可以确定出水印入口,如果包含具有水印标识的字符串,则利用预先定义的字符串对其进行替换,这样攻击者就无法知道水印入口,进而无法获知对软件代码进行了何种方式的初步混淆。
应用本发明实施例,获取待处理的软件代码,对软件代码进行编译,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理,识别初步混淆后的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。在对软件代码进行编译后,首先利用预设的混淆配置策略对编译后的软件代码进行初步混淆处理,再对初步混淆后的软件代码中的指定字段进行混淆处理,得到混淆代码,通过初步混淆和指定字段混淆的两次混淆过程,增加了混淆的复杂度,从而增加了破解软件代码的难度,因此,提高了软件代码的安全性。
相应于上述方法实施例,本发明实施例提供了一种软件代码处理装置,如图3所示,该装置可以包括:
获取模块310,用于获取待处理的软件代码;
编译模块320,用于对软件代码进行编译;
初步混淆模块330,用于利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理;
二次混淆模块340,用于识别初步混淆后的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。
可选的,初步混淆模块330,具体可以用于:
获取集成有非开源软件的规约文件包,其中,非开源软件包括可配置的混淆配置策略;
从规约文件包中,读取已完成配置的混淆配置策略;
利用混淆配置策略,对编译后的软件代码进行初步混淆处理。
可选的,指定字段可以包括如下四种中的至少一种:常量字符串、函数的名称、各类中局部变量的名称、指定类型的指令;
二次混淆模块340,具体可以用于实现如下步骤中的至少一个步骤:
识别初步混淆后的软件代码中具有预设字符串特征的常量字符串,并对常量字符串进行替换处理,得到与软件代码对应的混淆代码;
识别初步混淆后的软件代码中函数的名称和/或各类中局部变量的名称,并对识别出的名称进行替换处理,得到与软件代码对应的混淆代码;
识别初步混淆后的软件代码中具有指定类型的指令,并删除该指令,得到与软件代码对应的混淆代码。
可选的,二次混淆模块340在用于对识别出的名称进行替换处理,得到与软件代码对应的混淆代码时,具体可以用于:
针对识别出的名称,增加对应的描述信息及关键字;
根据名称及描述信息,利用预设的信息摘要算法,生成替换字符串;
合并关键字和替换字符串,得到识别出的名称对应的替换名称;
利用替换名称替换识别出的名称,得到与软件代码对应的混淆代码。
可选的,指定字段可以包括:具有水印标识的字符串;
二次混淆模块340,具体可以用于:
识别初步混淆后的软件代码中具有水印标识的字符串;
利用预先定义的字符串,替换具有水印标识的字符串,得到与软件代码对应的混淆代码。
可选的,二次混淆模块340在用于识别初步混淆后的软件代码中具有水印标识的字符串时,具体可以用于:
判断初步混淆后的软件代码的扩展类中,方法代码的名称参数中是否包含具有水印标识的字符串;
二次混淆模块340在用于利用预先定义的字符串,替换具有水印标识的字符串,得到与软件代码对应的混淆代码时,具体可以用于:
若方法代码的名称参数中包含具有水印标识的字符串,则利用预先定义的字符串,替换具有水印标识的字符串,得到与软件代码对应的混淆代码。
应用本发明实施例,获取待处理的软件代码,对软件代码进行编译,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理,识别初步混淆后的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。在对软件代码进行编译后,首先利用预设的混淆配置策略对编译后的软件代码进行初步混淆处理,再对初步混淆后的软件代码中的指定字段进行混淆处理,得到混淆代码,通过初步混淆和指定字段混淆的两次混淆过程,增加了混淆的复杂度,从而增加了破解软件代码的难度,因此,提高了软件代码的安全性。
本发明实施例提供了一种电子设备,如图4所示,包括处理器401、通信接口402、存储器403和通信总线404,其中,处理器401、通信接口402、存储器403通过通信总线404完成相互间的通信;
存储器403,用于存放计算机程序;
处理器401,用于执行存储器403上所存放的计算机程序时,实现上述任一实施例所述的软件代码处理方法。
可见,本发明实施例所提供的方案中,电子设备可以获取待处理的软件代码,对软件代码进行编译,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理,识别初步混淆后的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。在对软件代码进行编译后,首先利用预设的混淆配置策略对编译后的软件代码进行初步混淆处理,再对初步混淆后的软件代码中的指定字段进行混淆处理,得到混淆代码,通过初步混淆和指定字段混淆的两次混淆过程,增加了混淆的复杂度,从而增加了破解软件代码的难度,因此,提高了软件代码的安全性。
上述电子设备提到的通信总线可以是PCI(Peripheral ComponentInterconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括RAM(Random Access Memory,随机存取存储器),也可以包括NVM(Non-Volatile Memory,非易失性存储器),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括CPU(Central Processing Unit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP(Digital Signal Processing,数字信号处理器)、ASIC(Application Specific Integrated Circuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明实施例还提供了一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的软件代码处理方法。
可见,本发明实施例所提供的方案中,计算机程序被处理器执行时,可以获取待处理的软件代码,对软件代码进行编译,利用预设的混淆配置策略,对编译后的软件代码进行初步混淆处理,识别初步混淆后的软件代码中的指定字段,并对指定字段进行混淆处理,得到与软件代码对应的混淆代码。在对软件代码进行编译后,首先利用预设的混淆配置策略对编译后的软件代码进行初步混淆处理,再对初步混淆后的软件代码中的指定字段进行混淆处理,得到混淆代码,通过初步混淆和指定字段混淆的两次混淆过程,增加了混淆的复杂度,从而增加了破解软件代码的难度,因此,提高了软件代码的安全性。
对于上述装置、电子设备及计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备及计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (12)
1.一种软件代码处理方法,其特征在于,所述方法包括:
获取待处理的软件代码;
对所述软件代码进行编译;
利用预设的混淆配置策略,对编译后的所述软件代码进行初步混淆处理;
识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码;所述指定字段包括:具有水印标识的字符串;
所述识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码,包括:
识别初步混淆后的所述软件代码中具有水印标识的字符串;
利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
2.根据权利要求1所述的方法,其特征在于,所述利用预设的混淆配置策略,对编译后的所述软件代码进行初步混淆处理,包括:
获取集成有非开源软件的规约文件包,所述非开源软件包括可配置的混淆配置策略;
从所述规约文件包中,读取已完成配置的所述混淆配置策略;
利用所述混淆配置策略,对编译后的所述软件代码进行初步混淆处理。
3.根据权利要求1所述的方法,其特征在于,所述指定字段还包括如下四种中的至少一种:常量字符串、函数的名称、各类中局部变量的名称、指定类型的指令;
所述识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码,包括如下步骤中的至少一个步骤:
识别初步混淆后的所述软件代码中具有预设字符串特征的常量字符串,并对所述常量字符串进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所述软件代码中函数的名称和/或各类中局部变量的名称,并对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所诉软件代码中具有指定类型的指令,并删除所述指令,得到与所述软件代码对应的混淆代码。
4.根据权利要求3所述的方法,其特征在于,所述对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码,包括:
针对所述识别出的名称,增加对应的描述信息及关键字;
根据所述名称及所述描述信息,利用预设的信息摘要算法,生成替换字符串;
合并所述关键字和所述替换字符串,得到所述识别出的名称对应的替换名称;
利用所述替换名称替换所述识别出的名称,得到与所述软件代码对应的混淆代码。
5.根据权利要求1所述的方法,其特征在于,所述识别初步混淆后的所述软件代码中具有水印标识的字符串,包括:
判断初步混淆后的所述软件代码的扩展类中,方法代码的名称参数中是否包含具有水印标识的字符串;
所述利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码,包括:
若所述方法代码的名称参数中包含具有水印标识的字符串,则利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
6.一种软件代码处理装置,其特征在于,所述装置包括:
获取模块,用于获取待处理的软件代码;
编译模块,用于对所述软件代码进行编译;
初步混淆模块,用于利用预设的混淆配置策略,对编译后的所述软件代码进行初步混淆处理;
二次混淆模块,用于识别初步混淆后的所述软件代码中的指定字段,并对所述指定字段进行混淆处理,得到与所述软件代码对应的混淆代码,所述指定字段包括:具有水印标识的字符串;
所述二次混淆模块,具体用于:识别初步混淆后的所述软件代码中具有水印标识的字符串;利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
7.根据权利要求6所述的装置,其特征在于,所述初步混淆模块,具体用于:
获取集成有非开源软件的规约文件包,所述非开源软件包括可配置的混淆配置策略;
从所述规约文件包中,读取已完成配置的所述混淆配置策略;
利用所述混淆配置策略,对编译后的所述软件代码进行初步混淆处理。
8.根据权利要求6所述的装置,其特征在于,所述指定字段还包括如下四种中的至少一种:常量字符串、函数的名称、各类中局部变量的名称、指定类型的指令;
所述二次混淆模块,具体用于实现如下步骤中的至少一个步骤:
识别初步混淆后的所述软件代码中具有预设字符串特征的常量字符串,并对所述常量字符串进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所述软件代码中函数的名称和/或各类中局部变量的名称,并对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码;
识别初步混淆后的所述软件代码中具有指定类型的指令,并删除所述指令,得到与所述软件代码对应的混淆代码。
9.根据权利要求8所述的装置,其特征在于,所述二次混淆模块在用于所述对识别出的名称进行替换处理,得到与所述软件代码对应的混淆代码时,具体用于:
针对所述识别出的名称,增加对应的描述信息及关键字;
根据所述名称及所述描述信息,利用预设的信息摘要算法,生成替换字符串;
合并所述关键字和所述替换字符串,得到所述识别出的名称对应的替换名称;
利用所述替换名称替换所述识别出的名称,得到与所述软件代码对应的混淆代码。
10.根据权利要求6所述的装置,其特征在于,所述二次混淆模块在用于所述识别初步混淆后的所述软件代码中具有水印标识的字符串时,具体用于:
判断初步混淆后的所述软件代码的扩展类中,方法代码的名称参数中是否包含具有水印标识的字符串;
所述二次混淆模块在用于所述利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码时,具体用于:
若所述方法代码的名称参数中包含具有水印标识的字符串,则利用预先定义的字符串,替换所述具有水印标识的字符串,得到与所述软件代码对应的混淆代码。
11.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的计算机程序时,实现权利要求1-5任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行权利要求1-5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910923302.9A CN110659459B (zh) | 2019-09-27 | 2019-09-27 | 一种软件代码处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910923302.9A CN110659459B (zh) | 2019-09-27 | 2019-09-27 | 一种软件代码处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110659459A CN110659459A (zh) | 2020-01-07 |
CN110659459B true CN110659459B (zh) | 2021-07-20 |
Family
ID=69039437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910923302.9A Active CN110659459B (zh) | 2019-09-27 | 2019-09-27 | 一种软件代码处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110659459B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113688359A (zh) * | 2020-05-18 | 2021-11-23 | 北京京东尚科信息技术有限公司 | 针对程序代码的处理方法、装置、计算设备及介质 |
CN115225294A (zh) * | 2021-04-16 | 2022-10-21 | 深信服科技股份有限公司 | 一种混淆脚本收集方法、装置、设备及介质 |
CN113296783A (zh) * | 2021-05-14 | 2021-08-24 | 北京奇艺世纪科技有限公司 | 一种代码的处理方法、装置、电子设备、存储介质及产品 |
CN113609517B (zh) * | 2021-10-11 | 2022-02-08 | 深圳市沃易科技有限公司 | 基于物联网的用于计算机软件开发的数据加密方法 |
CN115795418B (zh) * | 2023-01-17 | 2023-04-14 | 泉州艾奇科技有限公司 | 水印嵌入方法、装置、计算机、存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040099939A (ko) * | 2003-05-20 | 2004-12-02 | 삼성전자주식회사 | 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치 |
CN103377326A (zh) * | 2012-04-13 | 2013-10-30 | 腾讯科技(北京)有限公司 | 一种动态网页程序代码的混淆加密方法及装置 |
CN104504313A (zh) * | 2014-12-31 | 2015-04-08 | 北京畅游天下网络技术有限公司 | 一种对代码进行保密处理的方法及装置 |
CN106682460A (zh) * | 2016-11-25 | 2017-05-17 | 西北大学 | 一种基于两次变换的代码混淆方法 |
CN109614771A (zh) * | 2018-10-31 | 2019-04-12 | 同盾控股有限公司 | 一种基于Java代码的混淆方法和装置 |
CN110135129A (zh) * | 2019-04-12 | 2019-08-16 | 平安科技(深圳)有限公司 | 代码段保护方法、装置、计算机设备和存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110210190A (zh) * | 2019-05-30 | 2019-09-06 | 中国科学院信息工程研究所 | 一种基于二次汇编的代码混淆方法 |
-
2019
- 2019-09-27 CN CN201910923302.9A patent/CN110659459B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040099939A (ko) * | 2003-05-20 | 2004-12-02 | 삼성전자주식회사 | 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치 |
CN103377326A (zh) * | 2012-04-13 | 2013-10-30 | 腾讯科技(北京)有限公司 | 一种动态网页程序代码的混淆加密方法及装置 |
CN104504313A (zh) * | 2014-12-31 | 2015-04-08 | 北京畅游天下网络技术有限公司 | 一种对代码进行保密处理的方法及装置 |
CN106682460A (zh) * | 2016-11-25 | 2017-05-17 | 西北大学 | 一种基于两次变换的代码混淆方法 |
CN109614771A (zh) * | 2018-10-31 | 2019-04-12 | 同盾控股有限公司 | 一种基于Java代码的混淆方法和装置 |
CN110135129A (zh) * | 2019-04-12 | 2019-08-16 | 平安科技(深圳)有限公司 | 代码段保护方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110659459A (zh) | 2020-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110659459B (zh) | 一种软件代码处理方法、装置、电子设备及存储介质 | |
Crussell et al. | Andarwin: Scalable detection of android application clones based on semantics | |
CN108763951B (zh) | 一种数据的保护方法及装置 | |
JP2013536522A (ja) | プログラミングルール違反に対するソースコードマイニング | |
JP2022009556A (ja) | ソフトウェアコードをセキュアにするための方法 | |
CN111190603B (zh) | 一种隐私数据检测方法、装置和计算机可读存储介质 | |
CN110084064B (zh) | 基于终端的大数据分析处理方法及*** | |
CN112565026B (zh) | 测试帧的生成方法、装置及设备 | |
CN111967017A (zh) | 生成依赖关系的方法、装置、终端设备及存储介质 | |
CN113946825B (zh) | 一种内存马处理方法及*** | |
Jing et al. | Checking intent-based communication in android with intent space analysis | |
CN108733990B (zh) | 一种基于区块链的文件保护方法及终端设备 | |
SG182015A1 (en) | Method and system for protecting intellectual property in software | |
CN105550573A (zh) | 拦截捆绑软件的方法和装置 | |
You et al. | Deoptfuscator: Defeating Advanced Control-Flow Obfuscation Using Android Runtime (ART) | |
CN109299610B (zh) | 安卓***中不安全敏感输入验证识别方法 | |
JP2005234661A (ja) | アクセスポリシ生成システム、アクセスポリシ生成方法およびアクセスポリシ生成用プログラム | |
CN108647516B (zh) | 一种防御漏洞非法提权方法及装置 | |
CN114090965B (zh) | java代码混淆方法、***、计算机设备及存储介质 | |
CN111475168A (zh) | 一种代码编译方法及装置 | |
CN108509773B (zh) | 一种源代码加固方法及装置 | |
CN108416194B (zh) | 符号混淆方法及装置 | |
CN108804083B (zh) | 一种代码操作方法及装置 | |
CN114637675A (zh) | 软件评估方法及装置、计算机可读存储介质 | |
US10574632B2 (en) | System and method for secure sharing of a source code |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |