一种so文件的调用方法及装置制造方法

文档序号:6631766阅读:202来源:国知局
一种so文件的调用方法及装置制造方法
【专利摘要】本申请提供了一种共享对象SO文件的调用方法及装置,打包应用程序前,对SO文件加密,应用程序启动时,将加密的SO文件加载到内存解密,获取到解密后SO文件在内存中的起始地址。当接收到应用程序的调用指令时,提取接口名称,并确定出该接口名称对应的代理接口,进而,触发该代理接口利用该起始地址以及原始接口的偏移地址,确定出原始接口在内存的起始地址,在该起始地址对应的内存中调用原始接口,获得调用结果。可见,本发明利用代理接口接收调用指令,在内存中完成对原始接口的调用,则恶意分析工具在面对本发明中的代理接口的代码实现时,并不能直接获取到原始接口的明文代码,增强了SO文件被反编译的难度,提高了原始接口的安全性。
【专利说明】一种so文件的调用方法及装置

【技术领域】
[0001] 本发明涉及软件【技术领域】,尤其是一种S0文件的调用方法及装置。

【背景技术】
[0002] 安卓系统中,一般使用共享对象(SO, Shared Object)文件封装执行重要功能的函 数。S0文件是一个动态链接库,该库中包含有多个函数接口,分别实现不同的功能,例如,产 生加密密钥、执行交易支付等。当应用程序需要使用S0文件中的某项功能时,则向对应的 函数接口发送调用指令。
[0003] 目前,so文件为明文的二进制文件,被恶意分析工具获取后直接打开即可获知so 文件的原文代码,则必然每个接口函数也暴露为明文文件,容易被篡改,安全性较低。


【发明内容】

