android 脱壳 虚拟机

【android 脱壳 虚拟机】技术特征:
1.一种基于虚拟机的沙箱脱壳方法,其特征在于,包括以下步骤:
启动虚拟机,将系统的类加载器替换为预定义类加载器,加载用于沙箱脱壳的自定义虚拟机代码包,得到可执行脱壳代码的运行环境,其中,所述自定义虚拟机代码包用于为应用程序执行提供接口,并为脱壳流程提供入口;
在虚拟机中读取待脱壳的目标应用的包名和主名,并根据包名和主名构建目标应用的上下文环境和资源访问接口;
构架目标应用的资源访问接口,模拟目标应用的正常执行流程,将与目标应用匹配的上下文环境传递进目标应用的启动参数中,在沙箱中对目标应用进行程序代码解密,得到目标应用的程序代码 。
2.一种基于虚拟机的沙箱脱壳系统,其特征在于,包括:
执行控制模块,用于启动虚拟机,将系统的类加载器替换为预定义类加载器,加载用于沙箱脱壳的自定义虚拟机代码包,得到可执行脱壳代码的运行环境,其中,所述自定义虚拟机代码包用于为应用程序执行提供接口,并为脱壳流程提供入口;
系统框架模块,在虚拟机中读取待脱壳的目标应用的包名和主名,并根据包名和主名构建目标应用的上下文环境和资源访问接口;
脱壳模块,构建目标应用的资源访问接口,调用目标应用执行入口,模拟目标应用的正常执行流程,将与目标应用匹配的上下文环境传递进目标应用的启动参数中,在沙箱中对目标应用进行程序代码解密,得到目标应用的程序代码 。
3.根据权利要求1所述的方法或权利要求2所述的系统,其特征在于,启动虚拟机时还包括构建应用执行所需的基本接口的方法,该方法包括以下步骤:
创建虚拟机对象,在内存结构中初始化用于查找类的缓存;

android 脱壳 虚拟机

文章插图
在虚拟机中创建用于构建基本接口的基础类;
加载系统框架层代码包,根据基础类构建应用执行时能够直接调用的基本接口 。
4.根据权利要求1所述的方法或权利要求2所述的系统,其特征在于,将系统的类加载器替换为预定义类加载器的方法为:
虚拟机启动时指定系统的类加载器的全局变量,判断系统查找类的方式;
若为无类加载器的方式,在全局变量中指定自定义虚拟机代码包,并查找类;
若为使用类加载器的方式,构造预定义类加载器并替换系统的类加载器,通过该预定义的类加载器查找自定义虚拟机代码包的路径,加载自定义虚拟机代码包 。
5.根据权利要求1所述的方法或权利要求2所述的系统,其特征在于,自定义虚拟机代码包的实现方法为:
获取自定义虚拟机代码包的jar文件,存放到与目标应用同名的结构体中;
将结构体存放到全局的扩展变量中;
执行查找系统类的流程,从全局变量中通过类名查找系统类;从全局的扩展变量中查找自定义虚拟机的类,并将其添加到哈希表中,下次查找该类时直接从哈希表中获取;
若为自定义虚拟机未实现的类,从全局变量中的系统类进行替换;若为与系统类同名的类,用自定义虚拟机的类替换系统类 。
6.根据权利要求1所述的方法或权利要求2所述的系统,其特征在于,所述模拟的目标应用的程序代码在内存中的存放形式为结构体,包括dex文件内存映射指针,dex文件各区域地址指针和区域大小,以及执行时期直接相关的结构体和 。
android 脱壳 虚拟机

文章插图
7.根据权利要求6所述的方法,其特征在于,在沙箱中对模拟的目标应用进行程序代码解密的方法为: