一种Hook攻击检测方法、存储介质及移动终端与流程

文档序号:18901309发布日期:2019-10-18 21:58阅读:608来源:国知局
一种Hook攻击检测方法、存储介质及移动终端与流程

本发明涉及移动终端技术领域,具体涉及一种hook攻击检测方法、存储介质及移动终端。



背景技术:

android系统是目前移动终端操作系统应用最广泛的系统,android系统的市场占有率非常高且每年都呈正增长趋势,但是android系统也因其自身的开放性和高市场占有率备受黑客青睐。

hook技术是通过一段代码侵入(比如反射、代理)到应用程序(以下简称应用)的启动过程中,在应用正常情况下应执行的代码前后插入其它功能代码。通常情况下,黑客通过hook技术在了解应用的整体运行流程后,可以劫持获取到个人的隐私数据(比如个人登陆账号、密码或支付密码等)以及应用沙盒的完整数据(沙盒为应用的一种安全机制,对应用进行隔离,包括运行环境和用户数据等)。

目前android系统中应用对于自身的保护主要通过对数据进行加密等手段,然而黑客依然可以通过一些工具来完成对应用的hook,最常见的为xposed框架、cydiasubstrate框架(以下简称substrate框架)和frida框架这三种框架,被hook攻击的应用存在极大的风险泄露个人数据,甚至是泄露应用沙盒数据。由上可以看出,android系统无法有效的检测出应用是否被常见的hook框架攻击。

因此,现有技术还有待于改进和发展。



技术实现要素:

鉴于上述现有技术的不足,本发明的目的在于提供一种hook攻击检测方法、存储介质及移动终端,旨在解决现有技术中安卓系统无法有效的检测出应用是否被常见的hook框架攻击的问题。

第一方面,本发明提供的一种hook攻击检测方法,包括步骤:

获取当前应用的运行内存信息;

实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击。

进一步地,所述方法还包括步骤:

若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息;

若是,则判定当前应用受到hook攻击。

进一步地,所述方法还包括步骤:

若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过当前应用动态加载与hook框架相关的固定类;

若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击。

进一步地,所述方法还包括步骤:

若检测到当前应用不能成功加载所述固定类,则通过当前应用向与hook框架相关的服务端口发送检验数据;

实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

第二方面,本发明提供了另一种hook攻击检测方法,包括步骤:

获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则通过当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

若检测到当前应用不能成功加载所述固定类,则检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

若检测到当前应用不能成功加载所述固定类,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

第三方面,本发明提供了另一种hook攻击检测方法,包括步骤:

检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则通过当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

若检测到当前应用不能成功加载所述固定类,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

第四方面,本发明提供了另一种hook攻击检测方法,包括步骤:

检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

若检测到当前应用不能成功加载所述固定类,则通过获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

第五方面,本发明提供了另一种hook攻击检测方法,包括步骤:

当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

若检测到当前应用不能成功加载所述固定类,则通过获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

第六方面,本发明提供一种移动终端,其特征在于,包括,处理器、存储器和通信总线;

所述存储器上存储有可被所述处理器执行的hook攻击检测方法程序;

所述通信总线实现处理器和存储器之间的连接通信;

所述处理器执行所述hook攻击检测方法程序时实现任意一项所述的hook攻击检测方法中的步骤。

第七方面,本发明提供一种存储介质,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现任意一项所述的hook攻击检测方法中的步骤。

相较于现有技术,本发明提供了一种hook攻击检测方法,通过特征字符串信息检测、异常堆栈信息检测、固定类加载检测和端口响应检测,能有效的检测出当前应用是否被xpose框架、substrate框架或和frida框架hook攻击,如此若判定应用被hook攻击,则可做出紧急处理措施,比如弹出提示对话框、终止应用等,避免应用数据或个人信息数据的泄露。

附图说明

图1为本发明提供的一种hook攻击检测方法的流程图。

图2为本发明移动终端较佳实施例的功能模块图。

具体实施方式

本发明提供了一种hook攻击检测方法、存储介质及移动终端,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图1,本发明提供的一种安卓系统的hook攻击检测方法,具体包括以下步骤:

s101、获取当前应用的运行内存信息;实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息;若是则判定当前应用受到hook攻击。

若当前应用处于被hook攻击的状态,则在运行内存信息中会存在与hook框架相关的信息,比如,若应用被xposed框架攻击,则运行内存信息中会存在xposedbridge字符串信息;若应用被substrate框架攻击,则运行内存信息中会包含substrate字符串信息;若应用被frida攻击,则运行内存信息中会包含fridaserver字符串信息。也就是说,第一字符串信息为xposedbridge、substrate或fridaserver中的一种或多种。

具体地,首先通过读取当前应用的/proc/self/maps文件,可以直接获取当前应用的运行内存信息,接着检测该信息中是否包存在第一字符串信息,若是则判定当前应用受到hook攻击。可以看出,s101步骤通过特征字符串信息检测,可以检测当前运行应用是否被xposed框架、substrate框架或frida框架hook攻击。

