一种向目标进程内注入Java字节码的方法及装置的制造方法_2

文档序号:8339505阅读:来源:国知局
[0039]Android框架226是为了编程方便而提供的公共类库,其内可提供各种接口,通话管理接口、位置接口、安装包管理接口等,以提供不同的功能,这些接口可被应用程序层引用。Android应用程序228是基于Android类库的各种接口实现的具有各种功能的应用程序。
[0040]进一步地,上述软件程序以及模块还可包括:本地二进制共享库130以及Java本地接口(Java Native Interface, JNI) 132。本地二进制共享库130例如可为Linux系统下的.so文件。JNI132用于在不同JVM实现间提供一个标准接口,从而使Java应用可以使用本地二进制共享库130,扩充了原有DVM224的功能。
[0041]参阅图4,本实施例的方法包括以下步骤:
[0042]步骤S201,通过Linux系统提供的系统调用修改目标进程的寄存器以加载一个二进制共孚库。
[0043]例如,通过ptrace函数修改目标进程的寄存器,以调用dlopen函数。并通过dlopen函数加载二进制共享库。
[0044]被加载的二进制共享库内可包括自动启动的函数。在一个实例中,上述的自动启动是通过全局变量来实现的。例如,在c/c++语言里,某个二进制共享库(动态链接库)被dlopen加载时,全局变量要被自动初始化,这时任意一个初始化时的函数调用都可以作为入口函数,在这个入口函数就可以完成所有需要的事件,例如执行步骤S202。
[0045]步骤S202,所述二进制共享库将指定路径的包含Java字节码的文件加载到DVM224中,并通过JNI132调用所述Java字节码内的入口函数。
[0046]如上所述,在二进制共享库被加载后,其内自动启动的函数被启动,启动后即执行步骤S202,将指定路径的.dex文件加载到DVM224中,并可通过JNI132调用加载的.dex文件内的入口函数。从而.dex文件内的指令被执行,这些.dex文件的指令可以使用Android框架226提供的各种接口,从而实现基于Android框架226的各种功能,即执行步骤S103。上述的.dex文件是专为Delvik虚拟机设计的一种压缩格式,适合内存和处理器速度有限的系统。
[0047]根据本实施例提供的方法,可以在目标进程中注入依赖Android框架接口执行的代码。从而可在目标进程中实现Android系统的各种功能,因此极大的扩展了目标进程的功能。
[0048]第三实施例
[0049]本实施例提供一种向目标进程内注入Java字节码的装置,参阅图5,其包括:本地注入模块31、以及Java字节码加载模块32。
[0050]本地注入模块31,用于通过宿主操作系统提供的系统调用修改目标进程的寄存器以加载一个二进制共享库。
[0051]Java字节码加载模块32存储在所述二进制共享库内,其随着二进制共享库的加载被自动执行。Java字节码加载模块32用于将指定路径的包含Java字节码的文件加载到虚拟机中,并调用所述包含Java字节码的文件内的入口函数。Java字节码内包括具体的逻辑代码,以实现具体的功能。
[0052]关于本实施例的装置的其他细节,还可进一步参阅第一实施例。
[0053]根据本实施例的方法,可以实现向目标进程内注入依赖于虚拟机以及运行在虚拟机上的类库的Java字节码,提升了目标进程的功能。
[0054]第四实施例
[0055]本实施例提供一种向目标进程内注入Java字节码的装置,参阅图6,其包括:本地注入模块41、以及dex文件加载模块42。
[0056]本地注入模块41用于通过Linux系统提供的系统调用修改目标进程的寄存器以加载一个二进制共享库。例如,通过ptrace函数修改目标进程的寄存器,以调用dlopen函数。并通过dlopen函数加载二进制共享库。
[0057]dex文件加载模块42存储在所述二进制共享库内,其随着二进制共享库的加载被自动执行。将指定路径的.dex文件加载到DVM224中,并可通过JNI132调用加载的.dex文件内的入口函数。从而.dex文件内的指令被执行,这些.dex文件的指令可以使用Android框架226提供的各种接口,从而实现基于Android框架226的各种功能。
[0058]关于本实施例的装置的其他细节,还可进一步参阅第二实施例。
[0059]根据本实施例提供的方法,可以在目标进程中注入依赖Android框架接口执行的代码。从而可在目标进程中实现Android系统的各种功能,因此极大的扩展了目标进程的功能。
[0060]此外,本发明实施例还提供一种计算机可读存储介质,其内存储有计算机可执行指令,上述的计算机可读存储介质例如为非易失性存储器例如光盘、硬盘、或者闪存。上述的计算机可执行指令用于让计算机或者类似的运算装置完成上述的向目标进程内注入Java字节码的方法及装置。
[0061]以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明,任何本领域技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简介修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【主权项】
1.一种向目标进程内注入Java字节码的方法,所述目标进程运行在一个宿主操作系统上,所述宿主操作系统上还运行有虚拟机,其特征在于,所述方法包括: 通过所述宿主操作系统提供的系统调用修改所述目标进程的寄存器以加载一个二进制共享库,所述二进制共享库内包括随加载被自动启动的函数;以及 通过所述二进制共享库内自动启动的函数将指定路径的包含Java字节码的文件加载到所述虚拟机中,并调用所述Java字节码内的入口函数。
2.如权利要求1所述的向目标进程内注入Java字节码的方法,其特征在于,所述宿主操作系统为Linux ;通过所述宿主操作系统提供的系统调用修改所述目标进程的寄存器以加载一个二进制共享库包括: 通过ptrace函数修改所述目标进程的寄存器以调用dlopen函数,并通过所述dlopen函数加载所述二进制共享库。
3.如权利要求2所述的向目标进程内注入Java字节码的方法,其特征在于,所述虚拟机为Delvik虚拟机;通过所述二进制共享库内自动启动的函数将指定路径的包含Java字节码的文件加载到所述虚拟机中包括:将指定路径的.dex文件加载到所述Delvik虚拟机中。
4.如权利要求1所述的向目标进程内注入Java字节码的方法,其特征在于,在加载所述二进制共享库后还包括:对该二进制共享库进行初始化操作,所述随加载被自动启动的函数为所述初始化操作过程中被调用的函数。
5.如权利要求1所述的向目标进程内注入Java字节码的方法,其特征在于,调用所述Java字节码内的入口函数包括:通过Java本地接口调用所述入口函数。
6.一种向目标进程内注入Java字节码的装置,所述目标进程运行在一个宿主操作系统上,所述宿主操作系统上还运行有虚拟机,其特征在于,所述装置包括: 本地注入模块,用于通过所述宿主操作系统提供的系统调用修改所述目标进程的寄存器以加载一个二进制共享库;以及 Java字节码加载模块,其随所述二进制共享库加载而被调用,用于将指定路径的包含Java字节码的文件加载到所述虚拟机中,并调用所述Java字节码内的入口函数。
7.如权利要求6所述的向目标进程内注入Java字节码的装置,其特征在于,所述宿主操作系统为Linux ; 所述本地注入模块用于通过Ptrace函数修改所述目标进程的寄存器以调用dlopen函数,并通过所述dlopen函数加载所述二进制共享库。
8.如权利要求7所述的向目标进程内注入Java字节码的装置,其特征在于,所述虚拟机为Delvik虚拟机;所述Java字节码加载模块用于:将指定路径的.dex文件加载到所述Delvik虚拟机中。
9.如权利要求6所述的向目标进程内注入Java字节码的装置,其特征在于,所述本地注入模块还用于:对该二进制共享库进行初始化操作,所述随加载被自动启动的函数为所述初始化操作过程中被调用的函数。
10.如权利要求6所述的向目标进程内注入Java字节码的装置,其特征在于,所述Java字节码加载模块用于通过Java本地接口调用所述入口函数。
【专利摘要】本发明涉及一种向目标进程内注入Java字节码的方法及装置。在一个实施例中,上述方法包括:通过宿主操作系统提供的系统调用修改目标进程的寄存器以加载一个二进制共享库,所述二进制共享库内包括随加载被自动启动的函数;以及通过所述二进制共享库内自动启动的函数将指定路径的包含Java字节码的文件加载到所述虚拟机中,并调用所述Java字节码内的入口函数。上述的方法及装置可以实现向目标进程内注入依赖于虚拟机以及运行在虚拟机上的类库的Java字节码,提升了目标进程的功能。
【IPC分类】G06F11-36
【公开号】CN104657258
【申请号】CN201310591379
【发明人】梁家辉
【申请人】腾讯科技(深圳)有限公司
【公开日】2015年5月27日
【申请日】2013年11月21日
【公告号】WO2015074526A1
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1