一种应用程序注册表删除方法及装置的制造方法_2

文档序号:9844318阅读:来源:国知局
册表进行删除。
【附图说明】
[0052]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0053]图1为现有技术中应用程序注册表删除方法的流程示意图;
[0054]图2为本发明实施例提供的一种应用程序注册表删除方法的流程示意图;
[0055]图3为本发明实施例提供的一种应用程序注册表删除装置的结构示意图。
【具体实施方式】
[0056]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0057]下面通过具体实施例,对本发明进行详细说明。
[0058]图2为本发明实施例提供的一种应用程序注册表删除方法的流程示意图,所述方法应用于终端,该方法可以包括步骤:
[0059]S201:根据待删除的注册表中保存的信息,获取所述注册表中设定对象的存储地址。
[0060]所述注册表对象,可以为注册表中的Object对象。
[0061]具体地,可按照下述步骤获取所述注册表中设定对象的存储地址:
[0062](I)获取所述待删除的注册表的注册表句柄。
[0063]可以打开注册表中的任意键值,获取注册表句柄,此方法为现有技术,本发明不再赘述。更具体地,可以打开所述注册表\\Registry\\Machine\\Sofware键,获得所述注册表的注册表句柄。
[0064](2)识别所述注册表句柄中包含的指向所述设定对象的存储地址的指针。具体地,可以根据获得的所述注册表句柄,获取PCM_KEY_B0DY结构的注册表对象,并获取该结构表对象中的结构成员KeyControlBlock指针。
[0065](3)根据保存的偏移量及所述指向所述设定对象的存储地址的指针,确定所述待删除的注册表中设定对象的存储地址。所述针对终端操作系统的不同,终端中保存的偏移量不同,例如在WindowXP系统中,所述偏移量为0x10,在Window7操作系统中,所述偏移量为0x14;将所述预设对象的存储地址的指针加上与其对应的偏移量,会得到注册表巢结构的地址,所述注册表巢中具有包括所述注册表中设定对象的存储地址在内的各种所述注册表的底层信息。例如,在WindowXP系统中,将获取到的所述KeyControlBlock指针加上偏移量0x10,即得到所述注册表巢结构、在此处为PHHIVE结构的地址,SP
[0066]PHHIVE 结构地址=KeyControlBlock 指针+0x10;
[0067]所述终端根据所述PHHIVE结构的地址查询到该PHHIVE结构,并在该结构中查找结构成员GetCellRoutine,根据该PHHIVE结构中保存的结构成员的地址,将该确定的结构成员GetCel IRoutine的地址作为所述注册表中设定对象的存储地址。
[0068]S202:判断所述设定对象的存储地址是否被挂钩。
[0069]地址被挂钩,即意味着地址被进行了更改,病毒会通过将设定对象的存储地址修改为特定字符的方式,来对所述设定对象的存储地址进行挂钩,对于特定的病毒,其将设定对象的存储地址修改成为的字符是已知的,所述终端可以根据保存的不同病毒所对应的字符,判断所述设定对象的存储地址是否为预设的字符,如果是,则确定所述设定对象的存储地址被挂钩。
[0070]具体的,可以判断所述设定对象的存储地址的十六进制字符是否为E9,若是,则判定所述设定对象的存储地址被挂钩。
[0071 ] S203:当判断所述设定对象的存储地址被挂钩时,则根据保存的内核基地址,确定所述设定对象被挂钩前的地址信息。
[0072]具体的,可以按照下述步骤确定所述设定对象被挂钩前的地址信息:
[0073]I)根据保存的内核基地址,加载所述内核,生成映射基地址。
[0074]对于终端其内核基地址的地址名称为NtBase地址,内核基地址是固定不变的。根据所述NtBase地址,加载系统内核,生成映射基地址,该映射基地址的地址名称为MapBase地址。步骤I)为现有技术,本发明不再赘述。
[0075]2)根据所述内核基地址、映射基地址及获取的所述设定对象的存储地址,生成所述设定对象被挂钩前的地址信息。
[0076]可以按下式生成所述设定对象被挂钩前的地址信息:
[0077]被挂钩前的地址信息=获取的所述设定对象的存储地址-内核基地址+映射基地址。具体的,可以为:被挂钩前的地址信息= E9_NtBase地址+MapBase地址。
[0078]S204:将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的地址信息。
[0079]将所述被挂钩前的地址信息赋值给所述注册表中所述设定对象的存储地址,使所述注册表中所述设定对象的存储地址为没有被挂钩的状态。
[0080]S205:根据所述注册表中所述设定对象被挂钩前的地址信息,删除所述注册表。
[0081]所述终端根据所述被挂钩前的地址信息,就可以查找并调用删除注册表的NtDeleteKey函数,以删除所述待删除的注册表。
[0082]本发明实施例针对待删除的注册表中设定对象的地址被挂钩的进而无法对该注册表进行删除情况,根据待删除的注册表中保存的信息,获取所述注册表中设定对象的被挂钩的存储地址;则根据保存的内核基地址,确定所述设定对象被挂钩前的地址信息;将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的地址信息;根据所述注册表中所述设定对象被挂钩前的地址信息,删除所述注册表,实现了对所述待删除的注册表对象地址进行恢复,进而对所述待删除的注册表进行删除的效果。
[0083]在本发明提供的另一种实施例中,可以将所述设定对象被挂钩前的地址信息进行保存,当判断所述设定对象的存储地址被挂钩时,可以利用该保存的设定对象被挂钩前的地址信息对所述设定对象的存储地址进行恢复。图2所示方法中,步骤S203可以包括:
[0084]将保存的设定对象被挂钩前的地址信息,作为确定的所述设定对象被挂钩前的地址信息。
[0085]本发明实施例直接将预先保存的地址信息作为设定对象被挂钩前的地址信息,省去了生成设定对象被挂钩前的地址信息的操作,可以针对设定对象的存储地址被挂钩的情况进行快速应对。
[0086]图3为本发明实施例提供的题目一种应用程序注册表删除的装置的结构示意图,该装置应用于终端,所述装置可以包括:
[0087]地址获取模块301,用于根据待删除的注册表中保存的信息,获取所述注册表中设定对象的存储地址;
[0088]判断挂钩模块302,用于判断所述设定对象的存储地址是否被挂钩;
[0089]地址确定模块303,用于当判断所述设定对象的存储地址被挂钩时,则根据保存的内核基地址,确定所述设定对象被挂钩前的地址信息;
[0090]地址恢复模块304,用于将所述注册表中所述设定对象的存储地址恢复为所述被挂钩前的地址信息;
[0091]删除模块305,用于根据所述注册表中所述设定对象被挂钩前的地址信息,删除所述注册表。
[0092]进一步地,所述地址获取模块301,包括:
[0093]句柄获取子模块(图中未示出),用于获取所述待删除的注册表的注册表句柄;
[0094]指针识别子模块(
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1