一种加解密方法及系统与流程

文档序号:16882323发布日期:2019-02-15 22:17阅读:147来源:国知局
一种加解密方法及系统与流程

本申请涉及计算机技术领域,尤其是涉及一种加解密方法及系统。



背景技术:

目前的安卓操作系统中,加密技术的现有技术方案是借助于xposed框架在安卓操作系统的架构层java程序中放置钩子hook,对架构层java程序的标准输入方法或标准输出方法进行拦截,进而在应用程序调用架构层java程序的标准应用程序编程接口api进行读取操作的时候进行解密,调用标准应用程序编程接口api进行写入操作的时候进行加密。

现有技术的弊端主要包括三个方面:

1、必须安装xposed框架,并且必须对使用安卓操作系统的设备进行root,但root会引入安全问题,因此使用安卓操作系统的设备不允许root;

2、现有技术只能对架构层java程序的标准输入方法和标准输出方法进行拦截,在调用标准应用程序编程接口api时对文件进行加解密,无法在应用程序通过调用java本地接口jni对文件进行读写操作时,对文件进行加解密;

3、只对架构层java程序中的打开方法和关闭方法放置了钩子hook,因此在读取已被加密的文件时,需要将加密文件解密并保存为临时文件,然后再使用应用程序打开临时文件,这将导致文件在内存中以明文存在,从而带来文件内部数据泄漏的风险,加密时亦然。

因此,使用现有技术对文件进行加解密时,安全性较低。



技术实现要素:

有鉴于此,本申请的目的在于提供一种加解密方法及系统,本申请所述方法及系统在对文件进行加解密操作时,克服了现有技术必须对使用安卓操作系统的设备进行root的缺陷,并且在对文件进行加解密的过程中,不会带来文件内部数据泄露的风险,使安全性得到显著提高。

第一方面,本申请实施例提供了一种加解密方法,包括如下步骤:

在获取目标应用程序的启动进程时,将预定功能的系统程序替换为对应的预设程序;

所述目标应用程序调用预设程序,对所述系统程序所要处理的文件进行加密或解密处理。

结合第一方面,本申请实施例提供了第一方面的第一种可能的实施方式,其中,所述将预定功能的系统程序替换为对应的预设程序,包括:

将第一系统程序,替换为打开程序;将第二系统程序,替换为写程序;将第三系统程序,替换为读程序。

结合第一方面,本申请实施例提供了第一方面的第二种可能的实施方式,其中,所述获取目标应用程序的启动进程包括如下步骤:

将所述目标应用程序加载在预定容器程序中,并利用所述预定容器程序获取目标应用程序的启动进程。

结合第一方面的第一种可能的实施方式,本申请实施例提供了第一方面的第三种可能的实施方式,其中,所述预设程序用于执行如下步骤:

在所述第一系统程序用于进行打开操作的情况下,所述打开程序对所述打开操作对应文件的文件名后缀进行判断;

如果所述文件名的后缀符合预设规则,在所述第二系统程序进行写入操作时,利用所述写程序对所述写入的数据进行加密。

结合第一方面的第一种可能的实施方式,本申请实施例提供了第一方面的第四种可能的实施方式,其中,所述预设程序还用于执行如下步骤:

在所述第二系统程序用于进行写入操作的情况下,所述写程序在执行写入操作的过程中,对写入的数据进行加密。

结合第一方面的第四种可能的实施方式,本申请实施例提供了第一方面的第五种可能的实施方式,其中,所述写程序还包括如下步骤:

在所述写程序对应的文件的文件头添加加密标识,或者修改所述写程序所对应的文件的文件头的加密标识。

结合第一方面的第五种可能的实施方式,本申请实施例提供了第一方面的第六种可能的实施方式,其中,还包括如下步骤:

在所述第一系统程序用于进行打开操作的情况下,利用打开程序对所述打开文件操作对应文件的文件头进行判断;

如果所述文件头中包含加密标识,在所述第三系统程序执行读取文件操作时,利用所述读程序对读取的数据进行解密。

结合第一方面的第一种可能的实施方式,所述预设程序还用于执行如下步骤:

在所述第三系统程序用于进行读取操作的情况下,所述读程序在执行读取操作的过程中,对读取的数据进行解密。

结合第一方面,本申请实施例提供了第一方面的第八种可能的实施方式,其中,所述容器程序还包括如下步骤:生成所述加密或解密操作所需的密钥。

第二方面,本申请实施例还提供一种加解密系统,包括容器程序和预设程序:

所述容器程序,用于在获取目标应用程序的启动进程时,将预定功能的系统程序替换为对应的预设程序;

所述预设程序,用于被所述目标应用程序调用,对所述系统程序所要处理的文件进行加密或解密处理。