s102、若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息;若是,则判定当前应用受到hook攻击。

应用在运行过程中会不可避免的出现运行异常的情况,应用可以通过android系统提供的api(预先定义的函数)捕获自身的异常堆栈信息。当然,应用也可以通过系统提供的api主动抛出异常(即没有异常的情况下主动让应用发生异常),再让应用捕获自身的异常堆栈信息,比如可以通过newexception()新建一个异常类之后用throw主动抛出异常,之后应用就可以通过catch捕获并获取应用主动抛出的异常堆栈信息。

若应用处于被hook攻击的状态,此时应用运行发生异常时,异常堆栈信息里会存在与hook框架相关的字符串信息,比如,与xposed框架相关的字符串信息de.robv.android.xposed.xposedbridge,与substrate框架相关的字符串信息com.saurik.substrate.ms,也就是说,第二字符串信息为字符串de.robv.android.xposed.xposedbridge或字符串com.saurik.substrate.ms中的一种或两种。

若s101步骤没有检测到当前应用被hook攻击,为了整个方法的可靠性,需继续检测。具体地,预先在当前应用中建立一个异常类,通过当前应用主动抛出异常,获取当前应用的异常堆栈信息,检测此异常堆栈信息中是否存在第二字符串信息,若是,则判定当前应用受到hook攻击。可以看出,步骤s102通过异常堆栈信息检测,可以进一步检测当前运行应用是否被xposed框架或substrate框架hook攻击。

s103、若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过当前应用动态加载与hook框架相关的固定类;若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击。

在android系统中,zygote进程负责所有应用进程的孵化,简单的讲,zygote进程会参与所有应用的创建。由于hook框架是注入到zygote进程中的,因此在系统创建应用时,hook框架应用会因为zygote进程在应用中插入与hook框架相关的固定类,比如与xposed框架相关的固定类de.robv.android.xposed.xposedbridge,与substrate框架相关的固定类com.saurik.substrate.ms,也就是说,与hook框架相关的固定类为de.robv.android.xposed.xposedbridge或com.saurik.substrate.ms中的一种或两种。

若s102步骤也没有检测到当前应用是否被hook攻击,为了提高整个方法的可靠性,进行进一步的检测。具体地,当前应用可以通过android系统提供的loadclass()动态加载上述固定类。若上述固定类不存在,则应用会因加载不到此固定类而抛出异常信息,此时应用会捕获到异常信息;若上述固定类存在,则应用会成功加载此固定类,且应用不会抛出异常,因此,当前应用动态加载上述固定类之后,若当前应用不会出现异常,则表明应用成功加载了上述固定类,则判定当前应用受到hook攻击。可以看出,步骤s103通过固定类加载检测,可以进一步检测当前运行应用是否被xposed框架或substrate框架hook攻击。

s104、若检测到当前应用不能成功加载所述固定类,则通过当前应用向与hook框架相关的服务端口发送检验数据;实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

若当前应用运行时受到frida框架hook攻击,frida框架会占用27043服务端口(27043端口为frida框架的默认端口),也就是说,与hook框架相关的服务器端口为27043,在此情况下,该端口就处于开启的状态,若此时当前应用向该端口发送任意数据(比如字符串test),则此端口会向应用反馈任意数据(比如错误信息),也就是说,检验数据为任意数据,反馈数据也为任意数据。

若s103步骤也没有检测到当前应用是否被hook攻击,则表明当前应用并没有受到xposed框架和substrate框架hook攻击,为了提高整个方法的可靠性,需对frida框架作进一步的检测。具体地,当前应用通过tcp通信协议向27043服务端口发送检验数据,若此时27043端口被frida框架占用,则端口处于开启的状态,27043端口会向应用返回反馈数据,只要当前应用有接收到27043端口返回的反馈数据,则判定当前应用被frida框架hook攻击;若当前应用发送检验数据之后,应用判断结果为连接超时或连接错误,即应用没有接收到27043端口返回的反馈数据,表明此时27043端口处于关闭的状态,则判定当前应用没有被frida框架hook攻击,此时结合s101、s102和s103步骤的检测结果,判定当前应用没有被xposed框架、substrate框架和frida框架hook攻击,继续运行当前应用。可以看出,s104步骤通过端口响应检测,可以进一步检测当前运行应用是否被frida框架hook攻击。

由上可见,本发明提供了一种hook攻击检测方法,通过特征字符串信息检测、异常堆栈信息检测、固定类加载检测和端口响应检测,能有效的检测出当前应用是否被xpose框架、substrate框架或和frida框架hook攻击,如此若判定应用被hook攻击,则可做出紧急处理措施,比如弹出提示对话框、终止应用等,避免应用数据或个人信息数据的泄露。

在另一种实施例中,本发明提供了一种hook攻击检测方法,包括步骤:

s201、获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

具体地,s201步骤通过特征字符串信息检测,可以检测当前运行应用是否被xposed框架、substrate框架或frida框架hook攻击。

s202、若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则通过当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

