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

技术编号:11416795 阅读:149 留言:0更新日期:2015-05-06 17:25
本发明专利技术提供一种程序的监控方法及装置,通过向定位的目标函数写入跳转指令进行挂钩;分发给已注册的Java回调函数,并防止创建的临时变量被系统垃圾回收机制回收;不做处理的目标函数跳回挂钩处,否则继续处理目标函数。所述发明专利技术可以实现ART模式下的对Android系统的任意Java函数进行监控,并且不破坏目标函数的堆栈,使ART的垃圾回收机制可以正常进行内存回收。本发明专利技术还提供一种程序的防御方法及装置,采用上述程序的监控方法实现ART模式下的Android系统的防御机制。

【技术实现步骤摘要】

本专利技术涉及计算机软件安全
,具体而言,本专利技术涉及一种程序的监控方法及相关装置,以及一种程序的防御方法及相关装置。
技术介绍
Android系统中的安全防御技术,通过以公知的方式向进程注入代码,劫持进程函数,以此类手段来实现对进程的监控和响应,现有技术主要是针对Android 4.4之前的版本中的Dalvik虚拟机技术而实现这种安全防御目的的。自Android 4.4之后,Android逐渐采用ART虚拟机代替Dalvik,这两者在技术上体现出一些差异。Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。ART代表Android Runtime,其处理应用程序执行的方式完全不同于Dalvik,Dalvik是依靠一个Just-In-Time(JIT)编译器去解释字节码。开发者编译后的应用代码需要通过一个解释器在用户的设备上运行,这一机制并不高效,但让应用能更容易在不同硬件和架构上运行。ART则完全改变了这套做法,在应用安装时就预编译字节码到机器码,这一机制称为Ahead-Of-Time(AOT)编译。在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。由于Dalvik与ART两种模式存在以上的区别,表现到内存空间,前者存在虚拟空间和真实空间之分,后者只有混合空间。因此,在ART模式下,企图通过传统的安全防御技术,来实现对程序进程所调用的函数的监控,将变得更加困难,尤其是对ART模式下的进程所施加的一些监控操作,将会改进其内存栈的结构,在栈上留下痕迹,导致内存访问出错。更为关键的是,ART的垃圾回收机制也不同于Dalvik,前者只在虚拟空间回收内存垃圾,而后者在混合环境下的真实空间回收垃圾,如果未能考虑这一因素,无论是实现监控技术本身的内存数据,还是被监控进程自身的数据,在资源紧张时,均容易被ART的垃圾回收机制不当回收,导致进程崩溃。特别地,当Android 5.0版本之后,采用紧凑型内存回收机制,会对内存对象进行移动,如果未能跟踪这一变动,同样也会导致内存访问异常。
技术实现思路
本专利技术的目的旨在解决上述至少一个问题,提供一种程序的监控方法及相关装置,用于监控Android 5.0版本的应用程序函数;相应的,还提供一种程序的防御方法及相关装置。本专利技术提供一种程序的监控方法,包括以下步骤:定位目标函数所执行的机器码;写入跳转指令对目标函数进行挂钩;分发hook函数给已注册的Java回调函数,并防止创建的临时变量被系统垃圾回收机制回收;是否继续处理hook后的目标函数;若不处理,则跳回目标函数的挂钩处;若处理则不跳回,对目标函数执行相应处理。具体的,所述挂钩操作采用inline hook的方式。具体的,所述跳转指令具体为ARM指令。具体的,所述防止创建的临时变量被系统垃圾回收机制回收具体指Java函数调用Java函数和Java函数调用Native函数两种情况。一种程序的监控装置,其特征在于,包括:挂钩模块:用于定位目标函数所执行的机器码;跳转模块:用于写入跳转指令对目标函数进行挂钩;分发模块:用于分发hook函数给已注册的Java回调函数,并防止创建的临时变量被垃圾回收机制回收;判断模块:用于判断是否处理hook后的目标函数;跳回模块:用于跳回目标函数的挂钩处;处理模块:用于对目标函数执行相应处理操作。具体的,所述挂钩模块采用inline hook的方式。具体的,所述跳转模块执行的跳转指令为ARM指令。具体的,所述防止创建的临时变量被系统垃圾回收机制回收具体指Java函数调用Java函数和Java函数调用Native函数两种情况。一种程序的防御方法,包括以下步骤:向系统的服务进程注入so文件;监控系统中应用程序的事件行为;响应服务进程的指令,处理所述应用程序进程的事件行为,其中,所上述监控的步骤采用上述程序的监控方法执行。一种程序的防御装置,包括:注入模块:用于向系统的服务进程注入so文件;监控模块:用于监控系统中应用程序的事件行为;响应模块:用于响应服务进程的指令,处理所述应用程序进程的事件行为,其中,所述监控模块用于执行上述程序的监控方法。相比现有技术,本专利技术的方案具有以下优点:1.提供一种程序的监控方法,通过内联hook将ARM指令集的跳转指令写入目标函数的机器码,实现对ART模式下的Android的任意Java函数的hook。2.本专利技术提供的一种程序的监控方法中,分发hook函数给已注册的Java回调函数,并防止创建的临时变量被垃圾回收机制回收。对垃圾回收机制的规避,防止临时变量被回收包括两种情况,分别为Java调Java的垃圾回收机制和Java调Native的垃圾回收机制。这样不仅可以避免Java层调Java层时创建的临时变量被标记,不被回收,也可以避免Java层调Native层时创建的临时变量被标记,不被回收。同时,也可以使ART的垃圾回收机制顺利完成垃圾对象内存的回收。3.提供一种程序的防御方法,通过采用本专利技术所述一种ART模式下的函数监控方法实现在ART模式下的防御机制,对ART模式下的Android系统Java层函数进行监控,不同于现有技术的只在JNI层通信时对有限的一些目标函数进行拦截的方法,直接在Java层hook可以很容易找到要拦截的目标函数,并且可以实现对任意行为的目标函数进行拦截。本专利技术附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本专利技术的实践了解到。附图说明本专利技术上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:图1为一种程序的监控方法的流程示意图;图2为一种程序的监控装置的原理框图;图3为一种程序的防御方法的流程示意图;图4为一本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/CN104598809.html" title="程序的监控方法及其防御方法以及相关装置原文来自X技术">程序的监控方法及其防御方法以及相关装置</a>

【技术保护点】
一种程序的监控方法,其特征在于,包括以下步骤:定位目标函数所执行的机器码;写入跳转指令对目标函数进行挂钩;分发hook函数给已注册的Java回调函数,并防止创建的临时变量被系统垃圾回收机制回收;是否继续处理hook后的目标函数;若不处理,则跳回目标函数的挂钩处;若处理则不跳回,对目标函数执行相应处理。

【技术特征摘要】
1.一种程序的监控方法,其特征在于,包括以下步骤:
定位目标函数所执行的机器码;
写入跳转指令对目标函数进行挂钩;
分发hook函数给已注册的Java回调函数,并防止创建的临时变量被
系统垃圾回收机制回收;
是否继续处理hook后的目标函数;
若不处理,则跳回目标函数的挂钩处;
若处理则不跳回,对目标函数执行相应处理。
2.根据权利要求1所述的一种程序的监控方法,其特征在于,所述挂
钩操作采用inline hook的方式。
3.根据权利要求1所述的一种程序的监控方法,其特征在于,所述跳
转指令具体为ARM指令。
4.根据权利要求1所述的一种程序的监控方法,其特征在于,所述防
止创建的临时变量被系统垃圾回收机制回收具体指Java函数调用Java函
数和Java函数调用Native函数两种情况。
5.一种程序的监控装置,其特征在于,包括:
挂钩模块:用于定位目标函数所执行的机器码;
跳转模块:用于写入跳转指令对目标函数进行挂钩;
分发模块:用于分发hook函数给已注册的Java回调函数,并防止创
建的临时变量被系统垃圾回收机制回收;
判断模块:用于判断是否继续处理hook后的目标函数;

【专利技术属性】
技术研发人员:李常坤路轶
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1