本申请实施例提供的一种加解密方法及系统,使用对应的预设程序替换系统程序,从而对所述文件进行加密或解密操作。与现有技术中的借助于xposed框架在安卓操作系统的架构层java程序中放置钩子hook的方法相比,无需对使用安卓操作系统的设备进行root,就可以对文件进行用户无感知的加解密操作,从而有效防止未授权的应用程序窃取敏感文件内容,更好的保护了用户隐私。

进一步,本申请实施例提供的加解密方法,不光对架构层java程序的标准输入方法和标准输出方法的进行了替换,也对应用程序调用java本地接口jni进行读写操作的方法进行了替换。因此,在使用本申请实施例方法进行加密的过程中,无需将文件打开为临时文件再进行加密,在使用本申请实施例方法进行解密的过程中,无需将文件解密后保存为临时文件。这样,在加解密过程中,文件不会以明文存在于内存中,从而避免文件内部数据泄露的风险。因此,本申请的加解密方法具有更高的安全性。

为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本申请实施例所提供的一种加解密方法的流程图;

图2示出了本申请实施例所提供的另一种加解密方法实际应用的方法流程图。

图3示出了本申请实施例所提供的另一种加解密方法的架构图;

图4示出了现有技术的一种加解密方法的架构图;

图5示出了本申请实施例所提供的一种加解密系统的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

为便于对本实施例进行理解,首先对本申请实施例所公开的一种加解密方法进行详细介绍。

实施例一

本申请实施例一提供了一种加解密方法,本申请实施例提供的方法可以应用于使用安卓操作系统的设备上安装的应用程序,对所述应用程序读写的文件进行加解密操作。

如图1所示,实施例一提供的方法包括如下步骤:

s101在获取目标应用程序的启动进程时,将预定功能的系统程序替换为对应的预设程序。

将所述目标应用程序加载在预定容器程序中,并利用所述预定容器程序获取目标应用程序的启动进程。这里的目标应用程序就是需要对其读写的数据进行加解密操作的应用程序,所述目标应用程序安装在使用安卓操作系统的设备上。

具体地,所述预定容器程序可以为沙盒程序。

这里,所述容器程序还包括如下步骤:生成所述加密或解密操作所需的密钥。具体地,生成密钥的操作在获取目标应用程序的启动进程后完成,与此同时,还会对在目标应用程序启动时需要加入的钩子hook程序的参数进行初始化。

s102所述目标应用程序调用预设程序,对所述系统程序所要处理的文件进行加密或解密处理。

这里,是通过所述容器程序在目标应用程序启动时,加入钩子hook程序来实现的。

具体地,由于安卓操作系统的程序是开源的,因此可以通过阅读安卓操作系统的程序代码查找安装在安卓操作系统上的应用程序实现打开文件、关闭文件、读取文件和写入文件过程的程序代码,还可以获得应用程序对底层linux内核的调用过程。

在目标应用程序启动时,所述钩子hook程序会对linux内核中的系统运行库里面的全局偏移表got表和过程链接表plt表进行遍历,找到所述目标应用程序实现打开文件、关闭文件、读取文件和写入文件过程时调用的系统程序在内存中的映射地址,并将其替换成对应的预设程序运行时,会在系统运行库中生成的地址,从而完成将预定功能的系统程序替换为对应的预设程序。

具体地,所述将预定功能的系统程序替换为对应的预设程序,包括:

将第一系统程序,替换为打开程序;将第二系统程序,替换为写程序;将第三系统程序,替换为读程序。

具体地,在所述第一系统程序用于进行打开操作的情况下,所述打开程序对所述打开操作对应文件的文件名后缀进行判断;如果所述文件名的后缀符合预设规则,在所述第二系统程序进行写入操作时,利用所述写程序对所述写入的数据进行加密。

具体地,在所述第二系统程序用于进行写入操作的情况下,所述写程序在执行写入操作的过程中,对写入的数据进行加密。并且,在所述写程序对应的文件的文件头添加加密标识,或者修改所述写程序所对应的文件的文件头的加密标识。

具体地,在所述第一系统程序用于进行打开操作的情况下,利用打开程序对所述打开文件操作对应文件的文件头进行判断;

如果所述文件头中包含加密标识,在所述第三系统程序执行读取文件操作时,利用所述读程序对读取的数据进行解密。

具体地,在所述第三系统程序用于进行读取操作的情况下,所述读程序在执行读取操作的过程中,对读取的数据进行解密。

这里,所述加密操作和解密操作用到的加解密算法,可以是任一常用的加解密算法,具体例如应用于使用安卓操作系统的设备上安装的应用程序时,可以包括rc4流加密算法、aes块加密算法或sm4块加密算法。rc4流加密算法在安全性上不如aes块加密算法和sm4块加密算法高,但是在实现上比较简单。