[0004] 有鉴于此,本发明提供了一种so文件的调用方法及装置,用以解决现有技术中so 文件中函数接口的安全性较低的技术问题。为实现所述目的,本发明提供的技术方案如 下:
[0005] -种共享对象S0文件的调用方法,包括:
[0006] 当应用程序启动时,将预先加密的so文件加载到内存中进行解密,并获取解密后 so文件在内存中的起始地址;其中,所述预先加密的so文件中包含多个原始接口;
[0007] 当接收到所述应用程序的调用指令时,提取所述调用指令中的原始接口名称,并 依据代理接口与原始接口之间的预设对应关系,确定提取到的所述原始接口名称对应的代 理接口;
[0008] 触发所述代理接口依据所述解密后so文件在内存中的起始地址,以及原始接口 相对于起始地址的偏移地址,确定所述原始接口在内存中的起始地址;
[0009] 依据所述原始接口在内存中的起始地址,调用所述原始接口,获得调用结果。
[0010] 上述的S0文件的调用方法,优选地,所述加密的so文件的加密方式,包括:
[0011] 确定与所述S0文件具有预设调用关系的应用程序文件; '
[0012] 获取所述应用程序文件的哈希值;
[0013]依据所述应用程序文件的哈希值,对所述so文件进行加密,获得加密的so文件。
[0014] 上述的S0文件的调用方法,优选地,所述加密的so文件的加密方式,包括:
[0015] 将所述so文件划分为多个文件段; ·
[0016] 获取每个所述文件段各自对应的加密密钥;
[0017] 分别利用每个所述加密密钥,对各自对应的文件段进行加密,获得加密的so文 件。
[0018] 上述的S0文件的调用方法,优选地,所述原始接口为加密的原始接口;
[0019] 其中,所述依据所述原始接口在内存中的起始地址,调用所述原始接口,获得调用 结果,包括: ' '
[0020] 依据所述原始接口在内存中的起始地址,获取加密的原始接口;
[0021 ] 对所述加密的原始接口进行解密,调用解密后的原始接口,获得调用结果。
[0022] 上述的S0文件的调用方法,优选地,所述触发所述代理接口依据所述解密后S0文 件在内存中的起始地址,以及原始接口相对于起始地址的偏移地址,确定所述原始接口在 内存中的起始地址,包括:
[0023] 触发所述代理接口将所述解密后S0文件在内存中的起始地址加上所述原始接口 相对于起始地址的偏移地址,获得所述原始接口在内存中的起始地址。
[0024] 本申请还提供了一种共享对象S0文件的调用装置,包括:
[0025] 密文文件解密单元,用于当应用程序启动时,将预先加密的S0文件加载到内存中 进行解密,并获取解密后so文件在内存中的起始地址;
[0026] 代理接口确定单元,用于当接收到所述应用程序的调用指令时,提取所述调用指 令中的原始接口名称,并依据代理接口与原始接口之间的预设对应关系,确定提取到的所 述原始接口名称对应的代理接口;
[0027] 原始接口确定单元,用于触发所述代理接口依据所述解密后S0文件在内存中的 起始地址,以及原始接口相对于起始地址的偏移地址,确定所述原始接口在内存中的起始 地址;
[0028] 原始接口执行单元,用于依据所述原始接口在内存中的起始地址,调用所述原始 接口,获得调用结果。
[0029] 上述的S0文件的调用装置,优选地,加密所述密文文件解密单元解密S0文件的单 元,包括:
[0030] 调用程序确定子单元,用于确定与所述so文件具有预设调用关系的应用程序文 件;
[0031] 程序哈希值获取子单元,用于获取所述应用程序文件的哈希值;
[0032] 哈希值加密子单元,用于依据所述应用程序文件的哈希值,对所述S0文件进行加 密,获得加密的so文件。
[0033] 上述的S0文件的调用装置,优选地,加密所述密文文件解密单元解密S0文件的单 元,包括:
[0034] 文件段划分子单元,用于将所述S0文件划分为多个文件段;
[0035] 文件段密钥获取子单元,用于获取每个所述文件段各自对应的加密密钥;
[0036] 文件段加密子单元,用于分别利用每个所述加密密钥,对各自对应的文件段进行 加密,获得加密的S0文件。
[0037] 上述的S0文件的调用装置,优选地,所述原始接口为加密的原始接口;其中,所述 原始接口执行单元包括:
[0038] 加密原始接口获取子单元,用于依据所述原始接口在内存中的起始地址,获取加 密的原始接口;
[0039] 加密原始接口解密子单元,用于对所述加密的原始接口进行解密,调用解密后的 原始接口,获得调用结果。
[0040] 上述的so文件的调用装置,优选地,所述原始接口确定单元包括:
[0041] 原始接口确定子单元,用于触发所述代理接口将所述解密后so文件在内存中的 起始地址加上所述原始接口相对于起始地址的偏移地址,获得所述原始接口在内存中的起 始地址。
[0042]由以上的技术方案可知,本发明中,应用程序启动时,将加密的SO文件加载到内 存中进行解密,进而可获取到解密后so文件在内存中的起始地址。当接收到应用程序的调 用指令时,提取调用指令中的接口名称,并确定出该接口名称对应的代理接口,进而,触发 该代理接口利用该起始地址以及原始接口的偏移地址,确定出原始接口在内存中的起始地 址,在该起始地址对应的内存中调用原始接口,获得调用结果。可见,本发明提供的so文件 的调用方法,并不是原始接口直接生成指令的调用结果,而是利用代理接口接收调用指令, 在内存中完成对原始接口的调用。因此,恶意分析工具在面对本发明中的代理接口的代码 实现时,并不能直接获取到原始接口的明文代码,提高了原始接口的安全性。

【专利附图】

【附图说明】
[0043]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据 提供的附图获得其他的附图。
[0044] 图1为本发明实施例的代码文件与原始so文件的对应关系示意图;
[0045] 图2为本发明实施例提供的S0文件调用方法的流程图;
[0046]图3为本发明实施例提供的原始文件与壳文件的代码实现示例图;
[0047]图4为本发明实施例提供的加密S〇文件的一个流程图;
[0048]图5为本发明实施例提供的加密S0文件的另一流程图;
[0049]图6为本发明实施例提供的S0文件调用装置的结构框图;
[0050]图7为本发明实施例提供的加密S0文件的加密单元的结构框图。

【具体实施方式】
[0051] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0052] 本发明中,预先发布加密的S0文件,并且,提供实现S0文件调用方法的代码文件。 该代码文件可以认为是SO文件的so壳文件,对应so文件中的多个函数原始接口,壳文件 中预先设置有一一对应的代理接口。如图1所示,S0文件中包含有N个原始接口,相对应 地,S0壳文件中包含有N个代理接口及一个数据区域,数据区域存储的是解密后的so文件 的明文文件。
[0053]需要说明,代理接口与原始接口的接口信息(接口名称、接口参数、接口返回值) 相同,这样,应用程序并不需要做相应改进,当需要调用某个原始接口时,只需按照现有技 术一样,发送包含原始接口名称及原始接口参数的调用指令即可,本实施提供的壳文件接 收到该调用指令后,依据该调用指令,确定代理接口,触发代理接口在内存中对原始接口进 行调用。具体地:
[0054]参照图2,其示出了本发明实施例提供的SO文件的调用方法的流程,具体包括: [0055]步骤S101 :当应用程序启动时,将预先加密的so文件加载到内存中进行解密,并 获取解密后so文件在内存中的起始地址。
[0056]其中,本步骤所指的应用程序与so文件具有调用关系,即该应用程序某些功能的 实现需要调用so文件中的接口函数。用户的触发操作,将应用程序启动后,首先将加密后 的SO文件加载到内存中进行解密,进而可以获得解密后的so文件在内存中的起始地址。 [00 57]步骤S102 :当接收到所述应用程序的调用指令时,提取所述调用指令中的原始接 口名称,并依据代理接口与原始接口之间的预设对应关系,确定提取到的所述原始接口名 称对应的代理接口。
[0058] 当用户使用该应用程序中需要调用S0文件的功能时,可以触发该应用程序生成 调用指令,并且,应用程序可将该调用指令发送到本方法的执行模块。需要说明,so文件中 包含有多个原始函数接口,每个函数接口实现不同的功能,可以独立被应用程序调用。应用 程序生成的调用指令中包含有在so文件需要调用的原始函数接口的接口名称。
[0059] 本方法对应的模块即S0壳文件模块中设置有多个代理接口,当S0壳文件接收到 该调用指令后,提取该调用指令中的接口名称,该接口名称是原始接口的名称,可根据该原 始接口名称确定出对应的代理接口。接口名称与代理接口可以使用相同的名称,利用名称 找到代理接口。
[0060] 步骤S103 :触发所述代理接口依据所述解密后so文件在内存中的起始地址,以及 原始接口相对于起始地址的偏移地址,确定所述原始接口在内存中的起始地址。
[0061] 其中,so壳文件触发代理接口执行本步骤方法。具体地,代理接口依据步骤S101 提取到的解密后的so文件在内存中的起始地址,以及预先保存的每个原始接口相对于起 始地址的偏移地址,即可直接获得原始接口在内存中的起始地址,从而找到真正的原始接 □。
[0062] 具体地,在解密S0文件时,首先获得解密后的S0文件在内存中的起始地址,该起 始地址为整个so文件的起始地址,将该起始地址保存在链表的链表头中。同时,将该so 文件中每个原始接口相对于起始地址的偏移地址保存在该链表的后续链表节点中,需要说 明,链表节点中同时需要存储原始接口的名称。也就是说,每一个后续链表节点中存储原始 接口及该原始接口相对于起始地址的偏移地址。进而,在执行so文件的调用方法时,代理 接口首先在链表的表头节点中查找到解密后so文件的起始地址,同时,查找到原始接口所 在的链表节点,在该链表节点提取该原始接口的偏移地址。
[0063] 步骤S104 :依据所述原始接口在内存中的起始地址,调用所述原始接口,获得调 用结果。
[0064] 原始接口的明文代码存储在该起始地址开始的内存区域内,在该内存起始地址开 始的一段内存区域读取该代码段。需要说明,原始接口是函数,每个函数具有各自的结束标 识。因此,只需找到起始地址后,即可读取到完整的原始接口。在获取到原始接口的代码段 后,调用该原始接口的代码段,也就是执行该原始接口函数功能,从而获得调用结果。
[0065] 原始接口不同,其实现的具体功能也不尽相同,生成的调用结果也不尽相同。并 且,有些原始接口可能使用接口参数,当应用程序调用使用接口参数的原始接口时,在发送 的调用指令中会包含相应的接口参数。进而,本方法对原始接口的调用过程可以是:当调用 指令中包含有接口参数时,提取调用指令中的接口参数,将该接口参数传入原始接口,以使 原始接口利用所述接口参数生成调用结果。当然,当调用指令中并未包含有接口参数时,直 接执行原始接口,生成调用结果。
[0066] 需要说明,可以触发步骤Sl〇2中的代理接口执行步骤S104,即代理接口调用原始 接口,获得调用结果。
[0067] 本实施例中,将解密后的so文件加载到内存中,并未存储在磁盘上,因此,恶意分 析程序并不能直接从磁盘上获得解密后的so文件,提高了 so文件的安全性。
[0068]同时,本实施例中实现了对原始接口的代理,隐藏了 so文件中函数接口的明文代 码。具体地,本实施例的代码文件可以认为是so文件的壳文件,恶意分析工具找到的so文 件为加密后的so文件,无法对so文件进行分析。虽然so壳文件并未加密,对该so壳文 件进行分析获取到的是代理接口的明文代码,从实施例提供的调用方法的执行过程可以看 出,代理接口的明文代码实现的是对原始接口的调用过程,在代理接口中并不能找到原始 接口的明文文件,原始接口的明文文件是在调用方法执行过程中生成的,因此,本实施例提 供的调用方法的代码文件隐藏了原始接口的明文文件,实现了对so文件中原始接口的代 码保护。
[0069] 下面结合具体实例对原始S0文件及壳S0文件进行说明。例如,如图3所示,名为 helloworld. so的S0文件中包含有一个名称为java_com_helloworld的原始接口,其代码 实现如图所示。对应该S0文件,上述实施例提供的调用方法的代码文件为helloworld. so 壳文件,该壳文件的具体代码如图所示,壳文件实现的是上述实施例提供的调用方法。具体 地:
[0070] jint JNI-Onload(JavaVM*vm,void*reserved) {
[0071] handle = decode( "encode· so");
[0072] }
[0073] 该段代码实现的是,在应用程序启动时,将加密后的SO文件加载到内存中进行解 密;解密后的S0文件内存起始地址保存在参数handle中。
[0074] extern java_com_helloworld(JNIEnv jclass clazz){ func=dlsym(handle, "java-coffijielloworld,'); return func(env,clazz); }
[0075] 该段代码实现的是,利用SO文件的起始地址及提取到的java_com_helloworld接 口名称获取接口的起始地址。需要说明,利用接口名称对应的原始接口的偏移地址在解密 S0文件时已经生成并保存,利用接口名称可获取到该接口名称对应原始接口的偏移地址, 进而获得原始接口的起始地址。将原始接口的起始地址保存在参数func中,利用接口参数 env及clazz调用该java__com_helloworld接口,返回调用结果。
[0076] 当然,上述代码段只是壳文件的一个示例,只要是能实现上述实施例提供的调用 方法的壳文件都在本发明的保护范围内。
[0077] 从上述示例可以看出,即使恶意分析工具获取到壳代码文件,其也仅能分析获得 上述实现过程,并不能获得明文的SO文件,因此,壳文件实现了对原始so文件的保护。 [0078]上述方法实施例中,发布的S0文件是预先加密的文件。可选地,如图4所示,加密 so文件的具体实现过程可以是:
[0079]步骤S201 :确定与所述S0文件具有预设调用关系的应用程序文件。
[0080]在安卓系统中,安装的多个应用程序中,有些应用程序的功能实现调用S0文件, 因此,根据应用程序开发时定义的调用逻辑,确定需要调用so文件的应用程序文件。
[0081] 步骤S202 :获取所述应用程序文件的哈希值。
[0082]计算确定出的应用程序源代码文件的哈希值,该哈希值具有唯一性,也就是说,一 个应用程序文件对应唯一的哈希值。
[0083] 步骤S2〇3 :依据所述应用程序文件的哈希值,对所述S0文件进行加密,获得加密 的so文件。
[0084] 其中,应用程序文件的哈希值作为加密过程中的密钥,加密算法可以是3DES(三 重数据加密)算法。3DES算法,或者称为Triple DES算法,是对每个数据块进行三次DES 对称加密算法。当然,本发明并不限定于3DES算法,还可以是现有技术中任意一种加密算 法。
[0085] 上述实现过程,对S0文件加密时,使用调用S0文件的应用程序的哈希值作为加密 密钥,由于应用程序的哈希值具有唯一性,因此,该加密S0文件的方式将应用程序与so文 件进行了关联,防止伪造的恶意应用程序对so文件的调用。
[0086] 可选地,如图5所示,加密S0文件的具体实现过程还可以是:
[0087] 步骤S301 :将所述S0文件划分为多个文件段。
[0088] 其中,S0文件是整个的代码实现源文件,可以将该整个文件划分为多个文件段。可 选地,划分的方式可以是依据代码量,还可以是依据不同的函数接口。其一,在利用代码量 划分代码文件段时,可以是均分为预设数量的等份,例如,将1M的代码文件划分为1〇等份, 每一个等份的文件段内的代码量为1K,还可以是随意划分。其二,在利用函数接口进行划分 时,是将S0文件中实现不同功能的函数接口作为不同的文件段,例如,S0文件中包含5个 函数接口,将5个函数接口的代码实现分别作为文件段,则划分为5个文件段。
[0089] 步骤S302 :获取每个所述文件段各自对应的加密密钥。
[0090] 需要说明,每个文件段对应各自的加密密码,优选地,每个文件段的加密密钥是不 同的。其中,加密密钥可以是预先设置的固定值,也可以是根据so文件段生成的。具体地, 利用so文件段生成的加密密钥的方式可以是,将所有的代码段看作是一个闭环,前一个代 码段的密钥是后一个代码段的哈希值。
[0091] 步骤S3〇3 :分别利用每个所述加密密钥,对各自对应的文件段进行加密,获得加 密的so文件。
[0092] 采用预设加密算法,将每一个代码段分别利用各自的加密密钥进行加密。其中,加 密算法可以是现有技术中任意一种加密算法,本发明并不做限定。
[0093] 上述实现过程,S0文件是分段加密,且每一个文件段使用各自的密钥,提高了 S0 文件加密的安全性。
[0094] 加密后的S0文件,利用二进制方式进行保存。具体地,加密后的S0文件保存在二 进制的全局数组中,该全局数组在so壳文件的头文件中。在实现本发明提供的so文件调 用方法的步骤S101时,将头文件中全局数组加载到内存中,进而解密该全局数组即加密后 的so文件。解密后的so文件保存在图1所示的so壳文件的数据区域。
[0095]具体地,上述方法实施例中的步骤S103触发所述代理接口依据所述解密后so文 件在内存中的起始地址,以及原始接口相对于起始地址的偏移地址,确定所述原始接口在 内存中的起始地址的实现过程可以是:
[0096]触发所述代理接口将所述解密后S0文件在内存中的起始地址加上所述原始接口 相对于起始地址的偏移地址,获得所述原始接口在内存中的起始地址。
[0097] 下面对共享对象(S0,Shared Object)文件的调用装置进行介绍。需要说明,对S0 文件的调用装置的说明可参照上文提供的so文件的调用方法的说明,下文不做赘述。
[0098] 请参照图6,其示出了本发明实施例提供的共享对象(S0, Shared Object)文件的 调用装置的结构,应用如图1所示的预先设置的多个代理接口,每个所述代理接口与预先 加密的SO文件中的原始接口一一对应,该装置具体包括:密文文件解密单元100、代理接口 确定单元200、原始接口确定单元300及原始接口执行单元400。其中:
[0099] 密文文件解密单元100,用于当应用程序启动时,将预先加密的S0文件加载到内 存中进行解密,并获取解密后so文件在内存中的起始地址;
[0100] 代理接口确定单元2〇〇,用于当接收到所述应用程序的调用指令时,提取所述调用 指令中的原始接口名称,并依据代理接口与原始接口之间的预设对应关系,确定提取到的 所述原始接口名称对应的代理接口;
[0101] 原始接口确定单元300,用于触发所述代理接口依据所述解密后S0文件在内存中 的起始地址,以及原始接口相对于起始地址的偏移地址,确定所述原始接口在内存中的起 始地址;
[0102] 原始接口执行单元400,用于依据所述原始接口在内存中的起始地址,调用所述原 始接口,获得调用结果。
[0103] 本实施例中,密文文件解密单元100将解密后的so文件加载到内存中,并未存储 在磁盘上,因此,恶意分析程序并不能直接从磁盘上获得解密后的so文件,提高了 so文件 的安全性。
[0104] 同时,本实施例中实现了对原始接口的代理,隐藏了 S0文件中函数接口的明文代 码。具体地,本实施例执行的代码文件可以认为是so文件的壳文件,恶意分析工具找到的 so文件为加密后的so文件,无法对so文件进行分析。虽然so壳文件并未加密,对该so壳 文件进行分析获取到的是代理接口的明文代码,从实施例提供的调用方法的执行过程可以 看出,代理接口的明文代码实现的是对原始接口的调用过程,在代理接口中并不能找到原 始接口的明文文件,原始接口的明文文件是在调用方法执行过程中生成的,因此,本实施例 执行的代码文件隐藏了原始接口的明文文件,实现了对so文件中原始接口的代码保护。
[0105] 需要说明,上述装置执行的是SO文件的调用过程,密文文件解密单元100需要对 预先加密的so文件进行解密。上述装置中包含有加密单元,用于加密所述密文文件解密单 元解密的S0文件。可选地,如图7所示,该加密单元包括:
[0106] 调用程序确定子单元001,用于确定与所述S0文件具有预设调用关系的应用程序 文件;
[0107] 程序哈希值获取子单元〇〇2,用于获取所述应用程序文件的哈希值;
[0108] 哈希值加密子单元003,用于依据所述应用程序文件的哈希值,对所述so文件进 行加密,获得加密的so文件。
[0109] 可选地,原始接口为加密的原始接口,因此,该加密单元还可以包括:
[0110] 加密原始接口获取子单元,用于依据所述原始接口在内存中的起始地址,获取加 密的原始接口;
[0111] 加密原始接口解密子单元,用于对所述加密的原始接口进行解密,调用解密后的 原始接口,获得调用结果。
[0112] 可选地,所述原始接口确定单元300包括:
[0113] 原始接口确定子单元,用于触发所述代理接口将所述解密后S0文件在内存中的 起始地址加上所述原始接口相对于起始地址的偏移地址,获得所述原始接口在内存中的起 始地址。
[0114]需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重 点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。 t〇115]还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个 实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间 存在任何这种实际的关系或者顺序。而且,术语"包括"、"包含"或者其任何其他变体意在 涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些 要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设 备所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并不排 除在包括上述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0116]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。
【权利要求】
1. 一种共享对象so文件的调用方法,其特征在于,包括: 当应用程序启动时,将预先加密的so文件加载到内存中进行解密,并获取解密后so文 件在内存中的起始地址;其中,所述预先加密的so文件中包含多个原始接口; 当接收到所述应用程序的调用指令时,提取所述调用指令中的原始接口名称,并依据 代理接口与原始接口之间的预设对应关系,确定提取到的所述原始接口名称对应的代理接 Π ; 触发所述代理接口依据所述解密后so文件在内存中的起始地址,以及原始接口相对 于起始地址的偏移地址,确定所述原始接口在内存中的起始地址; 依据所述原始接口在内存中的起始地址,调用所述原始接口,获得调用结果。
2. 根据权利要求1所述的SO文件的调用方法,其特征在于,所述加密的SO文件的加密 方式,包括: 确定与所述so文件具有预设调用关系的应用程序文件; 获取所述应用程序文件的哈希值; 依据所述应用程序文件的哈希值,对所述so文件进行加密,获得加密的so文件。
3. 根据权利要求1所述的SO文件的调用方法,其特征在于,所述加密的SO文件的加密 方式,包括: 将所述so文件划分为多个文件段; 获取每个所述文件段各自对应的加密密钥; 分别利用每个所述加密密钥,对各自对应的文件段进行加密,获得加密的so文件。
4. 根据权利要求1所述的SO文件的调用方法,其特征在于,所述原始接口为加密的原 始接口; 其中,所述依据所述原始接口在内存中的起始地址,调用所述原始接口,获得调用结 果,包括: 依据所述原始接口在内存中的起始地址,获取加密的原始接口; 对所述加密的原始接口进行解密,调用解密后的原始接口,获得调用结果。
5. 根据权利要求1所述的SO文件的调用方法,其特征在于,所述触发所述代理接口依 据所述解S后so文件在内存中的起始地址,以及原始接口相对于起始地址的偏移地址,确 定所述原始接口在内存中的起始地址,包括: 触发所述代理接口将所述解密后so文件在内存中的起始地址加上所述原始接口相对 于起始地址的偏移地址,获得所述原始接口在内存中的起始地址。
6. -种共享对象SO文件的调用装置,其特征在于,包括: 密文文件解密单元,用于当应用程序启动时,将预先加密的so文件加载到内存中进行 解密,并获取解密后so文件在内存中的起始地址; 代理接口确定单元,用于当接收到所述应用程序的调用指令时,提取所述调用指令中 的原始接口名称,并依据代理接口与原始接口之间的预设对应关系,确定提取到的所述原 始接口名称对应的代理接口; 原始接口确定单元,用于触发所述代理接口依据所述解密后so文件在内存中的起 始地址,以及原始接口相对于起始地址的偏移地址,确定所述原始接口在内存中的起始地 址; 原始接口执行单元,用于依据所述原始接口在内存中的起始地址,调用所述原始接口, 获得调用结果。
7. 根据权利要求6所述的SO文件的调用装置,其特征在于,加密所述密文文件解密单 元解密SO文件的单元,包括: 调用程序确定子单元,用于确定与所述so文件具有预设调用关系的应用程序文件; 程序哈希值获取子单元,用于获取所述应用程序文件的哈希值; 哈希值加密子单元,用于依据所述应用程序文件的哈希值,对所述so文件进行加密, 获得加密的so文件。
8. 根据权利要求6所述的SO文件的调用装置,其特征在于,加密所述密文文件解密单 元解密SO文件的单元,包括: 文件段划分子单元,用于将所述so文件划分为多个文件段; 文件段密钥获取子单元,用于获取每个所述文件段各自对应的加密密钥; 文件段加密子单元,用于分别利用每个所述加密密钥,对各自对应的文件段进行加密, 获得加密的so文件。
9. 根据权利要求6所述的SO文件的调用装置,其特征在于,所述原始接口为加密的原 始接口;其中,所述原始接口执行单元包括: 加密原始接口获取子单元,用于依据所述原始接口在内存中的起始地址,获取加密的 原始接口; 加密原始接口解密子单元,用于对所述加密的原始接口进行解密,调用解密后的原始 接口,获得调用结果。
10. 根据权利要求6所述的SO文件的调用装置,其特征在于,所述原始接口确定单元包 括: 原始接口确定子单元,用于触发所述代理接口将所述解密后SO文件在内存中的起始 地址加上所述原始接口相对于起始地址的偏移地址,获得所述原始接口在内存中的起始地 址。
【文档编号】G06F21/62GK104298932SQ201410582383
【公开日】2015年1月21日 申请日期:2014年10月27日 优先权日:2014年10月27日
【发明者】廖敏飞, 刘丽娟, 李文鹏, 许腾, 吴孟晴, 董思 申请人:中国建设银行股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1