防止dex文件从内存中转存的方法及装置的制造方法

文档序号:8512690阅读:354来源:国知局
防止dex文件从内存中转存的方法及装置的制造方法
【技术领域】
[0001]本发明涉及文件加密解密领域,特别涉及一种防止DEX文件从内存中转存的方法及装置。
【背景技术】
[0002]安卓加固目前采用的主要方法就是调用安卓系统dalvik虚拟机提供的导出函数openDexFile来加载内存中的DEX数据,然后再调用相关JAVA函数方法来启动安卓程序。这种做法在对抗静态反编译上是非常有效果的,因为原有的安卓可执行程序文件dex文件已经被提取出来并且被重新加密压缩存储到apk文件不同的位置中。所以,所有的静态反编译软件将找不到真正的dex文件,或者即便找到也不知道用什么解密算法来解密该dex文件,因此就无法进行静态反编译。
[0003]虽然这种方法能够对抗静态反编译,但是却无法对抗动态调试,及动态内存转存。逆向人员可以在dalvik虚拟机的导出函数openDexFile下断点让安卓程序中断下来,并且在这个时候通过openDexFile函数的参数得到解密后的dex内存数据的内存起始地址以及大小。然后通过内存转存工具将这段内存转存到文件中,并且转存后的该文件是一个完整可用的dex文件。最后再通过反编译工具对该dex文件进行反编译,这样,程序的源代码就完完整整的展现在逆向人员面前。
[0004]申请公布号为CN 104317625 A的专利《一种APK文件的动态加载方法》中,提供了一种规避Android逆向工具的反编译方法,需要删除对应核心功能部分源代码的第二 APK文件,在实际反编译时,删除的第二 APK文件可以由逆向人员恢复,从而降低了反编译的难度,仍仅可对抗静态反编译,却无法对抗动态反编译。

【发明内容】

[0005]本发明所要解决的技术问题是:提供一种防止DEX文件从内存中转存的方法及装置,不仅可防止静态反编译,还可防止动态内存转存。
[0006]为了解决上述技术问题,本发明采用的技术方案为:提供一种防止DEX文件从内存中转存的方法,包括:加载DEX文件,解析DEX文件为DEX基础结构数据文件和DEX函数实现字节码数据文件;提取DEX文件中的函数字节码数据,并存储到所述DEX函数实现字节码数据文件;加密压缩所述DEX基础结构数据文件及DEX函数实现字节码数据文件;读取所述DEX基础结构数据文件及所述DEX函数实现字节码数据文件,并解压缩解密;调用davlik虚拟机函数openDexFile以加载所述DEX基础结构数据文件;修改所述DEX基础结构数据文件中函数字节码的偏移,使其指向所述DEX函数实现字节码数据文件中对应的函数字节码数据。
[0007]同时,本发明还对应提供一种防止DEX文件从内存中转存的装置,包括:文件拆分单元,用于加载DEX文件,解析DEX文件为DEX基础结构数据文件和DEX函数实现字节码数据文件;提取存储单元,用于提取DEX文件中的函数字节码数据,并存储到所述DEX函数实现字节码数据文件;加密压缩单元,用于加密压缩所述DEX基础结构数据文件及DEX函数实现字节码数据文件;读取解压解密单元,用于读取所述DEX基础结构数据文件及所述DEX函数实现字节码数据文件,并解压缩解密;调用单元,用于调用davlik虚拟机函数openDexFile以加载所述DEX基础结构数据文件;修改单元,用于修改所述DEX基础结构数据文件中函数字节码的偏移,使其指向所述DEX函数实现字节码数据文件中对应的函数字节码数据。
[0008]本发明的有益效果在于:本发明通过将原始的DEX内存数据分为DEX基础结构数据文件及DEX函数实现字节码数据文件两个文件后,可使逆向人员无法得知DEX函数实现字节码数据文件在何时被进行修复,因此不能对DEX文件进行反编译,其安全性大大增强。
【附图说明】
[0009]图1为本发明防止DEX文件从内存中转存的方法实施例一的流程示意图;
[0010]图2为图1步骤S130之前的具体流程图;
[0011]图3为本发明防止DEX文件从内存中转存的方法实施例二的流程示意图;
[0012]图4为本发明防止DEX文件从内存中转存的方法实施例三的流程示意图;
[0013]图5为本发明防止DEX文件从内存中转存的方法实施例四的流程示意图;
[0014]图6为本发明防止DEX文件从内存中转存的装置实施例五的结构示意图;
[0015]图7为图6中文件拆分单元的具体结构示意图;
[0016]图8为本发明防止DEX文件从内存中转存的装置实施例六的结构示意图;
[0017]图9为本发明防止DEX文件从内存中转存的装置实施例七的结构示意图;
[0018]图10为本发明防止DEX文件从内存中转存的装置实施例八的结构示意图。
【具体实施方式】
[0019]为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
[0020]本发明最关键的构思在于:解析DEX文件为DEX基础结构数据文件和DEX函数实现字节码数据文件,并提取DEX文件中的函数字节码数据,并存储到所述DEX函数实现字节码数据文件;加密压缩所述DEX基础结构数据文件及DEX函数实现字节码数据文件;读取所述DEX基础结构数据文件及所述DEX函数实现字节码数据文件,并解压缩解密;调用davlik虚拟机函数openDexFile以加载所述DEX基础结构数据文件;修改所述DEX基础结构数据文件中函数字节码的偏移,使其指向所述DEX函数实现字节码数据文件中对应的函数字节码数据。这样逆向人员就算在openDexFile下断点拦截并且转存数据,得到的也不过是不完整的没有任何函数实现字节码的DEX文件,不完整的DEX文件既看不到反编译后的代码也运行不了。
[0021]请参照图1,图1为本发明防止DEX文件从内存中转存的方法实施例一的流程示意图,该方法包括如下步骤:
[0022]步骤SllO:加载DEX文件,解析DEX文件为DEX基础结构数据文件和DEX函数实现字节码数据文件;
[0023]首先,加载被保护的DEX文件,该DEX文件可以是源代码文件等,本领域技术人员可以根据该DEX文件创建新的DEX文件,如DEX基础结构数据文件和DEX函数实现字节码数据文件。
[0024]步骤S120:提取DEX文件中的函数字节码数据,并存储到所述DEX函数实现字节码数据文件;
[0025]遍历被保护的DEX文件中的函数字节码数据,提取这些数据,并存储到DEX函数实现字节码数据文件。
[0026]步骤S130:加密压缩所述DEX基础结构数据文件及DEX函数实现字节码数据文件;
[0027]而DEX基础结构数据文件则是通过替换DEX文件中每个类的函数字节码为空函数字节码并存储在该DEX基础结构数据文件。之后对DEX基础结构数据文件与DEX函数实现字节码数据文件进行加密。此时,受保护的DEX文件就被拆分为两个文件,即DEX基础结构数据文件与DEX函数实现字节码数据文件。
[0028]步骤S140:读取所述DEX基础结构数据文件及所述DEX函数实现字节码数据文件,并解压缩解密;
[0029]在程序启动时,读取DEX基础结构数据文件与DEX函数实现字节码数据文件,需要对其进行解压缩解密。
[0030]步骤S150:调用davlik虚拟机函数openDexFile以加载所述DEX基础结构数据文件;
[0031]dal
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1