程序的监控方法及其防御方法以及相关装置的制造方法

文档序号:8282627阅读:432来源:国知局
程序的监控方法及其防御方法以及相关装置的制造方法【
技术领域
】[0001]本发明涉及计算机软件安全
技术领域
,具体而言,本发明涉及一种程序的监控方法及相关装置,以及一种程序的防御方法及相关装置。【
背景技术
】[0002]Android系统中的安全防御技术,通过以公知的方式向进程注入代码,劫持进程函数,以此类手段来实现对进程的监控和响应,现有技术主要是针对Android4.4之前的版本中的Dalvik虚拟机技术而实现这种安全防御目的的。自Android4.4之后,Android逐渐采用ART虚拟机代替Dalvik,这两者在技术上体现出一些差异。[0003]Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(S卩DalvikExecutable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。[0004]ART代表AndroidRuntime,其处理应用程序执行的方式完全不同于Dalvik,Dalvik是依靠一个Just-In-Time(JIT)编译器去解释字节码。开发者编译后的应用代码需要通过一个解释器在用户的设备上运行,这一机制并不高效,但让应用能更容易在不同硬件和架构上运行。ART则完全改变了这套做法,在应用安装时就预编译字节码到机器码,这一机制称为Ahead-Of-Time(AOT)编译。在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。[0005]由于Dalvik与ART两种模式存在以上的区别,表现到内存空间,前者存在虚拟空间和真实空间之分,后者只有混合空间。因此,在ART模式下,企图通过传统的安全防御技术,来实现对程序进程所调用的函数的监控,将变得更加困难,尤其是对ART模式下的进程所施加的一些监控操作,将会改进其内存栈的结构,在栈上留下痕迹,导致内存访问出错。[0006]更为关键的是,ART的垃圾回收机制也不同于Dalvik,前者只在虚拟空间回收内存垃圾,而后者在混合环境下的真实空间回收垃圾,如果未能考虑这一因素,无论是实现监控技术本身的内存数据,还是被监控进程自身的数据,在资源紧张时,均容易被ART的垃圾回收机制不当回收,导致进程崩溃。特别地,当Android5.0版本之后,采用紧凑型内存回收机制,会对内存对象进行移动,如果未能跟踪这一变动,同样也会导致内存访问异常。【
发明内容】[0007]本发明的目的旨在解决上述至少一个问题,提供一种程序的监控方法及相关装置,用于监控Android5.0版本的应用程序函数;相应的,还提供一种程序的防御方法及相关装置。[0008]本发明提供一种程序的监控方法,包括以下步骤:[0009]定位目标函数所执行的机器码;[0010]写入跳转指令对目标函数进行挂钩;[0011]分发hook函数给已注册的Java回调函数,并防止创建的临时变量被系统垃圾回收机制回收;[0012]是否继续处理hook后的目标函数;[0013]若不处理,则跳回目标函数的挂钩处;[0014]若处理则不跳回,对目标函数执行相应处理。[0015]具体的,所述挂钩操作采用inlinehook的方式。[0016]具体的,所述跳转指令具体为ARM指令。[0017]具体的,所述防止创建的临时变量被系统垃圾回收机制回收具体指Java函数调用Java函数和Java函数调用Native函数两种情况。[0018]一种程序的监控装置,其特征在于,包括:[0019]挂钩模块:用于定位目标函数所执行的机器码;[0020]跳转模块:用于写入跳转指令对目标函数进行挂钩;[0021]分发模块:用于分发hook函数给已注册的Java回调函数,并防止创建的临时变量被垃圾回收机制回收;[0022]判断模块:用于判断是否处理hook后的目标函数;[0023]跳回模块:用于跳回目标函数的挂钩处;[0024]处理模块:用于对目标函数执行相应处理操作。[0025]具体的,所述挂钩模块采用inlinehook的方式。[0026]具体的,所述跳转模块执行的跳转指令为ARM指令。[0027]具体的,所述防止创建的临时变量被系统垃圾回收机制回收具体指Java函数调用Java函数和Java函数调用Native函数两种情况。[0028]一种程序的防御方法,包括以下步骤:[0029]向系统的服务进程注入so文件;[0030]监控系统中应用程序的事件行为;[0031]响应服务进程的指令,处理所述应用程序进程的事件行为,其中,所上述监控的步骤采用上述程序的监控方法执行。[0032]一种程序的防御装置,包括:[0033]注入模块:用于向系统的服务进程注入so文件;[0034]监控模块:用于监控系统中应用程序的事件行为;[0035]响应模块:用于响应服务进程的指令,处理所述应用程序进程的事件行为,[0036]其中,所述监控模块用于执行上述程序的监控方法。[0037]相比现有技术,本发明的方案具有以下优点:[0038]1.提供一种程序的监控方法,通过内联hook将ARM指令集的跳转指令写入目标函数的机器码,实现对ART模式下的Android的任意Java函数的hook。[0039]2.本发明提供的一种程序的监控方法中,分发hook函数给已注册的Java回调函数,并防止创建的临时变量被垃圾回收机制回收。对垃圾回收机制的规避,防止临时变量被回收包括两种情况,分别为Java调Java的垃圾回收机制和Java调Native的垃圾回收机制。这样不仅可以避免Java层调Java层时创建的临时变量被标记,不被回收,也可以避免Java层调Native层时创建的临时变量被标记,不被回收。同时,也可以使ART的垃圾回收机制顺利完成垃圾对象内存的回收。[0040]3.提供一种程序的防御方法,通过采用本发明所述一种ART模式下的函数监控方法实现在ART模式下的防御机制,对ART模式下的Android系统Java层函数进行监控,不同于现有技术的只在JNI层通信时对有限的一些目标函数进行拦截的方法,直接在Java层hook可以很容易找到要拦截的目标函数,并且可以实现对任意行为的目标函数进行拦截。[0041]本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。【附图说明】[0042]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:[0043]图1为一种程序的监控方法的流程示意图;[0044]图2为一种程序的监控装置的原理框图;[0045]图3为一种程序的防御方法的流程示意图;[0046]图4为一种程序的防御装置的原理框图。【具体实施方式】[0047]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。[0048]本
技术领域
技术人员可以理解,除非特意声明,这里使用的单数形式"一"、"一个"、"所述"和"该当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1