一种应用程序的加密方法、存储介质及终端设备与流程

文档序号:18466237发布日期:2019-08-17 02:29阅读:236来源:国知局
一种应用程序的加密方法、存储介质及终端设备与流程

本发明涉及移动终端和信息安全技术领域,特别涉及一种应用程序的加密方法、存储介质及终端设备。



背景技术:

android系统由google公司和开房手机联盟领导及开发,是一种基于linux自由及开放源代码的操作系统,主要适用于移动设备,如智能手机和平板电脑等。当在android系统中安装应用程序时,可以通过将android安装包(androidpackage,简称apk)文件直接传送到android模拟器或android手机中执行即可实现安装。

由于android的开源性,一个应用程序的代码中包含了大量的字符串,这些字符串往往被黑客作为关键字,用以快速定位核心代码位置(比如:搜索“登录成功”,则可以快速定位到登录的相关代码),从而严重影响了android应用程序的保护和安全,所以对应用程序代码中字符串的加密至关重要。

因而现有技术还有待改进和提高。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的不足,提供一种应用程序的加密方法、存储介质及终端设备,以解决现有技术中应用程序容易被破解,安全性低的问题。

为了解决上述技术问题,本发明所采用的技术方案如下:

一种应用程序的加密方法,其包括:

对应用程序进行解码以获取smali代码;

提取所述smali代码中的字符串,对所述字符串进行加密以生成密文,并在所述密文后插入解密指令;

用所述密文替换所述smali代码中的字符串,以更新所述smali代码;

将所述更新后的smali代码重新打包,以生成加密后的应用程序。

所述应用程序的加密方法,其中,所述应用程序为安卓系统的应用程序。

所述应用程序的加密方法,其中,所述对应用程序进行解码以获取smali代码具体包括:

获取应用程序中的dex文件;

对所述dex文件进行反编译,以获取smali代码。

所述应用程序的加密方法,其中,所述提取所述smali代码中的字符串,对所述字符串进行加密以生成密文,并在所述密文后插入解密指令具体包括:

遍历所述smali代码,并查找所述smali代码中的字符串;

对所述字符串进行加密以生成密文,并在所述密文后插入解密指令。

所述应用程序的加密方法,其中,所述对所述字符串进行加密以生成密文,并在所述密文后插入解密指令具体包括:

采用对称加密算法对所述字符串进行加密以生成密文,并在所述密文后插入解密指令。

所述应用程序的加密方法,其中,所述采用对称加密算法对所述字符串进行加密以生成密文,并在所述密文后插入解密指令具体包括:

当所述对称加密算法为国密sm4时,将类名,方法名以及随机数进行拼接,以生成拼接字符串;

根据哈希算法将所述拼接字符串生成密钥;

通过所述密钥对所述字符串进行加密以生成密文,并在所述密文后插入解密指令。

所述应用程序的加密方法,其中,还包括:

当运行加密后的应用程序时,对插入解密指令的密文进行解密。

所述应用程序的加密方法,其中,所述当运行加密后的应用程序时,对插入解密指令的密文进行解密具体包括:

当运行加密后的应用程序时,将所述应用程序的类名,方法名以及随机数进行拼接,以生成拼接字符串;

根据哈希算法将所述拼接字符串生成密钥;

通过所述密钥对对插入解密指令的密文进行解密。

一种终端设备,其中,包括:处理器和存储器;所述存储器上存储有可被所述处理器执行的计算机可读程序;所述处理器执行所述计算机可读程序时实现如上任意一项所述应用程序的加密方法中的步骤。

一种计算机可读存储介质,其中,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上任意一项所述应用程序的加密方法中的步骤。

有益效果:与现有技术相比,本发明提供了一种应用程序的加密方法、存储介质及终端设备,所述方法包括:对应用程序进行解码以获取smali代码;提取所述smali代码中的字符串,对所述字符串进行加密以生成密文,并在所述密文后插入解密指令;用所述密文替换所述smali代码中的字符串,以更新所述smali代码;将所述更新后的smali代码重新打包,以生成加密后的应用程序。这样,本发明通过获取应用程序中smali代码,并对其中的字符串进行加密处理,进而实现了对应用程序中字符串的加密,从而提高了应用程序的安全性。

附图说明

图1为本发明提供的一种应用程序的加密方法较佳实施例的流程图。

图2为本发明提供的一种应用程序的加密方法中步骤s100的具体流程图。

图3为本发明提供的一种应用程序的加密方法中步骤s200的具体流程图。

图4为本发明提供的终端设备较佳实施例的结构原理图。

具体实施方式

本发明提供一种应用程序的加密方法、存储介质及终端设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

下面结合附图,通过对实施例的描述,对发明内容作进一步说明。

请参照图1,图1为本发明提供的一种应用程序的加密方法较佳实施例的流程图。所述方法包括:

s100、对应用程序进行解码以获取smali代码。

具体地,我们用工具反编译一些app的时候,会看到一个smali文件夹,里面其实就是每个java类所对应的smali文件。android虚拟机dalvik并不是执行java虚拟机jvm编译后生成的class文件,而是执行再重新整合打包后生成的dex文件,dex文件反编译之后就是smali代码,可以说,smali语言是dalvik的反汇编语言。相应的,如图2所示,所述对应用程序进行解码以获取smali代码具体包括:

s101、获取应用程序中的dex文件;

s102、对所述dex文件进行反编译,以获取smali代码。

具体地,所述dex文件就是android虚拟机运行的程序,开发人员在发布androidapp时,首先要把java代码编译为class字节码,然后通过dx工具把class字节码转为dex文件格式。

进一步,通过反编译工具(baksmali.jar)对所述dex文件进行反编译,执行反编译后会在当前目录下产生一个out文件夹,这个文件夹中的资源(全部是扩展名为.smali的文件)即是反编译结果。也就是说,通过上述步骤即可获取到应用程序的smali文件及代码。需要说明的是,在本发明的具体实施过程中,所述应用程序优选为安卓系统的应用程序。

s200、提取所述smali代码中的字符串,对所述字符串进行加密以生成密文,并在所述密文后插入解密指令。

具体地,如图3所示,所述提取所述smali代码中的字符串,对所述字符串进行加密以生成密文,并在所述密文后插入解密指令具体包括:

s201、遍历所述smali代码,并查找所述smali代码中的字符串。

具体地,通过字符串赋值指令来查找smali代码中的字符串位置,本实施例中,采用const-string/const-string-jumbo作为关键字,来查找smali代码中的字符串位置。通过定位这两个指令,能够拿到代码中使用的具体字符串,从而可以查找到所述smali代码中的字符串。例如,const-stringv0,“hello”//把字符串“hello”,赋值给v0寄存器。

需要说明的是,dex的dalvik指令一共有256种指令,其中这两种是字符串赋值指令。本实施例中优选采用const-string-jumbo指令,这是由于const-string-jumbo与const-string相比,能够保存的字符串id范围更大。

s202、对所述字符串进行加密以生成密文。具体地,本实施例中优选采用对称加密算法对所述字符串进行加密以生成密文。例如,加密后的密文可以是,"\u11cf\ue665"。相应的,所述采用对称加密算法对所述字符串进行加密以生成密文具体包括:

s2021、当所述对称加密算法为国密sm4时,将类名,方法名以及随机数进行拼接,以生成拼接字符串;

s2022、根据哈希算法将所述拼接字符串生成密钥;

s2023、通过所述密钥对所述字符串进行加密,以生成密文。

具体地,本发明为了提高解密速度,优选采用了对称加密算法,例如,国密sm4(国密4加密算法),密钥由应用程序的类名+方法名+随机数拼接成字符串,并对拼接后的字符串采用哈希算法(国密3散列算法)来计算并生成密钥值,以确保密钥的随机性。

进一步,通过所述生成的密钥再对所述smali代码中的字符串进行加密,以生成密文。之后还包括s203、在所述密文后插入解密指令,用于后面在运行应用程序时对所述应用程序解密。

s300、用所述密文替换所述smali代码中的字符串,以更新所述smali代码。

具体地,用所述密文替换所述smali代码中的字符串,以更新所述smali代码。这样,通过将smali代码中的字符串加密,并用加密后的密文替代未加密的字符串,从而实现了androidjava字符串的加密,保证了应用程序的安全性。

例如,使用密文来替换明文中的字符串,cosnt-stringv0,"\u11cf\ue665"//把加密后的字符串“\u11cf\ue665”保存到v0寄存器。

s400、将所述更新后的smali代码重新打包,以生成加密后的应用程序。

具体地,将所述更新后的smali代码重新打包,其可以通过重新编译smali为dex的文件,以生成加密后的apk,从而以生成加密后的应用程序。

进一步,当运行加密后的应用程序时,对插入解密指令的密文进行解密。

具体地,运行加密后的应用程序的apk,使用到加密的字符串时,在有加密字符串后插入的解密指令进行解密。相应的,所述当运行加密后的应用程序时,对插入解密指令的密文进行解密具体包括:

s401、当运行加密后的应用程序时,将所述应用程序的类名,方法名以及随机数进行拼接,以生成拼接字符串;

s402、根据哈希算法将所述拼接字符串生成密钥;

s403、通过所述密钥对对插入解密指令的密文进行解密。

例如代码如下,

invoke-static{v0},dec//把v0寄存器中保存的,密文字符串,传递给dec解密函数进行解密,得到明文字符串“hello"

move-result-obectv0//把dec解密后的字符串"hello",赋值给v0寄存器

本实施例中,对加密的应用程序进行解密,首先要获取用于解密的密钥,其可以从方法调用栈中获取当前应用程序的类名以及方法名,再另外读取记录的随机数,并将所述类名、方法以及随机数来拼接成字符串,并对拼接后的字符串采用哈希算法(国密3散列算法)来计算并生成密钥值,通过所述秘钥值即可实现应用程序的解密。

由于android应用程序代码中的字符往往被黑客作为关键字,快速定位到核心代码位置,所以对字符串的加密处理至关重要,本发明通过反编译,对smali代码进行处理,从而达到对android字符串进行加密的效果,不需要提供源代码,过程对用户透明,集成方便。

本发明还提供了一种终端设备,如图4所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(communicationsinterface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。

此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。

存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令或模块。处理器30通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。

存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述实施例所述的应用程序的加密方法中的步骤。

此外,上述终端设备以及存储介质中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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