首页
社区
课程
招聘
[讨论]这是在逗我笑?CmXXX函数操作注册表竟是金山专利!
发表于: 2017-2-14 09:28 5896

[讨论]这是在逗我笑?CmXXX函数操作注册表竟是金山专利!

2017-2-14 09:28
5896
网址在此https://www.google.com/patents/CN105354498A?cl=zh
由于是谷歌的网页,有些人没有翻墙软件,故贴出如下截图:

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
天啦噜,以后这样写是不是得给金山付专利费用了?
2017-2-14 09:59
0
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
呵呵呵,我们每个人把常用字都注册成专利,就可以躺着收钱了
2017-2-14 10:04
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
微软:不好意思金山我是你爹
2017-2-14 10:52
0
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
...........这都行
2017-2-14 11:13
0
雪    币: 560
活跃值: (959)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
微软好尴尬啊
2017-2-14 11:48
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
请问你用的什么翻墙软件
2017-2-14 12:53
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
一种注册表的操作方法和相关装置及设备

技术领域

[0001] 本发明涉及计算机技术领域,具体涉及一种注册表的操作方法和相关装置及设备。

背景技术

[0002]目前在进行注册表操作时,应用程序通过调用操作系统导出的注册表操作函数执行注册表操作,操作系统导出的注册表操作函数向应用程序屏蔽了底层的操作过程,具体地,目前进行注册表操作时,只需调用操作系统导出的注册表操作函数,操作系统为每个导出的注册表操作函数预先设置了调用路径,调用路径通常包括多个中间函数和一个实际完成注册表操作的操作系统未导出的注册表操作函数,调用过程由操作系统自动完成。不同的注册表操作对应的操作系统未导出的内核操作函数不同。由于操作系统未导出的内核操作函数操作系统没有向用户提供调用接口,即未提供操作系统未导出的内核操作函数的函数地址,所以应用程序无法直接调用。

[0003] 以注册表创建过程为例,当目标应用程序需要创建注册表时,目标应用程序调用应用层的动态链接库kernel32.dll中的RegCreateKey函数;RegCreateKey函数调用应用层中动态链接库ntdll.dll的NtCreateKey函数;动态链接库ntdll.dll的NtCreateKey函数调用内核的NtCreateKey函数;内核的NtCreateKey函数调用操作系统未导出的内核操作函数CmCreateKey,通过内核操作函数CmCreateKey完成注册表创建。

[0004] 需要说明的是:如果操作系统中存在注册表回调函数,则内核的NtCreateKey函数在调用内核的CmCreateKey函数之前,会先调用操作系统中存在的注册表回调函数,如果注册表回调函数返回失败,则内核的NtCreateKey函数不会再调用内核的CmCreateKey函数了,这会导致注册表创建不成功。

