防止消息钩子注入的方法、装置和终端设备与流程

文档序号:11808325阅读:451来源:国知局
防止消息钩子注入的方法、装置和终端设备与流程

本发明涉及信息安全技术领域,尤其涉及一种防止消息钩子注入的方法、装置和终端设备。



背景技术:

通常,操作系统会为用户提供全局消息钩子注册函数,只要将一个DLL(Dynamic Link Library,动态链接库)文件注册入全局消息钩子,当操作系统有新进程启动或者消息发生变化时,操作系统就会把已经注册的DLL文件加载到相应的进程中,从而实现DLL文件的共享。

然而,有些恶意程序会利用该全局消息钩子注册函数,加载到相关的进程中,对操作系统的安全进行破坏。



技术实现要素:

本发明的目的是旨在至少在一定程度上解决上述的技术问题之一。

为此,本发明的第一个目的在于提出一种防止消息钩子注入的方法,该方法在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

本发明的第二个目的在于提出一种防止消息钩子注入的终端设备。

本发明的第三个目的在于提出一种终端设备。

本发明的第四个目的在于提出另一种终端设备。

为达上述目的,本发明第一方面实施例的防止消息钩子注入的方法,包括以下步骤:监测操作系统内核提供的全局消息钩子注册函数是否被调用,如果被调用,运行预设的与所述全局消息钩子注册函数对应的钩子函数;检测调用所述全局消息钩子注册函数的进程的合法性;如果所述进程非法,则拒绝所述进程调用所述全局消息钩子注册函数。

根据本发明实施例的防止消息钩子注入的方法,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检测调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该方法在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

另外,根据本发明上述实施例的防止消息钩子注入的方法还可以具有如下附加的技术特征:

在本发明的一个实施例中,所述方法还包括:如果所述进程合法,则允许所述进程调用所述全局消息钩子注册函数。

在本发明的一个实施例中,在所述监测操作系统内核提供的全局消息钩子注册函数是否被调用之前,还包括:在具有网络安全应用的防御驱动中设置与所述全局消息钩子注册函数对应的钩子函数。

在本发明的一个实施例中,所述检测调用所述全局消息钩子注册函数的进程的合法性,包括:

根据预设的特征库检测调用所述全局消息钩子注册函数的进程的合法性。

在本发明的一个实施例中,所述特征库包括:包括合法进程的白名单,和/或,包括非法进程的黑名单。

为达上述目的,本发明第二方面实施例的防止消息钩子注入的装置,包括:监测模块,用于监测操作系统内核提供的全局消息钩子注册函数是否被调用;运行模块,用于在所述监测模块监测到所述全局消息钩子注册函数被调用时,运行预设的与所述全局消息钩子注册函数对应的钩子函数;检测模块,用于检测调用所述全局消息钩子注册函数的进程的合法性;处理模块,用于在所述进程非法时,拒绝所述进程调用所述全局消息钩子注册函数。

根据本发明实施例的防止消息钩子注入的装置,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检测调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该装置在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

另外,根据本发明上述实施例的防止消息钩子注入的装置还可以具有如下附加的技术特征:

在本发明的一个实施例中,所述处理模块,还用于:在所述进程合法时,允许所述进程调用所述全局消息钩子注册函数。

在本发明的一个实施例中,所述装置还包括:设置模块,用于在具有网络安全应用的防御驱动中设置与所述全局消息钩子注册函数对应的钩子函数,其中。

在本发明的一个实施例中,所述检测模块用于:

根据预设的特征库检测调用所述全局消息钩子注册函数的进程的合法性。

在本发明的一个实施例中,所述特征库包括:包括合法进程的白名单,和/或,包括非法进程的黑名单。

为达上述目的,本发明第三方面实施例的终端设备,包括:本发明第二方面实施例所述的防止消息钩子注入的装置。

根据本发明实施例的终端设备,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检测调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该终端设备在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

