基于Hook的Android资源文件防护方法、设备和存储介质与流程

文档序号:17892055发布日期:2019-06-13 15:43阅读:423来源:国知局
基于Hook的Android资源文件防护方法、设备和存储介质与流程

本发明涉及移动终端信息安全技术领域,尤其涉及的是基于hook的android资源文件防护方法、设备和存储介质。



背景技术:

基于android系统的apk文件是javajar包格式的扩展,当然也是zip文件格式的扩展格式。apk文件以.apk为后缀,apk文件主要包含:代码、资源、签名文件等。具体而言,包含:androidmanifest.xml:该文件用来声明应用程序的包名称、版本、组件和其他数据;classes.dex:该文件包含应用程序的可执行代码,该文件格式是dalvikvm的原生des格式;resources.arsc:该文件是资源索引表,包含res下的各类资源,如字符串和类型等;assets:该目录下存放着资源文件,如数据库、字体文件、媒体文件、图片文件等;lib:该目录下存放着库文件;meta-inf:该目录下存放着签名文件;res:该目录下存放着资源文件,其与assets目录的差异在于res目录下的子目录是规定好的,除了raw子目录,其他的子目录都参与编译,这些子目录下的资源是通过编译出的r类在代码中访问,而assets目录下的资源子目录的建立则不受限制,assets目录下的资源访问是直接通过引用文件名。

不法分子通过windows的winrar或者linux的unizip就能直接将apk解压,轻而易举提取上诉任意类型目录、文件。且不法分子一般会根据资源id、资源名和xml布局文件的id来快速定位dex里面核心功能的位置(dex里面引用资源是通过id或名字),从而轻松实现功能破解,并且资源文件在apk中都是明文未加密的,例如图片,xml,js,html,很容易被其它公司或个体直接盗用或者破解。

因此,现有技术还有待于改进和发展。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种基于hook的android资源文件防护方法、设备和存储介质,以解决资源文件容易被直接盗用或者破解,以及根据资源id、资源名和xml布局文件的id来快速定位dex文件里面核心功能的位置从而破解apk的问题。

一种基于hook的android资源文件防护方法,包括:

a、对配置好的需加密的资源文件进行压缩,压缩成一zip文件。

b、将压缩好的zip文件进行加密处理,得到经加密处理的zip文件并存储;

c、将解密代码插入dex文件内,并重新编译生成dex文件;

d、将加密后的apk进行重新打包;

e、安装apk文件后并运行,并通过hook系统进行拦截,将加密后的资源文件自动解密,并将解密后的资源文件返回给系统进行显示。

所述步骤a之前还包括步骤:

a1、对apk文件进行拆包处理,获取res、lib和assets目录下的资源文件,其中,lib目录下的资源文件为so库文件。

所述步骤c具体包括:

c1、反编译dex文件并生成smali代码文件;

c2、将解密代码插入smali代码文件的入口位置;

c3、重新编译c2步骤中修改后的smali代码文件,并编译生成dex文件。

在所述步骤c中,添加到dex文件中smali文件包括a.smali、k.smali、l.smali、m.smali、r.smali与z.smali;

其中,所述a.smali用于application代码中,当apk没有application时,androidmanifest.xml里面指向该application代码,oncreate内调用解密函数;

所述k.smali内是接口,用于添加解密后的用于添加解密后的res与assets目录下的资源文件的搜索路径;

所述l.smali用于解密代码,解密压缩后的资源zip文件,然后调用k.smali里面的接口新增解密后的res与assets目录下的资源文件搜索路径,用于调用m.smali内的接口并新增解密后的lib目录下的so库文件的搜索路径;

所述m.smali里面是接口,用于添加解密后的so库文件的搜索路径;

所述r.smali与z.smali均为zip操作接口。

所述步骤e包括:

e1、通过hook拦截系统调用资源的接口,并调用解密函数将压缩后的zip文件进行解密;

e2、调用k.smali里面的接口新增解密后的res与assets目录下的资源文件搜索路径,以及调用m.smali里面的接口新增解密后的lib目录下的so库文件的搜索路径;

e3、将解密后的资源文件返回给系统进行显示。

在所述步骤e2之后还包括:

所述步骤e2还包括:

e21、调用hook系统api,用于辅助查找解密后的资源文件,对于隐藏的资源文件从指定目录去查找解密后的资源文件。

所述步骤c具体包括:

d1、将回编译好后的dex文件替换原dex文件,将加密前的资源文件删除掉;

d2、将整个解压目录进行压缩成apk文件,并进行签名操作。

在所述步骤b中,通过自定义加密算法对压缩好的zip文件进行加密,所述自定义算法至少包括sm4或aes中的一种。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法中的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法中的步骤。

综上所述,一种基于hook的android资源文件防护方法、计算机设备和存储介质,所述方法包括步骤:对配置好的需加密的资源文件进行压缩,压缩成一zip文件;将压缩好的zip文件进行加密处理,得到经加密处理的zip文件并存储;将解密代码插入dex文件内,并重新编译生成dex文件;将加密后的apk进行重新打包;运行apk文件,并通过hook系统进行拦截,将加密后的资源文件自动解密,并将解密后的资源文件返回给系统进行显示,通过对资源文件加密隐藏后,让不法分子查看不到资源文件,不知道有哪些资源,从而无法轻松定位到核心代码,有效防止了资源文件的泄露,并大大提高了apk安全强度。

附图说明

图1为本发明方法实施例中一种基于hook的android资源文件防护方法的流程示意图;

图2为本发明方法实施例中一种基于hook的android资源文件防护方法中apk加密的流程示意图;

图3为本发明方法实施例中一种基于hook的android资源文件防护方法中apk解密的流程示意图;

图4为一个实施例中计算机设备的内部结构图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本申请提供的基于hook的android资源文件防护方法,可以应用于终端中。其中,终端可以但不限于是各种个人计算机、笔记本电脑、手机、平板电脑、车载电脑和便携式可穿戴设备。本发明的终端采用多核处理器。其中,终端的处理器可以为中央处理器(centralprocessingunit,cpu),图形处理器(graphicsprocessingunit,gpu)、视频处理单元(videoprocessingunit,vpu)等中的至少一种。

在一个实施例中,如图1所示,提供了一种基于hook的android资源文件防护方法,以该方法应用于上述终端为例进行说明,包括以下步骤:

s100、对apk文件进行拆包处理,获取res、lib和assets目录下的资源文件,其中,lib目录下的资源文件为so库文件;

具体的,对apk进行拆包处理并提取资源,其中,提取assets与res目录下的资源文件,但不包含res/anim/与图标文件,并lib目录下的所有so库文件提取出来。

s200、对配置好的需加密的资源文件进行压缩,压缩成一zip文件;

具体的,对配置好的需要加密的资源文件(assets下的资源,res目录下的资源,不包含res/anim/与图标文件)和so库(lib目录下的所有so库)文件进行压缩,并生成一个zip文件。

s300、将压缩好的zip文件进行加密处理,得到经加密处理的zip文件;

具体的,通过自定义加密算法对压缩好的zip文件进行加密,以对assets与res目录下的资源文件,以及lib目录下的所有so库文件加密隐藏,让他人不知道有这些资源文件,加密能有效保护资源文件不被查看利用,两层防护大大提高了apk资源的安全性,加密后无法通过zip工具打开,其中,所述自定义算法至少包括sm4或aes中的一种。

s400、将解密代码插入dex文件内,并重新编译生成dex文件;

所述步骤s400具体包括:

s410、反编译dex文件并生成smali代码;

s420、将解密代码插入smali代码文件的入口位置,其中,所述入口位置为应用启动的入口函数;

s430、重新编译c2步骤中修改后的smali代码文件,并编译生成dex文件。

具体的,先调用baksmali.jar反编译dex成smali代码,然后添加解密smali后调用smali.jar重新编译生成dex。

其中,添加到dex文件中smali文件包括a.smali、k.smali、l.smali、m.smali、r.smali与z.smali;

其中,所述a.smali用于application代码中,当apk没有application时,androidmanifest.xml里面指向该application代码,oncreate内调用解密函数l.r();

所述k.smali内是接口,用于往classloader的pathlist对象里面添加解密后的资源文件的搜索路径;

所述l.smali用于解密代码,解密压缩后的资源zip文件,然后调用k.smali里面的接口新增解密后的res与assets目录下的资源文件搜索路径,用于调用m.smali内的接口并新增解密后的lib目录下的so库文件的搜索路径;

所述m.smali里面是接口,用于往classloader的pathlist对象里面添加解密后的so库文件的搜索路径;

所述r.smali与z.smali均为zip操作接口。

s500、将加密后的apk进行重新打包;

所述步骤s500具体包括:

s510、将回编译好后的dex文件替换原dex文件,并将加密前的资源文件删除掉;

s520、将整个解压目录进行压缩成apk文件,并进行签名操作。

其中,将加密后的apk进行重新打包,用于验证apk是否已经加密。

s600、安装apk文件后并运行,并通过hook系统进行拦截,将加密后的资源文件自动解密,并将解密后的资源文件返回给系统进行显示。

所述步骤s600包括:

s610、通过hook拦截系统调用资源文件的接口,并调用解密函数l.r(),将压缩后的zip文件进行解密;

s620、调用k.smali里面的接口新增解密后的res与assets目录下的资源文件搜索路径,以及调用m.smali里面的接口新增解密后的lib目录下的so库文件的搜索路径;

s630、将解密后的资源文件返回给系统进行显示。

在所述步骤s620之后还包括:

s621、调用hook系统api,用于辅助查找解密后的资源,对于隐藏的资源文件从指定目录去查找解密后的资源文件。

具体的,通过调用libhts.sohook系统api,辅助查找解密后的资源文件,android8.0以下版本通过hook系统中assetmanager:opennonasset方法拦截系统查找资源文件过程,对于隐藏的资源文件从指定目录去查找解密后的资源文件,android9.0则通过版本hook系统中apkassets:open,libziparchive.so的findentry和filedescriptor函数来查找解密后的资源文件。

通过对资源文件加密隐藏后,让不法分子查看不到资源文件,不知道有哪些资源,从而无法轻松定位到核心代码,有效防止了资源文件的泄露,并大大提高了apk安全强度。

应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

如图2所示,为更好的理解本申请,本发明还提供了一种基于hook的android资源文件防护方法中apk加密的流程示意图,如图所示,apk加密过程包括步骤:

s10、开始;

s11、将未处理的apk文件(也即未加密的apk文件)进行拆包处理;

s12、提取assets/res目录下的资源文件以及lib目录下的so库文件;

s13、对配置好的需加密的资源文件进行压缩,并加密隐藏;

s14、往dex文件内添加解密代码,添加解密库;

s15、得到处理后的apk,也即加密隐藏后的apk;

s16、结束。

如图3所示,为更好的理解本申请,本发明还提供了一种基于hook的android资源文件防护方法中apk解密的流程示意图,如图所示,apk解密还远过程包括步骤:

s20、开始;

s21、获取加密后的apk;

s22、hook拦截;

其中,通过hook拦截系统调用资源文件(读写操作)的接口,并调用解密函数l.r(),并将压缩后的zip文件进行解密,即执行步骤s25。

s23、assetmanager:opennonsset;其中,若是android8.0以下版本则通过hook系统中assetmanager:opennonasset方法拦截系统查找资源文件过程,对于隐藏的资源文件从指定目录去查找解密后的资源文件。

s24、apkassets:open,findentry,getfiledescriptor;其中,若是android9.0则通过版本hook系统中apkassets:open,libziparchive.so的findentry和filedescriptor函数来查找解密后的资源文件。

s25、解密资源文件,添加资源文件搜索路径;

s26、内存中明文显示,即将解密后的资源文件返回给系统进行显示;

s27、结束。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于hook的android资源文件防护方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:

s100、将压缩好的zip文件进行加密处理,得到经加密处理的zip文件;

s200、将解密代码插入dex文件内,并重新编译生成dex文件;

s300、将加密后的apk进行重新打包;

s400、运行apk文件,并通过hook系统进行拦截,将加密后的资源文件自动解密,并将解密后的资源文件返回给系统进行显示。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

s100、将压缩好的zip文件进行加密处理,得到经加密处理的zip文件;

s200、将解密代码插入dex文件内,并重新编译生成dex文件;

s300、将加密后的apk进行重新打包;

s400、运行apk文件,并通过hook系统进行拦截,将加密后的资源文件自动解密,并将解密后的资源文件返回给系统进行显示。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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