[0005] 类似地,现有技术中的钩子函数hook可以监测指定窗口中进程的创建消息,当特定的消息发出后,到达目标窗口之前,钩子函数可以先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数可以加工处理(即改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

[0006] 因此,回调函数及钩子函数的存在可能导致目标应用程序进行注册表操作时失败。举例来说,杀毒软件启动时以及杀毒软件对恶意软件进行处理时都需要进行注册表操作,恶意软件为了阻止杀毒软件的相关操作,可以在杀毒软件调用操作系统导出的注册表操作函数进行注册表操作的过程中,在最终调用操作系统未导出的注册表内核操作函数完成注册表的相关操作之前,使用回调函数或者钩子函数终止杀毒软件完成对注册表的相关操作,这样将使操作系统的安全受到威胁。

发明内容

[0007] 本发明实施例提供一种注册表的操作方法和相关装置及设备,以期直接调用操作系统未导出的注册表操作函数完成注册表的操作,提高特定场景下操作系统的安全性。

[0008] 本发明实施例第一方面提供一种注册表的操作方法,包括:

[0009] 获取目标应用程序需要对注册表进行的注册表操作;

[0010] 确定操作系统未导出的注册表内核操作函数,所述操作系统未导出的注册表内核操作函数与所述注册表操作对应;

[0011] 获取所述操作系统未导出的注册表内核操作函数的函数地址;

[0012] 根据所述函数地址调用所述操作系统未导出的注册表内核操作函数。

[0013] 结合第一方面,在第一方面的第一种可能的实施方式中,所述获取所述操作系统未导出的注册表内核操作函数的函数地址,包括:

[0014] 根据地址映射关系表获取所述操作系统未导出的注册表内核操作函数的函数地址;

[0015] 其中,所述地址映射关系表包括:与N个操作系统未导出的注册表内核操作函数一一对应的N条记录;每条记录包括:用于记录操作系统未导出的注册表内核操作函数的函数名称的第一字段和用于记录所述操作系统未导出的注册表内核操作函数的函数地址的第二字段,所述N为大于或者等于1的整数。

[0016] 结合第一方面的第一种可能的实施方式,在第一方面的第二种可能的实施方式中,在所述获取所述操作系统未导出的内核操作函数的函数地址之前,所述方法还包括:通过栈回溯机制建立地址映射关系。

[0017] 结合第一方面,在第一方面的第三种可能的实施方式中,所述注册表操作包括:创建注册表、删除注册表、删除注册表键值、修改注册表键值、或者枚举注册表项。

[0018] 结合第一方面,在第一方面的第四种可能的实施方式中,所述操作系统未导出的注册表内核操作函数包括:函数名称以Cm开头以Key结尾的操作系统未导出的注册表内核操作函数。

[0019] 结合第一方面的第四种可能的实施方式,在第一方面的第五种可能的实施方式中,所述操作系统未导出的注册表内核操作函数包括:CmCreateKey函数、CmDeleteKey函数、CmDeleteValueKey 函数、CmSetValueKey 函数或者 CmEnumerateKey 函数。

[0020] 结合第一方面,在第一方面的第六种可能的实施方式中,所述确定操作系统未导出的注册表内核操作函数,包括:

[0021] 根据第一映射关系表获取与所述注册表操作对应的操作系统未导出的注册表内核操作函数;

[0022] 其中,所述第一映射关系表包括:与N个注册表操作对应的N条记录;每条记录包括:用于记录注册表操作名称的第一字段和用于记录与所述注册表操作名称对应的操作系统未导出的注册表内核操作函数的函数名称的第二字段,所述N为大于或者等于1的整数。

[0023] 结合第一方面或第一方面的第一种可能的实施方式或者第一方面的第二种可能的实施方式或者第一方面的第三种可能的实施方式或者第一方面的第四种可能的实施方式或者第一方面的第五种可能的实施方式或者第一方面的第六种可能的实施方式,在第一方面的第七种可能的实施方式中,所述目标应用程序包括杀毒软件。

[0024] 本发明实施例第二方面提供一种注册表的操作装置,包括:

[0025] 第一获取单元,用于获取目标应用程序需要对注册表进行的注册表操作;

[0026] 第一确定单元,用于确定操作系统未导出的注册表内核操作函数,所述操作系统未导出的注册表内核操作函数与所述注册表操作对应;

[0027] 第二获取单元,用于获取所述第一确定单元确定的所述操作系统未导出的注册表内核操作函数的函数地址;

[0028] 调用单元,用于根据所述第二获取单元获取的所述函数地址调用所述操作系统未导出的注册表内核操作函数。

[0029] 结合第二方面,在第二方面的第一种可能的实施方式中,所述第二获取单元具体用于,根据地址映射关系表获取所述操作系统未导出的注册表内核操作函数的函数地址;

[0030] 其中,所述地址映射关系表包括:与N个操作系统未导出的注册表内核操作函数一一对应的N条记录;每条记录包括:用于记录操作系统未导出的注册表内核操作函数的函数名称的第一字段和用于记录所述操作系统未导出的注册表内核操作函数的函数地址的第二字段,所述N为大于或者等于1的整数。

[0031] 结合第二方面的第一种可能的实施方式,在第二方面的第二种可能的实施方式中,所述装置还包括:

[0032] 建立单元,用于通过栈回溯机制建立地址映射关系。

[0033] 结合第二方面,在第二方面的第三种可能的实施方式中,

[0034] 所述注册表操作包括:创建注册表、删除注册表、删除注册表键值、修改注册表键值、或者枚举注册表项。

[0035] 结合第二方面,在第二方面的第四种可能的实施方式中,

[0036] 所述操作系统未导出的注册表内核操作函数为名称以Cm开头以Key结尾的操作系统未导出的注册表内核操作函数。

[0037] 结合第二方面的第四种可能的实施方式,在第二方面的第五种可能的实施方式中,所述操作系统未导出的注册表内核操作函数包括:CmCreateKey函数、CmDeleteKey函数、CmDeleteValueKey 函数、CmSetValueKey 函数或者 CmEnumerateKey 函数。

[0038] 结合第二方面,在第二方面的第六种可能的实施方式中,所述第一确定单元具体用于,根据第一映射关系表获取与所述操作系统未导出的注册表内核操作函数;其中,所述第一映射关系表包括:与N个注册表操作一一对应的N条记录;每条记录包括:用于记录注册表操作名称的第一字段和用于记录与所述注册表操作名称对应的操作系统未导出的注册表内核操作函数的函数名称的第二字段,所述N为大于或者等于1的整数。

[0039] 结合第二方面或第二方面的第一种可能的实施方式或者第二方面的第二种可能的实施方式或者第二方面的第三种可能的实施方式或者第二方面的第四种可能的实施方式或者第二方面的第五种可能的实施方式或者第二方面的第六种可能的实施方式,在第二方面的第七种可能的实施方式中,所述目标应用程序包括杀毒软件。

[0040] 本发明实施例第三方面提供一种注册表的操作设备,包括:处理器、存储器和总线;

[0041] 所述处理器和所述存储器通过所述总线连接并完成相互间的通信;

[0042] 所述存储器存储可执行程序代码;

[0043] 所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行一种注册表的操作方法;其中,所述注册表的操作方法包括:

[0044] 获取目标应用程序需要对注册表进行的注册表操作;

[0045] 确定操作系统未导出的注册表内核操作函数,所述未导出的注册表内核操作函数与所述注册表操作对应;

[0046] 获取所述操作系统未导出的注册表内核操作函数的函数地址;

[0047] 根据所述函数地址调用所述操作系统未导出的注册表内核操作函数。

[0048] 本发明实施例提供的技术方案,目标应用程序需要对注册表进行操作时,通过直接调用最终完成注册表操作的操作系统未导出的注册表内核操作函数来完成,由于没有使用回调函数或者钩子函数可以利用的中间调用函数,所以避免了回调函数或者钩子函数对注册表操作的影响,提高了操作系统的安全性。

附图说明

[0049] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

[0050] 图1是本发明实施例提供的一种注册表的操作方法的流程示意图;

[0051] 图2是本发明实施例提供的另一种注册表的操作方法的流程示意图;

[0052] 图3是本发明实施例提供的另一种注册表的操作方法的流程示意图;

[0053] 图4是本发明实施例提供的一种注册表的操作装置的结构示意图;

[0054] 图5是本发明实施例提供的另一种注册表的操作装置的结构示意图;

[0055] 图6是本发明实施例提供的一种注册表的操作设备的结构示意图。

具体实施方式

[0056] 本发明实施例提供一种注册表的操作方法和相关装置及设备,以期直接调用操作系统未导出的注册表操作函数来完成对注册表的操作,提高特定场景下操作系统的安全性。

[0057] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

[0058] 以下分别进行详细说明。

[0059] 本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

[0060] 参见图1,图1为本发明实施例提供的一种注册表的操作方法的流程示意图,如图1所示,一种注册表的操作方法,可以包括如下步骤:

[0061 ] 101、获取目标应用程序需要对注册表进行的注册表操作。

[0062] 其中,目标应用程序包括:希望其对注册表的操作不被回调函数或者钩子函数终止的应用程序,比如杀毒软件等应用程序。

[0063] 其中,目标应用程序需要对注册表进行的注册表操作可以包括:创建注册表、删除注册表、删除注册表键值、修改注册表键值、或者枚举注册表项等操作。

[0064] 102、确定操作系统未导出的注册表内核操作函数,所述操作系统未导出的注册表内核操作函数与所述注册表操作对应。

[0065] 其中,操作系统未导出的注册表内核操作函数,是现有技术中通过调用操作系统导出的注册表操作函数进行注册表操作时,通过逐级调用最后一个被调用的用于执行注册表操作的操作系统未导出的注册表操作函数。

[0066] 具体地,可以根据第一映射关系表获取与所述操作系统未导出的注册表内核操作函数;

[0067] 其中,所述第一映射关系表包括:与N个注册表操作 对应的N条记录;每条记录包括:用于记录注册表操作名称的第一字段和用于记录与所述注册表操作名称对应的未导出的注册表内核操作函数的函数名称的第二字段,所述N为大于或者等于1的整数。

[0068] 103、获取所述操作系统未导出的注册表内核操作函数的函数地址。

[0069] 其中,所述函数地址为现有技术中通过调用操作系统导出的注册表操作函数进行注册表操作时,通过逐级调用最后一个被调用的用于执行注册表操作的操作系统未导出的注册表操作函数的地址。

[0070] 104、根据所述函数地址调用所述操作系统未导出的注册表内核操作函数。

[0071] 通过对所述操作系统未导出的注册表内核操作函数的调用可以完成所述目标应用程序需要对注册表进行的操作。

[0072] 本发明实施例提供的技术方案,目标应用程序需要对注册表进行操作时,通过直接调用最终完成注册表操作的操作系统未导出的注册表内核操作函数来完成,由于没有使用回调函数或者钩子函数可以利用的中间调用函数,所以避免了回调函数或者钩子函数对注册表操作的影响,提高了操作系统的安全性。

[0073] 可选的,在本发明一些可能的实施方式中,所述获取所述操作系统未导出的注册表内核操作函数的函数地址,包括:

[0074] 根据地址映射关系表获取所述操作系统未导出的注册表内核操作函数的函数地址;

[0075] 其中,所述地址映射关系表包括:与N个操作系统未导出的注册表内核操作函数一一对应的N条记录;每条记录包括:用于记录操作系统未导出的注册表内核操作函数的函数名称的第一字段和用于记录所述操作系统未导出的注册表内核操作函数的函数地址的第二字段,所述N为大于或者等于1的整数。

[0076] 可选的,在本发明一些可能的实施方式中,在所述获取所述操作系统未导出的内核操作函数的函数地址之前,所述方法还包括:

[0077] 通过栈回溯机制建立地址映射关系表。

[0078] 可选的,在本发明一些可能的实施方式中,所述操作系统未导出的注册表内核操作函数包括:函数名称以Cm开头以Key结尾的操作系统未导出的注册表内核操作函数。

[0079] 可选的,在本发明一些可能的实施方式中,所述操作系统未导出的注册表内核操作函数包括:CmCreateKey 函数、CmDeleteKey 函数、CmDeleteValueKey 函数、CmSetValueKey 函数或者 CmEnumerateKey 函数。

[0080] 可选的,在本发明一些可能的实施方式中,所述目标应用程序包括杀毒软件。

[0081] 参见图2,图2为本发明实施例提供的另一种注册表的操作方法的流程示意图,如图2所示另一种注册表的操作方法,可以包括如下步骤:

[0082] 201、通过栈回溯机制建立地址映射关系表。

[0083] 其中,所述栈回溯机制是指被调用函数在执行之前,将被调用函数的地址保存在栈中。使用栈回溯机制可以在应用程序使用操作系统导出的注册表操作函数进行注册表操作时,将每次函数调用之前被调用的函数的地址保存到栈中,因此可以从栈中读取对注册表进行实际操作的操作系统未导出的注册表内核操作函数的地址。具体地,获取栈回溯机制建立地址映射关系表的应用程序可以是不同于目标应用程序的程序。比如,若目标应用程序是杀毒软件时,使用栈回溯机制建立地址映射关系表的应用程序可以是文本编辑软件等,恶意软件比如可能是广告弹出软件、病毒软件或者杀毒软件的竞品软件等,恶意软件通常对文本编辑软件操作注册表的过程不关注,所以可以通过使用文本编辑软件等应用软件完成对注册表的操作,使用栈回溯机制可以将注册表操作中调用的操作系统未导出的注册表内核操作函数的地址保存在栈中,从栈中可以获取到用于实际完成注册表操作的操作系统未导出的注册表内核操作函数的地址,根据获取的操作系统未导出的注册表内核操作函数的地址建立地址映射关系表。

[0084] 地址映射关系表包括:与N个操作系统未导出的注册表内核操作函数——对应的N条记录;每条记录包括:用于记录操作系统未导出的注册表内核操作函数的函数名称的第一字段和用于记录所述操作系统未导出的注册表内核操作函数的函数地址的第二字段,所述N为大于或者等于1的整数。比如创建注册表时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmCreateKey ;删除注册表时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmDeleteKey ;删除注册表键值时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmDeleteValueKey ;修改注册表键值时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmSetValueKey ;枚举注册表项时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmEnumerateKey。举例来说,比如N可以为5,则地址映射关系表中包括5条记录,分别对应创建注册表的操作、删除注册表的操作、删除注册表键值的操作、修改注册表键值的操作和枚举注册表项的操作。

[0085] 202、获取目标应用程序需要对注册表进行的注册表操作。

[0086] 其中,目标应用程序包括:希望其对注册表的操作不被回调函数或者钩子函数终止的应用程序,比如杀毒软件等应用程序。

[0087] 其中,目标应用程序需要对注册表进行的注册表操作可以包括:创建注册表、删除注册表、删除注册表键值、修改注册表键值、或者枚举注册表项等操作。

[0088] 203、确定操作系统未导出的注册表内核操作函数,所述操作系统未导出的注册表内核操作函数与所述注册表操作对应。

[0089] 其中,所述操作系统未导出的注册表内核操作函数,是现有技术中通过调用操作系统导出的注册表操作函数进行注册表操作时,通过逐级调用最后一个被调用的用于执行注册表操作的操作系统未导出的注册表操作函数。

[0090] 举例来说,当目标应用程序需要创建注册表时,与创建注册表操作对应的操作系统未导出的注册表内核操作函数是CmCreateKey ;当目标应用程序需要删除注册表项时,与删除注册表项对应的操作系统未导出的注册表内核操作函数是CmDeleteKey ;当目标应用程序需要删除注册表键值时,与删除注册表键值对应的操作系统未导出的注册表内核操作函数是CmDeleteValueKey ;当目标应用程序需要修改注册表键值时,与修改注册表键值对应的操作系统未导出的注册表内核操作函数是CmSetValueKey ;当目标应用程序需要枚举注册表项时,与枚举注册表项对应的操作系统未导出的注册表内核操作函数是CmEnumerateKey ;当目标应用程序需要删除注册表项时,与删除注册表项对应的操作系统未导出的注册表内核操作函数是CmDeleteKey ;当目标应用程序需要删除注册表键值时,与删除注册表键值对应的操作系统未导出的注册表内核操作函数是CmDeleteValueKey。

[0091] 204、根据地址映射关系表获取所述操作系统未导出的注册表内核操作函数的函数地址。

[0092] 205、根据所述函数地址调用所述操作系统未导出的注册表内核操作函数。

[0093] 本发明实施例提供的技术方案,目标应用程序需要对注册表进行注册表操作时,通过直接调用最终完成注册表操作的操作系统未导出的注册表内核操作函数来完成,由于没有使用回调函数或者钩子函数可以利用的中间调用函数,所以避免了回调函数或者钩子函数对注册表操作的影响,提高了操作系统的安全性。

[0094] 为便于更好的理解和实施本发明实施例的上述方案,下面通过具体的应用场景进行举例说明。

[0095] 该实施例中,目标应用程序是杀毒软件,杀毒软件需要对注册表进行的操作是创建注册表。

[0096] 现有技术中,杀毒软件在安装时通常会在开机启动注册表的位置,写入杀毒软件exe的路径信息,这样操作系统在开机启动过程中,就会读取这个注册表位置,创建杀毒软件服务进程,操作系统在调用操作系统未导出的注册表内核操作函数CmCreateKey完成杀毒软件创建注册表之前,恶意软件会通过注册表回调函数或者钩子函数判断出该进程,设置回调函数或者钩子函数的返回结果为失败,终止杀毒软件进程创建注册表,使杀毒软件不能进一步执行调用注册表内核操做函数CmCreateKey,从而导致杀毒软件创建注册表失败,这样杀毒软件不能完成启动过程,将使操作系统的安全受到威胁。

[0097] 如图3所示,本实施例中,杀毒软件进行注册表操作的过程可以包括如下步骤:

[0098] 301、获取杀毒软件需要对注册表进行的注册表操作为创建注册表。

[0099] 具体地,在可能的实施方式中,在每次开机时、或者双击杀毒软件的exe文件时、或者其他进程调用杀毒软件启动时等情况下,杀毒软件需要对注册表进行的注册表操作都包括创建注册表。

[0100] 302、确定操作系统未导出的注册表内核操作函数CmCreateKey,所述未导出的注册表内核操作函数CmCreateKey与创建注册表操作对应的。

[〇1〇1] 具体地,每个注册表操作都对应一个用于实际完成该注册表操作的操作系统未导出的注册表内核操作函数。举例来说,与创建注册表操作对应的操作系统未导出的注册表内核操作函数是CmCreateKey,与删除注册表项对应的操作系统未导出的注册表内核操作函数是CmDeleteKey,与删除注册表键值对应的操作系统未导出的注册表内核操作函数是CmDeleteValueKey,与修改注册表键值对应的操作系统未导出的注册表内核操作函数是CmSetValueKey,与枚举注册表项对应的操作系统未导出的注册表内核操作函数是CmEnumerateKey。具体地,可以建立第一映射关系表,第一映射关系表中包括与N个注册表操作一一对应的N条记录;每条记录包括:用于记录注册表操作名称的第一字段和用于记录与所述注册表操作名称对应的操作系统未导出的注册表内核操作函数的函数名称的第二字段,所述N为大于或者等于1的整数。

[0102] 303、根据地址映射关系表获取CmCreateKey函数的函数地址。

[0103] 具体地,预先通过栈回溯机制建立地址映射关系表,通过查找地址映射关系表获取CmCreateKey函数的函数地址。

[0104] 其中,所述栈回溯机制是指被调用函数在执行之前,它会将被调用函数的地址保存在栈中。使用栈回溯机制可以在应用程序使用操作系统导出的注册表操作函数进行注册表操作时,将每次函数调用之前被调用的函数的地址保存到栈中,因此可以从栈中读取对注册表进行实际操作的操作系统未导出的注册表内核操作函数的地址。具体地,获取栈回溯机制建立地址映射关系表的应用程序可以是不同于目标应用程序的程序。比如,若目标应用程序是杀毒软件时,使用栈回溯机制建立地址映射关系表的应用程序可以是文本编辑软件等应用软件,恶意软件,比如广告弹出软件、病毒软件或者杀毒软件的竞品软件通常对文本编辑软件操作注册表的过程不关注,所以通过使用文本编辑软件等应用软件可以完成对注册表的操作,使用栈回溯机制可以将注册表操作中调用的操作系统未导出的注册表内核操作函数的地址保存在栈中,从栈中可以获取到用于实际完成注册表操作的操作系统未导出的注册表内核操作函数的地址,根据获取的操作系统未导出的注册表内核操作函数的地址建立地址映射关系表。

[0105] 地址映射关系表包括:与N个操作系统未导出的注册表内核操作函数——对应的N条记录;每条记录包括:用于记录操作系统未导出的注册表内核操作函数的函数名称的第一字段和用于记录所述操作系统未导出的注册表内核操作函数的地址的第二字段,所述N为大于或者等于1的整数。其中,操作系统未导出的注册表内核操作函数的函数名称可以是操作系统未导出的注册表内核操作函数的名称,比如创建注册表时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmCreateKey ;删除注册表时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmDeleteKey ;删除注册表键值时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmDeleteValueKey ;修改注册表键值时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmSetValueKey ;枚举注册表项时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmEnumerateKey。举例来说,比如N可以为5,则地址映射关系表中包括5条记录,分别对应创建注册表的操作、删除注册表的操作、删除注册表键值的操作、修改注册表键值的操作和枚举注册表项的操作。

[0106] 304、根据获取的CmCreateKey函数的地址调用CmCreateKey函数。

[0107] 通过调用CmCreateKey函数完成杀毒软件创建注册表的操作。

[0108] 本发明实施例提供的技术方案,目标应用程序需要对注册表进行操作时,通过直接调用最终完成注册表操作的操作系统未导出的注册表内核操作函数来完成,由于没有使用回调函数或者钩子函数可以利用的中间调用函数,所以避免了回调函数或者钩子函数对注册表操作的影响,提高了操作系统的安全性。

[0109] 参见图4,图4为本发明实施例提供的一种注册表操作装置的结构示意图。其中,注册表操作装置400,可以包括:

[0110] 第一获取单元401,用于获取目标应用程序需要对注册表进行的注册表操作。

[0111] 其中,目标应用程序包括:希望其对注册表的操作不被回调函数或者钩子函数终止的应用程序,比如杀毒软件等应用程序。

[0112] 其中,目标应用程序需要对注册表进行的注册表操作可以包括:创建注册表、删除注册表、删除注册表键值、修改注册表键值、或者枚举注册表项等操作。

[0113] 第一确定单元420,用于确定操作系统未导出的注册表内核操作函数,所述操作系统未导出的注册表内核操作函数与所述第一获取单元获取的所述注册表操作对应。

[0114] 其中,所述操作系统未导出的注册表内核操作函数,是现有技术中通过调用操作系统导出的注册表操作函数进行注册表操作时,通过逐级调用最后一个被调用的用于执行注册表操作的操作系统未导出的注册表操作函数。

[0115] 具体地,第一确定单元420可以用于根据第一映射关系表获取与所述注册表操作对应的操作系统未导出的注册表内核操作函数的函数名称。

[0116] 其中,所述第一映射关系表包括:与N个注册表操作对应的N条记录;每条记录包括:用于记录注册表操作名称的第一字段和用于记录与所述注册表操作名称对应的操作系统未导出的注册表内核操作函数的函数名称的第二字段,所述N为大于或者等于1的整数。

[0117] 第二获取单元430,用于获取所述第一确定单元确定的所述操作系统未导出的注册表内核操作函数的函数地址。

[0118] 其中,所述函数地址为现有技术中通过调用操作系统导出的注册表操作函数进行注册表操作时,通过逐级调用最后一个被调用的用于执行注册表操作的操作系统未导出的注册表操作函数的地址。

[0119] 调用单元440,用于根据所述第二获取单元获取的所述地址调用所述操作系统未导出的注册表内核操作函数。

[0120] 通过对所述操作系统未导出的注册表内核操作函数的调用可以完成所述目标应用程序需要对注册表进行的操作。

[0121] 本发明实施例提供的技术方案,目标应用程序需要对注册表进行操作时,通过直接调用最终完成注册表操作的操作系统未导出的注册表内核操作函数来完成,由于没有使用回调函数或者钩子函数可以利用的中间调用函数,所以避免了回调函数或者钩子函数对注册表操作的影响,提高了操作系统的安全性。

[0122] 可选的,所述第二获取单元430具体用于,根据地址映射关系表获取所述操作系统未导出的注册表内核操作函数的函数地址。

[0123] 其中,所述地址映射关系表包括:与N个操作系统未导出的注册表内核操作函数一一对应的N条记录;每条记录包括:用于记录操作系统未导出的注册表内核操作函数的函数名称的第一字段和用于记录所述操作系统未导出的注册表内核操作函数的地址的第二字段,所述N为大于或者等于1的整数。

[0124] 可选的,在本发明一些可能的实施方式中,所述注册表的操作装置还可以包括建立单元,用于通过栈回溯机制建立地址映射关系表。

[0125] 可选的,在本发明一些可能的实施方式中,所述操作系统未导出的注册表内核操作函数包括:函数名称以Cm开头以Key结尾的操作系统未导出的注册表内核操作函数。

[0126] 可选的,在本发明一些可能的实施方式中,所述操作系统未导出的注册表内核操作函数包括:CmCreateKey 函数、CmDeleteKey 函数、CmDeleteValueKey 函数、CmSetValueKey 函数或者 CmEnumerateKey 函数。

[0127] 可选的,在本发明一些可能的实施方式中,所述目标应用程序包括杀毒软件。

[0128] 参见图5,图5为本发明实施例提供的另一种注册表的操作装置的结构示意图。其中,注册表的操作装置500,可以包括:

[0129] 映射关系建立单元510,用于通过栈回溯机制建立地址映射关系表。

[0130] 其中,所述栈回溯机制是指被调用函数在执行之前,它会将被调用函数的地址保存在栈中。使用栈回溯机制可以在应用程序使用操作系统导出的注册表操作函数进行注册表操作时,将每次函数调用之前被调用的函数的地址保存到栈中,因此可以从栈中读取对注册表进行实际操作的操作系统未导出的注册表内核操作函数的地址。具体地,获取栈回溯机制建立地址映射关系表的应用程序可以是不同于目标应用程序的程序。比如,若目标应用程序是杀毒软件时,使用栈回溯机制建立地址映射关系表的应用程序可以是文本编辑软件等,恶意软件,比如广告弹出软件、病毒软件或者杀毒软件的竞品软件通常对文本编辑软件操作注册表的过程不关注,所以通过使用文本编辑软件等应用软件可以完成对注册表的操作,使用栈回溯机制可以将注册表操作中调用的操作系统未导出的注册表内核操作函数的地址保存在栈中,从栈中可以获取到用于实际完成注册表操作的操作系统未导出的注册表内核操作函数的地址,根据获取的操作系统未导出的注册表内核操作函数的地址建立地址映射关系表。

[0131] 地址映射关系表包括:与N个操作系统未导出的注册表内核操作函数——对应的N条记录;每条记录包括:用于记录操作系统未导出的注册表内核操作函数的函数名称的第一字段和用于记录所述操作系统未导出的注册表内核操作函数的地址的第二字段,所述N为大于或者等于1的整数。其中,操作系统未导出的注册表内核操作函数的函数名称可以是操作系统未导出的注册表内核操作函数的名称,比如创建注册表时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmCreateKey ;删除注册表时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmDeleteKey ;删除注册表键值时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmDeleteValueKey ;修改注册表键值时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmSetValueKey ;枚举注册表项时,对应的操作系统未导出的注册表内核操作函数的函数名称可以是CmEnumerateKey。举例来说,比如N可以为5,则地址映射关系表中包括5条记录,分别对应创建注册表的操作、删除注册表的操作、删除注册表键值的操作、修改注册表键值的操作和枚举注册表项的操作。

[0132] 第一获取单元520,用于获取目标应用程序需要对注册表进行的注册表操作。

[0133] 其中,目标应用程序包括:希望其对注册表的操作不被回调函数或者钩子函数终止的应用程序,比如杀毒软件等应用程序。

[0134] 其中,目标应用程序需要对注册表进行的注册表操作可以包括:创建注册表、删除注册表、删除注册表键值、修改注册表键值、或者枚举注册表项等操作。

[0135] 第一确定单元530,用于确定操作系统未导出的注册表内核操作函数,所述操作系统未导出的注册表内核操作函数与所述注册表操作对应。

[0136] 其中,与所述操作系统未导出的注册表内核操作函数,是现有技术中通过调用操作系统导出的注册表操作函数进行注册表操作时,通过逐级调用最后一个被调用的用于执行注册表操作的操作系统未导出的注册表操作函数。

[0137] 第二获取单元540,用于获取所述第一确定单元确定的所述操作系统未导出的注册表内核操作函数的函数地址。

[0138] 其中,所述函数地址为现有技术中通过调用操作系统导出的注册表操作函数进行注册表操作时,通过逐级调用最后一个被调用的用于执行注册表操作的操作系统未导出的注册表操作函数的函数地址。

[0139] 调用单元550,用于根据所述第二获取单元获取的所述函数地址调用所述操作系统未导出的注册表内核操作函数。

[0140] 通过对所述操作系统未导出的注册表内核操作函数的调用可以完成所述目标应用程序需要对注册表进行的注册表操作。

[0141] 本发明实施例提供的技术方案,目标应用程序需要对注册表进行注册表操作时,通过直接调用最终完成注册表操作的操作系统未导出的注册表内核操作函数来完成,由于没有使用回调函数或者钩子函数可以利用的中间调用函数,所以避免了回调函数或者钩子函数对注册表操作的影响,提高了操作系统的安全性。

[0142] 参见图6,图6为本发明实施例提供的一种数据发送设备的结构示意图,所述数据发送设备600,可以包括:

[0143] 处理器601、存储器602和总线603。

[0144] 所述处理器601和所述存储器602通过所述总线603连接并完成相互间的通信;所述存储器602存储可执行程序代码;所述处理器601通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行一种注册表的操作方法;其中,所述注册表的操作方法包括:

[0145] 获取目标应用程序需要对注册表进行的注册表操作;

[0146] 确定操作系统未导出的注册表内核操作函数,所述未导出的注册表内核操作函数与所述注册表操作对应;

[0147] 获取所述操作系统未导出的注册表内核操作函数的函数地址;

[0148] 根据所述函数地址调用所述操作系统未导出的注册表内核操作函数。

[0149] 本发明实施例提供的技术方案,目标应用程序需要对注册表进行操作时,通过直接调用最终完成注册表操作的操作系统未导出的注册表内核操作函数来完成,由于没有使用回调函数或者钩子函数可以利用的中间调用函数,所以避免了回调函数或者钩子函数对注册表操作的影响,提高了操作系统的安全性。

[0150] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

[0151] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

[0152] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

[0153] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

[0154]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

[0155] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

[0156] 以上所述,以上实施例仅用以说明本发明技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,其中,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
2017-2-14 17:19
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
这国际玩笑开的。。

一大堆垃圾文字     我是看不下去   有看完的么      
2017-2-14 17:23
0
雪    币: 35
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
简单说吧,金山丢脸丢到国外去了。。。
当时看到CmXXX的时候差点把冰红茶喷了出来,总之我是没看完,也不想看完2333333333333
2017-2-14 17:52
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
只是觉得有的时候有的东西就算丢脸也要去抢过来!
2017-2-15 08:21
0
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
..........
2017-2-17 13:17
0
游客
登录 | 注册 方可回帖
返回
//