具体地,若s201步骤没有检测到当前应用被hook攻击,为了整个方法的可靠性,需继续检测。s202步骤通过固定类加载检测,可以进一步检测当前运行应用是否被xposed框架或substrate框架hook攻击。

s203、若检测到当前应用不能成功加载所述固定类,则检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

具体地,若s202步骤也没有检测到当前应用被hook攻击,为了整个方法的可靠性,需继续检测。s203步骤通过异常堆栈信息检测,可以进一步检测当前运行应用是否被xposed框架或substrate框架hook攻击。

s204、若检测到当前应用不能成功加载所述固定类,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

具体地,若s203步骤也没有检测到当前应用被hook攻击,为了整个方法的可靠性,需继续检测。s204步骤通过端口响应检测,可以进一步检测当前运行应用是否被frida框架hook攻击。

在另一种实施例中,本发明提供了一种hook攻击检测方法,包括步骤:

s301、检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

s302、若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

s303、若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则通过当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

s304、若检测到当前应用不能成功加载所述固定类,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

此实施例与上述实施例相似,因此不再论述。

在另一种实施例中,本发明提供了一种hook攻击检测方法,包括步骤:

s401、检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

s402、若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

s403、若检测到当前应用不能成功加载所述固定类,则通过获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

s404、若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

此实施例与上述实施例相似,因此不再论述。

在另一种实施例中,本发明提供了一种hook攻击检测方法,包括步骤:

s501、当前应用动态加载与hook框架相关的固定类,若当前应用能成功加载所述固定类,则判定当前应用受到hook攻击;

s502、若检测到当前应用不能成功加载所述固定类,则通过获取当前应用的运行内存信息,实时检测当前应用的运行内存信息是否存在与hook框架相关的第一字符串信息,若是则判定当前应用受到hook攻击;

s503、若检测到当前应用的运行内存信息不存在与hook框架相关的第一字符串信息,则检测当前应用抛出的异常堆栈信息中是否存在与hook框架相关的第二字符串信息,若是,则判定当前应用受到hook攻击;

s504、若检测到当前应用抛出的异常堆栈信息中不存在与hook框架相关的第二字符串信息,则通过当前应用向与hook框架相关的服务端口发送检验数据,实时检测当前应用是否有接收到所述服务端口返回的反馈数据,若是则判定当前应用受到hook攻击,若否则继续运行当前应用。

此实施例与上述实施例相似,因此不再论述。

请参阅图2,基于上述hook攻击检测方法,本发明还相应提供了一种移动终端,所述移动终端可以是手机、桌上型计算机、笔记本、掌上电脑及服务器等计算设备。该移动终端包括处理器10、存储器20及显示屏30,处理器10通过通信总线50与存储器20连接,所述显示屏30通过通信总线50与处理器10连接。图2仅示出了移动终端的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。

所述存储器20在一些实施例中可以是所述移动终端的内部存储单元,例如移动终端的内存。所述存储器20在另一些实施例中也可以是所述移动终端的外部存储设备,例如所述移动终端上配备的插接式u盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器20还可以既包括所移动终端的内部存储单元也包括外部存储设备。所述存储器20用于存储安装于所述移动终端的应用软件及各类数据,例如所述安装移动终端的程序代码等。所述存储器20还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器20上存储有hook攻击检测方法程序40,该hook攻击检测方法程序40可被处理器10所执行,从而实现本申请中hook攻击检测方法。

所述处理器10在一些实施例中可以是一中央处理器(centralprocessingunit,cpu),微处理器,手机基带处理器或其他数据处理芯片,用于运行所述存储器20中存储的程序代码或处理数据,例如执行所述hook攻击检测方法等。

所述显示屏30在一些实施例中可以是led显示屏、液晶显示屏、触控式液晶显示屏以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。所述显示屏30用于显示在所述移动终端的信息以及用于显示可视化的用户界面。所述移动终端的部件10-30通过系统总线相互通信。

在一实施例中,当处理器10执行所述存储器20中hook攻击检测方法程序40时实现任意一项所述的hook攻击检测方法中的步骤,具体如上所述。

基于上述实施例,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上述任意一项所述的hook攻击检测方法中的步骤,具体如上所述。

在另一种实施例中,本发明提供了一种检测与hook框架相关的应用的方法,具体包括:

s601、获取已安装应用列表。

android系统上的每个应用都会有自己固定的应用包名,比如微信的应用包名为com.tencent.mm,hook框架在系统上安装的应用(hook框架应用)也会有自己固定的应用包名,比如xposed框架应用的固定应用包名为de.robv.android.xposed.installer,substrate框架应用的应用包名为com.saurik.substrate。

具体地,通过android系统提供的getinstalledpackages()可以获取已安装应用列表信息。

s602、检测所述已安装应用列表中是否存在与hook框架相关的应用包名,若是则判定系统安装了与hook框架相关的应用。

具体地,在s601步骤获取到的已安装应用列表信息中,检测其是否存在de.robv.android.xposed.installer和com.saurik.substrate,若包含,则判定系统安装了与xposed框架相关的应用或与substrate框架相关的应用。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1