CN105204861A - 一种注册表重定向方法及装置 - Google Patents
一种注册表重定向方法及装置 Download PDFInfo
- Publication number
- CN105204861A CN105204861A CN201510631596.XA CN201510631596A CN105204861A CN 105204861 A CN105204861 A CN 105204861A CN 201510631596 A CN201510631596 A CN 201510631596A CN 105204861 A CN105204861 A CN 105204861A
- Authority
- CN
- China
- Prior art keywords
- dynamic link
- link library
- afferent
- transit route
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明提供注册表重定向方法,包括如下步骤:a.获取应用程序进程包括的N个动态链接库,其中N≥1;b.在第m个动态链接库挂钩第一处理窗口,其中1≤m≤N;c.基于第一处理窗口对传入信息进行判断,所述传入信息与所述第m个动态链接库相对应;d.基于判断结果修改所述传入信息;e.将修改后的传入信息反馈至所述第m个动态链接库。还提供相应的注册表重定向装置。本发明基于在Ntdll.dll动态链接库中挂钩注册表访问函数实现注册表重定向,通过在计算机应用层最底层挂钩API函数实现对进程中所有访问注册表行为的监控,同时挂钩仅限于应用程序进程内,不影响系统其他进程,保证了计算机的运行速度,也优化了用户的操作体验。
Description
技术领域
本发明涉及计算机软件系统,尤其是浏览器系统,具体地涉及在浏览器进程中对注册表进行转接的方法以及相应的装置。
背景技术
长久以来,IE浏览器通过COM组件化模型技术允许程序员基于COM编程接口来使用IE浏览器的内核组件,从而编写定制化的第三方浏览器。随着时代的发展,IE浏览器本身也经过多次更新而存在多个版本,从较早之前的IE5到最新的IE11,其中每个版本的稳定性及性能都有所不同,例如IE10在网页加载速度、HTML5支持方面就优于IE8及IE9,其系统稳定性和性能方面也更为突出。若第三方定制的浏览器能够在装有IE8或IE9的计算机上使用IE10内核,那么对于用户体验是一个很大的提升。
现有技术一般采用注册表转接的方式解决浏览器自定义IE内核集成的技术问题,同时,注册表转接还可以用来实现Flash插件的集合或其他一些特定技术问题;还可以形成一种通用的技术方案来解决一些与注册表交互的相关技术问题。
目前,市场上比较流行的浏览器软件主要有360浏览器、百度浏览器等。这些软件均或多或少的采用注册表转接技术实现IE内核集成或其他需要与注册表进行交互的技术问题,但这些软件在注册表重定向的过程中总会对整个计算机操作系统内其他进程的运行造成一定影响。以申请号为201210460891.X的专利申请为例,该专利申请文件中提出了一种解决方案,其优选地基于“在应用层对特定或全部进程进行注册表操作API函数的挂钩”的技术方案实现注册表转接,这一方案虽然能够实现注册表重定向,但是应用层中被挂钩的进程越多对整个应用层的影响就越大,甚至会对计算机操作系统的整体运行速度产生影响。另一方面,现有技术一般通过在应用层进程下Kerne132.dll或advapi32.dll动态链接库中的RegOpen函数上挂钩API函数来实现注册表转接,但这种技术方案对挂钩时间有特殊要求,由于上述技术方案中API函数挂钩的地址并不是访问注册表的必经之路,所以需要在所述进程访问注册表前实现挂钩以免遗漏,这就在很大程度对用户的实际操作造成了困扰。
现在的用户尤其是程序员对于操作的便利性是有很高的要求的,尤其在用户体验上,用户体验的细微变化往往决定了一个软件被接受的程度。以上述情况为例,在很多时候,用户需要一种可以便捷、全面、稳定地实现注册表重定向的浏览器软件,例如,用户在一计算机上打开所述浏览器软件后,所述软件仅在软件自身的进程中挂钩API函数实现注册表重定向,更进一步地,软件将API函数挂钩在应用层最下方的动态链接库中,这是所有函数访问注册表的必经步骤,也是唯一入口,从而确保计算机操作系统的运行速度同时更彻底地实现注册表转接。
在现阶段,没有一个非常好的方法能够解决上述提到的问题。大多数情况下,用户都只能基于浏览器对应用层内多个甚至所有进程挂钩API函数来实现注册表重定向,没有提供一种有效地浏览器软件,使用户可以将API函数挂钩在浏览器软件自身进程内应用层最底层的动态链接库中。
发明内容
为了克服现有技术中没有提供在浏览器软件进程内应用层最底层挂钩API函数实现注册表重定向的技术问题,本发明的目的是提供一种在浏览器软件进程内实现注册表重定向的方法及相应的装置。
根据本发明的一个方面,提供一种注册表重定向方法,其用于在一应用程序进程内对注册表进行转接,包括如下步骤:
a.获取所述应用程序进程包括的N个动态链接库,其中N≥1;
b.在第m个动态链接库中挂钩第一处理窗口,其中1≤m≤N;
c.基于所述第一处理窗口对传入信息进行判断,所述传入信息与所述第m个动态链接库相对应;
d.基于判断结果修改所述传入信息;
e.将修改后的传入信息反馈至所述第m个动态链接库。
优选地,所述N个动态链接库用于指引所述应用程序进程访问系统注册表,相应地,所述步骤a包括如下步骤:
a1.基于第二处理窗口查找所述N个动态链接库。
优选地,所述第二处理窗口包括如下方式中的任一种或任多种:
-.计算机唯一标识码;或者
-.应用程序代码。
优选地,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述步骤b包括如下步骤:
b1.在所述第m个动态链接库的第i个调用函数下挂钩所述第一处理窗口,其中1≤i≤y。
优选地,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述步骤b包括如下步骤:
b1’.在所述第m个动态链接库的第i~i+n个调用函数下挂钩所述第一处理窗口,其中1≤i<i+n≤y且n>0。
优选地,所述传入信息包括传入路径,相应地,所述步骤c包括如下步骤:
c1.判断所述传入路径是否包括在一转接路径库中;
相应地,所述步骤d包括如下步骤:
d1.若所述传入路径包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
优选地,所述传入信息还包括注册表项A,所述注册表项A为所述传入路径指向的注册表文件,相应地,所述步骤c还包括如下步骤:
c1’.判断所述注册表项A是否包括在一转接路径库中;
相应地,所述步骤d包括如下步骤:
d1’.若所述注册表项A包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
优选地,所述转接路径库包括x组传入信息及集合U,所述集合U包括一个或多个转接信息,所述传入信息与所述集合U相对应,其中x≥1,相应地,所述步骤d1或步骤d1’包括如下步骤:
-.将与所述传入信息相对应的集合U作为待转接路径;
-.基于当前进程主题将所述集合U中一转接信息作为所述修改后传入信息。
优选地,所述第m个动态链接库处于所述计算机操作系统第x层架构的最底层,其中1≤x≤7。
优选地,所述第一处理窗口包括注册表访问函数。
优选地,所述步骤e中所述反馈基于APIHook技术实现。
优选地,所述APIHook技术包括如下函数中的任一种:
-INLINEHook;或者
-IATHook。
优选地,所述调用函数至少包括如下函数中的任一种或任多种:
-NtOpenKey;
-NtOpenKeyEx;
-NtCreateKey;
-NtQueryValueKey;
-NtQueryKey。
根据本发明的另一个方面,还提供一种注册表重定向装置,其用于在一应用程序进程内对注册表进行转接,包括:
第一获取装置,其用于获取所述应用程序进程包括的N个动态链接库,其中N≥1;
第一处理装置,其用于在第m个动态链接库中挂钩第一处理窗口,其中1≤m≤N;
第一判断装置,其用于基于所述第一处理窗口对传入信息进行判断,所述传入信息与所述第m个动态链接库相对应;
第二处理装置,其用于基于判断结果修改所述传入信息;
第一发送装置,其用于将修改后的传入信息反馈至所述第m个动态链接库。
优选地,所述N个动态链接库用于指引所述应用程序进程访问系统注册表,相应地,所述第一获取装置包括:
第一确定装置,其用于基于第二处理窗口查找所述N个动态链接库。
优选地,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述第一处理装置包括:
第二处理装置,其用于在所述第m个动态链接库的第i个调用函数下挂钩所述第一处理窗口,其中1≤i≤y。
优选地,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述第一处理装置还包括:
第三处理装置,其用于在所述第m个动态链接库的第i~i+n个调用函数下挂钩所述第一处理窗口,其中1≤i<i+n≤y且n>0。
优选地,所述传入信息包括传入路径,相应地,所述第一判断装置包括:
第二判断装置,其用于判断所述传入路径是否包括在一转接路径库中;
相应地,所述第二处理装置包括:
第四处理装置,其用于若所述传入路径包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
优选地,所述传入信息还包括注册表项A,所述注册表项A为所述传入路径指向的注册表文件,相应地,所述第一判断装置还包括:
第三判断装置,其用于判断所述注册表项A是否包括在一转接路径库中;
相应地,所述第二处理装置包括:
第五处理装置,其用于若所述注册表项A包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
优选地,所述转接路径库包括x组传入信息及集合U,所述集合U包括一个或多个转接信息,所述传入信息与所述集合U相对应,其中x≥1,相应地,所述第四处理装置或所述第五处理装置包括:
第二确定装置,其用于将与所述传入信息相对应的集合U作为待转接路径;
第三确定装置,其用于基于当前进程主题将所述集合U中一转接信息作为所述修改后传入信息。
优选地,所述第m个动态链接库处于所述计算机操作系统第x层架构的最底层,其中1≤x≤7。
优选地,所述第一发送装置基于APIHook技术实现,包括如下装置中的任一种:
第二发送装置,其基于INLINEHook技术实现;或者
第三发送装置,其基于IATHook技术实现。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其他特征、目的和优点将会变得更明显:
图1示出根据本发明的第一实施例的,注册表重定向方法的流程图;
图2示出根据本发明的第二实施例的,注册表重定向方法的流程图;以及
图3示出根据本发明的第三实施例的,注册表重定向装置的结构图。
具体实施方式
为了更好的使本发明的技术方案清晰的表示出来,下面结合附图对本发明作进一步说明。
本领域技术人员理解,为了解决浏览器软件进行注册表转接过程中极易对计算机系统运行速度造成不良影响的技术问题,本发明的技术方案在于提供一种在浏览器进程内实现注册表重定向的解决方案。通过本发明提供的技术方案,可以极大地提高计算机系统运行速度,同时使得用户的操作体验得到显著改善。具体地,在本发明的优选实施例中,通过在浏览器进程中挂钩API函数,并将挂钩的最优位置定为进程的应用层最底层,从而确保进程中所有需要访问注册表的动作都会被捕捉到。
图1示出根据本发明的第一实施例的,注册表重定向方法的流程图,其用于在一应用程序进程内对注册表进行转接。具体地,在本实施例中,首先执行步骤S101,基于第二处理窗口查找应用程序进程的N个动态链接库,其中N≥1。更为具体地,所述第二处理窗口包括计算机唯一标识码。更进一步地,所述第二处理窗口还包括应用程序代码。优选地,所述计算机唯一标识码包括UDID、GUID或UUID。优选地,所述GUID与所述动态链接库相对应,所述对应关系基于一开放数据库获得。优选地,所述开放数据库由windows操作系统提供。优选地,所述动态链接库还可以直接从所述应用程序代码中获得,本领域技术人员理解,所述windows操作系统会向用户开放部分动态链接库对应信息,则当所述应用程序只需将所述开放动态链接库对应代码写入所述应用程序代码中,即可在进程执行到所述代码时自动访问所述动态链接库。在一个优选例中所述应用程序代码包括所述GUID及所述开放动态链接库代码,当所述应用程序进程顺序执行应用程序代码至所述GUID时,即基于所述GUID获取对应的动态链接库;当所述应用程序进程执行至所述开放动态链接库代码时,可直接基于所述代码访问所述动态链接库,所述GUID对应的动态链接库与所述开放动态链接库代码代表的动态链接库共同构成所述N个动态链接库。优选地,所述动态链接库为DLL文件,其用于提供函数供其他应用程序调用。优选地,所述动态链接库包括一个或多个已被编译、链接并与使用它们的进程分开存储的函数。优选地,所述应用程序通过在进程中依次调用N个动态链接库访问系统注册表。优选地,所述N=3,所述应用程序在进程内分别经Ole32.dll动态链接库、Kerne132.dll动态链接库及Ntdll.dll动态链接库访问系统注册表,本领域技术人员还可以根据实际需要变化出更多实施例,在此不予赘述。优选地,所述Ole32.dll为对象链接与嵌入相关文件;所述Kernel32.dll为内核级文件,其用于控制所述计算机系统的内存管理、数据的输入输出操作及中断处理;所述Ntdll.dll为API接口文件。在一个优选例中,所述应用程序基于用户指令向计算机后台操作系统发送请求信息并接收所述计算机后台操作系统发送的反馈信息,所述请求信息与所述反馈信息相对应,所述请求信息包括所述GUID信息,所述反馈信息包括与所述GUID对应的动态链接库信息,所述计算机后台操作系统基于所述请求信息使用API访问函数查找注册表,获得与所述GUID相对应的动态链接库信息。本领域技术人员理解,本技术方案包括的N个动态链接库涉及所述计算机应用层层面,所述Ole32.dll、Kernel32.dll及Ntdll.dll文件均优选地运行在计算机的应用层层面上,本技术方案的最终目的是在上述动态链接库中挂钩第一处理窗口以实现注册表重定向,虽然在其他诸如驱动层等架构模型中挂钩所述第一处理窗口也能实现相似的注册表重定向功能,但与本发明所述技术方案相比,若在所述驱动层进行操作极有可能对所述计算机系统其他应用程序进程甚至计算机CPU运行速度造成影响,拖慢计算机响应速度,不利于用户体验,所以本技术方案优选地获取所述应用程序进程在所述计算机应用层上需要调用的N个动态链接库,确保将对计算机其他进程的影响降到最低。
接下来执行步骤S102,在第m个动态链接库的第i个调用函数下挂钩第一处理窗口,其中1≤m≤N。具体地,所述动态链接库为一函数库,其包括y个调用函数,其中y≥1。更为具体地,所述调用函数用于执行一特定功能,例如,所述Ole32.dll动态链接库包括CoCreateInstance调用函数,其用于在所述计算机进程中创建一个对象;所述Kernel32.dll动态链接库包括RegOpenKeyEx调用函数,其用于打开一个指定的注册表键;所述Ntdll.dll动态链接库包括NtOpenKey调用函数,其用于打开一现有注册表项。更进一步地,所述应用程序进程将所述第m个动态链接库包括的y个调用函数中的第i个调用函数作为所述第一处理窗口的挂钩位置,相应地1≤i≤y。优选地,所述第一处理窗口包括注册表访问函数,其基于VB、VC等计算机语言编写。优选地,所述注册表访问函数至少包括RegOpenKeyEx,其用于打开注册表键;RegQueryValueEx,其用于读取注册表;RegSetValueEx,其用于写注册表。优选地,所述第m个动态链接库处于所述系统最底层,相应地m=N。优选地,所述应用程序在所述Ntdll.dll动态链接库中挂钩所述注册表访问函数,相应地,所述需要被挂钩的调用函数至少包括NtOpenKey、NtOpenKeyEx、NtCreateKey、NtQuerValueKey、NtQueryKey等中的任一种。在一个优选例中,所述应用程序在所述Ntdll.dll动态链接库的NtOpenKey调用函数下挂钩所述注册表访问函数,所述NtOpenKey调用函数用于打开一个现有的注册表项,当所述应用程序访问系统注册表的进程进行到所述Ntdll.dll动态链接库时即向所述NtOpenKey调用函数发送一请求信息,所述请求信息包括所述需要打开的现有注册表项访问路径信息,则所述挂钩的注册表访问函数检测到所述请求信息后,优选地对所述请求信息进行拦截,对所述请求信息进行功能判断后再向所述NtOpenKey调用函数发送反馈信息,所述反馈信息与所述请求信息相对应,包括修改后的所述需打开现有注册表项的访问路径信息。本领域技术人员理解,与现有技术相比,本实施例所述技术方案优选地将所述注册表访问函数的挂钩位置定位于Ntdll.dll动态链接库中,所述Ntdll.dll动态链接库位于所述计算机应用层最底层,是Windows系统从ring3到ring0的入口,是所有函数访问注册表的必经步骤,Kernel32.dll及User32.dll中所有win32API最终都是调用Ntdll.dll中的函数来实现的,这是现有技术所不采用的技术方案,能够更为彻底的实现注册表重定向,避免因挂钩时机或位置不准确而发生遗漏的风险;另一方面,所述挂钩位置限于所述应用程序进程内,不会对所述计算机其他应用程序进程或CPU运行速度产生任何影响,确保了计算机系统的高速运行,优化了用户体验。
然后执行步骤S103,判断传入路径是否包括在一转接路径库中。具体地,所述转接路径库包括x组传入路径及集合U,所述传入路径与所述集合U相对应,其中x≥1。更为具体地,所述集合U包括一个或多个转接路径,每个转接路径分别对应一进程主题。更进一步地,所述传入路径与所述第m个动态链接库中第i个调用函数接收到的请求信息相对应。优选地,所述传入路径包括在传入信息中,所述传入信息与所述请求信息相对应。优选地,所述传入路径包括所述计算机操作系统提供的注册表项A的访问路径,所述应用程序进程基于所述传入传径即可访问所述注册表项A后进而实现一特定功能。优选地,所述转接路径包括所述应用程序进程希望访问的注册表项A’的路径,所述应用程序进程基于所述转接路径访问所述注册表项A’后能够实现与所述注册表A相同甚至更为优化的性能,例如,所述计算机操作系统通常将所述GUID值存储在HKCR\CLSID路径下,所述应用程序进程基于所述路径可查找到所述计算机对应的CLSID数值及相应传入路径C:\WindoWS\System32\inframe.dll文件;另一方面,所述注册表中所述应用程序包括一个或多个路径,其优选地在路径HKEY_CURRENT_USER\Software\XXXExplorer\IE10Core\Software\Classe下同样创建一dll文件项目,相应地所述转接路径为C:\ProgramFiles\MyPath\ieframe10.dll,与所述传入路径相比,所述转接路径能够指引所述应用程序进程访问到所述应用程序在所述注册表中建立的inframe10.dll动态链接库,与所述计算机系统固有的iefram.dll相比版本更高,性能更稳定。在一个优选例中,所述进程主题基于用户设置产生,所述应用程序进程基于用户选择访问所述转接路径以完成所述传入路径原始需要完成的功能,例如,与老版本相比,IE8允许浏览器每个选项卡单独为一进程从而使得任一网页崩溃时只会关闭相应的一个选项卡,确保了IE浏览器内其他网页进程的正常运行,则对于计算机自带IE内核版本低于所述IE8的用户而言,所述应用程序内置所述IE8内核的相关动态库,用户可以在所述应用程序中设置是否允许所述应用程序基于所述IE8模式运行进程。在另一个优选例中,所述集合U包括多个所述转接路径,则所述传入路径对应多个所述转接路径,每个所述转接路径对应一进程主题,所述应用程序基于用户选择确定与所述传入路径相对应的转接路径,例如,用户希望在浏览网页时运行IE7内核而在观看在线视频时运行IE8内核,则所述应用程序基于用户选择在用户进行相应操作时访问不同的转接路径以调用对应的IE内核。优选地,所述应用程序基于所述请求信息进行判断,若所述传入路径包括在所述转接路径库中,则向所述第一处理窗口发送反馈信息,所述反馈信息与所述请求信息相对应,包括与所述传入路径相对应的集合U。优选地,x=10000,所述转接路径库定期更新,若新增传入路径及对应集合U后所述x>10000则将所述转接路径库中最早加入的传入路径及对应集合U替换为所述新增传入路径及对应集合U,所述更新周期为1周/次,本领域技术人员还可以根据实际需要变化出更多实施例,在此不予赘述。
接下来进入步骤S104执行,将所述转接路径库中与所述传入信息相对应的集合U作为待转接信息。具体地,所述集合U包括一个或多个转接路径,所述转接路径与所述进程主题相对应。更为具体地,所述进程主题基于用户选择或所述应用程序判断产生。更进一步地,所述传入路径与所述第m个动态链接库中第i个调用函数接收到的请求信息相对应。优选地,所述传入信息包括所述传入路径,其用于指引所述第i个调用函数访问所述注册表的一个特定文件。优选地,所述待转接信息包括待转接路径,其用于将所述第i个调用函数指引至所述注册表中应用程序路径下的一个特定文件。优选地,所述待转接路径存储在一存储装置中,所述存储装置包括闪盘、后台线程、计算机内存、Flash、云存储装置中的任一种或任多种。优选地,所述待转接路径包括所述集合U中一个或多个待转接路径及所述待转接路径对应的进程主题。在一个优选例中,所述第一处理窗口基于所述请求信息在所述转接路径库中进行查找,若所述请求信息与所述转接路径库中一传入路径相同,则将所述传入路径对应的集合U作为所述待转接路径,并向所述第一处理窗口发送反馈信息,所述反馈信息与所述请求信息相对应,包括所述集合U包括的一个或多个转接路径及对应进程主题信息。
然后进入步骤S105执行,基于当前进程主题将所述集合U中一转接信息作为修改后的传入信息。具体地,所述当前进程主题用于表示所述应用程序进程访问注册表后需要达到的目的。更为具体地,所述修改后的传入信息包括所述转接信息的转接路径,所述应用程序进程基于访问所述修改后传入信息来调取所述注册表中应用程序自己路径下的特定注册表项。更进一步地,所述集合U存储在所述存储装置中,与所述第一处理窗口相连接。优选地,所述转接信息包括转接路径,其用于将所述第i个调用函数指引至所述注册表中应用程序路径下的一个特定文件。优选地,所述修改后的传入信息包括修改后的传入路径,其与所述转接路径相对应。优选地,所述进程主题与所述转接路径指向的注册表项相对应,其用于表示所述转接路径指向的注册表项的功能类型。优选地,所述第一处理窗口基于所述修改后的传入路径访问并获取所述应用程序希望访问的注册表项。在一个优选例中,所述请求信息包括所述传入路径及所述进程主题,所述转接路径库基于所述传入路径在所述转接路径库中确定对应的集合U后,将所述集合U包括的多个转接路径中与所述进程主题相同的转接路径作为所述修改后的传入路径,例如,所述计算机自带操作系统对应IE6内核相关组件,用户预先在所述应用程序中设定允许所述应用程序在运行过程中使用IE10内核相关组件,则所述应用程序在后续运行过程中基于用户当前打开一网页的指令信息创建所述应用程序进程并向所述计算机注册表发送请求信息,所述请求信息与所述指令信息相对应,所述请求信息经由所述N个动态链接库访问所述注册表从而调用所述IE6内核文件打开所述网页;而在本发明所述技术方案中所述请求信息传达至所述Ntdll.dll动态链接库时即被所述第一处理窗口拦截,所述第一处理窗口接收到所述请求信息后,基于所述请求信息在所述转接路径库中获取集合U,所述集合U包括的转接路径用于指引所述应用程序进程打开一网页,然后基于进程主题获取IE10内核对应的转接路径,所述进程主题包括用户在所述应用程序上预留的设置信息,所述IE10内核对应的转接路径用于将所述应用程序进程指向所述应用程序在所述注册表内的路径下创建的IE10内核组件,所述应用程序进程基于所述IE10内核组件可打开一网页并为所述网页单独配置一进程。
最后执行步骤S106,将所述修改后的传入信息反馈至所述第m个动态链接库。具体地,所述动态链接库包括后缀名为dll的文件库。更为具体地,所述反馈基于基于APIHook函数实现,所述APIHook函数用于修改所述传入路径对应的API函数地址。更进一步地,所述APIHook函数包括INLINEHook函数或者IATHook函数。优选地,所述修改后的传入信息包括所述转接路径。优选地,所述INLINEHook为内置hook,其用于直接修改所述传入路径,本领域技术人员理解,所述直接修改具体步骤包括:在所述传入路径信息内添加备注信息,所述备注信息包括所述转接路径,此时所述修改后的传入路径包括原所述传入路径及转接路径两方面信息,当进程运行到所述Ntdll.dll动态链接库并需要访问所述传入路径时会被所述备注栏中包括的所述转接路径指引到所述注册表中应用程序自建的路径下完成注册表转接,相当于在原所述转入路径下编写“由此处跳转到XXX”。优选地,所述IATHook为函数地址列表hook,其用于在应用层IAT表地址中修改所述传入路径,当所述应用程序进程访问所述IAT表查找所述传入路径时即向所述应用程序进程返回所述修改后的传入路径,达到重定向效果。在一个优选例中,所述第一处理窗口基于IATHook技术向所述Ntdll.dll动态链接库反馈所述修改后的传入路径,则所述Ntdll.dll动态链接库基于所述传入路径中包括的转接路径信息跳转到所述注册表中应用程序路径下创建的注册表项获取相应的dll文件信息,实现注册表重定向。本领域技术人员理解,本实施例所述注册表重定向优选地包括
在本实施例的一个变化例中,所述步骤S101中所述应用程序进程还可以基于所述GUID或所述应用程序代码获取所述N个动态链接库,例如,所述应用程序进程需要调用的N个动态链接库均不包括在开放动态链接库列表中,则所述应用程序进程基于所述GUID获取与所述GUID对应的N个动态链接库;又例如,若所述应用程序进程需要调用的N个动态链接库均已由windows操作系统提供,用户在编写所述应用程序时已预先将所述N个动态链接库转化为代码编入程序内部,则所述应用程序进程执行到相应的动态链接库代码时可直接基于所述应用程序代码访问所述N个动态链接库,无需额外调用其他函数进行访问。本领域技术人员理解,在所述应用程序需要时自动加载的动态链接库包括但不限于:ntdll.dll,kemel32.dll,ole32.dll,advapi32.dll等,为所述windows操作系统提供可以直接编写入所述应用程序代码中。
在本实施例的又一个变化例中,所述步骤S101中所述第二处理窗口基于COM组件化模型技术获取所述N个动态链接库。具体地,所述COM为组件对象模型(ComponentObiectModel)的缩写。更为具体地,所述COM组件化模型技术基于COM编程接口实现,其用于允许用户访问并使用IE浏览器的内核组件。优选地,所述应用程序通过所述GUID值基于所述COM编程接口使用API访问函数查找对应的所述动态链接库。本领域技术人员理解,所述GUID主要用于为windows操作系统下的PC端生成128位的二进制数字标识符;所述UDID主要用于为windows操作系统下的移动终端生成二进制数字标识符;所述UUID则为所述UDID及所述GUID的通用标准,其包括当前日期和时间、时钟序列及全局唯一IEEE机器识别号三部分,是上述UDID及GUID的通用技术标准。在一个优选例中,用户在一计算机上打开一应用程序后,所述应用程序基于CoCreateInstance函数在所述计算机中创建一个COM编程接口,并基于所述COM编程接口获取所述应用程序进程中N个GUID对应的N个动态链接库。所述步骤S101中所述应用程序还可以基于CoCreateInstanceEx函数在一远程计算机中创建一个COM编程接口以获取所述远程计算机系统中一GUID值对应的动态链接库。在另一个优选例中,所述应用程序基于CoGetClassObiect函数在所述计算机中创建多个同一GUID值的COM编程接口。本领域技术人员理解,所述CoCreateInstance函数用于在本机创建一个COM编程接口;而本变化例中所述CoCreateInstanceEx函数则允许用户远程遥控获取所述GUID数值对应的动态链接库信息,即使用户当前正在地铁、飞机等公共场所也可远程对所述计算机进行操作;所述CoGetClassObject函数则允许用户在同一计算机上创建多个COM编程接口,以满足用户多任务同时进行的设计需求,本领域技术人员根据实际需要还可以变化出更多实施例,这并不影响本发明的技术内容。
在本实施例的另一个变化例中,所述步骤S102中所述应用程序还可以在所述Ntdll.dll动态链接库的NtCreateKey调用函数下挂钩所述注册表访问函数。具体地,所述NtCreateKey调用函数用于创建或打开一注册表项。更为具体地,与所述NtOpenKey调用函数相比,本变化例所述NtCreateKey调用函数运行优选地在所述注册表中新建一注册表项,若所述新建注册表项已存在则直接打开。优选地,所述应用程序还可以在所述Ntdll.dll动态链接库的NtQueryKey调用函数下挂钩所述注册表访问函数,所述NtQueryKey调用函数用于查询信息的一个关键。优选地,所述应用程序还可以在所述Ntdll.dll动态链接库的NtQuerValueKey调用函数下挂钩所述注册表访问函数,所述NtQueryValueKey调用函数用于检索指定值。本领域技术人员理解,需要进行挂钩的所述第i个调用函数应该是所述Ntdll.dll动态链接库中被调用次数最多的调用函数,或者是当前应用程序进程访问注册表必须使用到的调用函数,所述应用程序优选地将所述第一处理窗口挂钩在上述这类调用函数中以确保所述应用程序进程访问注册表的请求信息能够在所述访问步骤完成前被所述第一处理窗口侦测到,则所述Ntdll.dll动态链接库中可以被挂钩的调用函数不限于本实施例中提到的几种调用函数,其他同样是所述应用程序进程访问注册表时必须引用的调用函数均可以作为所述被挂钩调用函数。在另一个优选例中,所述需要被挂钩的第i个调用函数与所述进程主题相关,则所述应用程序在所述进程运行到所述Ntdll.dll动态链接库之前,优选地将Ntdll.dll动态链接库中当前进程需要调用的调用函数作为所述需要被挂钩的第i个调用函数,然后当所述应用程序进程运行到所述Ntdll.dll动态链接库并调用所述第i个调用函数时即可被所述第一处理窗口检测到。
在本实施例的又一个变化例中,所述步骤S103中所述进程主题还基于所述应用程序判断产生,优选地,注册表中所述应用程序对应路径下包括多个flash插件项,每个所述flash插件项分别对应不同的应用类型。优选地,所述flash插件为提供给所述应用程序进行flash播放的扩展包,不同的播放网站对应不同的flash插件,例如,对应优酷网的flash播放插件、对应土豆网的flash播放插件等。优选地,所述flash插件还包括为所述flash软件提供额外功能的扩展包,例如针对不同应用程序的flash插件AdobeFlashPlayerForFirefox/Opera/Safari等。与上述步骤S104中所述基于用户选择确定进程主题的技术方案相比,本变化例所述技术方案无需用户额外干预,可直接基于当前应用程序的运行环境判断对应进程主题,例如,用户基于所述应用程序打开优酷网并确认播放一视频,则所述应用程序进程基于所述第一处理窗口将需要调用的flash插件路径转接至注册表中所述应用程序自建路径内的转接flash插件路径,所述转接flash插件路径与所述优酷网相对应,其用于专有支持所述应用程序打开或播放优酷网上的所有多媒体文件,相应地,所述应用程序在所述注册表中的路径下还存储有支持其他视频网站的flash插件或多版本的flash插件以应对不同的用户需求。
图2示出根据本发明的第二实施例的,注册表重定向方法的流程图,其用于在一应用程序进程内对注册表进行转接。具体地,在本实施例中,首先执行步骤S111,基于第二处理窗口查找应用程序进程的N个动态链接库,其中N≥1。具体地,所述第二处理窗口包括计算机唯一标识码。更为具体地,所述第二处理窗口还包括应用程序代码。更进一步地,本领域技术人员可以参考上述图1所示实施例中所述步骤S101,在此不予赘述。
接下来进入步骤S112执行,在第m个动态链接库的第i~i+n个调用函数下挂钩第一处理窗口,其中1≤i<i+n≤y且n>0。具体地,所述动态链接库为一函数库,其包括y个调用函数,其中y≥1。更为具体地,所述调用函数用于执行一特定功能,例如,NtOpenKey调用函数,其用于打开一现有注册表项;NtCreateKey调用函数用于创建或打开一注册表项;NtQueryKey调用函数用于查询信息的一个关键等。更进一步地,所述应用程序同时在所述第m个动态链接库的n+1个调用函数下挂钩所述第一处理窗口,其中n>0。优选地,所述第m个动态链接库为Ntdll.dll动态链接库,其位于计算机应用层的最底层。优选地,所述第一处理窗口为注册表访问函数。在一个优选例中,所述第i~i+n个调用函数为所述Ntdll.dll动态链接库对应调用函数列表中一段相邻调用函数的集合W,所述集合W内的n+1个调用函数包括相同关键词,例如,NtInitiatePowerAction调用函数及NtPowerInformation调用函数均包括相同关键词Power,其均用于对系统电源进行相应操作,具体地前者用于启动电源事件,后者则用于获得所述系统的电源状态;NtReplyPort调用函数、NtReplyWaitReceivePort调用函数及NtReplyWaitReplyPort调用函数均包括相同关键词Reply,其均用于发送一回复邮件然后执行相应操作,具体地,前者用于发送一个回复邮件、后两个在发送一回复邮件后还用于等待传入的请求信息或传入的回复邮件,本领域技术人员理解,所述应用程序进程可能同时访问所述第m动态链接库中的多个调用函数,所述多个调用函数具有相同关键词,其各自对应功能相似但又有细微差别,则所述应用程序进程将所述多个调用函数的处理结果优选地反馈给用户并基于用户选择调用其中一个调用函数执行完成访问注册表实现对应功能,则所述应用程序进程在第一次访问所述第m个动态链接库时即在所述多个调用函数上均挂钩所述第一处理窗口,则不论最终所述应用程序进程基于用户选择确定调用其中任何一个调用函数访问注册表,所述访问注册表的动作均能被所述第一处理窗口检测到,与现有技术仅在应用层Kernel32.dll动态链接库的RegOpenKeyEx调用函数中挂钩API访问函数的技术方案相比,本实施例所述技术方案通过撒网式挂钩方式提高了所述被访问调用函数正好是被挂钩函数的几率,是现有技术所不采用的技术方案,优化了所述应用程序的挂钩模式,减少了由于调用函数挂钩不准确而错过注册表转接最佳时机的可能性。在一个非优选例中,i=1且n=y-1,则所述应用程序在所述第m个动态链接库的所有调用函数上均挂钩所述第一处理窗口。
然后执行步骤S113,判断传入路径指向的注册表项A是否包括在一转接路径库中。具体地,所述转接路径库包括x组传入信息及集合U,所述集合U包括一个或多个转接信息,所述传入信息与所述集合U相对应,其中x≥1。更为具体地,所述传入信息包括传入路径及注册表项A,其中所述注册表项A为所述传入路径指向的注册表文件。更进一步地,所述转接信息包括转接路径及注册表项A’,其中所述注册表项A’为所述转接路径指向的注册表文件。优选地,所述注册表项A或所述注册表项A’包括后缀名为.dll的文件。优选地,所述注册表项A或所述注册表项A’分别包括注册表项文件名、注册表项后缀名及注册表项路径信息。在一个优选例中,所述第一处理窗口基于所述注册表项A的注册表项文件名在所述转接路径库中查找对应的集合U,所述集合U包括一个或多个文件名相同或部分相同的注册表项A’,例如,所述注册表项A对应注册表项文件名inframe.dll,对应的所述集合U由inframe10.dll、inframe9.dll、inframe7.dll三个注册表项A’组成。优选地,若所述传入路径指向的注册表项A包括在所述转接路径库中,则所述转接路径库向所述第一处理窗口发送反馈信息,所述反馈信息包括与所述注册表项A对应的集合U信息。
接下来执行步骤S114,将所述转接路径库中与所述传入信息相对应的集合U作为待转接信息。具体地,所述传入信息包括所述传入路径及注册表项A,所述注册表项A为所述传入路径指向的注册表文件。更为具体地,所述集合U存储一存储装置中,所述存储装置包括闪盘、后台线程、计算机内存、Flash、云存储装置中的任一种或任多种。更进一步地,所述待转接信息包括所述集合U的所有注册表项A’信息及所述注册表项A’对应的转接路径信息。优选地,所述传入信息包括所述注册表项A的文件名信息。优选地,所述集合U存储在所述应用程序后台线程中,所述第一处理窗口基于所述反馈信息从所述后台线程中获取所述集合U。优选地,所述转接路径库中一注册表项A对应一个或多个注册表项A’,每个所述注册表项A’对应一进程主题。优选地,所述进程主题包括所述注册表项A’对应的系统版本,例如,inframe10.dll对应IE10内核;AdobeFlashPlayerforFirefox对应firefox浏览器等。在一个优选例中,所述第一处理窗口基于所述反馈信息获取所述集合U中每个所述注册表项A’的注册表项信息及对应进程主题,并向所述应用程序发送请求信息,所述请求信息包括请求获取当前应用程序进程主题。
然后进入步骤S115执行,基于当前进程主题将所述集合U中一转接信息作为修改后的传入信息。具体地,所述当前进程主题用于表示所述应用程序进程访问注册表后需要达到的目的。更为具体地,所述修改后的传入信息包括所述转接信息的转接路径,所述应用程序进程基于访问所述修改后传入信息来调取所述注册表中应用程序自己路径下的特定注册表项。更进一步地,本领域技术人员可以参考上述图1所示实施例中所述步骤S106,在此不予赘述。在一个优选例中,所述进程主题基于用户设置产生,例如,用户预先在所述应用程序功能设置栏上勾选允许所述应用程序调用自己的flash插件加载多媒体文件,则当用户在所述应用程序上确认播放一多媒体文件后,所述应用程序即向所述注册表发送请求信息,所述请求信息包括所述传入路径、所述flash插件对应进程主题及转接请求信息,所述Ntdll.dll动态链接库内的调用函数接收到所述请求信息的同时挂钩在所述调用函数上的所述第一处理窗口同样接收到所述请求信息,则所述第一处理窗口基于所述传入路径在所述转接路径库中获得对应集合U,然后基于所述进程主题在所述集合U中获取注册表项A’及对应转接路径,所述注册表项A’的进程主题与所述当前应用程序进程主题相同。优选地,所述修改后的传入信息包括所述注册表项A’信息,所述注册表项A’对应进程主题与所述当前应用程序进程主题相同。优选地,所述注册表项A’信息包括所述注册表项A’的注册表信息及转接路径信息。优选地,所述修改后的传入信息存储在所述存储装置中。
最后进入步骤S116执行,将所述修改后的传入信息反馈至所述第m个动态链接库。具体地,反馈基于基于APIHook函数实现,所述APIHook函数用于修改所述传入路径对应的API函数地址。更为具体地,所述APIHook函数包括INLINEHook函数或者IATHook函数。更进一步地,本领域技术人员可以参考上述图1所示实施例中所述步骤S107,在此不予赘述。
在本实施例的一个变化例中,所述步骤S112中所述第i~i+n个调用函数为所述第m个动态链接库中不相邻的n+1个调用函数,则所述n+1个调用函数为所述第m个动态链接库中被调用次数最多的调用函数集合。本领域技术人员理解,与所述步骤S113中所述技术方案相比,本变化例所述n+1个调用函数之间不一定具有相同关键词,其对应函数功能也不尽相同,则所述应用程序优选地将所述第m个动态链接库中被调用最频繁的n+1个调用函数作为需要被挂钩的调用函数,同样是现有技术所不采用的技术方案,使得所述第一处理窗口对所述第m个动态链接库中多个调用函数的挂钩分配更合理。在另一个优选例中,所述第m个动态链接库中的y个调用函数基于关键词分类,所述第一处理窗口分别将所述关键词相同的调用函数分组中被调用次数最多的调用函数作为所述需要被挂钩的调用函数。
在本实施例的又一个变化例中,所述步骤S113可以被替换为“判断所述传入信息是否包括在所述转接路径库中”,其中,所述传入信息包括所述传入路径及所述传入路径指向的注册表项A,相应地,所述转接路径库包括所述传入信息及所述传入信息对应的集合U,则所述第一处理窗口基于其挂钩的调用函数获取所述应用程序进程当前的传入信息,并将所述传入信息与所述转接路径库中的传入信息进行比较,若两者相同即所述传入路径及所述注册表项A均相符,则判断所述传入信息包括在所述转接路径库中;若所述传入路径相同但注册表项A不同,例如注册表项A的文件名不相符,则判断所述传入信息不包括在所述转接路径库中;若所述注册表项A相同但所述传入路径不同,例如所述注册表项A前期被第三方应用程序处理过,与所述应用程序默认路径不同,则判断所述传入信息也不包括在所述转接路径库中。在另一个优选例中,若所述传入信息包括的传入路径或注册表项A中有一项包括在所述转接路径库中,则所述第一处理窗口将所述判断结果反馈给所述应用程序,并基于用户选择进行相应操作,例如,若所述应用程序进程当前传入信息包括的注册表项A包括在所述转接路径库中,但所述传入信息对应的传入路径B与所述转接路径库中所述注册表项A对应的传入路径B’不相同,则所述第一处理窗口向所述应用程序进程发送反馈信息,所述反馈信息包括所述传入路径B及所述传入路径B’,所述应用程序接收到所述反馈信息后,将所述反馈信息显示在所述应用程序当前活动窗口前端,询问用户是否接收所述传入路径B’,然后基于用户选择向所述第一处理窗口发送指令信息,所述指令信息与所述反馈信息相对应,若用户选择接受,则判断所述传入信息包括在所述转接路径库中,完成注册表转接;若用户选择拒绝,则判断所述传入信息不包括在所述转接路径库中,不进行相应地注册表重定向操作。在一个非优选例中,若用户选择接受,所述第一处理窗口在完成注册表重定向后将所述传入路径B’替换为所述传入路径B,以便下次所述第一处理窗口接收到相同传入信息后可直接在所述转接路径库中查找到相应信息。
本领域技术人员理解,与上述图1所示实施例中所述技术方案相比,本实施例所述技术方案优选地将应用层中所述第m个动态链接库中多个调用函数作为需要挂钩的调用函数,提高了所述第一处理窗口检测到所述应用程序进程访问注册表动作的成功率,使得所述第一处理窗口能够在所述应用程序访问注册表前就完成挂钩动作;另一方面,本实施例所述技术方案基于所述传入路径对应的注册表项A在所述转接路径库中进行查找,本领域技术人员理解,计算机注册表尤其是其内核部分虽然存储在内存特定的写保护区域,但有一些相对次要的注册表项仍可能被第三方程序善意或恶意地更改,从而造成所述注册表项的实际路径与所述传入路径不相符的情况发生,则本技术方案中所述第一处理窗口基于所述注册表项信息尤其是所述注册表项文件名信息在所述转接路径库中进行查找,只要所述传入路径指向的注册表项A的文件名能够在所述转接路径库中找到对应集合U,就可以对所述传入路径进行转接,从而允许所述应用程序在所述注册表已经被第三方程序修改过的情况下仍能实现注册表重定向,优化了用户的操作体验,提高了所述应用程序注册表重定向成功率。
图3示出根据本发明的第三实施例的,注册表重定向装置的结构图,其用于在一应用程序进程内对注册表进行转接。具体地,在本实施例中,所述重定向装置4包括第一获取装置41,其用于获取所述应用程序进程包括的N个动态链接库,其中N≥1;第一处理装置42,其用于在第m个动态链接库中挂钩第一处理窗口,其中1≤m≤N;第一判断装置43,其用于基于所述第一处理窗口对传入信息进行判断;第二处理装置44,其用于基于判断结果修改所述传入信息;第一发送装置45,用于将修改后的传入信息反馈至所述第m个动态链接库,所述传入信息与所述第m个动态链接库相对应。更为具体地,所述动态链接库包括一个或多个已被编译、链接并与使用它们的进程分开存储的函数。更进一步地,所述第一处理窗口包括注册表访问函数,其至少包括RegOpenKeyEx,其用于打开注册表键;RegQueryValueEx,其用于读取注册表;RegSetValueEx,其用于写注册表等。优选地,所述传入信息包括传入路径,其用于指引所述第m个动态链接库访问所述注册表的一个特定文件。优选地,所述传入信息还包括注册表项A,所述注册表项A为所述传入路径指向的注册表文件。在一个优选例中,所述重定向装置4基于所述第一获取装置41获取所述应用程序进程在计算机应用层架构下访问所述注册表过程中需要调用的N个动态链接库并向所述第一处理装置42发送请求信息,所述请求信息包括所述N个动态链接库,所述第一处理装置42基于所述请求信息将所述N个动态链接库中处于最底层的第m个动态链接库Ntdll.dll中挂钩所述第一处理函数,所述第一处理窗口与所述第一判断装置43相通讯,当所述应用程序进程运行到所述Ntdll.dll动态链接库时,所述第一处理窗口将所述应用程序进程发送的传入信息发送至所述第一判断装置43,所述第一判断装置43对所述传入信息进行判断并向所述第二处理装置44发送反馈信息,所述反馈信息与所述传入信息相对应,包括所述转接信息,所述第二处理装置44基于APIHook技术将所述传入信息替换为所述修改后的传入信息,所述修改后的传入信息与所述转接信息相对应,最后所述第一发送装置45将所述修改后的传入信息发送至所述Ntdll.dll动态链接库,并基于所述Ntdll.dll动态链接库访问所述应用程序在所述注册表自建目录中的注册表项,实现所述注册表重定向。
优选地,所述第一获取装置41包括第一确定装置411,其用于基于第二处理窗口查找所述N个动态链接库,其中N≥1。优选地,所述第二处理窗口包括计算机唯一标识码和/或应用程序代码。优选地,所述计算机唯一标识码包括GUID、UDID或UUID。优选地,所述动态链接库为DLL文件,其用于提供函数供其他应用程序调用。在一个优选例中,所述重定向装置4顺序执行所述应用程序进程代码,若当前运行代码包括GUID值,则向所述第一确定装置411发送请求信息,所述请求信息包括所述GUID值,所述第一确定装置411基于所述GUID值获取对应的动态链接库;若当前运行代码包括动态链接库代码,则向所述第一确定装置411发送包括所述动态链接库代码的请求信息,所述第一确定装置411可直接基于所述请求信息访问所述动态链接库。
优选地,所述第一处理装置42包括第二处理装置421,其用于在所述第m个动态链接库的第i个调用函数下挂钩所述第一处理窗口,其中1≤i≤y,1≤m≤N。优选地,所述调用函数用于执行一特定功能。优选地,所述动态链接库包括y个调用函数,其中y≥1。优选地,所述第一处理窗口包括注册表访问函数,其基于VB、VC等计算机语言编写。在一个优选例中,所述第二处理装置421接收所述第一确定装置411发送的请求信息,所述请求信息包括所述N个动态链接库,所述N个动态链接库分别处于所述计算机7层架构中的应用层、驱动层等各层架构体系内,所述重定向装置4顺序访问所述N个动态链接库后即可顺利访问所述注册表看,优选地,所述第一处理窗口挂钩在Ntdll.dll动态链接库中,所述Ntdll.dll动态链接库位于所述计算机应用层最底层,是Windows系统从ring3到ring0的入口,是所有函数访问注册表的必经步骤。
优选地,所述第一判断装置43包括第二判断装置431,其用于判断所述传入路径是否包括在一转接路径库中。优选地,所述转接路径库包括x组传入信息及集合U,所述传入信息与所述集合U相对应,其中x≥1。优选地,所述集合U包括一个或多个转接信息,每个转接信息分别对应一进程主题。优选地,所述传入信息包括传入路径及所述传入路径对应的注册表项A。优选地,所述转接信息包括转接路径及所述转接路径对应的注册表项A’。在一个优选例中,所述进程主题基于用户设置产生,所述重定向装置4基于用户选择访问所述转接信息以完成所述传入信息原始需要完成的功能,若所述集合U包括多个所述转接信息,则所述传入信息对应多个所述转接信息,每个所述转接信息对应一进程主题,所述第二判断装置431首先基于所述传入信息在所述转接路径库中查找对应的集合U,然后基于用户选择确定所述集合U中与所述传入信息相对应的转接信息,
优选地,所述第二处理装置44包括第四处理装置441,其用于若所述传入路径包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数;第二确定装置443,其用于将与所述传入信息相对应的集合U作为待转接路径;第三确定装置444,其用于基于当前进程主题将所述集合U中一转接信息作为所述修改后传入信息。具体地,所述进程主题基于用户选择或所述应用程序判断产生。更为具体地,所述传入信息包括所述传入路径,其用于指引所述第i个调用函数访问所述注册表的一个特定文件。更进一步地,所述修改后的传入信息包括所述转接信息的转接路径,所述应用程序进程基于访问所述修改后传入信息来调取所述注册表中应用程序自己路径下的特定注册表项。优选地,所述进程主题与所述转接路径指向的注册表项相对应,其用于表示所述转接路径指向的注册表项的功能类型。在一个优选例中,所述第四处理装置441及所述第二确定装置443基于所述传入路径在所述转接路径库中确定对应的集合U后,将所述集合U包括的多个转接路径中与所述进程主题相同的转接路径作为所述修改后的传入路径,并基于所述第三确定装置444向所述重定向装置4发送反馈信息,所述反馈信息与所述请求信息相对应,包括所述修改后传入信息。
优选地,所述第一发送装置45包括第二发送装置451,其基于INLINEHook技术实现。优选地,所述第二发送装置451基于所述INLINEHook技术将所述修改后的传入信息反馈至所述第m个动态链接库,实现注册表转接。优选地,所述INLINEHook为内置hook,其用于直接修改所述传入路径。在一个优选例中,所述第二发送装置451在所述传入信息对应传入路径中添加备注信息,所述备注信息包括所述转接路径,此时所述修改后的传入路径包括原所述传入路径及转接路径两方面信息,当所述应用程序进程运行到所述Ntdll.dll动态链接库并需要访问所述传入路径时会被所述备注栏中包括的所述转接路径指引到所述注册表中应用程序自建的路径下完成注册表转接,相当于在原所述转入路径下编写“由此处跳转到XXX”。
在本实施例的一个变化例中,所述第二处理装置421可以被替换为第三处理装置422,其用于在所述第m个动态链接库的第i~i+n个调用函数下挂钩所述第一处理窗口,其中1≤i<i+n≤y且n>0。优选地,所述第三处理装置422同时在所述第m个动态链接库的n+1个调用函数下挂钩所述第一处理窗口,其中n>0。优选地,所述第m个动态链接库为Ntdll.dll动态链接库。优选地,所述第i~i+n个调用函数为所述Ntdll.dll动态链接库对应调用函数列表中一段相邻调用函数的集合W,所述集合W内的n+1个调用函数包括相同关键词。在另一个优选例中,所述第i~i+n个调用函数为所述第m个动态链接库中不相邻的n+1个调用函数,则所述n+1个调用函数为所述第m个动态链接库中被调用次数最多的调用函数集合。
在本实施例的又一个变化例中,所述第二判断装置431可以被替换为第三判断装置432,其用于判断所述注册表项A是否包括在一转接路径库中。具体地,所述传入信息包括传入路径及所述传入路径对应的注册表项A。更为具体地,所述注册表项A为所述传入路径指向的注册表文件。更进一步地,所述转接信息包括转接路径及注册表项A’,其中所述注册表项A’为所述转接路径指向的注册表文件。优选地,所述注册表项A或所述注册表项A’包括后缀名为.dll的文件。优选地,若所述传入路径指向的注册表项A包括在所述转接路径库中,则所述第三判断装置432向所述第二处理装置44发送反馈信息,所述反馈信息包括与所述注册表项A对应的集合U信息。相应地,所述第四处理装置441可以被替换为第五处理装置442,其用于若所述注册表项A包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。优选地,所述第五处理装置442基于所述反馈信息修改所述传入路径参数后,修改后的所述传入路径指向所述注册表中应用程序自建目录中的注册表项A’,实现注册表转接。
在本实施例的又一个变化例中,所述第二发送装置451可以被替换为第三发送装置452,其基于IATHook技术实现。优选地,所述第三发送装置452基于所述IATHook技术将所述修改后传入信息反馈至所述第m个动态链接库。优选地,所述IATHook为函数地址列表hook,其用于在应用层IAT表地址中修改所述传入路径,当所述重定向装置4访问所述IAT表查找所述传入路径时即向其返回所述修改后的传入路径,达到重定向效果。在一个优选例中,所述第三发送装置452基于IATHook技术向所述Ntdll.dll动态链接库反馈所述修改后的传入路径,则所述Ntdll.dll动态链接库基于所述传入路径中包括的转接路径信息跳转到所述注册表中应用程序路径下创建的注册表项获取相应的dll文件信息,实现注册表重定向。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。
Claims (22)
1.一种注册表重定向方法,其用于在一应用程序进程内对注册表进行转接,其特征在于,包括如下步骤:
a.获取所述应用程序进程包括的N个动态链接库,其中N≥1;
b.在第m个动态链接库中挂钩第一处理窗口,其中1≤m≤N;
c.基于所述第一处理窗口对传入信息进行判断,所述传入信息与所述第m个动态链接库相对应;
d.基于判断结果修改所述传入信息;
e.将修改后的传入信息反馈至所述第m个动态链接库。
2.根据权利要求1所述的重定向方法,其特征在于,所述N个动态链接库用于指引所述应用程序进程访问系统注册表,相应地,所述步骤a包括如下步骤:
a1.基于第二处理窗口查找所述N个动态链接库。
3.根据权利要求2所述的重定向方法,其特征在于,所述第二处理窗口包括如下方式中的任一种或任多种:
-.计算机唯一标识码;或者
-.应用程序代码。
4.根据权利要求1至3中任一项所述的重定向方法,其特征在于,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述步骤b包括如下步骤:
b1.在所述第m个动态链接库的第i个调用函数下挂钩所述第一处理窗口,其中1≤i≤y。
5.根据权利要求1至3中任一项所述的重定向方法,其特征在于,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述步骤b包括如下步骤:
b1’.在所述第m个动态链接库的第i~i+n个调用函数下挂钩所述第一处理窗口,其中1≤i<i+n≤y且n>0。
6.根据权利要求1至5中任一项所述的重定向方法,其特征在于,所述传入信息包括传入路径,相应地,所述步骤c包括如下步骤:
c1.判断所述传入路径是否包括在一转接路径库中;
相应地,所述步骤d包括如下步骤:
d1.若所述传入路径包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
7.根据权利要求6所述的重定向方法,其特征在于,所述传入信息还包括注册表项A,所述注册表项A为所述传入路径指向的注册表文件,相应地,所述步骤c还包括如下步骤:
c1’.判断所述注册表项A是否包括在一转接路径库中;
相应地,所述步骤d包括如下步骤:
d1’.若所述注册表项A包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
8.根据权利要求6或7所述的重定向方法,其特征在于,所述转接路径库包括x组传入信息及集合U,所述集合U包括一个或多个转接信息,所述传入信息与所述集合U相对应,其中x≥1,相应地,所述步骤d1或步骤d1’包括如下步骤:
-.将与所述传入信息相对应的集合U作为待转接路径;
-.基于当前进程主题将所述集合U中一转接信息作为所述修改后传入信息。
9.根据权利要求1至8中任一项所述的重定向方法,其特征在于,所述第m个动态链接库处于所述计算机操作系统第x层架构的最底层,其中1≤x≤7。
10.根据权利要求1至9中任一项所述的重定向方法,其特征在于,所述第一处理窗口包括注册表访问函数。
11.根据权利要求1至10中任一项所述的重定向方法,其特征在于,所述步骤e中所述反馈基于APIHook技术实现。
12.根据权利要求11所述的重定向方法,其特征在于,所述APIHook技术包括如下函数中的任一种:
-INLINEHook;或者
-IATHook。
13.根据权利要求4至12中任一项所述的重定向方法,其特征在于,所述调用函数至少包括如下函数中的任一种或任多种:
-NtOpenKey;
-NtOpenKeyEx;
-NtCreateKey;
-NtQueryValueKey;
-NtQueryKey。
14.一种注册表重定向装置,其用于在一应用程序进程内对注册表进行转接,其特征在于,包括:
第一获取装置,其用于获取所述应用程序进程包括的N个动态链接库,其中N≥1;
第一处理装置,其用于在第m个动态链接库中挂钩第一处理窗口,其中1≤m≤N;
第一判断装置,其用于基于所述第一处理窗口对传入信息进行判断,所述传入信息与所述第m个动态链接库相对应;
第二处理装置,其用于基于判断结果修改所述传入信息;
第一发送装置,其用于将修改后的传入信息反馈至所述第m个动态链接库。
15.根据权利要求14所述的重定向装置,其特征在于,所述N个动态链接库用于指引所述应用程序进程访问系统注册表,相应地,所述第一获取装置包括:
第一确定装置,其用于基于第二处理窗口查找所述N个动态链接库。
16.根据权利要求14或15所述的重定向装置,其特征在于,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述第一处理装置包括:
第二处理装置,其用于在所述第m个动态链接库的第i个调用函数下挂钩所述第一处理窗口,其中1≤i≤y。
17.根据权利要求14或15所述的重定向装置,其特征在于,所述动态链接库包括y个调用函数,其中y≥1,相应地,所述第一处理装置还包括:
第三处理装置,其用于在所述第m个动态链接库的第i~i+n个调用函数下挂钩所述第一处理窗口,其中1≤i<i+n≤y且n>0。
18.根据权利要求14至17中任一项所述的重定向方法,其特征在于,所述传入信息包括传入路径,相应地,所述第一判断装置包括:
第二判断装置,其用于判断所述传入路径是否包括在一转接路径库中;
相应地,所述第二处理装置包括:
第四处理装置,其用于若所述传入路径包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
19.根据权利要求18所述的重定向装置,其特征在于,所述传入信息还包括注册表项A,所述注册表项A为所述传入路径指向的注册表文件,相应地,所述第一判断装置还包括:
第三判断装置,其用于判断所述注册表项A是否包括在一转接路径库中;
相应地,所述第二处理装置包括:
第五处理装置,其用于若所述注册表项A包括在所述转接路径库中,则基于所述转接路径库修改所述传入路径参数。
20.根据权利要求18或19所述的重定向装置,其特征在于,所述转接路径库包括x组传入信息及集合U,所述集合U包括一个或多个转接信息,所述传入信息与所述集合U相对应,其中x≥1,相应地,所述第四处理装置或所述第五处理装置包括:
第二确定装置,其用于将与所述传入信息相对应的集合U作为待转接路径;
第三确定装置,其用于基于当前进程主题将所述集合U中一转接信息作为所述修改后传入信息。
21.根据权利要求14至20中任一项所述的重定向装置,其特征在于,所述第m个动态链接库处于所述计算机操作系统第x层架构的最底层,其中1≤x≤7。
22.根据权利要求14至22中任一项所述的重定向装置,其特征在于,所述第一发送装置基于APIHook技术实现,包括如下装置中的任一种:
第二发送装置,其基于INLINEHook技术实现;或者
第三发送装置,其基于IATHook技术实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510631596.XA CN105204861B (zh) | 2015-09-29 | 2015-09-29 | 一种注册表重定向方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510631596.XA CN105204861B (zh) | 2015-09-29 | 2015-09-29 | 一种注册表重定向方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105204861A true CN105204861A (zh) | 2015-12-30 |
CN105204861B CN105204861B (zh) | 2018-07-10 |
Family
ID=54952567
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510631596.XA Active CN105204861B (zh) | 2015-09-29 | 2015-09-29 | 一种注册表重定向方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105204861B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105700914A (zh) * | 2015-12-31 | 2016-06-22 | 北京金山安全软件有限公司 | 一种应用软件安装、启动方法和装置 |
CN106897089A (zh) * | 2017-01-19 | 2017-06-27 | 上海帝联信息科技股份有限公司 | 系统操作执行方法及装置 |
CN109361757A (zh) * | 2018-11-09 | 2019-02-19 | 网宿科技股份有限公司 | 一种数据传输方法、装置及计算机可读存储介质 |
CN114398102A (zh) * | 2022-01-18 | 2022-04-26 | 杭州米络星科技(集团)有限公司 | 一种应用程序包生成方法、装置、编译服务器及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102981874A (zh) * | 2012-11-15 | 2013-03-20 | 北京奇虎科技有限公司 | 计算机处理系统和注册表重定向方法 |
CN103019674A (zh) * | 2012-11-15 | 2013-04-03 | 北京奇虎科技有限公司 | 注册表重定向方法和装置 |
CN103176844A (zh) * | 2011-09-28 | 2013-06-26 | 北京奇虎科技有限公司 | 一种ie6内核与新型ie内核的切换方法和系统 |
-
2015
- 2015-09-29 CN CN201510631596.XA patent/CN105204861B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103176844A (zh) * | 2011-09-28 | 2013-06-26 | 北京奇虎科技有限公司 | 一种ie6内核与新型ie内核的切换方法和系统 |
CN102981874A (zh) * | 2012-11-15 | 2013-03-20 | 北京奇虎科技有限公司 | 计算机处理系统和注册表重定向方法 |
CN103019674A (zh) * | 2012-11-15 | 2013-04-03 | 北京奇虎科技有限公司 | 注册表重定向方法和装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105700914A (zh) * | 2015-12-31 | 2016-06-22 | 北京金山安全软件有限公司 | 一种应用软件安装、启动方法和装置 |
CN106897089A (zh) * | 2017-01-19 | 2017-06-27 | 上海帝联信息科技股份有限公司 | 系统操作执行方法及装置 |
CN106897089B (zh) * | 2017-01-19 | 2020-04-03 | 上海帝联信息科技股份有限公司 | 系统操作执行方法及装置 |
CN109361757A (zh) * | 2018-11-09 | 2019-02-19 | 网宿科技股份有限公司 | 一种数据传输方法、装置及计算机可读存储介质 |
CN114398102A (zh) * | 2022-01-18 | 2022-04-26 | 杭州米络星科技(集团)有限公司 | 一种应用程序包生成方法、装置、编译服务器及计算机可读存储介质 |
CN114398102B (zh) * | 2022-01-18 | 2023-08-08 | 杭州米络星科技(集团)有限公司 | 一种应用程序包生成方法、装置、编译服务器及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105204861B (zh) | 2018-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11886440B1 (en) | Guided creation interface for streaming data processing pipelines | |
EP3605324B1 (en) | Application development method and tool, and storage medium thereof | |
US10467232B2 (en) | Searching documentation across interconnected nodes in a distributed network | |
CN111475246A (zh) | 小程序页面显示方法、装置、终端和存储介质 | |
CN109040227A (zh) | 基于区块链的业务请求响应方法、装置和计算机设备 | |
CN105204861A (zh) | 一种注册表重定向方法及装置 | |
CN103034517A (zh) | 浏览器控制工具加载方法和装置 | |
US11240290B2 (en) | Application download method and apparatus, application sending method and apparatus, and system | |
CN102982169A (zh) | 用于隔离网页插件的浏览器和方法 | |
US20180356950A1 (en) | System and method for application navigation | |
CN106326099B (zh) | 一种用于程序跟踪的方法、装置及电子设备 | |
CN103034495A (zh) | 对网页中插件进行隔离的浏览器及网页插件的隔离方法 | |
US11640307B2 (en) | Process initiation | |
CN112685091A (zh) | 基于大数据的业务请求处理方法、装置、设备和介质 | |
CN112988185A (zh) | 云应用更新方法、装置、系统、电子设备及存储介质 | |
CN107894886B (zh) | 一种运行代码的方法、装置及终端设备 | |
CN112748946B (zh) | 应用程序安装文件生成方法和装置、计算设备、存储介质 | |
CN110347454A (zh) | 应用程序主题设定方法、终端设备控制方法及装置、终端设备及计算机可读存储介质 | |
CN108614714A (zh) | 一种动态库更新方法、装置及存储介质 | |
CN103645917A (zh) | Java卡的Java代码补丁方法 | |
CN113282363A (zh) | 一种优化混合app的方法及装置 | |
US10506025B2 (en) | Modifying document metadata with integrated cloud services | |
CN110888643A (zh) | 页面处理方法及装置 | |
CN110286894A (zh) | 脚本生成方法、装置、计算机设备和存储介质 | |
CN114245890A (zh) | 用于提供功能即服务平台的方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |