一种源代码加固方法及装置制造方法及图纸

技术编号:18895174 阅读:27 留言:0更新日期:2018-09-08 11:16
本申请公开了一种源代码加固方法及装置,可以获取待加固的目标源代码;确定所述目标源代码中的函数的加固权重;根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。由于该方法及装置可以依据待加固的源代码中的函数的加固权重,从预设的加固算法集合中自动选取合适的加固算法对所述源代码进行加固,因此,可以提高源代码的加固效率。

A source code reinforcement method and device

The present application discloses a source code reinforcement method and device that can obtain the target source code to be reinforced; determines the reinforcement weight of the function in the target source code; selects at least one target reinforcement algorithm from a preset set of reinforcement algorithms according to the reinforcement weight; and employs the selected target reinforcement algorithm of at least one. The algorithm reinforces the target source code. Since the method and device can automatically select the appropriate reinforcement algorithm from the preset set of reinforcement algorithms to reinforce the source code according to the reinforcement weight of the function in the source code to be reinforced, the reinforcement efficiency of the source code can be improved.

【技术实现步骤摘要】
一种源代码加固方法及装置
本申请涉及计算机
,尤其涉及一种源代码加固方法及装置。
技术介绍
现如今,移动互联网、物联网、车联网等技术高速发展,终端的数量越来越多,终端中安装的应用程序也越来越多,这给人们的工作和生活带来了极大的便利。应用程序运行过程中会产生一些重要的信息,这引起了攻击者的极大兴趣,使得这些重要信息存在被泄露的风险。目前,攻击者常使用反汇编、反编译和动态调试等工具,对应用程序的可执行文件进行逆向分析破解,获得应用程序的执行逻辑,从而非法窃取、非法篡改应用程序运行过程中产生的重要信息。针对上述风险,现有技术常通过对应用程序的源代码进行加固,提高源代码经过编译生成的可执行文件的防逆向分析能力,降低应用程序运行过程中产生的重要信息被泄露的风险。但是,现有的源代码加固方法常常需要人工参与,例如,需要人工分析源代码的特点,并由人工选择合适的加固算法进行加固,导致加固效率低下。
技术实现思路
本申请实施例提供一种源代码加固方法及装置,以解决现有的源代码加固方法效率低的问题。第一方面,本申请实施例提供一种源代码加固方法,所述方法包括:获取待加固的目标源代码;确定所述目标源代码中的函数的加固权重;根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。第二方面,本申请实施例还提供一种源代码加固装置,包括:获取模块,用于获取待加固的目标源代码;加固权重确定模块,用于确定所述目标源代码中的函数的加固权重;加固算法选取模块,用于根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;加固模块,用于采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。第三方面,本申请实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的方法的步骤。第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法的步骤。本申请实施例采用的上述至少一个技术方案,由于可以依据待加固的源代码中的函数的加固权重,从预设的加固算法集合中自动选取合适的加固算法对所述源代码进行加固,因此,可以提高源代码的加固效率。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的一种源代码加固方法的一种具体实现方式的流程示意图;图2为本申请实施例提供的一种源代码加固方法的另一种具体实现方式的流程示意图;图3为本申请实施例提供的一种源代码加固装置的一种具体实现方式的结构示意图;图4为本申请实施例提供的一种源代码加固装置的另一种具体实现方式的结构示意图;图5为本申请实施例提供的一种源代码加固系统的结构示意图;图6为本申请实施例提供的一种电子设备的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。为了解决现有技术中的源代码加固方法加固效率低下的技术问题,本申请实施例提供了一种源代码加固方法及装置,下面分别进行说明。需要说明的是,实施本申请实施例提供的一种源代码加固方法及装置的执行主体,可以是客户端,也可以是客户端对应的服务器,本申请实施例对实施上述方法及装置的具体实施主体不做限定。下面先对本申请实施例提供的一种源代码加固方法进行说明。如图1所示,本申请实施例提供的一种源代码加固方法,可以包括如下步骤:步骤101、获取待加固的目标源代码。待加固的目标源代码可以是需要加固的应用程序的源代码。这些应用程序例如可以是安装在用户终端中的APP(Application)。步骤102、确定所述目标源代码中的函数的加固权重。函数是源代码的基本组成部分,函数也是程序设计人员编写代码时最常用的语法结构。并且,由于函数能够反映源代码所要实现的业务的逻辑,因此,源代码中的函数常常成为攻击者逆向分析的主要对象,进而需要对源代码中的函数进行加固,以提高源代码和/或对源代码编译生成的可执行文件的防逆向分析能力。在实际应用过程中,既可以确定目标源代码中的所有函数的加固权重,也可以仅确定目标源代码中的部分函数的加固权重,本申请实施例对此不做限定。可以理解,虽然源代码中的函数数量众多,但是并非每一函数都是需要着重保护的重要函数,因此需要确定目标源代码中各函数的加固权重,以在后续加固过程中对各函数进行针对性的加固,而不是对所有的函数都采用相同的加固算法进行加固,从而达到兼顾目标源代码的加固效率和加固强度的目的。在一种具体实施方式中,上述步骤102具体可以包括:根据预设指标确定所述目标源代码中的函数的加固权重。其中,预设指标可以包括下列指标中的一种或多种:函数在所述目标源代码中被调用的次数、函数本身的复杂度和函数在所述目标源代码所要实现的业务逻辑中的重要程度,等等。目标源代码中的某一函数的加固权重可以通过下式表示:其中,η表示函数的加固权重,ai表示第i个预设指标,i=1,2,…,n,n表示预设指标的数量,ωai表示预设指标ai所反映的加固权重。如果一个函数在目标源代码中被多次调用,说明该函数是一个较为重要的公共函数,可以设置相对较高的加固权重,如果一个函数被调用的次数为零,说明该函数是非公共函数,可以设置相对较低的加固权重。其中,函数被调用的次数可以通过对源代码进行统计获得。如果一个函数本身较为复杂,则可以设置相对较高的加固权重,如果一个函数本身较为简单,则可以设置相对较低的加固权重。其中,一个函数本身是否复杂,通常可以通过下述两种方式来确定:一是,根据函数的控制流的复杂度确定函数的复杂度,例如,如果一个函数的嵌套层次较多则可以确定这个函数的控制流较为复杂;二是,根据函数的数据流的复杂度确定函数的复杂度,例如,如果一个函数中的变量被多次引用,且该变量的值被修改后,会引起该函数中的其他变量的值的改变,说明该函数的数据流较为复杂。此外,如果一个函数在目标源代码所要实现的业务逻辑中相对来说较为重要,则可以对该函数设置相对较高的加固权重。例如,通常情况下,目标源代码中用于实现登录、用户身份认证或许可证(licence)鉴别的函数,以及重要的算法函数是相对比较重要的函数,因此可以设置相对较高的加固权重。步骤103、根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法。预设的加固算法集合中可以包括下列加固算法中的一种或多种:控制流扁平化、不透明谓词和冗余代码插入,等等。其中,控制流扁平化,主要是将函数中的for语句、if-else语句、while语句等这些控制逻辑清晰的语句转换为相对模糊的switch-case语句,以增加攻击者重构函数的控制流的难度,从而提高源代码或可执行文件的防逆向分析能力。不透明谓词,主要是在将源代码中的分支跳本文档来自技高网...

