一种编译方法及装置与流程

文档序号:11951558阅读:258来源:国知局
一种编译方法及装置与流程

本发明涉及软件开发领域,具体地,涉及一种编译方法及装置。



背景技术:

随着信息处理技术的发展,信息安全越来越受到人们的重视。如何防止重要数据或个人信息被泄露,成为需要解决的问题。

针对安装在终端上的应用程序,相关技术提供的解决方案是:重新开发该应用程序或者对该应用程序进行二次开发,因而开发成本大。



技术实现要素:

本发明的目的是提供一种编译方法及装置,该方法可以增强应用程序的安全性,且节约开发成本。

为了实现上述目的,本发明提供一种编译方法,包括:

提取应用程序中的源文件;

确定所述源文件中被调用的第一函数的安全性低于预设阈值;

将所述第一函数替换为第二函数,所述第二函数的安全性高于所述预设阈值;

对替换后的源文件进行编译。

可选地,所述确定所述源文件中被调用的第一函数的安全性低于预设阈值,包括:

扫描所述源文件包括的预定接口;

确定通过所述预定接口调用的所述第一函数的安全性低于所述预设阈值;

所述对替换后的源文件进行编译,包括:

通过所述预定接口调用所述第二函数。

可选地,所述第一函数和所述第二函数至少符合以下条件之一:

所述第一函数用于以明文的形式对待传输数据进行传输,且所述第二函数用于以加密的形式对所述待传输数据进行传输;

所述第一函数用于将待存储数据存储至第一存储空间,且所述第二函数用于将所述待存储数据存储至第二存储空间,所述第二存储空间与所述第一存储空间不同;

所述第一函数用于按照第一存储路径对所述待存储数据进行存储,且所述第二函数用于按照第二存储路径对所述待存储数据进行存储,所述第二存储路径与所述第一存储路径不同。

可选地,所述确定所述源文件中被调用的第一函数的安全性低于预设阈值,包括:

确定所述源文件中被导入的Java类的类名为第一名称,类名为所述第一名称的Java类的成员函数包括所述第一函数;

所述将所述第一函数替换为第二函数,包括:

将所述第一名称替换为第二名称,类名为所述第二名称的Java类的成员函数包括所述第二函数。

可选地,所述方法还包括:

创建软件开发工具包SDK,所述SDK包括所述第二函数;

所述确定所述源文件中被调用的第一函数的安全性低于预设阈值,包括:

确定所述源文件中被调用的所述第一函数与所述第二函数不同。

本发明还提供一种编译装置,包括:

提取模块,用于提取应用程序中的源文件;

确定模块,用于确定所述源文件中被调用的第一函数的安全性低于预设阈值;

替换模块,用于将所述第一函数替换为第二函数,所述第二函数的安全性高于所述预设阈值;

编译模块,用于对替换后的源文件进行编译。

可选地,所述确定模块包括:

扫描子模块,用于扫描所述源文件包括的预定接口;

确定子模块,用于确定通过所述预定接口调用的所述第一函数的安全性低于所述预设阈值;

所述编译模块用于:

通过所述预定接口调用所述第二函数。

可选地,所述第一函数和所述第二函数至少符合以下条件之一:

所述第一函数用于以明文的形式对待传输数据进行传输,且所述第二函数用于以加密的形式对所述待传输数据进行传输;

所述第一函数用于将待存储数据存储至第一存储空间,且所述第二函数用于将所述待存储数据存储至第二存储空间,所述第二存储空间与所述第一存储空间不同;

所述第一函数用于按照第一存储路径对所述待存储数据进行存储,且所述第二函数用于按照第二存储路径对所述待存储数据进行存储,所述第二存储路径与所述第一存储路径不同。

可选地,所述确定模块用于:

确定所述源文件中被导入的Java类的类名为第一名称,类名为所述第一名称的Java类的成员函数包括所述第一函数;

所述替换模块用于:

将所述第一名称替换为第二名称,类名为所述第二名称的Java类的成员函数包括所述第二函数。

可选地,所述装置还包括:

创建模块,用于创建软件开发工具包SDK,所述SDK包括所述第二函数;

所述确定模块用于:

确定所述源文件中被调用的所述第一函数与所述第二函数不同。

采用上述技术方案,将应用程序中的源文件中被调用的第一函数替换为第二函数,由于第二函数的安全性高于第一函数的安全性,所以编译的过程中调用安全性高的第二函数,提高了应用程序的安全性,无需对应用程序进行重新开发或二次开发,节约了开发成本。

本发明的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在附图中:

图1为本发明实施例提供的一种编译方法的流程图。

图2为本发明实施例提供的一种编译方法的另一流程图。

图3为本发明实施例提供的一种编译方法的另一流程图。

图4为本发明实施例提供的一种编译装置的框图。

具体实施方式

以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。

本发明实施例提供了一种编译方法,请参考图1,图1为本发明实施例提供的一种编译方法的流程图。如图1所示,该方法包括以下步骤:

步骤S11:提取应用程序中的源文件;

步骤S12:确定所述源文件中被调用的第一函数的安全性低于预设阈值;

