本发明涉及移动终端技术领域,具体涉及一种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框架相关的应用。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。