为了实现上述目的,本发明第四方面实施例的终端设备,包括:以下一个或多个组件:处理器,存储器,电源电路,多媒体组件,音频组件,输入/输出(I/O)的接口,传感器组件,以及通信组件;其中,电路板安置在壳体围成的空间内部,所述处理器和所述存储器设置在所述电路板上;所述电源电路,用于为终端设备的各个电路或器件供电;所述存储器用于存储可执行程序代码;所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行以下步骤:

监测操作系统内核提供的全局消息钩子注册函数是否被调用,如果被调用,运行预设的与所述全局消息钩子注册函数对应的钩子函数;

检测调用所述全局消息钩子注册函数的进程的合法性;

如果所述进程非法,则拒绝所述进程调用所述全局消息钩子注册函数。

根据本发明实施例的终端设备,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检测调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该终端设备在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1是根据本发明一个实施例的防止消息钩子注入的方法的流程图;

图2是根据本发明另一个实施例的防止消息钩子注入的方法的流程图;

图3是根据本发明一个实施例的防止消息钩子注入的装置的结构示意图;

图4是根据本发明另一个实施例的防止消息钩子注入的装置的结构示意图;

图5是根据本发明一个实施例的终端设备的结构示意图;以及

图6是根据本发明另一个实施例的终端设备的结构示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

下面参考附图描述本发明实施例的防止消息钩子注入的方法、装置和终端设备。

图1是根据本发明一个实施例的防止消息钩子注入的方法的流程图。如图1所示,该防止消息钩子注入的方法包括:

S110,监测操作系统内核提供的全局消息钩子注册函数是否被调用,如果被调用,运行预设的与全局消息钩子注册函数对应的钩子函数。

S120,检测调用全局消息钩子注册函数的进程的合法性。

S130,如果进程非法,则拒绝所述进程调用全局消息钩子注册函数。

通常,操作系统内核会提供全局消息钩子注册函数,通过该函数只要将一个DLL(Dynamic Link Library,动态链接库)文件注册入全局消息钩子,当操作系统有新进程启动或者消息发生变化时,操作系统就会把已经注册的DLL文件加载到相应的进程中。其中,根据具体应用场景的不同,操作系统内核提供的全局消息钩子注册函数不同。

比如,当操作系统提供的全局消息钩子注册函数是SetWindowsHookEx函数时,DLL文件通过SetWindowsHookEx函数对应的内核函数NtUserSetWindowsHookEx函数注册全局消息钩子后,当操作操作系统有新的进程启动时,操作系统会把该DLL文件加载到该进程中。

然而,在某些应用场景下,有些执行恶意任务的恶意进程,比如病毒、蠕虫和特洛伊木马进程等,可用过调用操作系统内核提供的全局消息钩子注册函数,并注入全局消息钩子,从而当操作系统有新进程启动时,该恶意进程就会被注入到该进程中,造成对操作系统的破坏。

因此,为了防止恶意进程通过调用全局消息钩子注册函数,对操作系统的安全进行破坏,在允许调用全局消息钩子注册函数之前,需要判断调用全局消息钩子注册函数的进程是否合法,从而根据判断结果决定是否允许调用全局消息钩子注册函数。

本发明实施例的防止消息钩子注入的方法,将钩子函数与操作系统进行挂接,通过钩子函数监视操作系统内核中,全局消息钩子注册函数的调用事件,每当监测到全局消息钩子注册函数被调用时,在操作系统响应该调用事件之前,通过钩子函数捕获调用该全局消息钩子注册函数的进程,并判断该进程是否合法。

其中,需要说明的是,根据具体应用场景的不同,预设的钩子函数可采取多种方式检测调用全局消息钩子注册函数的当前进程的合法性。

第一种示例,可以通过在操作系统本地对应设置包含相关合法或者非法进程相关特征的特征库,并通过特征库检测调用全局消息钩子注册函数的当前进程的合法性。

第二种示例,可以在远程服务器上设置包含相关合法或者非法进程相关特征的特征库,并在钩子函数中设置一与该远程服务器进行信息交互的相关函数,从而钩子函数中的相关函数,将调用全局消息钩子注册函数的当前进程的相关信息发送至远程服务器,以供远程服务器根据特征库检测调用全局消息钩子注册函数的当前进程的合法性。

第三种示例,预先存储可靠、可信的进程绑定安全标识,从而钩子函数捕获调用全局消息钩子注册函数的当前进程后,检测当前进程是否具有上述安全标识以检测当前进程的合法性。

综上所述,本发明实施例的防止消息钩子注入的方法,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检测调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该方法在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

图2是根据本发明另一个实施例的防止消息钩子注入的方法的流程图。如图2所示,该防止消息钩子注入的方法包括:

S210,在具有网络安全应用的防御驱动中设置与全局消息钩子注册函数对应的钩子函数,其中,钩子函数包括:用于检测调用全局消息钩子注册函数的进程合法性的特征库。

应当理解的是,根据应用场景的不同,与全局消息钩子注册函数对应的钩子函数可以被设置于操作系统的多个位置,本发明实施例的防止消息钩子注入的方法中,将钩子函数设置于具有网络安全应用的防御驱动中,有利于操作系统中相关安全资源的整合。

S220,监测操作系统内核提供的全局消息钩子注册函数是否被调用,如果被调用,运行预设的与全局消息钩子注册函数对应的钩子函数。

S230,检测调用全局消息钩子注册函数的进程的合法性。

具体地,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局消息钩子注册函数对应的钩子函数,以确定当前调用全局消息钩子注册函数的进程。

其中,应当理解的是,钩子函数可采用多种方式确定调用全局消息钩子注册函数的进程,在本发明的实施例中,通过获取调用全局消息钩子注册函数的操作进程路径确定当前进程。

S240,如果进程非法,则拒绝进程调用全局消息钩子注册函数。

S250,如果进程合法,则允许进程调用全局消息钩子注册函数。

具体地,本实施例根据预设的特征库检测调用全局消息钩子注册函数的进程的合法性。如果检测全局消息钩子注册函数的进程非法,则表明调用该全局消息钩子注册函数的进程可能是恶意进程,从而拒绝该进程调用全局消息钩子注册函数。如果检测调用全局消息钩子注册函数的进程合法,则允许当前进程调用全局消息钩子注册函数。

需要说明的是,特征库中的具体内容可以根据应用需要进行设置,例如包括合法进程的白名单,和/或,包括非法进程的黑名单。举例说明如下:

第一种示例,特征库中可包括白名单,白名单中包含的进程信息对应的进程是合法进程,允许该进程调用全局消息钩子注册函数不会导致操作系统安全被破坏。

在本示例中,确定调用全局消息钩子注册函数的当前进程,根据该进程的进程信息查询特征库,如果查询获取该进程信息,与白名单中的进程信息匹配,则认为该进程是合法进程,因此允许该进程调用全局消息钩子注册函数。如果查询获取该进程信息,与白名单中的进程信息不匹配,则认为该进程是非法进程,因此拒绝该进程调用全局消息钩子注册函数。

第二种示例,特征库中包含黑名单,黑名单包含的进程信息对应的进程是非法进程,例如可能是恶意程序对应的进程,如果允许该进程调用全局消息钩子注册函数会造成对操作系统安全的破坏。

在本示例中,确定调用全局消息钩子注册函数的当前进程,根据该当前进程的进程信息查询特征库,如果该进程的进程信息与黑名单包含的进程信息匹配,则认为该进程是非法进程,因此拒绝该进程调用全局消息钩子注册函数。如果该进程的进程信息与黑名单包含的进程信息不匹配,则认为该进程是合法进程,因此允许该进程调用全局消息钩子注册函数。

第三种示例,特征库中可包含黑名单和白名单,白名单中包含的进程信息对应的进程是合法进程,黑名单中包含的进程信息对应的进程是非法进程。

在本示例中,确定调用全局消息钩子注册函数的当前进程,根据该进程的进程信息查询特征库,如果查询获取该进程信息,与白名单的进程信息匹配,则认为该进程是合法进程,因此允许该进程调用全局消息钩子注册函数;如果该进程的进程信息与黑名单包含的进程信息匹配,则认为该进程是非法进程,因此拒绝该进程调用全局消息钩子注册函数。

综上所述,本发明实施例的防止消息钩子注入的方法,将与全局消息钩子注册函数对应的钩子函数设置于具有网络安全应用的防御驱动中,进而通过特征库判断调用全局消息钩子注册函数进程的合法性,只有在该进程合法时,才允许该进程对全局消息钩子注册函数的调用。进一步保护了操作系统的安全。

为了实现上述实施例,本发明还提出了一种防止消息钩子注入的装置。图3是根据本发明一个实施例的防止消息钩子注入的装置的结构示意图。如图3所示,该防止消息钩子注入的装置还包括:

检测模块310,用于监测操作系统内核提供的全局消息钩子注册函数是否被调用;

运行模块320,用于在监测模块监测到全局消息钩子注册函数被调用时,运行预设的与全局消息钩子注册函数对应的钩子函数;

检测模块330,用于检测调用全局消息钩子注册函数的进程的合法性;

处理模块340,用于在进程非法时,拒绝所述进程调用全局消息钩子注册函数。本发明实施例的防止消息钩子注入的装置,将钩子函数与操作系统进行挂接,监测模块310通过钩子函数监视操作系统内核中,全局消息钩子注册函数的调用事件,每当监测模块310监测到全局消息钩子注册函数被调用时,运行模块320运行钩子函数,并通过检测模块330在操作系统响应该调用事件之前,通过钩子函数捕获调用该全局消息钩子注册函数的进程,并判断该进程是否合法。

具体地,在钩子函数捕获调用函数的当前进程后,检测模块330检测该当前进程的合法性,如果检测获知当前进程合法,处理模块340允许当前进程调用全局消息钩子注册函数,以满足相关应用程序的正常运行。如果检测模块330检测该当前进程的合法性,检测获知当前进程非法,处理模块340拒绝当前进程调用全局消息钩子注册函数,以保护操作系统的安全。

综上所述,本发明实施例的防止消息钩子注入的装置,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该装置在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

图4是根据本发明另一个实施例的防止消息钩子注入的装置的结构示意图。如图4所示,在如图3所示的基础上,该防止消息钩子注入的装置包括:

设置模块350,用于在具有网络安全应用的防御驱动中设置与全局消息钩子注册函数对应的钩子函数。

应当理解的是,根据应用场景的不同,与全局消息钩子注册函数对应的钩子函数可以被设置于操作系统的多个位置,本发明实施例的防止消息钩子注入的装置中,设置模块350将钩子函数设置于具有网络安全应用的防御驱动中,有利于操作系统中相关安全资源的整合。

具体地,检测模块330根据预设的特征库检测调用全局消息钩子注册函数的进程的合法性。如果检测模块330检测调用全局消息钩子注册函数的进程非法,则表明调用该全局消息钩子注册函数的进程可能是恶意进程,处理模块340从而拒绝该进程调用全局消息钩子注册函数。如果检测模块330检测调用全局消息钩子注册函数的进程合法,处理模块340则允许当前进程调用全局消息钩子注册函数。

需要说明的是,特征库中的具体内容可以根据应用需要进行设置,例如包括合法进程的白名单,和/或,包括非法进程的黑名单。举例说明如下:

第一种示例,特征库中可包括白名单,白名单中包含的进程信息对应的进程是合法进程,允许该进程调用全局消息钩子注册函数不会导致对操作系统安全的破坏。

在本示例中,确定调用全局消息钩子注册函数的当前进程,检测模块330根据该进程的进程信息查询特征库,如果查询获取该进程信息,与白名单中的进程信息匹配,则认为该进程是合法进程,因此处理模块340允许该进程调用全局消息钩子注册函数。如果检测模块330查询获取该进程信息,与白名单中的进程信息不匹配,则认为该进程是非法进程,因此处理模块340拒绝该进程调用全局消息钩子注册函数。

第二种示例,特征库中包含黑名单,黑名单包含的进程信息对应的进程是非法进程,例如可能是恶意程序对应的进程,如果允许该进程调用全局消息钩子注册函数会造成对操作系统安全的破坏。

在本示例中,确定调用全局消息钩子注册函数的当前进程,检测模块330根据该当前进程的进程信息查询特征库,如果该进程的进程信息与黑名单包含的进程信息匹配,则认为该进程是非法进程,因此处理模块340拒绝该进程调用全局消息钩子注册函数。如果检测模块330检测该进程的进程信息与黑名单包含的进程信息不匹配,则认为该进程是合法进程,因此处理模块340允许该进程调用全局消息钩子注册函数。

第三种示例,特征库中可包含黑名单和白名单,白名单中包含的进程信息对应的进程是合法进程,黑名单中包含的进程信息对应的进程是非法进程。

在本示例中,确定调用全局消息钩子注册函数的当前进程,检测模块330根据该进程的进程信息查询特征库,如果查询获取该进程信息,与白名单的进程信息匹配,则认为该进程是合法进程,因此处理模块340允许该进程调用全局消息钩子注册函数;如果检测而模块330检测该进程的进程信息与黑名单包含的进程信息匹配,则认为该进程是非法进程,因此处理模块340拒绝该进程调用全局消息钩子注册函数。

需要说明的是,本发明实施例的防止消息钩子注入的装置与上述结合图1和图2描述的防止消息钩子注入的方法实施例相对应,本发明实施例的防止消息钩子注入的装置实施例未披露的细节,参照上述对防止消息钩子注入的方法实施例的描述。

综上所述,本发明实施例的防止消息钩子注入的装置,将与全局消息钩子注册函数对应的钩子函数设置于具有网络安全应用的防御驱动中,进而通过特征库判断调用全局消息钩子注册函数进程的合法性,只有在该进程合法时,才允许该进程对全局消息钩子注册函数的调用。进一步保护了操作系统的安全。

为了实现上述实施例,本发明还提出了一种终端设备。

图5是根据本发明一个实施例的终端设备的结构示意图,如图5所示,该终端设备包括防止消息钩子注入的装置500。

需要说明的是,上述防止消息钩子注入的装置500的描述可参考上述结合图3和图4对防止消息钩子注入的装置的描述,在此不再赘述。

综上所述,本发明实施例的终端设备,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检测调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该终端设备在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

为了实现上述实施例,本发明还提出了另外一种终端设备。

图6是根据本发明另一个实施例的终端设备的结构示意图,如图6所示,终端设备1000可以是移动电话等。

参见图6,终端设备1000可以包括以下一个或多个组件:处理器1001,存储器1002,电源电路1003,多媒体组件1004,音频组件1005,输入/输出(I/O)的接口1006,传感器组件1007,以及通信组件1008。

电源电路1003,用于为终端设备的各个电路或器件供电;存储器1002用于存储可执行程序代码;处理器1001通过读取存储器1002中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行以下步骤:

监测操作系统内核提供的全局消息钩子注册函数是否被调用,如果被调用,运行预设的与全局消息钩子注册函数对应的钩子函数;

检测调用全局消息钩子注册函数的进程的合法性;

如果进程非法,则拒绝所述进程调用全局消息钩子注册函数。

需要说明的是,上述对终端设备1000的描述可参考上述结合图1和图2对防止消息钩子注入的方法的描述,在此不再赘述。

综上所述,本发明实施例的终端设备,在监测到操作系统内核提供的全局消息钩子注册函数被调用时,运行预设的与全局钩子注册函数对应的钩子函数,并检测调用全局消息钩子注册函数的进程的合法性,当进程非法时,拒绝该进程调用全局消息钩子注册函数。该终端设备在调用全局消息钩子注册函数之前,检测调用全局消息钩子注册函数的合法性,当该进程非法时拒绝其对全局消息钩子注册函数的调用,防止消息钩子注册函数被恶意调用,保护了操作系统的安全。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

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