步骤S13:将所述第一函数替换为第二函数,所述第二函数的安全性高于所述预设阈值;

步骤S14:对替换后的源文件进行编译。

为了检验应用程序是否存在安全隐患,可以对应用程序进行反向编译,获得应用程序中的源文件,然后对源文件进行扫描,判断源文件中被调用的函数的安全性是否低于预设阈值,如果被调用的函数的安全性低于预设阈值,则将该函数替换为安全性高于预设阈值的另一函数,最后对替换后的源文件进行正向编译,相应地,正向编译过程中被调用的函数是安全性较高的函数,因此,提高了应用程序的安全性。其中,预设阈值可以是用户自己设置的,也可以是由开发人员设置在应用程序中的。

举例来讲,假设应用程序中的源文件中被调用的函数包括第一函数,且第一函数的安全性低于预设阈值,而第二函数的安全性高于预设阈值,则将第一函数替换为第二函数,最后对替换后的源文件进行编译,由于编译过程中被调用的函数是第二函数,所以相比于替换之前,在编译过程中被调用的函数是第一函数,使得被调用的函数是第二函数能够提高应用程序的安全性。

采用上述技术方案,将应用程序中的源文件中被调用的第一函数替换为第二函数,由于第二函数的安全性高于第一函数的安全性,所以编译的过程中调用安全性高的第二函数,提高了应用程序的安全性,无需对应用程序进行重新开发或二次开发,节约了开发成本。

可选地,请参考图2,图2为本发明实施例提供的一种编译方法的另一流程图。如图2所示,该方法除包括所述步骤S11和所述步骤S13外,所述步骤S12包括:

步骤S121:扫描所述源文件包括的预定接口;

步骤S1222:确定通过所述预定接口调用的所述第一函数的安全性低于所述预设阈值;

相应地,所述步骤S14包括:

步骤S14a:通过所述预定接口调用所述第二函数。

为了提高检验应用程序是否存在安全隐患的效率,在可以对应用程序进行反向编译,获得应用程序中的源文件之后,可以对源文件包括的预定接口进行扫描,进而判断通过该预定接口调用的函数的安全性是否低于预设阈值,如果通过该预定接口调用的函数的安全性低于预设阈值,则将该函数替换为安全性高于预设阈值的另一函数,最后在对替换后的源文件进行正向编译的过程中,通过该预设接口调用安全性较高的函数,因此,提高了应用程序的安全性。其中,预设接口可以是用户自己设置的,也可以是由开发人员设置在应用程序中的。

举例来讲,以应用程序是APK,预设接口是API为例,假设通过对源文件包括的API进行扫描,进而判断通过该API调用的函数是第一函数,且第一函数的安全性低于预设阈值,而第二函数的安全性高于预设阈值,则将第一函数替换为第二函数,最后对替换后的源文件进行编译,在编译过程中通过该API调用的函数是第二函数,所以相比于替换之前,在编译过程中通过该API调用的函数是第一函数,使得被调用的函数是第二函数能够提高应用程序的安全性。

采用上述技术方案,通过对源文件包括的预定接口进行扫描,提高了检验应用程序是否存在安全隐患的效率。通过同一预定接口调用安全性较高的函数,无需对预定接口进行更改,扩展了本发明实施例提供的编译方法的适用范围,增强了本发明实施例提供的编译方法的兼容性。

可选地,所述第一函数和所述第二函数至少符合以下条件之一:

所述第一函数用于以明文的形式对待存储数据进行存储,且所述第二函数用于以加密的形式对所述待存储数据进行存储;

所述第一函数用于将所述待存储数据存储至第一存储空间,且所述第二函数用于将所述待存储数据存储至第二存储空间,所述第二存储空间与所述第一存储空间不同;

所述第一函数用于按照第一存储路径对所述待存储数据进行存储,且所述第二函数用于按照第二存储路径对所述待存储数据进行存储,所述第二存储路径与所述第一存储路径不同。

本发明实施例中,为了增强应用程序的安全性,可以将针对原本以明文形式进行传输的待传输数据进行加密,进而使得待传输数据以加密的形式进行传输。还可以对原本存储至第一存储空间的待存储数据的存储位置进行更改,进而使得待存储数据存储至第二存储空间。也可以对原本按照第一存储路径存储的待存储数据的存储路径进行更改,进而使得待存储数据按照第二存储路径被存储。在实际应用中,可以将加密、更改存储位置以及更改存储路径中的一者或多者结合使用,以增强应用程序的安全性。

举例来讲,应用程序的功能是:存储数据。为了检验该应用程序是否存在安全隐患,可以对该应用程序进行反向编译,获得该应用程序中的源文件,然后对源文件进行扫描,假设源文件中被调用的函数是第一函数,用于以明文的形式接收待传输数据,并且以第一存储路径存储至第一存储空间。显然,以明文的形式接收待传输数据有可能会被截取,造成待传输数据泄露,并且第一存储路径和第一存储空间可能是默认设置的,容易造成已存储的数据被盗取,因此,可以将第一函数替换为安全性较高的第二函数,最后对替换后的源文件进行正向编译,相应地,正向编译过程中被调用的函数是安全性较高的函数,因此,提高了应用程序的安全性。

采用上述技术方案,可以将本发明实施例提供的编译方法应用于更加广泛的领域,包括:数据存储加密、网络请求加密、屏幕安全控制、文本内容安全控制、防二次打包。因此,扩展了本发明实施例提供的编译方法的适用范围。

可选地,请参考图3,图3为本发明实施例提供的一种编译方法的另一流程图。如图3所示,该方法除包括所述步骤S11和所述步骤S14外,所述步骤S12包括:

步骤S12a:确定所述源文件中被导入的Java类的类名为第一名称,类名为所述第一名称的Java类的成员函数包括所述第一函数;

相应地,所述步骤S13包括:

步骤S13a:将所述第一名称替换为第二名称,类名为所述第二名称的Java类的成员函数包括所述第二函数。

本发明实施例中,为了增强替换函数的便利性,可以创建软件开发工具包(又称SDK),所创建的SDK包括新增的Java类,然后将安全性较高的函数作为新增的Java类的成员函数,直接替换被导入的Java类的名称,以实现替换函数。

举例来讲,名称为第一名称的Java类,其成员函数包括第一函数,假设应用程序中的源文件中被调用的函数包括第一函数,且第一函数的安全性低于预设阈值。在这种情况下,可以创建SDK,所创建的SDK包括新增的Java类:名称为第二名称的Java类,其成员函数包括第二函数,且第二函数的安全性高于预设阈值。则可以直接替换被导入的Java类的名称,即将第一名称替换为第二名称,相应地,被调用的函数也由第一函数替换为第二函数。最后对替换后的源文件进行编译,由于编译过程中被调用的函数是第二函数,所以相比于替换之前,在编译过程中被调用的函数是第一函数,使得被调用的函数是第二函数能够提高应用程序的安全性。

采用上述技术方案,通过对Java类的名称的替换,即可增强应用程序的安全性,方便快捷。

可选地,所述方法还包括:

创建软件开发工具包SDK,所述SDK包括所述第二函数;

所述确定所述源文件中被调用的第一函数的安全性低于预设阈值,包括:

确定所述源文件中被调用的所述第一函数与所述第二函数不同。

本发明实施例中,可以创建SDK,所创建的SDK包括新增的Java类,然后将安全性较高的函数作为新增的Java类的成员函数。在检测应用程序是否存在安全隐患时,可以将源文件中被调用的函数与新增的Java类的成员函数比较,如果被调用的函数与新增的Java类的成员函数,则确定被调用的函数的安全性低于预设阈值,需要将该函数替换为安全性高于预设阈值的另一函数。

举例来讲,假设应用程序中的源文件中被调用的函数包括第一函数,新增的Java类的成员函数为第二函数,将第一函数与第二函数比较,如果第一函数与第二函数不同,则确定第一函数的安全性低于预设阈值,需要将第一函数替换为第二函数。

采用上述技术方案,可以将安全性较高的函数作为新增的Java类的成员函数,通过函数之间的对比,即可确定是否需要进行函数替换,方便快捷。

基于同一发明构思,本发明实施例还提供了一种编译装置。请参考图4,图4为本发明实施例提供的一种编译装置的框图。如图4所示,该装置100包括:

提取模块110,用于提取应用程序中的源文件;

确定模块120,用于确定所述源文件中被调用的第一函数的安全性低于预设阈值;

替换模块130,用于将所述第一函数替换为第二函数,所述第二函数的安全性高于所述预设阈值;

编译模块140,用于对替换后的源文件进行编译。

可选地,所述确定模块120包括:

扫描子模块,用于扫描所述源文件包括的预定接口;

确定子模块,用于确定通过所述预定接口调用的所述第一函数的安全性低于所述预设阈值;

所述编译模块140用于:

通过所述预定接口调用所述第二函数。

可选地,所述第一函数和所述第二函数至少符合以下条件之一:

所述第一函数用于以明文的形式对待传输数据进行传输,且所述第二函数用于以加密的形式对所述待传输数据进行传输;

所述第一函数用于将待存储数据存储至第一存储空间,且所述第二函数用于将所述待存储数据存储至第二存储空间,所述第二存储空间与所述第一存储空间不同;

所述第一函数用于按照第一存储路径对所述待存储数据进行存储,且所述第二函数用于按照第二存储路径对所述待存储数据进行存储,所述第二存储路径与所述第一存储路径不同。

可选地,所述确定模块120用于:

确定所述源文件中被导入的Java类的类名为第一名称,类名为所述第一名称的Java类的成员函数包括所述第一函数;

所述替换模块130用于:

将所述第一名称替换为第二名称,类名为所述第二名称的Java类的成员函数包括所述第二函数。

可选地,所述装置还包括:

创建模块,用于创建软件开发工具包SDK,所述SDK包括所述第二函数;

所述确定模块120用于:

确定所述源文件中被调用的所述第一函数与所述第二函数不同。

关于上述实施例中的系统,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

以上结合附图详细描述了本发明的优选实施方式,但是,本发明并不限于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。

此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1