【技术保护点】
1.一种源代码加固方法,其特征在于,所述方法包括:获取待加固的目标源代码;确定所述目标源代码中的函数的加固权重;根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。

【技术特征摘要】
1.一种源代码加固方法,其特征在于,所述方法包括:获取待加固的目标源代码;确定所述目标源代码中的函数的加固权重;根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。2.根据权利要求1所述的方法,其特征在于,所述确定所述目标源代码中的函数的加固权重,包括:根据预设指标确定所述目标源代码中的函数的加固权重;其中,所述预设指标包括下列指标中的一种或多种:函数在所述目标源代码中被调用的次数、函数本身的复杂度和函数在所述目标源代码所要实现的业务逻辑中的重要程度。3.根据权利要求1所述的方法,其特征在于,所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法,包括:根据所述目标源代码中各函数的加固权重的大小,从预设的加固算法集合中选取至少一种目标加固算法。4.根据权利要求1所述的方法,其特征在于,在所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法之前,所述方法还包括:确定所述加固算法集合中的加固算法的加固效率;则,所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法,包括:根据所述加固权重和所述加固效率,从所述预设的加固算法集合中选取至少一种目标加固算法。5.根据权利要求1-4任一项所述的方法,其特征在于,所述加固算法集合包括下列加固算法中的一种或多种:控制流扁平化、不透明谓词和冗余代码插入。6.一种源代码加固装置,其特征在于,包括:获取模块,用于获取待加固的目标源代码;加固权重确定模块,用于确定所述目标源代码中的函数的加固权重;加固算法选取模块,用于根...

【专利技术属性】
技术研发人员:阚志刚陈彪王文洋李世杰尉爽生卢佐华
申请(专利权)人:北京梆梆安全科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1