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

文档序号:8339505阅读:460来源:国知局
一种向目标进程内注入Java字节码的方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机进程注入技术,尤其涉及一种向目标进程内注入Java字节码的方法。
【背景技术】
[0002]计算机编程中的注入技术是指将一个二进制文件,比如Iinux上的so文件和windows上的dll文件,注入到目标进程中,以实现对目标进程功能的扩展。另一方面,随着计算机技术的发展,虚拟机技术得到了广泛的应用。然而对于那些需要依赖于虚拟机运行的字节码,就很难采用上述的方法注入到目标进程中。

【发明内容】

[0003]有鉴于此,有必要提供一种向目标进程内注入Java字节码的方法及装置,其能将Java字节码注入到目标进程当中。
[0004]一种向目标进程内注入Java字节码的方法,所述目标进程运行在一个宿主操作系统上,所述宿主操作系统上还运行有虚拟机,所述方法包括:
[0005]通过所述宿主操作系统提供的系统调用修改所述目标进程的寄存器以加载一个二进制共享库,所述二进制共享库内包括随加载被自动启动的函数;以及
[0006]通过所述二进制共享库内自动启动的函数将指定路径的包含Java字节码的文件加载到所述虚拟机中,并调用所述Java字节码内的入口函数。
[0007]—种向目标进程内注入Java字节码的装置,所述目标进程运行在一个宿主操作系统上,所述宿主操作系统上还运行有虚拟机,所述装置包括:
[0008]本地注入模块,用于通过所述宿主操作系统提供的系统调用修改所述目标进程的寄存器以加载一个~■进制共孕库;以及
[0009]Java字节码加载模块,其随所述二进制共享库加载而被调用,用于将指定路径的包含Java字节码的文件加载到所述虚拟机中,并调用所述Java字节码内的入口函数。
[0010]根据上述的方法及装置,可以实现向目标进程内注入依赖于虚拟机以及运行在虚拟机上的类库的Java字节码,提升了目标进程的功能。
[0011]为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
【附图说明】
[0012]图1为一个运行有虚拟机的计算机的结构框图。
[0013]图2为第一实施例提供的向目标进程内注入Java字节码的方法流程图。
[0014]图3为安卓设备的结构框图。
[0015]图4为第二实施例提供的向目标进程内注入Java字节码的方法流程图。
[0016]图5为第三实施例提供的向目标进程内注入Java字节码的装置结构框图。
[0017]图6为第四实施例提供的向目标进程内注入Java字节码的装置结构框图。
【具体实施方式】
[0018]为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的【具体实施方式】、结构、特征及其功效,详细说明如后。
[0019]图1为一个运行有虚拟机的计算机的结构框图。可以理解,此处的计算机包括个人电脑、服务器、智能手机、平板电脑等各种具有存储器、处理器架构的计算设置。如图1所示,计算机100包括:存储器102、处理器104以及其他硬件106。可以理解,图1所示的结构仅为示意,其并不对计算机100的结构造成限定。例如,计算机100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
[0020]存储器102可用于存储软件程序以及模块,处理器104通过运行存储在存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器102可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器102可进一步包括相对于处理器104远程设置的存储器,这些远程存储器可以通过网络连接至漏洞检测服务器100。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0021]其他硬件106例如可包括显示器、键盘、网卡、音频电路等等,其一般用于提供输入/输出或者与其他设备交换数据的功能。
[0022]上述的软件程序以及模块例如可包括:操作系统内核122、JVMl24, Java类库126以及Java应用程序128。操作系统内核122直接控制各种硬件,其具体的,例如为可为Windows操内容或者Linux内核。JVM124运行在系统内核122上,其实质上是一个虚构出来的计算机,通过在操作系统内核122上仿真模拟各种计算机功能来实现的。JVM124 —般包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVMl24屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM124在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。Java类库126是为了编程方便而提供的公共类库,Java类库126内可提供各种接口,以提供不同的功能,这些接口可被应用程序层引用。Java应用程序128是基于Java类库的各种接口实现的具有各种功能的应用程序。
[0023]进一步地,上述软件程序以及模块还可包括:本地二进制共享库130以及Java本地接口(Java Native Interface, JNI) 132。本地二进制共享库130例如可为Windows系统下的.dll文件以及Linux系统下的.so文件。JNI132用于在不同JVM实现间提供一个标准接口,从而使Java应用可以使用本地二进制共享库130,扩充了原有JVM124的功能。
[0024]第一实施例
[0025]本实施例提供一种向目标进程内注入Java字节码的方法,参阅图2,上述的方法包括以下步骤:
[0026]步骤S101、通过宿主操作系统提供的系统调用修改所述目标进程的寄存器以加载一个二进制共享库。
[0027]在计算机系统中,程序代码运行的两种模式,一种是用户模式,一种是内核模式。应用层的应用程序运行在用户模式下,而设备驱动程序和文件系统运行在内核模式。在用户模式下运行的程序受到严格的管理,不会破坏系统级应用。而在内核模式下运行的程序可以对电脑有完全的访问权。系统调用就是运行在内核模式下的代码为运行在用户模式下的代码提供服务。
[0028]以Linux系统为例,其系统调用通过int80h实现,用系统调用来区分入口函数。操作系统实现系统调用的基本过程是:应用程序调用库函数(API) ;API将系统调用号存入EAX,然后通过中断调用使系统进入内核态;内核中的中断处理函数根据系统调用号,调用对应的内核函数(系统调用);系统调用完成相应功能,将返回值存入EAX,返回到中断处理函数;中断处理函数返回到API中;API将EAX返回给应用程序。
[0029]应用程序调用系统调用的过程是:把系统调用的编号存入EAX;把函数参数存入其它通用寄存器;触发0x80号中断(int0x80 )。
[0030]具体地,在Linux系统中,可以通过ptrace函数修改目标进程的寄存器,以调用dlopen函数。而dlopen函数是用来加载二进制共享库的。在其他操作系统中,具体的命令可能会不一样,但是其原理及过程是类似的。
[0031]所述的二进制共享库例如可为图1所示的二进制共享库130,其内包括自动启动的函数。在一个实例中,上述的自动启动是通过全局变量来实现的。例如,在c/c++语言里,某个二进制共享库(动态链接库)被dlopen加载时,全局变量要被自动初始化,这时任意一个初始化时的函数调用都可以作为入口函数,在这个入口函数就可以完成所有需要的事件。
[0032]步骤S102,所述二进制共享库将指定路径的包含Java字节码的文件加载到虚拟机中,并调用所述Java字节码内的入口函数。
[0033]如上所述,在二进制共享库被加载后,其内自动启动的函数被启动,启动后即执行步骤S102,将指定路径的包含Java字节码的文件加载到虚拟机中,并可通过JNI132调用加载的Java字节码内包含的入口函数。从而Java字节码内的指令被执行,这些Java字节码内的指令可以使用Java类库内的各种接口,从而实现基于Java类库的各种功能,即执行步骤 S103。
[0034]根据本实施例的方法,可以实现向目标进程内注入依赖于虚拟机以及运行在虚拟机上的类库的Java字节码,提升了目标进程的功能。
[0035]第二实施例
[0036]本实施例提供一种向目标进程内注入Java字节码的方法,其与第一实施例的方法相似,其不同之处在于,本实施例的方法是应用于运行安卓(Android)操作系统的设备上。
[0037]参阅图3,其为一个Android设备的架构示意图。如图3所示,Android设备200包括:存储器102、处理器104以及其他硬件106,其与图1所示相似,可一并参以上述描述。
[0038]图3的存储器102内的软件程序以及模块例如可包括:Linux内核222、Delvik虚拟机224、Android框架226以及Android应用程序228。Linux内核122直接控制各种硬件。Delvik 虚拟机(Delvik Virtual Machine,DVM) 224 运行在系统内核 222 上。JVMl24是一种堆栈机器,而DVM224则是寄存器机。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1