公开/公告号CN105608376A
专利类型发明专利
公开/公告日2016-05-25
原文格式PDF
申请/专利权人 北京金山安全软件有限公司;
申请/专利号CN201510983392.2
发明设计人 李文靖;
申请日2015-12-24
分类号G06F21/56;
代理机构北京柏杉松知识产权代理事务所(普通合伙);
代理人马敬
地址 100085 北京市海淀区小营西路33号二层东区
入库时间 2023-12-18 15:29:29
法律状态公告日
法律状态信息
法律状态
2019-03-15
授权
授权
2019-01-04
专利申请权的转移 IPC(主分类):G06F21/56 登记生效日:20181214 变更前: 变更后: 申请日:20151224
专利申请权、专利权的转移
2016-06-22
实质审查的生效 IPC(主分类):G06F21/56 申请日:20151224
实质审查的生效
2016-05-25
公开
公开
技术领域
本发明涉及系统安全领域,特别涉及一种应用程序注册表删除方法及装置。
背景技术
现有技术一般采用的是调用系统服务描述符表(SSDT)中删除注册表的函数 的方式对注册表进行删除,如图1所示,包括步骤:
S101:终端调用应用层的RegDeleteKey函数;
S102:RegDeleteKey函数根据保存的注册表删除函数的地址,调用内核层 SSDI中的注册表删除函数,即NDeleteKey函数;
S103:NDeleteKey函数通过注册表对象地址,调用注册表对象中的底层注 册表删除函数;
S104:注册表对象中的底层注册表删除函数解析注册表磁盘文件,删除注 册表。
计算机病毒通常会采用注册表保护技术使自身的注册表不能被删除,一般 采用的是挂钩系统服务描述符表(SSDT)中注册表删除函数的地址的方式,使终 端无法对病毒的注册表进行删除。其具体实现方式为:更改SSDT中所述注册 表删除函数的地址,即对该地址进行挂钩,即在步骤S102中,RegDeleteKey函 数根据被挂钩的注册表删除函数的地址,无法调用内核层SSDI中的注册表删除 函数。这样,当终端杀毒程序要根据所述删除注册表的函数的地址查询所述删 除注册表的函数时,由于所述地址被改变,进而所述终端无法成功查询到所述 删除注册表的函数,也就不能对所述病毒的注册表进行删除。
为了避免上述情况的发生,在调用注册表删除函数时,预先检查所述注册 表删除函数的地址是否为预先保存的正确地址,若不是,则将所述删除注册表 的函数的地址更改为预先保存的正确地址,就能够根据所述预先保存的正确地 址成功查询到所述注册表删除函数,进而打破了病毒对自身注册表的保护。
由于所述SSDT中所述注册表删除函数需要通过病毒注册表中对象地址, 调用系统底层注册表删除函数,才能真正实现对该病毒的注册表的删除。若病 毒对自身注册表中的对象地址进行挂钩,即对步骤S103中注册表对象地址进行 挂钩,则现有技术无法对所述注册表对象地址进行恢复,进而无法调用对应的 底层注册表删除函数对所述病毒的注册表进行删除。
发明内容
本发明实施例公开了一种应用程序注册表删除方法及装置,实现对应用程 序注册表的删除。
为达到上述目的,本发明实施例公开了一种应用程序注册表删除方法, 应用于终端,所述方法包括步骤:
根据待删除的注册表中保存的信息,获取所述注册表中设定对象的存储地 址;
判断所述设定对象的存储地址是否被挂钩;
当判断所述设定对象的存储地址被挂钩时,则根据保存的内核基地址,确定 所述设定对象被挂钩前的地址信息;
将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的地址信息;
根据所述注册表中所述设定对象被挂钩前的地址信息,删除所述注册表。
较佳的,所述根据待删除的注册表中保存的信息,获取所述注册表中设定对 象的存储地址,包括:
获取所述待删除的注册表的注册表句柄;
识别所述注册表句柄中包含的指向所述设定对象的存储地址的指针;
根据保存的偏移量及所述指向所述设定对象的存储地址的指针,确定所述待 删除的注册表中设定对象的存储地址。
较佳的,所述获取所述待删除的注册表的注册表句柄,包括:
打开所述注册表\Registry\Machine\Sofware键,获得所述注册表的注册表句 柄。
较佳的,所述判断所述设定对象的存储地址是否被挂钩,包括:
判断所述设定对象的存储地址是否为预设的字符,如果是,则确定所述设定 对象的存储地址被挂钩。
较佳的,所述根据保存的内核基地址,确定所述设定对象被挂钩前的地址信 息,包括:
根据保存的内核基地址,加载所述内核,生成映射基地址;
根据所述内核基地址、映射基地址及获取的所述设定对象的存储地址,生成 所述设定对象被挂钩前的地址信息。
较佳的,所述根据所述内核基地址、映射基地址及获取的所述设定对象的存 储地址,生成所述设定对象被挂钩前的地址信息包括:
按下式生成所述设定对象被挂钩前的地址信息:
被挂钩前的地址信息=获取的所述设定对象的存储地址-内核基地址+映射基 地址。
本发明实施例还公开了一种应用程序注册表删除装置,应用于终端,所 述装置包括:
地址获取模块,用于根据待删除的注册表中保存的信息,获取所述注册表中 设定对象的存储地址;
判断挂钩模块,用于判断所述设定对象的存储地址是否被挂钩;
地址确定模块,用于当判断所述设定对象的存储地址被挂钩时,则根据保存 的内核基地址,确定所述设定对象被挂钩前的地址信息;
地址恢复模块,用于将所述注册表中所述设定对象的存储地址恢复为所述被 挂钩前的地址信息;
删除模块,用于根据所述注册表中所述设定对象被挂钩前的地址信息,删除 所述注册表。
较佳的,所述地址获取模块,包括:
句柄获取子模块,用于获取所述待删除的注册表的注册表句柄;
指针识别子模块,用于识别所述注册表句柄中包含的指向所述设定对象的存 储地址的指针;
存储地址获取子模块,用于根据保存的偏移量及所述指向所述设定对象的存 储地址的指针,确定所述待删除的注册表中设定对象的存储地址。
较佳的,所述句柄获取子模块,具体用于:
打开所述注册表\Registry\Machine\Sofware键,获得所述注册表的注册表句 柄。
较佳的,所述判断挂钩模块,具体用于:
判断所述设定对象的存储地址是否为预设的字符,如果是,则确定所述设定 对象的存储地址被挂钩。
较佳的,所述地址确定模块,包括:
基地址获取子模块,用于根据保存的内核基地址,加载所述内核,生成映射 基地址;
挂钩前地址生成子模块,用于根据所述内核基地址、映射基地址及获取的所 述设定对象的存储地址,生成所述设定对象被挂钩前的地址信息。
较佳的,所述挂钩前地址生成子模块,具体用于:
按下式生成所述设定对象被挂钩前的地址信息:
被挂钩前的地址信息=获取的所述设定对象的存储地址-内核基地址+映射基 地址。
由上述的技术方案可见,本发明实施例提供了一种应用程序注册表删 除方法及装置,应用于终端,所述终端根据待删除的注册表中保存的信息, 获取所述注册表中设定对象的存储地址;判断所述设定对象的存储地址是否被 挂钩;当判断所述设定对象的存储地址被挂钩时,则根据保存的内核基地址, 确定所述设定对象被挂钩前的地址信息;将所述注册表中所述设定对象的存储 地址恢复为所述被挂钩前的地址信息;根据所述注册表中所述设定对象被挂钩 前的地址信息,删除所述注册表。由于本发明实施例当确定设定对象的存储地 址被挂钩时,根据保存的内核基地址,确定所述设定对象被挂钩前的地址信息; 将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的地址信息,将 所述设定对象的存储地址恢复为被挂钩前的地址,进而能够对所述注册表 进行删除。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中应用程序注册表删除方法的流程示意图;
图2为本发明实施例提供的一种应用程序注册表删除方法的流程示意 图;
图3为本发明实施例提供的一种应用程序注册表删除装置的结构示意 图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造 性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面通过具体实施例,对本发明进行详细说明。
图2为本发明实施例提供的一种应用程序注册表删除方法的流程示意 图,所述方法应用于终端,该方法可以包括步骤:
S201:根据待删除的注册表中保存的信息,获取所述注册表中设定对象的 存储地址。
所述注册表对象,可以为注册表中的Object对象。
具体地,可按照下述步骤获取所述注册表中设定对象的存储地址:
(1)获取所述待删除的注册表的注册表句柄。
可以打开注册表中的任意键值,获取注册表句柄,此方法为现有技术,本 发明不再赘述。更具体地,可以打开所述注册表\Registry\Machine\Sofware键, 获得所述注册表的注册表句柄。
(2)识别所述注册表句柄中包含的指向所述设定对象的存储地址的指针。具 体地,可以根据获得的所述注册表句柄,获取PCM_KEY_BODY结构的注册表 对象,并获取该结构表对象中的结构成员KeyControlBlock指针。
(3)根据保存的偏移量及所述指向所述设定对象的存储地址的指针,确定所 述待删除的注册表中设定对象的存储地址。所述针对终端操作系统的不同,终 端中保存的偏移量不同,例如在WindowXP系统中,所述偏移量为0x10,在 Window7操作系统中,所述偏移量为0x14;将所述预设对象的存储地址的指针 加上与其对应的偏移量,会得到注册表巢结构的地址,所述注册表巢中具有包 括所述注册表中设定对象的存储地址在内的各种所述注册表的底层信息。例如, 在WindowXP系统中,将获取到的所述KeyControlBlock指针加上偏移量0x10, 即得到所述注册表巢结构、在此处为PHHIVE结构的地址,即
PHHIVE结构地址=KeyControlBlock指针+0x10;
所述终端根据所述PHHIVE结构的地址查询到该PHHIVE结构,并在该结 构中查找结构成员GetCellRoutine,根据该PHHIVE结构中保存的结构成员的地 址,将该确定的结构成员GetCellRoutine的地址作为所述注册表中设定对象的存 储地址。
S202:判断所述设定对象的存储地址是否被挂钩。
地址被挂钩,即意味着地址被进行了更改,病毒会通过将设定对象的存储 地址修改为特定字符的方式,来对所述设定对象的存储地址进行挂钩,对于特 定的病毒,其将设定对象的存储地址修改成为的字符是已知的,所述终端可以 根据保存的不同病毒所对应的字符,判断所述设定对象的存储地址是否为预设 的字符,如果是,则确定所述设定对象的存储地址被挂钩。
具体的,可以判断所述设定对象的存储地址的十六进制字符是否为E9,若 是,则判定所述设定对象的存储地址被挂钩。
S203:当判断所述设定对象的存储地址被挂钩时,则根据保存的内核基地 址,确定所述设定对象被挂钩前的地址信息。
具体的,可以按照下述步骤确定所述设定对象被挂钩前的地址信息:
1)根据保存的内核基地址,加载所述内核,生成映射基地址。
对于终端其内核基地址的地址名称为NtBase地址,内核基地址是固定不变 的。根据所述NtBase地址,加载系统内核,生成映射基地址,该映射基地址的 地址名称为MapBase地址。步骤1)为现有技术,本发明不再赘述。
2)根据所述内核基地址、映射基地址及获取的所述设定对象的存储地址, 生成所述设定对象被挂钩前的地址信息。
可以按下式生成所述设定对象被挂钩前的地址信息:
被挂钩前的地址信息=获取的所述设定对象的存储地址-内核基地址+映射基 地址。具体的,可以为:被挂钩前的地址信息=E9-NtBase地址+MapBase地址。
S204:将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的地 址信息。
将所述被挂钩前的地址信息赋值给所述注册表中所述设定对象的存储地 址,使所述注册表中所述设定对象的存储地址为没有被挂钩的状态。
S205:根据所述注册表中所述设定对象被挂钩前的地址信息,删除所述注 册表。
所述终端根据所述被挂钩前的地址信息,就可以查找并调用删除注册表的 NtDeleteKey函数,以删除所述待删除的注册表。
本发明实施例针对待删除的注册表中设定对象的地址被挂钩的进而无 法对该注册表进行删除情况,根据待删除的注册表中保存的信息,获取所述 注册表中设定对象的被挂钩的存储地址;则根据保存的内核基地址,确定所述 设定对象被挂钩前的地址信息;将所述注册表中所述设定对象的存储地址恢复 为所述被挂钩前的地址信息;根据所述注册表中所述设定对象被挂钩前的地址 信息,删除所述注册表,实现了对所述待删除的注册表对象地址进行恢复,进 而对所述待删除的注册表进行删除的效果。
在本发明提供的另一种实施例中,可以将所述设定对象被挂钩前的地址信息 进行保存,当判断所述设定对象的存储地址被挂钩时,可以利用该保存的设定 对象被挂钩前的地址信息对所述设定对象的存储地址进行恢复。图2所示方法 中,步骤S203可以包括:
将保存的设定对象被挂钩前的地址信息,作为确定的所述设定对象被挂钩前 的地址信息。
本发明实施例直接将预先保存的地址信息作为设定对象被挂钩前的地 址信息,省去了生成设定对象被挂钩前的地址信息的操作,可以针对设定对象 的存储地址被挂钩的情况进行快速应对。
图3为本发明实施例提供的题目一种应用程序注册表删除的装置的结 构示意图,该装置应用于终端,所述装置可以包括:
地址获取模块301,用于根据待删除的注册表中保存的信息,获取所述注册 表中设定对象的存储地址;
判断挂钩模块302,用于判断所述设定对象的存储地址是否被挂钩;
地址确定模块303,用于当判断所述设定对象的存储地址被挂钩时,则根据 保存的内核基地址,确定所述设定对象被挂钩前的地址信息;
地址恢复模块304,用于将所述注册表中所述设定对象的存储地址恢复为所 述被挂钩前的地址信息;
删除模块305,用于根据所述注册表中所述设定对象被挂钩前的地址信息, 删除所述注册表。
进一步地,所述地址获取模块301,包括:
句柄获取子模块(图中未示出),用于获取所述待删除的注册表的注册表句 柄;
指针识别子模块(图中未示出),用于识别所述注册表句柄中包含的指向所 述设定对象的存储地址的指针;
存储地址获取子模块(图中未示出),用于根据保存的偏移量及所述指向所 述设定对象的存储地址的指针,确定所述待删除的注册表中设定对象的存储地 址。
进一步地,所述句柄获取子模块,具体用于:
打开所述注册表\Registry\Machine\Sofware键,获得所述注册表的注册表句 柄。
进一步地,所述判断挂钩模块302,具体用于:
判断所述设定对象的存储地址是否为预设的字符,如果是,则确定所述设定 对象的存储地址被挂钩。
进一步地,所述地址确定模块303,包括:
基地址获取子模块(图中未示出),用于根据保存的内核基地址,加载所述 内核,生成映射基地址;
挂钩前地址生成子模块(图中未示出),用于根据所述内核基地址、映射基 地址及获取的所述设定对象的存储地址,生成所述设定对象被挂钩前的地址信 息。
进一步地,所述挂钩前地址生成子模块,具体用于:
按下式生成所述设定对象被挂钩前的地址信息:
被挂钩前的地址信息=获取的所述设定对象的存储地址-内核基地址+映射基 地址。
本发明实施例提供了一种应用程序注册表删除方法及装置,应用于终 端,所述终端根据待删除的注册表中保存的信息,获取所述注册表中设定对象 的存储地址;判断所述设定对象的存储地址是否被挂钩;当判断所述设定对象 的存储地址被挂钩时,则根据保存的内核基地址,确定所述设定对象被挂钩前 的地址信息;将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的 地址信息;根据所述注册表中所述设定对象被挂钩前的地址信息,删除所述注 册表。由于本发明实施例根据保存的内核基地址,确定所述设定对象被挂钩前 的地址信息;将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的 地址信息,将所述设定对象的存储地址恢复挂钩,进而能够对所述注册表 进行删除。
对于系统/装置实施例而言,由于其基本相似于方法实施例,所以描述的比 较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将 一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些 实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含” 或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过 程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他 要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有 更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要 素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤 是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读 取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。 凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在 本发明的保护范围内。
机译: 应用程序删除通知方法,应用程序删除通知装置,程序和记录介质
机译: 用于添加应用程序图标的方法和装置以及用于删除应用程序图标的方法和装置
机译: 用于添加应用程序图标的方法和装置以及用于删除应用程序图标的方法和装置