可执行文件的加固方法和装置与流程

文档序号:12365190阅读:208来源:国知局
可执行文件的加固方法和装置与流程

本发明涉及信息安全领域,特别是涉及一种可执行文件的加固方法和装置。



背景技术:

随着网络技术的发展,提供各种服务的应用程序应运而生。将应用程序安装在移动终端上,使用应用程序即可享受相应的服务,例如打车软件,将打车软件安装在移动终端上,启动运行打车软件,输入出发点和目的地生成叫车信息,发送该叫车信息,接收到该叫车信息的的士司机即可响应,进行服务。

然而,应用程序安装在移动终端上,容易被反编译工具直接读取应用程序安装包里保存在libs目录下的可执行文件(如so文件),将其修改,重新打包,构建出大量的山寨应用,在修改时会植入恶意指令、广告插件等,导致用户的数据被窃取,用户数据的安全性低。



技术实现要素:

基于此,有必要针对传统的应用程序易被修改植入恶意指令而导致用户数据被窃取的问题,提供一种可执行文件的加固方法,能防止应用程序被植入恶意指令,防止用户数据被窃取,提高用户数据的安全性。

此外,还有必要提供一种可执行文件的加固装置,能防止应用程序被植入恶意指令,防止用户数据被窃取,提高用户数据的安全性。

一种可执行文件的加固方法,包括以下步骤:

获取应用程序的可执行文件代码;

将应用程序的可执行文件代码编译为汇编文件;

从所述汇编文件中获取预先设定的需要保护的代码所对应的汇编代码;

将防止反编译代码插入到所述汇编代码之前。

一种可执行文件的加固装置,包括:

第一获取模块,用于获取应用程序的可执行文件代码;

编译模块,用于将应用程序的可执行文件代码编译为汇编文件;

第二获取模块,用于从所述汇编文件中获取预先设定的需要保护的代码所对应的汇编代码;

插入模块,用于将防止反编译代码插入到所述汇编代码之前。

上述可执行文件的加固方法和装置,通过将应用程序的可执行文件代码编译为汇编文件,将汇编文件中所需保护的代码所对应的汇编代码,并将防止反编译代码插入到该汇编代码前,反编译器对应用程序的可执行文件进行反编译时,使得反编译器难以反编译欲保护的代码,提高应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性。

此外,识别到模式切换指令后,对模式切换指令后的汇编代码识别为垃圾指令,从而误导反编译器,提高了应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性,同时也不影响保护代码的正常执行。

通过反编译器识别模式切换指令后,将模式切换指令后的正常代码识别为垃圾指令,能解决运行时解密后内存中存在原始的代码,反编译者从内存中把代码拷贝出来达到反编译的目的的问题,以及在正常执行代码的过程中,不需解密大量数据,降低了解密消耗,提高了运行效率。

附图说明

图1A为一个实施例中终端的内部结构示意图;

图1B为一个实施例中服务器的内部结构示意图;

图2为一个实施例中可执行文件的加固方法的流程图;

图3为一个实施例中可执行文件的加固方法的运行原理示意图;

图4为一个实施例中可执行文件的加固装置的内部结构框图;

图5为另一个实施例中可执行文件的加固装置的内部结构框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

可以理解,本发明所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本发明的范围的情况下,可以将第一客户端称为第二客户端,且类似地,可将第二客户端称为第一客户端。第一客户端和第二客户端两者都是客户端,但其不是同一客户端。

图1A为一个实施例中终端的内部结构示意图。如图1A所示,该终端包括通过系统总线连接的处理器、存储介质、内存和网络接口。其中,终端的存储介质存储有操作系统,还包括一种可执行文件的加固装置,该可执行文件的加固装置用于实现一种可执行文件的加固方法。该处理器用于提供计算和控制能力,支撑整个终端的运行。终端中的内存为存储介质中的可执行文件的加固装置的运行提供环境,网络接口用于与服务器进行网络通信,如发送应用程序安装包的下载请求至服务器,接收服务器返回的应用程序安装包等。该终端可以是手机、平板电脑或者个人数字助理。本领域技术人员可以理解,图1A中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

图1B为一个实施例中服务器的内部结构示意图。如图1B所示,该服务器包括通过系统总线连接的处理器、存储介质、内存和网络接口。其中,该服务器的存储介质存储有操作系统、数据库和可执行文件的加固装置,数据库中存储有应用程序的安装包,该可执行文件的加固装置用于实现适用于服务器的一种可执行文件的加固方法。该服务器的处理器用于提供计算和控制能力,支撑整个服务器的运行。该服务器的内存为存储介质中的可执行文件的加固装置的运行提供环境。该服务器的网络接口用于据以与外部的终端通过网络连接通信, 比如接收终端发送的应用程序安装包的下载请求以及向终端返回应用程序的安装包等。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本领域技术人员可以理解,图1B中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的服务器的限定,具体的服务器可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

因反编译器对应用程序的安装包中的代码按照代码顺序依次进行识别后,从而将应用程序的可执行文件转换成可阅读代码,然后再将反编译生成的可阅读代码加入恶意指令或进行篡改等得到新的代码,通过对新的代码重新进行打包生成新的应用程序的安装包,该新的应用程序的安装包被下载在移动终端上,并安装在移动终端上后,新的应用程序的安装包运行于移动终端上,将窃取用户的数据,导致应用程序的安装包不安全和用户数据也不安全。为此,通过在可执行文件的汇编代码之前插入防止反编译的代码(如插入跳转指令和模式切换指令),如此反编译器将无法对应用程序的可执行文件的代码进行反编译,提高了应用程序代码的安全性,防止窃取用户数据,提高了用户数据的安全性。

加固是指对应用程序的安装包进行一系列的保护工作,输出另一个安装包,防止应用程序被反编译、恶意篡改、保护应用数据不被窃取及其它重打包可造成的恶意攻击等。

图2为一个实施例中可执行文件的加固方法的流程图。图2中的可执行文件的加固方法运行于移动终端上。如图2所示,一种可执行文件的加固方法,包括以下步骤:

步骤202,获取应用程序的可执行文件代码。

具体地,应用程序是指运行于移动终端上的应用软件。该移动终端可为智能手机、平板电脑、个人数字助理等。应用程序的核心算法代码几乎都保存在可执行文件SO里,因此,获取应用程序的可执行文件代码。SO(Shared Object)文件为用户层的动态链接库。

在移动终端上可安装Android系统或IOS系统等。应用程序安装在移动终端上,并运行于Android系统或IOS系统下。

步骤204,将应用程序的可执行文件代码编译为汇编文件。

具体地,将应用程序的可执行文件SO的C++代码编译为S汇编文件。

步骤206,从该汇编文件中获取预先设定的需要保护的代码所对应的汇编代码。

具体地,该预先设定的需要保护的代码为全部的代码或预先指定的部分代码。

在通常情况下,默认要保护的代码为应用程序的可执行文件中的全部代码。也可由用户预先指定保护那部分代码。

若要保护的代码为应用程序的可执行文件中的全部代码,则将汇编文件中所有的汇编代码作为要保护的汇编代码。

若要保护的代码为应用程序的可执行文件中的部分代码,则需从汇编文件中选取预先设定的需要保护的代码所对应的汇编代码。

步骤208,将防止反编译代码插入到该汇编代码之前。

本实施例中,步骤208包括:将模式切换指令插入到该汇编代码之前,以及将跳转指令插入到该模式切换指令之前。

具体地,在需要保护的汇编代码的上一句代码插入模式切换指令BX、BLX等,在模式切换指令上一句代码再插入跳转指令。

上述可执行文件的加固方法,通过将应用程序的可执行文件代码编译为汇编文件,将汇编文件中所需保护的代码所对应的汇编代码,并将防止反编译代码插入到该汇编代码前,反编译器对应用程序的可执行文件进行反编译时,使得反编译器难以反编译欲保护的代码,提高应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性。识别到模式切换指令后,对模式切换指令后的汇编代码识别为垃圾指令,从而误导反编译器,提高了应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性,同时也不影响保护代码的正常执行。

此外,上述可执行文件的加固方法将反编译器识别模式切换指令后,将模式切换指令后的正常代码识别为垃圾指令,能解决运行时解密后内存中存在原 始的代码,反编译者从内存中把代码拷贝出来达到反编译的目的的问题,以及在正常执行代码的过程中,不需解密大量数据,降低了解密消耗,提高了运行效率。

在一个实施例中,上述可执行文件的加固方法还包括:获取可执行文件的运行指令;根据该运行指令运行后,当运行到该跳转指令时跳过该模式切换指令,直接运行模式切换指令后的汇编代码。

具体地,获取用户点击应用程序,并运行该应用程序。应用程序运行后,依次读取应用程序的代码进行执行,当运行到跳转指令时,跳过后面的模式切换指令,直接读取模式切换指令后的汇编代码,执行该汇编代码。

应用程序运行时通过跳转指令直接跳转执行模式切换后的汇编代码,保证了应用程序的正常运行。

在一个实施例中,上述可执行文件的加固方法还包括:获取反编译指令;根据该反编译指令依次反编译该跳转指令、模式切换指令,并将该模式切换指令后的汇编代码识别为垃圾指令。

具体地,反编译器对应用程序的代码进行反编译时,是依次对所有的代码一条一条的读取并进行反编译,反编译器不会对跳转指令做出反应,遇到模式切换指令就会把接下来的代码作为模式切换后的指令识别,从而导致把正常代码识别(即汇编代码)为垃圾指令。

反编译器识别到模式切换指令后,对模式切换指令后的汇编代码识别为垃圾指令,从而误导反编译器,提高了应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性。

