可执行代码的保护方法、设备及可读存储介质与流程

文档序号:14653823发布日期:2018-06-08 22:36阅读:133来源:国知局
本发明涉及安全
技术领域
:,尤其涉及一种可执行代码的保护方法、设备及可读存储介质。
背景技术
::可执行链接格式(excutableandlinkingformat,ELF)文件是一种可执行可链接格式的二进制文件,被广泛地应用于电脑、嵌入式系统及移动终端等应用程序中,包含了三种格式,即:可重定位文件(relocatableobjectfile)、可执行文件(executablefile)以及共享文件(sharedobjectfile)。在应用程序中,ELF文件可与多个ELF文件链接在一起而形成一个可执行文件,具有强大的功能。目前,ELF文件是Linux或者Unix的标准可执行二进制文件,它包含可以被调入中央处理器中直接运行的可执行代码,所以对ELF文件的保护是至关重要的。在现有技术中,对ELF文件的保护通常使用的方法是将其进行加密保护,并使用传统加密算法进行加密。这种方法的缺陷之一就是无法抵御白盒攻击。所谓白盒攻击是指:攻击者对设备终端拥有完全的控制能力,可以对程序运行的二进制进行追踪、读取内存中的密钥、观察程序执行的中间结果以及改变计算的结果等。在传统的加密算法中,算法和密钥是完全独立的,在白盒攻击的条件下,攻击者能轻易地得到解密密钥,使保护措施失效,从而获得被保护的ELF文件。技术实现要素:本发明的主要目的在于提出一种可执行代码的保护方法、设备及可读存储介质,旨在解决可执行代码保护中存在无法抵御白盒攻击的问题。为实现上述目的,本发明提供的一种可执行代码的保护方法,所述方法包括步骤:读取第一动态链接库文件中的核心函数的信息;加密所述核心函数,生成加密核心函数;保护加密所述核心函数的密钥;从所述第一动态链接库文件中提取所述加密核心函数;将所述加密核心函数写入所述第一动态链接库文件的自定义节区中。此外,为实现上述目的,本发明还提出一种可执行代码的保护方法,所述方法包括步骤:加载第一动态链接库文件至内存;解析所述第一动态链接库文件中的自定义节区,得到所述自定义节区中的加密核心函数;解密所述加密核心函数;还原解密后的核心函数至内存。此外,为实现上述目的,本发明还提出一种设备,所述设备包括处理器、以及存储器;所述处理器用于执行存储器中存储的虚拟机字节码文件的保护程序,以实现上述的方法。此外,为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述的方法。本发明提出的可执行代码的保护方法、设备及可读存储介质,通过读取第一动态链接库文件中的核心函数的信息,加密核心函数,生成加密核心函数,并保护加密核心函数的密钥,从第一动态链接库文件中提取加密核心函数,以及将加密核心函数写入第一动态链接库文件的自定义节区中,与现有技术相比,采用本发明的可执行代码的保护方法、设备及可读存储介质,隐藏了密钥信息,达到了使受保护的可执行代码难以被攻击者破解的效果,提高了安全性。附图说明图1为本申请第一实施例提供的可执行代码的保护方法的流程示意图;图2为本申请第一实施例提供的可执行代码的保护方法的另一流程示意图;图3为本申请第一实施例提供的示例一流程图;图4为本申请第二实施例提供的可执行代码的保护方法的流程示意图;图5为本申请第二实施例提供的可执行代码的保护方法的子流程示意图;图6为本申请第二实施例提供的示例二流程图;图7为本申请第三实施例提供的设备硬件架构的示意图;图8为图7中可执行代码的保护程序的模块示意图;图9为本申请第四实施例提供的设备硬件架构的示意图;图10为图9中可执行代码的保护程序的模块示意图。本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身没有特定的意义。因此,“模块”、“部件”或“单元”可以混合地使用。第一实施例如图1所示,为本申请第一实施例提供的可执行代码的保护方法的流程示意图。在图1中,所述可执行代码的保护方法包括:步骤110,读取第一动态链接库文件中的核心函数的信息;步骤120,加密所述核心函数,生成加密核心函数;步骤130,保护加密所述核心函数的密钥;步骤140,从所述第一动态链接库文件中提取所述加密核心函数;步骤150,将所述加密核心函数写入所述第一动态链接库文件的自定义节区中。具体的,读取第一动态链接库文件中的核心函数的信息,核心函数的信息至少包括:核心函数在第一链接库文件的偏移和大小。调用加密程序生成加密密钥,并对第一链接库文件的核心函数进行加密,生成加密核心函数。再保护该密钥,以对密钥进行隐藏。从第一动态链接库文件中提取加密核心函数,并将加密函数写入第一动态链接库文件的自定义节区中。可选的,如图2所示,在步骤110之前,所述方法还包括:步骤210,构造所述自定义节区的新节区头结构;步骤220,在所述第一动态链接库文件中添加所述自定义节区。具体的,构造自定义节区(section)的新节区头(newsectionheader)结构,并追加到第一动态链接库文件末尾,即SectionHeader末尾。在第一动态链接库文件末尾添加所述自定义节区的新节区名称(newsectionname)及新节区(newsection)。可选的,步骤130具体包括:通过白盒算法和所述密钥生成两个查找表保护所述密钥。具体的,白盒加密算法是指能够在白盒环境下抵御攻击的一种特殊的加密方法。白盒攻击指攻击者对设备终端拥有完全的控制能力,可以对程序运行的二进制进行追踪、读取内存中的密钥观察程序执行的中间结果以及改变计算的结果等。在本实施例中,白盒加密算法将算法和密钥紧密捆绑在了一起,由算法和密钥生成两个用于解密的查找表,这两个查找表分别是T表和M表,其中,T表用于进行文字替换,M表用于查找对应的明文。由于算法和密钥的合并,密钥信息不会直接出现在内存中,所以可以有效隐藏密钥,与此同时也混淆了加密逻辑,攻击者不能直接从内存中直接提取到密钥信息。可选的,在步骤140之后,所述方法还包括:将提取后的第一动态链接库文件中的核心函数字段置零。具体的,当从第一动态链接库文件中提取加密核心函数之后,将原第一动态链接库文件中的核心字段置零。可选的,在步骤150之后,所述方法还包括:在第二动态链接库文件中设置解密函数,以解密加密的第一动态链接库文件。具体的,设置解密函数,并将解密函数装载至第二动态链接库文件中,以解密加密的第一动态链接库文件。在本实施例中,第一动态链接库文件、第二动态链接库文件为可执行链接格式(excutableandlinkingformat,ELF)文件。本实施例的可执行代码的保护方法可以应用于安卓(Android)系统。Android提供了基于Java的软件开发工具包(SoftwareDevelopmentKit,SDK),以供开发者进行第三方应用的开发实现,与此同时,谷歌(Google)还提供了一套标准完备的接口(JavaNativeInterface,JNI),使得Java以尽量少的代码,尽可能相同的方式,调用本地类库(即ELF文件格式)。本领域技术人员可以理解的是,本实施例的可执行代码的保护方法还可以应用于Linux平台。为了使本实施例的可执行代码的保护方法更加清楚易懂,以如下示例对所述可执行代码的保护方法的工作过程加以说明:示例一如图3所示,本示例在安卓系统或者Linux平台中保护可执行代码的保护过程如下:步骤310,构造自定义section的newsectionheader结构,并追加到第一动态链接库文件末尾;步骤320,在第一动态链接库文件末尾添加自定义section的newsectionname以及newsection;步骤330,读取并解析第一动态链接库文件,得到待加密的核心函数的在第一动态链接库文件的偏移及大小;步骤340,提取待加密的核心函数字段并把原位置上的核心函数字段置零;步骤350,生成加密所需的密钥并加密核心函数;步骤360,将加密后的核心函数密文及对应函数名写入第一动态链接库文件的自定义section中;步骤370,生成白盒密码算法的两个查找表,以隐藏密钥;步骤380,存储查找表;步骤390,修改第一动态链接库文件头信息以保证添加自定义section后文件能够正确执行,将自定义section的偏移值和大小保存在头部信息中。步骤300,把之后加载被加密的第一动态链接库文件时所需的解密过程编成一个解密用的第二动态链接库文件。本实施例的可执行代码的保护方法,通过读取第一动态链接库文件中的核心函数的信息,加密核心函数,生成加密核心函数,并保护加密核心函数的密钥,从第一动态链接库文件中提取加密核心函数,以及将加密核心函数写入第一动态链接库文件的自定义节区中,与现有技术相比,隐藏了密钥信息,达到了使受保护的可执行代码难以被攻击者破解的效果,提高了安全性。第二实施例如图4所示,为本申请第二实施例提供的可执行代码的保护方法的流程示意图。在图4中,所述可执行代码的保护方法包括:步骤410,加载第一动态链接库文件至内存;步骤420,解析所述第一动态链接库文件中的自定义节区,得到所述自定义节区中的加密核心函数;步骤430,解密所述加密核心函数;步骤440,还原解密后的核心函数至内存。具体的,当检测需要运行第一动态链接文件时,则先加载第一动态链接库文件至内存,解析第一动态链接库文件中的自定义节区,以得到自定义节区中的加密核心函数,并解密所述加密核心函数,再将解密后的核心函数值内存。在本实施例中,第一动态链接库文件中包括一个或者多个加密核心函数,若第一动态链接库文件包括一个加密核心函数,当解密了该加密核心函数并将其还原至内存之后,则执行第一动态链接库文件;若第一动态链接库文件包括多个加密核心函数,需要将解密全部加密核心函数并将所有解密了的核心函数还原至内存之后,再执行第一动态链接库文件。可选的,本实施例的可执行代码的保护方法还包括:加载第二动态链接库文件至所述内存,所述第二动态链接库文件包括解密函数。相应的,如图5所示,步骤430包括:步骤510,通过白盒算法获取两个查找表;步骤520,在所述解密函数中,通过所述两个查找表解密所述加密核心函数。具体的,通过hook技术,加载包括解密函数的第二动态链接库文件至内存,并获取第一动态链接库文件中的两个查找表,即加密表和解密表,在解密函数中,通过这两个查找表完成对加密核心函数的解密。可选的,在步骤410之后,所述方法还包括:获取所述第一动态链接库文件在所述内存中的起始位置、以及每个核心函数在所述内存中的特定位置。相应的,步骤440包括:按照所述核心函数的名称还原所述解密后的核心函数至所述内存起始位置的特定位置。可选的,为了使系统能够读写解密后的可执行文件,本实施例的可执行代码的保护方法还包括适当的修改读写权限。为了使本实施例的可执行代码的保护方法更加清楚易懂,以如下示例对可执行代码的保护方法的工作过程加以说明:示例二如图6所示,本示例是对第一实施例中示例一的解密过程,具体包括:步骤610,加载解密库文件到内存,开启hook函数;步骤620,加载被加密的第一动态链接库文件到内存;步骤630,获取被加密的第一动态链接库文件在内存的起始地址以及每个核心函数在所述内存中的特定位置;步骤640,解析被加密的第一动态链接库文件头信息找到自定义section;步骤650,在自定义section里根据待解密核心函数的函数名再次解析被加密的第一动态链接库文件,获取待解密核心函数的内存位置及大小;步骤660,修改自定义section及待解密核心函数在内存中的读写权限;步骤670,结合两个查找表使用白盒算法解密核心函数;步骤680,根据解析到的内存位置和大小按照函数名回填解密后的核心函数;步骤690,修改回内存区域的读写权限,以执行解密后的第一动态链接库文件。本实施例的可执行代码的保护方法,通过加载第一动态链接库文件至内存,解析第一动态链接库文件中的自定义节区,得到自定义节区中的加密核心函数,解密加密核心函数,并还原解密后的核心函数至内存,与现有技术相比,达到了使受保护的可执行代码难以被攻击者破解的效果。第三实施例如图7所示,为本申请第三实施例提供一种设备硬件架构的示意图。在图7中,设备包括:第一存储器710、第一处理器720及存储在所述第一存储器710上并可在所述第一处理器720上运行的可执行代码的保护程序730。在本实施例中,所述的可执行代码的保护程序730包括一系列的存储于第一存储器710上的计算机程序指令,当该计算机程序指令被第一处理器720执行时,可以实现本发明各实施例的可执行代码的保护操作。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,可执行代码的保护程序730可以被划分为一个或多个模块。如图8所示,可执行代码的保护程序730包括:读取模块810、加密模块820、密钥保护模块830、提取模块840、写入模块850、自定义节区模块860、添加模块870以及解密函数设置模块880。其中,读取模块810,用于读取第一动态链接库文件中的核心函数的信息;加密模块820,用于加密所述核心函数,生成加密核心函数;密钥保护模块830,用于保护加密所述核心函数的密钥;提取模块840,用于从所述第一动态链接库文件中提取所述加密核心函数;写入模块850,用于将所述加密核心函数写入所述第一动态链接库文件的自定义节区中。具体的,读取模块810读取第一动态链接库文件中的核心函数的信息,核心函数的信息至少包括:核心函数在第一链接库文件的偏移和大小。加密模块820调用加密程序生成加密密钥,并对第一链接库文件的核心函数进行加密,生成加密核心函数。密钥保护模块830保护该密钥,以对密钥进行隐藏。提取模块840从第一动态链接库文件中提取加密核心函数,写入模块850将加密函数写入第一动态链接库文件的自定义节区中。自定义节区模块860,用于构造所述自定义节区的新节区头结构;添加模块870,用于在所述第一动态链接库文件中添加所述自定义节区。具体的,构造自定义节区(section)的新节区头(newsectionheader)结构,并追加到第一动态链接库文件末尾,即SectionHeader末尾。在第一动态链接库文件末尾添加所述自定义节区的新节区名称(newsectionname)及新节区(newsection)。可选的,密钥保护模块830具体用于:通过白盒算法和所述密钥生成两个查找表保护所述密钥。具体的,白盒加密算法是指能够在白盒环境下抵御攻击的一种特殊的加密方法。白盒攻击指攻击者对设备终端拥有完全的控制能力,可以对程序运行的二进制进行追踪、读取内存中的密钥观察程序执行的中间结果以及改变计算的结果等。在本实施例中,白盒加密算法将算法和密钥紧密捆绑在了一起,由算法和密钥生成两个用于解密的查找表,这两个查找表分别是T表和M表,其中,T表用于进行文字替换,M表用于查找对应的明文。由于算法和密钥的合并,密钥信息不会直接出现在内存中,所以可以有效隐藏密钥,与此同时也混淆了加密逻辑,攻击者不能直接从内存中直接提取到密钥信息。可选的,提取模块840,还用于将提取后的第一动态链接库文件中的核心函数字段置零。具体的,当提取模块840从第一动态链接库文件中提取加密核心函数之后,将原第一动态链接库文件中的核心字段置零。解密函数设置模块880,用于在第二动态链接库文件中设置解密函数,以解密加密的第一动态链接库文件。具体的,设置解密函数,并将解密函数装载至第二动态链接库文件中,以解密加密的第一动态链接库文件。在本实施例中,第一动态链接库文件、第二动态链接库文件为ELF文件。本实施例的设备,通过读取模块810读取第一动态链接库文件中的核心函数的信息,加密模块820加密核心函数,生成加密核心函数,密钥保护模块830保护加密核心函数的密钥,提取模块840从第一动态链接库文件中提取加密核心函数,写入模块850将加密核心函数写入第一动态链接库文件的自定义节区中,与现有技术相比,隐藏了密钥信息,达到了使受保护的可执行代码难以被攻击者破解的效果,提高了安全性。第四实施例如图9所示,为本申请第四实施例提供一种设备硬件架构的示意图。在图9中,设备包括:第二存储器910、第二处理器920及存储在所述第二存储器910上并可在所述第二处理器920上运行的可执行代码的保护程序930。在本实施例中,所述的可执行代码的保护程序930包括一系列的存储于第二存储器910上的计算机程序指令,当该计算机程序指令被第二处理器920执行时,可以实现本发明各实施例的可执行代码的保护操作。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,可执行代码的保护程序930可以被划分为一个或多个模块。如图10所示,可执行代码的保护程序930包括:加载模块1010、解析模块1020、解密模块1030、还原模块1040、获取模块1050以及权限修改模块1060。其中,加载模块1010,用于加载第一动态链接库文件至内存;解析模块1020,用于解析所述第一动态链接库文件中的自定义节区,得到所述自定义节区中的加密核心函数;解密模块1030,用于解密所述加密核心函数;还原模块1040,用于还原解密后的核心函数至内存。具体的,当检测需要运行第一动态链接文件时,则加载模块1010先加载第一动态链接库文件至内存,解析模块1020解析第一动态链接库文件中的自定义节区,以得到自定义节区中的加密核心函数,解密模块1030解密所述加密核心函数,还原模块1040再将解密后的核心函数值内存。在本实施例中,第一动态链接库文件中包括一个或者多个加密核心函数,若第一动态链接库文件包括一个加密核心函数,当解密模块1030解密了该加密核心函数,且还原模块1040将其还原至内存之后,则执行第一动态链接库文件;若第一动态链接库文件包括多个加密核心函数,需要解密模块1030将解密全部加密核心函数且还原模块1040将所有解密了的核心函数还原至内存之后,再执行第一动态链接库文件。可选的,加载模块1010,还用于加载第二动态链接库文件至所述内存,所述第二动态链接库文件包括解密函数。相应的,解密模块1030具体用于:通过白盒算法获取两个查找表;在所述解密函数中,通过所述两个查找表解密所述加密核心函数。具体的,通过hook技术,加载模块1010加载包括解密函数的第二动态链接库文件至内存,解密模块1030获取第一动态链接库文件中的两个查找表,即加密表和解密表,在解密函数中,通过这两个查找表完成对加密核心函数的解密。获取模块1050,用于获取所述第一动态链接库文件在所述内存中的起始位置、以及每个核心函数在所述内存中的特定位置。相应的,还原模块1040具体用于:按照所述核心函数的名称还原所述解密后的核心函数至所述内存起始位置的特定位置。权限修改模块1060,用于修改读写权限。在本实施例中,为了使系统能够读写解密后的可执行文件,通过权限修改模块1060适当的修改回内存区域的读写权限。本实施例的设备,通过加载模块1010加载第一动态链接库文件至内存,解析模块1020解析第一动态链接库文件中的自定义节区,得到自定义节区中的加密核心函数,解密模块1030解密加密核心函数,并通过还原模块1040还原解密后的核心函数至内存,与现有技术相比,达到了使受保护的可执行代码难以被攻击者破解的效果。第五实施例本申请实施例还提供了一种计算机可读存储介质。这里的计算机可读存储介质存储有一个或者多个程序。其中,计算机可读存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。当计算机可读存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述第一实施例或者第二实施例所提供的可执行代码的保护方法。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1