在使用aes块加密算法或sm4块加密算法进行加密时,按数据块的方式对写入的数据进行加密或者对读出的数据进行解密。因此,在写入数据时,如果写入的数据末尾不足一个数据块的数据量,就将写入的数据末尾补入填充数据;在读取数据时,需要对包含读取数据的所有数据块进行解密,并截取出需要读取的部分返回给目标应用程序。

实施例二

如图2所示出是本申请实施例二所提供的另一种加解密方法实际应用的方法流程图,该方法流程是目标应用程序一侧的读写操作流程。

s201密钥初始化;

这里,所述目标应用程序加载在容器程序中,本申请获取目标应用程序的启动进程;之后生成所述加密或解密操作所需的密钥,并对在目标应用程序启动时需要加入的钩子hook程序的参数进行初始化;之后钩子hook程序将预定功能的系统程序替换为对应的预设程序。

具体地,将第一系统程序,替换为打开程序;将第二系统程序,替换为写程序;将第三系统程序,替换为读程序。

具体地,在所述第一系统程序用于进行打开操作的情况下,所述预设程序为预先设定的打开程序;在所述第二系统程序用于进行写入操作的情况下,所述预设程序为预先设定的写程序;在所述第三系统程序用于进行读取操作的情况下,所述预设程序为预先设定的读程序。

s302目标应用程序进行文件操作。

这里,所述目标应用程序加载在容器程序中,正常进行读写文件等操作。

s203如果目标应用程序需要执行读取文件操作,首先需要判断文件是否被加密。

这里,在打开文件时,利用打开程序对所述打开文件操作对应文件的文件头进行判断;如果所述文件头中包含加密标识,在所述第三系统程序执行读取文件操作时,利用所述读程序对读取的数据进行解密。

s204执行解密操作。

这里,所述读程序利用解密算法和步骤s201生成的密钥,对读取的数据进行解密。

s205数据返回。

这里,如果所述打开程序判断需要对文件进行解密操作,就将步骤s204解密后的数据返回给目标应用程序;如果所述打开文件判断不需要对文件进行解密操作,就直接将读取的数据返回给目标应用程序。目标应用程序接收到返回的数据后,显示给用户查看或者根据返回的数据进行处理。

s206如果目标应用程序需要执行写入文件操作,首先需要判断文件是否需要被加密。

这里,在所述第一系统程序用于进行打开操作的情况下,所述预设程序为预先设定的打开程序,所述打开程序对所述打开操作对应文件的文件名后缀进行判断;

如果所述文件名的后缀符合预设规则,在所述第二系统程序进行写入操作时,利用所述写程序对所述写入的数据进行加密。

s207执行加密操作。

如果写入文件操作对应的文件需要进行加密,所述写程序在执行写入文件操作的过程中,利用加密算法和步骤s201生成的密钥,对写入的数据进行加密。

这里,所述写程序还包括如下步骤:在所述写程序对应的文件的文件头添加加密标识,或者修改所述写程序所对应的文件的文件头的加密标识。

s208写入数据。

这里,如果所述文件名的后缀符合预设规则,写入步骤s207加密后的数据;如果所述文件名的后缀不符合预设规则,即写入文件操作对应的文件不需要进行加密,不加密直接执行写入文件操作,写入未进行加密的数据。

实施例三

为了方便对本申请的加解密过程的理解,图3示出了本申请实施例所提供的另一种加解密方法的架构图。如图3所示,本申请获取目标应用程序的启动进程,并且在目标应用程序启动时,加入钩子hook程序。所述钩子hook程序通过对系统运行库的修改,将预定功能的系统程序替换为对应的预设程序,相当于将本申请的透明加解密方法插入到目标应用程序对系统运行库的调用过程中。

相应的,如图4所示是现有技术中的一种透明加解密方法的架构图,现有技术通过在目标应用程序调用安卓操作系统架构framework层提供的应用程序编程接口api的过程中放置钩子,实现对目标应用程序读写文件过程中的加解密操作。

基于相同的技术构思,本申请实施例还提供一种加解密系统,具体可参见以下实施例。

实施例四

如图5所示,基于相同的设计构思,本申请实施例还提供了一种加解密系统500,包括容器程序501和预设程序502:

容器程序501,用于在获取目标应用程序的启动进程时,将预定功能的系统程序替换为对应的预设程序;

预设程序502,用于被所述目标应用程序调用,对所述系统程序所要处理的文件进行进行加密或解密处理。

本申请实施例所提供的进行一种加解密方法的计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

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