图3为一个实施例中可执行文件的加固方法的运行原理示意图。如图3所示,可执行文件运行,当执行到跳转指令时跳过模式切换指令,直接读取模式切换指令后的正常代码,IDA Pro反编译识别可执行文件代码,识别到模式切换指令后,将正常代码被识别为模式切换后的代码,成为垃圾指令。IDA Pro是一款反汇编软件,通过IDA视图和交叉引用,可以理解程序逻辑和快速定位代码片断,以方便修改。

需要说明的是,对于Android系统,可利用可执行文件SO的汇编arm的 thumb模式切换,以及不可执行到的代码片段,欺骗反编译器对要保护代码进行模式识别,从而达到反编译器难以反编译要保护代码的目的。

图4为一个实施例中可执行文件的加固装置的内部结构框图。图4中的可执行文件的加固装置运行于移动终端上。如图4所示,一种可执行文件的加固装置,包括第一获取模块410、编译模块420、第二获取模块430和插入模块440。

第一获取模块410用于获取应用程序的可执行文件代码。

具体地,应用程序是指运行于移动终端上的应用软件。该移动终端可为智能手机、平板电脑、个人数字助理等。应用程序的核心算法代码几乎都保存在可执行文件SO里,因此,获取应用程序的可执行文件代码。

在移动终端上可安装Android系统或IOS系统等。应用程序安装在移动终端上,并运行于Android系统或IOS系统下。

编译模块420用于将应用程序的可执行文件代码编译为汇编文件。

具体地,应用程序的可执行文件SO的C++代码编译为S汇编文件。

第二获取模块430用于从该汇编文件中获取预先设定的需要保护的代码所对应的汇编代码。

具体地,该预先设定的需要保护的代码为全部的代码或预先指定的部分代码。

在通常情况下,默认要保护的代码为应用程序的可执行文件中的全部代码。也可由用户预先指定保护那部分代码。

若要保护的代码为应用程序的可执行文件中的全部代码,则将汇编文件中所有的汇编代码作为要保护的汇编代码。

若要保护的代码为应用程序的可执行文件中的部分代码,则需从汇编文件中选取预先设定的需要保护的代码所对应的汇编代码。

插入模块440用于将防止反编译代码插入到该汇编代码之前。

本实施例中,插入模块440还用于将模式切换指令插入到该汇编代码之前,以及将跳转指令插入到该模式切换指令之前。

具体地,在需要保护的汇编代码的上一句代码插入模式切换指令BX、BLX 等,在模式切换指令上一句代码再插入跳转指令。

上述可执行文件的加固装置,通过将应用程序的可执行文件代码编译为汇编文件,将汇编文件中所需保护的代码所对应的汇编代码,并将防止反编译代码插入到该汇编代码前,反编译器对应用程序的可执行文件进行反编译时,使得反编译器难以反编译欲保护的代码,提高应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性。

识别到模式切换指令后,对模式切换指令后的汇编代码识别为垃圾指令,从而误导反编译器,提高了应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性,同时也不影响保护代码的正常执行。

此外,上述可执行文件的加固装置将反编译器识别模式切换指令后,将模式切换指令后的正常代码识别为垃圾指令,能解决运行时解密后内存中存在原始的代码,反编译者从内存中把代码拷贝出来达到反编译的目的的问题,以及在正常执行代码的过程中,不需解密大量数据,降低了解密消耗,提高了运行效率。

图5为另一个实施例中可执行文件的加固装置的内部结构框图。图5中的可执行文件的加固装置运行于移动终端上。如图5所示,一种可执行文件的加固装置,除了包括第一获取模块410、编译模块420、第二获取模块430和插入模块440,还包括运行指令获取模块450、执行模块460、反编译指令获取模块470和反编译模块480。

运行指令获取模块450用于获取可执行文件的运行指令。

执行模块460用于根据该运行指令运行后,当运行到该跳转指令时跳过该模式切换指令,直接运行模式切换指令后的汇编代码。

具体地,获取用户点击应用程序,并运行该应用程序。应用程序运行后,依次读取应用程序的代码进行执行,当运行到跳转指令时,跳过后面的模式切换指令,直接读取模式切换指令后的汇编代码,执行该汇编代码。

应用程序运行时通过跳转指令直接跳转执行模式切换后的汇编代码,保证 了应用程序的正常运行。

反编译指令获取模块470用于获取反编译指令。

反编译模块480用于根据该反编译指令依次反编译该跳转指令、模式切换指令,并将该模式切换指令后的汇编代码识别为垃圾指令。

具体地,反编译器对应用程序的代码进行反编译时,是依次对所有的代码一条一条的读取并进行反编译,反编译器不会对跳转指令做出反应,遇到模式切换指令就会把接下来的代码作为模式切换后的指令识别,从而导致把正常代码识别(即汇编代码)为垃圾指令。

反编译器识别到模式切换指令后,对模式切换指令后的汇编代码识别为垃圾指令,从而误导反编译器,提高了应用程序的安全性,防止应用程序被植入恶意指令,以及防止恶意指令窃取用户数据,提高了用户数据的安全性。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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