对病毒程序的驱动进行定位的方法及系统的制作方法

文档序号:6619104阅读:221来源:国知局
专利名称:对病毒程序的驱动进行定位的方法及系统的制作方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种对病毒程序的驱动进行定位 的方法及系统。
背景技术
目前,有一类病毒程序通过应用程序与驱动程序结合的办法,避免安全 软件对其进行查杀。该类病毒程序通过驱动程序对病毒程序的进程、注册表 项、文件等进行守护,禁止安全软件停止病毒程序进程,访问或者操作病毒 相关注册表项及病毒文件,导致安全软件无法对其进行查杀。
现有技术中,安全软件对于这类病毒程序采取的防御措施是绕过可能存 在的病毒程序的守护,对杀不掉的病毒程序进程强行终止,对删不掉的病毒 文件通过底层磁盘操作删除,从而制止该类病毒程序的侵害。
现有技术存在的缺陷在于,现有技术虽然能禁止一部分病毒程序的侵扰
行为,但是无法发现对这种病毒程序进行守护的内核驱动模块,下次Windows 系统启动时,驱动仍纟皮力口载,并生成病毒文件,写病毒启动项,造成病毒文 件的再次启动,而安全软件只能反复报警,反复杀进程,删除文件及注册表 项,导致该类病毒程序不能被彻底根除。

发明内容
本发明实施例提出一种对病毒程序的驱动进行定位的方法及系统,以定 位病毒程序的驱动,彻底根除病毒程序。
本发明实施例提供了一种对病毒程序的驱动进行定位的方法,包括 获取第一系统调用的原始函数的入口地址;所述第 一系统调用由于病毒程序的驱动保护而不能被正确执行;
根据所述入口地址修改所述原始函数,以使调用所述原始函数的第二系 统调用跳转到预设的检测代码;所述第二系统调用不受所述病毒程序的驱动 保护;
发起所述第二系统调用,利用所述检测代码获取从所述第二系统调用的 发起到所述原始函数的所有函数调用层次;
根据获取的函数调用层次对每层函数指针对应的函数体进行钩挂,插入 定位代码;
执行第三系统调用,利用所述定位代码定位所述病毒程序的驱动;所述 第三系统调用由于所述病毒程序的驱动保护而不能被正确执行。
本发明实施例还提供了一种对病毒程序的驱动进行定位的系统,包括
第一获取模块,用于获取第一系统调用的原始函数的入口地址;所述第 一系统调用由于病毒程序的驱动保护而不能被正确执行;
修改模块,用于根据所述入口地址修改所述原始函数,以使调用所述原 始函数的第二系统调用跳转到预设的检测代码;所述第二系统调用不受所述 病毒程序的驱动保护;
第二获取模块,用于发起所述第二系统调用,利用所述检测代码获取从 所述第二系统调用的发起到所述原始函数的所有函数调用层次;
钩挂模块,用于根据获取的函数调用层次对每层函数指针对应的函数体 进行钩挂,插入定位代码;
定位模块,用于执行第三系统调用,利用所述定位代码定位所述病毒程 序的驱动;所述第三系统调用由于所述病毒程序的驱动保护而不能被正确执 行。
上述技术方案通过修改由于病毒程序的驱动保护而不能被正确执行的系 统调用的原始函数,使后续发起的正常系统调用跳转到预设的检测代码,获 取该系统调用所涉及的所有函数调用层次,并根据获取的函数调用层次插入定位代码,通过定位代码对再次执行由于病毒程序的驱动保护而不能被正确 执行的系统调用所涉及的函数调用进行记录,从而根据定位代码记录的信息 实现了对病毒程序的驱动的定位,彻底根除了病毒程序。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。


