一种文件处理方法、设备及计算机可读存储介质与流程

文档序号:17479513发布日期:2019-04-20 06:21阅读:120来源:国知局
本发明涉及数据库
技术领域
:,尤其涉及一种文件处理方法、设备及计算机可读存储介质。
背景技术
::.so库文件是一种elf(可执行)文件。elf文件格式由coff(commonobjectfileformat,通用对象文件格式)格式发展而来,是一种基于段的数据结构。但是,android系统下so软件容易被分析、二次打包,从而使得so库的安全性不高。技术实现要素:有鉴于此,本发明提供一种文件处理方法、设备及计算机可读存储介质,用以提高so库的安全性。为解决上述技术问题,第一方面,本发明实施例提供一种文件处理方法,应用于服务器,包括:接收客户端发送的待处理so库的哈希值,其中,在所述待处理so库中包括待解密节;根据所述哈希值获取对应的密钥;向所述客户端发送所述密钥,以使所述客户端根据所述密钥解密所述待解密节。其中,在所述接收客户端发送的待处理so库的哈希值之前,所述方法还包括:确定所述待处理so库中的待加密节;对所述待加密节进行加密,并将加密后的待加密节写入所述待处理so库中;生成写入有所述加密节的待处理so库的加密信息,并存储所述加密信息。其中,所述确定所述待处理so库中的待加密节,包括:根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待加密节的开始位置,并获取所述待加密节的大小;根据所述待加密节的开始位置和所述待加密节的大小,获取所述待加密节。其中,所述加密信息为哈希值和密钥对。其中,所述待加密节为能够进行内存映射处理的节。第二方面,本发明实施例还提供一种文件处理方法,应用于客户端,包括:获取待处理so库;从服务器获取所述待处理so库的解密密钥;确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密。其中,所述获取待处理so库,包括:根据所述待处理so库的名称查找进程列表文件;根据查找结果,获取所述so库在进程虚拟空间的地址,获取所述待处理so库。其中,所述从服务器获取所述待处理so库的解密密钥,包括:获取所述待处理so库的哈希值,并向所述服务器发送所述哈希值;接收所述服务器根据所述哈希值发送的解密密钥。其中,所述确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密,包括:根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待解密节的开始位置,并获取所述待解密节的大小;根据所述待解密节的开始位置和所述待解密节的大小,获取所述待解密节;利用所述解密密钥对所述待解密节进行解密。其中,在所述利用所述解密密钥对所述待解密节进行解密之前,还包括:获取所述待解密节的权限信息;若根据所述权限信息确定所述待解密节的权限为只读权限,则将所述待解密节的权限修改为可写权限。第三方面,本发明实施例提供了一种服务器,包括:收发器和处理器;所述处理器,用于通过所述收发器接收客户端发送的待处理so库的哈希值,其中,在所述待处理so库中包括待解密节;根据所述哈希值获取对应的密钥;通过所述收发器向所述客户端发送所述密钥,以使所述客户端根据所述密钥解密所述待解密节;所述收发器,用于在所述处理器的控制下接收和发送数据。其中,所述处理器还用于,确定所述待处理so库中的待加密节;对所述待加密节进行加密,并将加密后的待加密节写入所述待处理so库中;生成写入有所述加密节的待处理so库的加密信息,并存储所述加密信息。其中,所述处理器还用于,根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待加密节的开始位置,并获取所述待加密节的大小;根据所述待加密节的开始位置和所述待加密节的大小,获取所述待加密节。其中,所述加密信息为哈希值和密钥对。其中,所述待加密节为能够进行内存映射处理的节。第四方面,本发明实施例提供了一种客户端,包括:收发器和处理器;所述处理器,用于获取待处理so库;通过所述收发器从服务器获取所述待处理so库的解密密钥;确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密;所述收发器,用于在所述处理器的控制下接收和发送数据。其中,所述处理器还用于,根据所述待处理so库的名称查找进程列表文件;根据查找结果,获取所述so库在进程虚拟空间的地址,获取所述待处理so库。其中,所述处理器还用于,通过所述收发器获取所述待处理so库的哈希值,并向所述服务器发送所述哈希值;通过所述收发器接收所述服务器根据所述哈希值发送的解密密钥。其中,所述处理器还用于,根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待解密节的开始位置,并获取所述待解密节的大小;根据所述待解密节的开始位置和所述待解密节的大小,获取所述待解密节;利用所述解密密钥对所述待解密节进行解密。其中,所述处理器还用于,获取所述待解密节的权限信息;若根据所述权限信息确定所述待解密节的权限为只读权限,则将所述待解密节的权限修改为可写权限。第五方面,本发明实施例提供了一种电子设备,包括:收发机、存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序;所述计算机程序被处理器执行时实现如第一方面所述的方法中的步骤;或者所述计算机程序被处理器执行时实现如第二方面所述的方法中的步骤。第六方面,本发明实施例提供一种计算机可读存储介质,用于存储计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法中的步骤;或者,所述计算机程序被处理器执行时实现如第二方面所述的方法中的步骤。本发明的上述技术方案的有益效果如下:在本发明实施例中,当客户端需要对待解码节进行解码时,需要从服务器获取对应的解密密钥进行解码。因此,如果没有该解密密钥,客户端则无法对so库解密,也无法用ida等工具进行静态逆向分析。因此,利用本发明实施例的方案提高了so库的安全性。附图说明图1为本发明实施例的文件处理方法的流程图;图2为可执行文件的结构示意图;图3为elfheader的结构示意图;图4为sectionheadertable的结构示意图;图5为本发明实施例的文件处理方法的流程图;图6为本法实施例的so库操作流程示意图;图7为本发明实施例中so库在内存中运行时的结构示意图;图8为本发明实施例服务器的示意图;图9为本发明实施例客户端的示意图;图10为本发明实施例的电子设备的示意图;图11为本发明实施例的电子设备的示意图。具体实施方式下面将结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。如图1所示,本发明实施例的文件处理方法,应用于服务器,包括:步骤101、接收客户端发送的待处理so库的哈希值,其中,在所述待处理so库中包括待解密节。在本发明实施例中,可预先对so库中的一个或者多个节进行加密。具体的,在加密过程中,确定所述待处理so库中的待加密节,对所述待加密节进行加密,并将加密后的待加密节写入所述待处理so库中,生成写入有所述加密节的待处理so库的加密信息,并存储所述加密信息。对于可执行文件来说,如图2所示,文件开始是elfheader字段信息;之后是程序头部表programheadertable(可选);之后是各节的内容信息;之后是节头部表(sectionheadertable),节头部表中有字段记录每个节的实际长度。节头部表的位置可由elfheader字段中的值指示。elfheader结构见图3,其中e_shoff字段用于指示sectionheadertable(节头部表)的相对于文件头的开始位置。sectionheadertable(节头部表)的结构见图4,其中字段sh_name用于指示节的名称;sh_offset用于指示节的开始位置;sh_size用于指示节的大小。因此,根据上述信息,根据所述待处理so库的elf头部定位节头部表,根据所述节头部表定位所述待加密节的开始位置,并获取所述待加密节的大小,根据所述待加密节的开始位置和所述待加密节的大小,获取所述待加密节。其中,所述加密信息为哈希值(如md5值)和密钥对。具体的,写入有加密的待加密节的新so库的md5值及加密密钥对,记为(hash,key),存储于服务器上,用于解密时查找特定hash对应的key。具体的,由elfheader的elf32_ehdr.e_shoff字段定位到sectionheadertable(节头部表),由节头部表elf32_shdr.sh_offset定位到待加密的节的开始位置,由elf32_shdr.size获取节的大小。读取该节的内容,进行加密操作,并将加密后的节写回原位置。其中,加密过程中用到的加密算法/方案可以根据需要任意选择。需要说明的是,不是所有的节在运行时都会做内存的映射处理(如:shstrtab节,不进行内存映射处理),因此选择待加密的节时,应选择能进行内存映射处理的节作为待加密节。步骤102、根据所述哈希值获取对应的密钥。步骤103、向所述客户端发送所述密钥,以使所述客户端根据所述密钥解密所述待解密节。在本发明实施例中,当客户端需要对待解码节进行解码时,需要从服务器获取对应的解密密钥进行解码。因此,如果没有该解密密钥,客户端则无法对so库解密,也无法用ida等工具进行静态逆向分析。因此,利用本发明实施例的方案提高了so库的安全性。如图5所示,本发明实施例的文件处理方法,应用于服务器,包括:步骤501、获取待处理so库。在此步骤中,根据所述待处理so库的名称查找进程列表文件,根据查找结果,获取所述so库在进程虚拟空间的地址,获取所述待处理so库。步骤502、从服务器获取所述待处理so库的解密密钥。在此步骤中,获取所述待处理so库的哈希值,并向所述服务器发送所述哈希值,接收所述服务器根据所述哈希值发送的解密密钥。步骤503、确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密。在此步骤中,根据所述待处理so库的elf头部定位节头部表,根据所述节头部表定位所述待解密节的开始位置,并获取所述待解密节的大小。之后,根据所述待解密节的开始位置和所述待解密节的大小,获取所述待解密节,利用所述解密密钥对所述待解密节进行解密。由于不同的节有不同的读写权限,那么,在解密前,可获取所述待解密节的权限信息。若根据所述权限信息确定所述待解密节的权限为只读权限,则将所述待解密节的权限修改为可写权限。在本发明实施例中,当客户端需要对待解码节进行解码时,需要从服务器获取对应的解密密钥进行解码。因此,如果没有该解密密钥,客户端则无法对so库解密,也无法用ida等工具进行静态逆向分析。因此,利用本发明实施例的方案提高了so库的安全性。如图6所示,本法实施例的so库操作流程包括:步骤601、客户端计算待处理的so库的哈希值(hash)。步骤602、客户端将哈希值发送给服务器。步骤603、服务器接收该哈希值,根据该哈希值,查找对应的密钥,并将查找到的密钥发送给客户端。步骤604、客户端接收该密钥,利用密钥解密so库中的待解密节。之后,客户端可继续执行so库的其他功能。在解密的过程中,解密还原操作是在原so库源代码的基础上增加解密还原功能代码,编译生成新的so库,软件运行时首先在内存中对加密过的节进行动态解密还原,之后再执行原so库的功能代码。一般情况下,当so库被链接载入时首先执行jni_onload()函数,但还原代码要求早于jni_onload()函数完成对so库的解密还原,比较合适的方法是将还原操作放在init段中,链接器在加载so时会先遍历执行init段中注册的函数,然后再调用jni_onload(),这样就先完成了对so的解密还原。执行过程中客户端首先获取so库的hash值,并将其发送给服务端,服务端根据(hash,key)表找到key后返回给客户端。客户端收到key后,对加密过的节进行解密操作。解密过程是动态进行的,在内存中定位so库加密的节并解密。so库在内存中运行时与so文件状态下结构不完全相同(见图7)。必须具备programheadertable(程序头部表),另外有了“段”概念(图中的segmentx,x=1,2,3,……),段是把相同属性的节(section)组合在一起形成的,可有效的解决因对齐原因造成的内存空间浪费。首先定位so库的位置。查找/proc/pid/maps文件,/proc/pid/maps列出了某进程虚拟地址空间的地址,遍历这个文件的每一行,根据so库的名称,找到对应的名称时,读取地址字符串,这个地址即是so库在进程虚拟空间的地址。之后由elfheader定位到节头部表,由节头部表定位到待解密的节的开始位置及大小,在内存中进行解密操作。由于不同的节有不同的读写权限,如果待解密的节仅有只读权限时,就需要修改为可写权限。由上可以看出,在本发明实施例中,基于c/s架构,如果客户端需要对代码解密,则需要与服务器通信,从服务器获取对应的密钥。如果没有服务端提供的密钥,so库无法解密,也无法用ida等工具进行静态逆向分析。因此,本发明实施例的方案提高了so库的安全性。如图8所示,本发明实施例的服务器包括:收发器801和处理器802;所述处理器802,用于通过所述收发器801接收客户端发送的待处理so库的哈希值,其中,在所述待处理so库中包括待解密节;根据所述哈希值获取对应的密钥;通过所述收发器801向所述客户端发送所述密钥,以使所述客户端根据所述密钥解密所述待解密节;所述收发器801,用于在所述处理器的控制下接收和发送数据。其中,所述处理器802还用于,确定所述待处理so库中的待加密节;对所述待加密节进行加密,并将加密后的待加密节写入所述待处理so库中;生成写入有所述加密节的待处理so库的加密信息,并存储所述加密信息。其中,所述处理器802还用于,根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待加密节的开始位置,并获取所述待加密节的大小;根据所述待加密节的开始位置和所述待加密节的大小,获取所述待加密节。其中,所述加密信息为哈希值和密钥对,所述待加密节为能够进行内存映射处理的节。在本发明实施例中,当客户端需要对待解码节进行解码时,需要从服务器获取对应的解密密钥进行解码。因此,如果没有该解密密钥,客户端则无法对so库解密,也无法用ida等工具进行静态逆向分析。因此,利用本发明实施例的方案提高了so库的安全性。如图9所示,本发明实施例的客户端包括:收发器901和处理器902;所述处理器902,用于获取待处理so库;通过所述收发器901从服务器获取所述待处理so库的解密密钥;确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密;所述收发器901,用于在所述处理器的控制下接收和发送数据。其中,所述处理器902还用于,根据所述待处理so库的名称查找进程列表文件;根据查找结果,获取所述so库在进程虚拟空间的地址,获取所述待处理so库。其中,所述处理器902还用于,通过所述收发器获取所述待处理so库的哈希值,并向所述服务器发送所述哈希值;通过所述收发器接收所述服务器根据所述哈希值发送的解密密钥。其中,所述处理器902还用于,根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待解密节的开始位置,并获取所述待解密节的大小;根据所述待解密节的开始位置和所述待解密节的大小,获取所述待解密节;利用所述解密密钥对所述待解密节进行解密。其中,所述处理器902还用于,获取所述待解密节的权限信息;若根据所述权限信息确定所述待解密节的权限为只读权限,则将所述待解密节的权限修改为可写权限。在本发明实施例中,当客户端需要对待解码节进行解码时,需要从服务器获取对应的解密密钥进行解码。因此,如果没有该解密密钥,客户端则无法对so库解密,也无法用ida等工具进行静态逆向分析。因此,利用本发明实施例的方案提高了so库的安全性。如图10所示,本发明实施例的电子设备包括:处理器1000,用于读取存储器1020中的程序,执行下列过程:通过收发机1010接收客户端发送的待处理so库的哈希值,其中,在所述待处理so库中包括待解密节;根据所述哈希值获取对应的密钥;向所述客户端发送所述密钥,以使所述客户端根据所述密钥解密所述待解密节;收发机1010,用于在处理器1000的控制下接收和发送数据。其中,在图10中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器1000代表的一个或多个处理器和存储器1020代表的存储器的各种电路链接在一起。总线架构还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口提供接口。收发机1010可以是多个元件,即包括发送机和收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器1000负责管理总线架构和通常的处理,存储器1020可以存储处理器1000在执行操作时所使用的数据。处理器1000负责管理总线架构和通常的处理,存储器1020可以存储处理器1000在执行操作时所使用的数据。处理器1000还用于读取所述计算机程序,执行如下步骤:确定所述待处理so库中的待加密节;对所述待加密节进行加密,并将加密后的待加密节写入所述待处理so库中;生成写入有所述加密节的待处理so库的加密信息,并存储所述加密信息。处理器1000还用于读取所述计算机程序,执行如下步骤:根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待加密节的开始位置,并获取所述待加密节的大小;根据所述待加密节的开始位置和所述待加密节的大小,获取所述待加密节。其中,所述加密信息为哈希值和密钥对。其中,所述待加密节为能够进行内存映射处理的节。如图11所示,本发明实施例的电子设备,包括:处理器1100,用于读取存储器1120中的程序,执行下列过程:获取待处理so库;从服务器获取所述待处理so库的解密密钥;确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密;收发机1111,用于在处理器1100的控制下接收和发送数据。其中,在图11中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器1100代表的一个或多个处理器和存储器1120代表的存储器的各种电路链接在一起。总线架构还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口提供接口。收发机1111可以是多个元件,即包括发送机和接收机,提供用于在传输介质上与各种其他装置通信的单元。针对不同的用户设备,用户接口1130还可以是能够外接内接需要设备的接口,连接的设备包括但不限于小键盘、显示器、扬声器、麦克风、操纵杆等。处理器1100负责管理总线架构和通常的处理,存储器1120可以存储处理器1100在执行操作时所使用的数据。处理器1100还用于读取所述计算机程序,执行如下步骤:根据所述待处理so库的名称查找进程列表文件;根据查找结果,获取所述so库在进程虚拟空间的地址,获取所述待处理so库。处理器1100还用于读取所述计算机程序,执行如下步骤:获取所述待处理so库的哈希值,并向所述服务器发送所述哈希值;接收所述服务器根据所述哈希值发送的解密密钥。处理器1100还用于读取所述计算机程序,执行如下步骤:根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待解密节的开始位置,并获取所述待解密节的大小;根据所述待解密节的开始位置和所述待解密节的大小,获取所述待解密节;利用所述解密密钥对所述待解密节进行解密。处理器1100还用于读取所述计算机程序,执行如下步骤:获取所述待解密节的权限信息;若根据所述权限信息确定所述待解密节的权限为只读权限,则将所述待解密节的权限修改为可写权限。此外,本发明实施例的计算机可读存储介质,用于存储计算机程序,所述计算机程序可被处理器执行实现以下步骤:接收客户端发送的待处理so库的哈希值,其中,在所述待处理so库中包括待解密节;根据所述哈希值获取对应的密钥;向所述客户端发送所述密钥,以使所述客户端根据所述密钥解密所述待解密节。其中,在所述接收客户端发送的待处理so库的哈希值之前,所述方法还包括:确定所述待处理so库中的待加密节;对所述待加密节进行加密,并将加密后的待加密节写入所述待处理so库中;生成写入有所述加密节的待处理so库的加密信息,并存储所述加密信息。其中,所述确定所述待处理so库中的待加密节,包括:根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待加密节的开始位置,并获取所述待加密节的大小;根据所述待加密节的开始位置和所述待加密节的大小,获取所述待加密节。其中,所述加密信息为哈希值和密钥对。其中,所述待加密节为能够进行内存映射处理的节。此外,本发明实施例的计算机可读存储介质,用于存储计算机程序,所述计算机程序可被处理器执行实现以下步骤:获取待处理so库;从服务器获取所述待处理so库的解密密钥;确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密。其中,所述获取待处理so库,包括:根据所述待处理so库的名称查找进程列表文件;根据查找结果,获取所述so库在进程虚拟空间的地址,获取所述待处理so库。其中,所述从服务器获取所述待处理so库的解密密钥,包括:获取所述待处理so库的哈希值,并向所述服务器发送所述哈希值;接收所述服务器根据所述哈希值发送的解密密钥。其中,所述确定所述待处理so库中的待解密节,并利用所述解密密钥对所述待解密节进行解密,包括:根据所述待处理so库的elf头部定位节头部表;根据所述节头部表定位所述待解密节的开始位置,并获取所述待解密节的大小;根据所述待解密节的开始位置和所述待解密节的大小,获取所述待解密节;利用所述解密密钥对所述待解密节进行解密。其中,在所述利用所述解密密钥对所述待解密节进行解密之前,还包括:获取所述待解密节的权限信息;若根据所述权限信息确定所述待解密节的权限为只读权限,则将所述待解密节的权限修改为可写权限。在本申请所提供的几个实施例中,应该理解到,所揭露方法和装置,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述收发方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1