图1为本发明实施例提供的一种对病毒程序的驱动进行定位的方法的流
程图2为本发明实施例提供的对病毒程序的驱动进行定位的方法中一种修_ 改原始函数的示意图3为本发明实施例提供的对病毒程序的驱动进行定位的方法中另一种 修改原始函数的示意图4为本发明实施例提供的对病毒程序的驱动进行定位的方法中函数调 用层次的示意图5为本发明实施例提供的对病毒程序的驱动进行定位的方法中系统调 用示意图6为本发明实施例提供的另一种对病毒程序的驱动进行定位的方法的 流程图7为图6所示实施例中获取函数调用层次的示意图; 图8为图6所示实施例中定位代码记录调用信息的示意图; 图9为本发明实施例提供的一种对病毒程序的驱动进行定位的系统的结 构示意图。
具体实施例方式
图1为本发明实施例提供的一种对病毒程序的驱动进行定位的方法的流 程图。该方法包括步骤ll、获取第一系统调用的原始函数的入口地址;上述第一系统调用 由于病毒程序的驱动保护而不能被正确执行。具体地,对于不能正确执行的 具体的系统调用即第一系统调用,如被病毒程序阻止的操作,获取相关的原 始函数入口地址。其中,相关的原始函数即系统服务分发表(SSDT)中该系 统调用的系统调用号对应的函数指针指向的原始函数。原始函数入口地址可 通过读取并解析操作系统内核对应的磁盘文件得到。
步骤12、根据上述入口地址修改上述原始函数,以使调用上述原始函数 的第二系统调用跳转到预设的检测代码;该第二系统调用不受上述病毒程序
的驱动保护。具体地,根据获取的原始函数入口地址修改该原始函数,以保 证在原始函数被调用时能执行预定的钩挂层次检测代码,执行钩挂层次检测 代码。如图2所示,可以修改原始函数的入口代码为跳转指令,让原始函数 在入口处跳转到检测代码。也可如图3所示,在原始函数的函数体的其他位 置插入能执行钩挂层次检测代码的跳转。当上述检测代码被调用时,如果当 前线程ID是调用前保存的线程ID,认为发起的是保证能成功执行的操作, 进行钩挂层次获取。
步骤13、发起上述第二系统调用,利用上述4企测代码获取从上述第二系 统调用的发起到上述原始函数的所有函数调用层次。具体地,发起一个保证 能正常执行的操作即第二系统调用,最上层函数即当前函数逐层调用下层函 数直到原始函数。原始函数被调用后,在执行时调用钩挂层次检测代码,此 时,利用钩桂层次检测代码获取从发起操作到原始函数的所有函数调用层次。 本文中,调用层次即指某个系统调用号对应的SSDT调用被替换次数及顺序。 如图4所示,系统调用号68对应的函数指针指向的当前函数为最上层函数, 然后根据替换的后先顺序依次为下层函数,其中,最下层的函数即为原始函 数。
步骤14、根据获取的函数调用层次对每层函数指针对应的函数体进行钩 挂,插入定位代码。具体地,根据调用层次获取该系统调用被替换的层次和每层SSDT的函数指针。获取需要检测的系统调用的每层SSDT的函数指针 后,对函数指针对应的函数体进行钩挂,插入定位代码。如,在函数入口处 插入入口记录代码,在函数返回处插入函数返回处理代码。
步骤15、执行第三系统调用,利用上述定位代码定位上述病毒程序的驱 动;上述第三系统调用由于上述病毒程序的驱动保护而不能被正确执行,这 里也可以是第一系统调用。具体地,如在每层调用都^皮插入定位^^码后,再 次进行被阻止的操作即第一系统调用。这个被阻止的操作执行的系统调用将 会被某层函数调用阻止(即不调用下层函数直接返回)或者修改调用返回数 值,这些信息被定位代码所记录。通过对定位代码记录的信息的分析,能确 定是哪层函数阻止了调用或者修改了调用返回数值,从而定位对病毒程序如 木马进行保护的驱动即内核模块。
上述步骤13之后,本发明实施例提供的对病毒程序的驱动进行定位的方 法还可包括卸载上述检测代码,以提高定位的安全和效率。
上述步骤14中,插入定位代码可包括在上述每层函数指针对应的函数 入口处插入入口记录代码。此时上述步骤15中,利用上述定位代码定位上述 病毒程序的驱动可包括利用上述入口记录代码记录上述第三系统调用对上 述每层函数指针对应的函数体的调用信息如每层SSDT替换函数是否祐:调用; 根据上述调用信息确定上述病毒程序的驱动。具体地,调用全部返回后,如 果某层SSDT替换函数中插入的入口记录代码没有被调用,而上层SSDT替 换函数中插入的入口记录净皮调用,则可定位上层SSDT替换函数对应的内核 (驱动)模块是病毒程序的驱动。
或者,上述步骤14中,插入定位代码可包括在上述每层函数指针对应 的函数返回处插入返回处理代码。此时上述步骤15中,利用上述定位代码定 位上述病毒程序的驱动可包括利用上述返回处理代码记录上述第三系统调 用对上述每层函数指针对应的函数体的调用信息;根据上述调用信息确定上 述病毒程序的驱动。或者,上述步骤14中,插入定位代码可包括在上述每层函数指针对应 的函数入口处插入入口记录代码;以及在上述每层函数指针对应的函数返回 处插入返回处理代码。此时上述步骤15中,利用上述定位代码定位上述病毒 程序的驱动可包括利用上述入口记录代码及上述返回处理代码记录上述第 三系统调用对上述每层函数指针对应的函数体的调用信息;根据上述调用信 息确定上述病毒程序的驱动。
由于Windows系统中广泛使用函数指针和函数指针表的调用的方式,即 在某个固定位置放置函数指针或者一个函数指针数组。当系统调用函数时, 根据给定逻辑获取函数指针即函数入口地址,进而调用相应的函数。如Win dows系统调用和"Device Attach"。以Windows系统调用时使用的指针数组 为例进行说明。如图5所示,在用户态应用程序调用用于打开注册表4建值的 函数"RegOpenKey"时,系统在实现这个用户态系统调用时,会根据系统定 义好的调用规则将"RegOpenKey"解析出系统调用号68。此调用号可能根据 不同的Windows操作系统会有不同。在SSDT中,根据系统调用号68获取 函数指针,通过获取的函数指针调用对应的函数"NtOpenKey"。
当SSDT中的某个函数指针净皮替换,则该函数指针对应的系统调用的功 能被过滤,即系统在执行某个相关系统调用时,根据系统调用号在SSDT中 找到的是替换后的函数指针,而无法找到被替换的函数指针进行函数调用。 病毒驱动程序为了实现隐蔽和保护自身,通过替换SSDT中的函数指针,让 系统先执行病毒代码。当安全软件执行被替换的函数指针时,该替换的函数 指针对应的病毒程序拒绝该操作,从而导致病毒程序的进程或者注册表项、
文4牛^id呆护。
本实施例通过插入检测代码及定位代码,对于不能正确执行的系统调用, 如特定进程不能被访问、不能被终止,特定文件不可访问、不可操作,特定 注册表项不能访问、不可操作等等,都能够发现是否有驱动保护并定位保护 病毒程序的进程、文件等的驱动。如图6所示,以注册表保护内核模块的发现为例,对本发明实施例提供 的定位病毒守护驱动的方法进行说明。
假设木马病毒程序通过替换注册表替换相关系统调用,达到隐藏和保护 木马启动项的目的。当发现有与木马病毒程序相关的注册表项无法访问或者 无法操作时,可通过以下步骤确认是否有内核驱动模块保护,并定位进行保 护的内核模块。
步骤61、获取打开注册表项的系统服务原始函数"NtOpenKey"的入口 地址,并用检测代码替换原始函数"NtOpenKey"的下层函数。如图3所示, 用检测代码替换原始函数"NtOpenKey"调用的第一个下层函数;或者如图2 所示,修改原始函数"NtOpenKey"第一条指令,让其跳转到钩挂层次检测 代码中。这里,将检测代码命名为"Fake一NtOpenKey一Call一xxx",也即钩挂 层次检测代码。
步骤62、获取SSDT替换信息。具体地,包括在当前线程环境中,记 录当前线程ID,发起打开注册表操作,打开临时注册表4建值所在的注册表项。 其中,该临时注册表键值是驱动程序在本驱动服务注册表键值下创建的,以 保证系统能打开该临时注册表键值所在的注册表项,即保证该系统调用不受 病毒程序的驱动保护,避免该系统调用由于病毒程序的驱动保护而不能被正 确执行。
如图7所示,当该系统调用请求发送到原始函数"NtOpenKey,,时,原 始函数"NtOpenKey,,调用检测代码"Fake—NtOpenKey—Call—xxx,,,在此处 遍历调用堆栈即调用层次,根据每层调用堆栈的返回地址,获取每层SSDT 替换调用函数的入口地址并记录。所有调用返回后,卸载钩挂层次检测代码, 以提高安全和效率。
步骤63、对病毒程序的驱动进行定位,本例中即对保护注册表4建值的恶 意软件(rootkit)进行定位。
如图8所示,修改所有替换系统服务"NtOpenKey"的所有函数返回处,让4皮调用的函数执行后返回到本驱动的返回记录函数"OpenLog"。此处, 返回记录函数即返回处理代码。在执行被阻止的操作前,在每层钩挂函数中 入口处插入入口记录代码,在每层钩挂函数返回处插入返回处理代码。入口 记录代码和返回处理代码的插入根据具体应用决定。在此示例应用中,返回 处理代码即可满足需求。
发起打开注册表操作,即打开应用程序传下来的不能打开的注册表项, 也即执行因受病毒程序的驱动保护而不能被正确执行的系统调用。该系统调 用逐层调用替换函数,在每层调用返回时,均会调用返回记录函数 "OpenLog",在返回记录函数"OpenLog,,中记录本层钩挂函数即该层SSDT 函数指针指向的函数是否被调用和调用结果。在所有调用返回后,检查返回 记录函数"OpenLog"中记录的每层钩挂函数被调用和返回的信息。如果某 层钩挂函数没有调用下层函数而直接返回,或者虽然调用了下层函数,但是 将返回值置为错误值,则认定该层钩挂函数对应的驱动模块为保护该注册表 项的恶意软件,也即病毒程序的驱动。其中,某层钩挂函数是否调用了下层 函数,可通过下层钩挂函数中的返回记录函数"OpenLog"是否被调用确认; 在每层钩挂函数调用返回记录函数"OpenLog,,时,返回值和返回信息记录 在返回记录函数"OpenLog,,中。
图9为本发明实施例提供的一种对病毒程序的驱动进行定位的系统的结 构示意图。该系统包括第一获取模块91、修改模块92、第二荻取模块93、 钩挂模块94及定位模块95。第一获取模块91用于获取第一系统调用的原始 函数的入口地址;上述第一系统调用由于病毒程序的驱动保护而不能被正确 执行。修改模块92用于根据上述入口地址修改上述原始函数,以使调用上述 原始函数的第二系统调用跳转到预设的检测代码;上述第二系统调用不受上 述病毒程序的驱动保护。第二获取^莫块93用于发起上述第二系统调用,利用 上述检测代码获取从上述第二系统调用的发起到上述原始函数的所有函数调 用层次。钩挂模块94用于根据获取的函数调用层次对每层函数指针对应的函数体进行钩挂,插入定位代码。定位模块95用于执行第三系统调用,利用上 述定位代码定位上述病毒程序的驱动;上述第三系统调用由于上述病毒程序 的驱动保护而不能被正确执行。
本发明实施例提供的对病毒程序的驱动进行定位的系统还可包括卸载 模块。在利用上述检测代码获取从上述第二系统调用的发起到上述原始函数 的所有函数调用层次之后,该卸载模块卸载上述检测代码。
上述第二获取模块可具体用于在上述每层函数指针对应的函数入口处插 入入口记录代码;或者具体用于在上述每层函数指针对应的函数返回处插入 返回处理代码;或者具体用于在上述每层函数指针对应的函数入口处插入入 口记录代码,以及在上述每层函数指针对应的函数返回处插入返回处理代码;
上述定位模块可具体用于利用上述入口记录代码记录上述第三系统调用 对上述每层函数指针对应的函数体的调用信息;或者可具体用于利用上述返 回处理代码记录上述第三系统调用对上述每层函数指针对应的函数体的调用 信息;或者具体用于用上述入口记录代码及上述返回处理代码记录上述第 三系统调用对上述每层函数指针对应的函数体的调用信息;才艮据上述调用信 息确定上述病毒程序的驱动。
上述方法及系统实施例通过{|"改由于病毒程序的驱动保护而不能^皮正确 执行的系统调用的原始函数,使后续发起的正常系统调用跳转到预设的检测 代码,获取该系统调用所涉及的所有函数调用层次,并根据获取的函数调用 层次插入定位代码,通过定位代码对再次执行由于病毒程序的驱动保护而不 能被正确执行的系统调用所涉及的函数调用进行记录,从而根据定位代码记 录的信息实现了对病毒程序的驱动的定位,彻底才艮除了病毒程序。
本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤 可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读 取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述 的存储介质包括ROM、 RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其 限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术 人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或 者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技
术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
1、一种对病毒程序的驱动进行定位的方法,其特征在于,包括获取第一系统调用的原始函数的入口地址;所述第一系统调用由于病毒程序的驱动保护而不能被正确执行;根据所述入口地址修改所述原始函数,以使调用所述原始函数的第二系统调用跳转到预设的检测代码;所述第二系统调用不受所述病毒程序的驱动保护;发起所述第二系统调用,利用所述检测代码获取从所述第二系统调用的发起到所述原始函数的所有函数调用层次;根据获取的函数调用层次对每层函数指针对应的函数体进行钩挂,插入定位代码;执行第三系统调用,利用所述定位代码定位所述病毒程序的驱动;所述第三系统调用由于所述病毒程序的驱动保护而不能被正确执行。
2、 根据权利要求1所述的对病毒程序的驱动进行定位的方法,其特征在 于,利用所述检测代码获取从所述第二系统调用的发起到所述原始函数的所 有函数调用层次之后,还包括卸载所述检测代码。
3、 根据权利要求1或2所述的对病毒程序的驱动进行定位的方法,其特 征在于,插入定位代码包括在所述每层函数指针对应的函数入口处插入入口记录代码; 利用所述定位代码定位所述病毒程序的驱动,包括利用所述入口记录 代码记录所述第三系统调用对所述每层函数指针对应的函数体的调用信息; 根据所述调用信息确定所述病毒程序的驱动。
4、 根据权利要求1或2所述的对病毒程序的驱动进行定位的方法,其特 征在于,插入定位代码包括在所述每层函数指针对应的函数返回处插入返回处理代码;利用所述定位代码定位所述病毒程序的驱动,包括利用所述返回处理 代码记录所述第三系统调用对所述每层函数指针对应的函数体的调用信息; 根据所述调用信息确定所述病毒程序的驱动。
5、 根据权利要求1或2所述的对病毒程序的驱动进行定位的方法,其特 征在于,插入定位代码包括在所述每层函数指针对应的函数入口处插入入口记录代码;以及在所述 每层函数指针对应的函数返回处插入返回处理代码;利用所述定位代码定位所述病毒程序的驱动,包括利用所述入口记录 代码及所述返回处理代码记录所述第三系统调用对所述每层函数指针对应的 函数体的调用信息;根据所述调用信息确定所述病毒程序的驱动。
6、 根据权利要求1或2所述的对病毒程序的驱动进行定位的方法,其特 征在于,所述第 一 系统调用与所述第三系统调用为同 一操作。
7、 一种对病毒程序的驱动进行定位的系统,其特征在于,包括 第一获^^莫块,用于获取第一系统调用的原始函数的入口地址;所述第一系统调用由于病毒程序的驱动保护而不能^皮正确执行;修改模块,用于根据所述入口地址修改所述原始函数,以使调用所述原 始函数的第二系统调用跳转到预设的检测代码;所述第二系统调用不受所述 病毒程序的驱动保护;第二获取^莫块,用于发起所述第二系统调用,利用所述检测代码获取从 所述第二系统调用的发起到所述原始函数的所有函数调用层次;钩挂模块,用于根据获取的函数调用层次对每层函数指针对应的函数体 进行钩挂,插入定位代码;定位模块,用于执行第三系统调用,利用所述定位代码定位所述病毒程 序的驱动;所述第三系统调用由于所述病毒程序的驱动保护而不能被正确执行。
8、 根据权利要求7所述的对病毒程序的驱动进行定位的系统,其特征在 于,还包括卸载模块,用于在利用所述检测代码获取从所述第二系统调用的发起到 所述原始函数的所有函数调用层次之后,卸载所述检测代码。
9、 根据权利要求7或8所述的对病毒程序的驱动进行定位的系统,其特 征在于,所述第二获取模块具体用于在所述每层函数指针对应的函数入口处 插入入口记录代码;或者具体用于在所述每层函数指针对应的函数返回处插 入返回处理代码;或者具体用于在所述每层函数指针对应的函数入口处插入 入口记录代码,以及在所述每层函数指针对应的函数返回处插入返回处理代码;所述定位模块具体用于利用所述入口记录代码记录所述第三系统调用对所述每层函数指针对应的函数体的调用信息;或者具体用于利用所述返回处 理代码记录所述第三系统调用对所述每层函数指针对应的函数体的调用信 息;或者具体用于用所述入口记录代码及所述返回处理代码记录所述第三 系统调用对所述每层函数指针对应的函数体的调用信息;根据所述调用信息 确定所述病毒程序的驱动。
全文摘要
本发明涉及一种对病毒程序的驱动进行定位的方法及系统,方法包括获取第一系统调用的原始函数的入口地址;所述第一系统调用由于病毒程序的驱动保护而不能被正确执行;根据所述入口地址修改所述原始函数,以使调用所述原始函数的第二系统调用跳转到预设的检测代码;所述第二系统调用不受所述病毒程序的驱动保护;发起所述第二系统调用,利用所述检测代码获取从所述第二系统调用的发起到所述原始函数的所有函数调用层次;根据获取的函数调用层次对每层函数指针对应的函数体进行钩挂,插入定位代码;执行第三系统调用,利用所述定位代码定位所述病毒程序的驱动;所述第三系统调用由于所述病毒程序的驱动保护而不能被正确执行。根除了病毒程序。
文档编号G06F21/22GK101599114SQ20091008668
公开日2009年12月9日 申请日期2009年6月17日 优先权日2009年6月17日
发明者强 郭 申请人:北京东方微点信息技术有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1