一种接管Windows桌面方法

文档序号:6370483阅读:262来源:国知局
专利名称:一种接管Windows桌面方法
—种接管W i ndows桌面方法
技术领域
本发明涉及一种电脑系统通信技术领域,尤其涉及一种接管Windows桌面方法。背景技术
Windows桌面,也叫资源管理器,其运行的程序名称是Explorer, exe ;当使用者使用Windows桌面程序(如我的电脑、我的文档等)时产生桌面操作消息,该程序会把桌面操作消息派发给资源管理器,资源管理器依Windows预设的内部处理流程对该消息进行处理驱使相应的桌面程序执行动作。Windows桌面扩展程序,就是以Windows桌面程序为基础进行功能扩展,比如在桌面上显示自定义的图标层,允许用户对图标进行分类,拖动等等操作,也可以在桌面上显示3D场景,用鼠标滚轮可以进行场景的切换,缩放等,而桌面上的图标原有功能保留。传统的Windows桌面扩展程序,一般是采用钩子技术,比如使用Windows的 SetffindowsHookEx函数,在资源管理器的程序(即Explorer, exe)上安装钩子在资源管理器处理消息前截获该消息,然后对一些需要处理的消息进行处理,其他的通过调用Windows的CallNextHookEx函数交由资源管理器的原先处理流程来进行。由于Windows桌面扩展程序不是替换Windows桌面,而是完全兼容Windows桌面,并保留其大部分原有功能和处理流程,同时,有很多病毒和木马也使用这种钩子的方法把自己的一些功能绑定到Windows桌面上,比如进行用户密码的窃取等等。随着一些桌面安全软件的广泛使用,这种使用钩子来扩展所述资源管理器的程序功能的方法已经无法适用。因为桌面安全软件会对使用钩子技术中各个钩子所传递的消息进行拦截,导致很多消息会被桌面安全软件当成是木马和病毒给过滤掉,造成Windows桌面扩展程序也无法顺利和资源管理器的程序进行交互。

发明内容本发明要解决的技术问题,在于提供一种接管Windows桌面方法,使用者可以在不被桌面安全软件的干扰下使用Windows桌面扩展程序。本发明是这样实现的一种接管Windows桌面方法,本发明具体包括如下步骤步骤10、Windows桌面扩展程序启动后,该程序创建一消息接收处理模块,并通过该程序将动态链接库加载注入Windows的资源管理器中;步骤20、当远程注入动态链接库成功时进入步骤30 ;当远程注入动态链接库失败时退出该程序并结束;步骤30、所述资源管理器内包含一由该程序注入的DLL模块;所述DLL模块定义一扩展操作消息处理流程,并将扩展消息处理流程设置为资源管理器的消息处理流程,并保存资源管理器原先的内部处理流程;当使用者使用Windows桌面程序时产生桌面操作消息;当使用者使用Windows桌面扩展程序的功能操作时产生扩展操作消息;资源管理器在扩展操作消息处理流程里,对Windows的桌面操作消息及扩展操作消息进行处理;所述扩展操作消息处理流程为当所述DLL模块接收到桌面操作消息后,将该桌面操作消息通过资源管理器原先的内部操作处理流程进行处理让相应的桌面程序执行动作;当所述DLL模块收到该扩展操作消息后,将该扩展操作消息中需要传递给所述消息接受处理模块的部份消息进行加密形成一加密消息,并将该加密消息派发给所述消息接收处理模块;所述DLL模块判断该扩展操作消息是否包含需要调用所述内部处理流程的内部消息,如果需要则将该内部消息派发给资源管理器;步骤40、所述消息接收处理模块收到加密消息后,将该加密消息解密成执行消息;该程序依所述执行消息执行动作;所述资源管理器接收到内部消息后,该资源管理器依原 先的内部处理流程对所述内部资料进行处理让相应的桌面程序执行动作。进一步的,所述步骤10进一步具体为步骤11、该程序通过Windows的RegisterClass函数及CreateWindow函数创建所述消息接收处理模快。进一步的,所述步骤20进一步具体为步骤21、所述程序取得所述资源管理器的进程ID ;步骤22、该程序通过所述进程ID打开资源管理器进程,得到进程句柄;步骤23、该程序在资源管理器中分配一内存空间后,将所述动态链接库的路径写入该内存空间;步骤24、该程序创建远程线程,将所述动态链接库加载至资源管理器;步骤25、当所述动态链接库加载至资源管理器完成后,所述程序释放该内存空间。进一步的,所述步骤30进一步具体为步骤31、所述DLL模块取得W indows桌面的SysListView32的窗体句柄;步骤32、DLL模块利用所述窗体句柄,通过Windows的SetWindowLongPtr函数定义该扩展操作消息处理流程;步骤33、所述程序通过Windows的RegisterClass函数注册一该消息接收模块的类名;所述程序通过Windows的CreateWindow函数创建一该消息接收模块的窗体名;所述消息接收处理模块创建后,Windows赋予该消息接收处理模块一第一句柄;所述DLL模块通过Windows的FindWindowEx函数,利用所述类名及窗体名找出所述第一句柄;步骤34、所述DLL模块将扩展操作消息进行偏移变换处理形成一加密消息;所述DLL模块将加密消息通过Windows的PostMessage函数,依所述第一句柄找到所述消息接收处理模块,并将该加密消息派发到所述消息接收处理模块。本发明具有如下优点方法简单,通过所述程序远程注入动态链接库的方法接管Windows桌面,通过远程注入的技术解决传统钩子技术里消息会被桌面安全软件拦截及过滤的问题,让Windows桌面扩展程序可以顺利对的在Windows桌面上运行。


下面参照附图结合实施例对本发明作进一步的说明。图I为本发明一种接管Windows桌面方法的执行流程图。图2为本发明一种接管Windows桌面方法中DLL模块进行Windows桌面接管的执行流程图。
具体实施方式请参阅图1-2所述,本发明的一种接管Windows桌面方法,包括如下步骤步骤10、Windows桌面扩展程序启动后,该程序创建一消息接收处理模块,并通过该程序将动态链接库加载注入Windows的资源管理器中;

步骤20、当远程注入动态链接库成功时进入步骤30 ;当远程注入动态链接库失败时退出该程序并结束;步骤30、所述资源管理器内包含一由该程序注入的DLL模块;所述DLL模块定义一扩展操作消息处理流程,并将扩展消息处理流程设置为资源管理器的消息处理流程,并保存资源管理器原先的内部处理流程;当使用者使用Windows桌面程序时产生桌面操作消息;当使用者使用Windows桌面扩展程序的功能操作时产生扩展操作消息;资源管理器在扩展操作消息处理流程里,对Windows的桌面操作消息及扩展操作消息进行处理;所述扩展操作消息处理流程为(见图2):当所述DLL模块接收到桌面操作消息后,将该桌面操作消息通过资源管理器原先的内部操作处理流程进行处理让相应的桌面程序执行动作;当所述DLL模块收到该扩展操作消息后,将该扩展操作消息中需要传递给所述消息接受处理模块的部份消息进行加密形成一加密消息,并将该加密消息派发给所述消息接收处理模块;所述DLL模块判断该扩展操作消息是否包含需要调用所述内部处理流程的内部消息,如果需要则将该内部消息派发给资源管理器;步骤40、所述消息接收处理模块收到加密消息后,将该加密消息解密成执行消息;该程序依所述执行消息执行动作;所述资源管理器接收到内部消息后,该资源管理器依原先的内部处理流程对所述内部资料进行处理让相应的桌面程序执行动作。通过远程注入动态链接库的方法,避开传统钩子在消息传递时被桌面安全软件拦截过滤的问题,实现Windows的桌面接管,让桌面的扩展程序(如在桌面显示3D场景、用鼠标滚轮进行场景切换等)可以在不被桌面安全软件过滤及拦截等干扰下运行。所述步骤10进一步具体为步骤11、该程序通过Windows的RegisterClass函数及CreateWindow函数创建所述消息接收处理模快。所述步骤20进一步具体为步骤21、所述程序取得所述资源管理器的进程ID ;步骤22、该程序通过所述进程ID打开资源管理器进程,得到进程句柄;步骤23、该程序在资源管理器中分配一内存空间后,将所述动态链接库的路径写入该内存空间;
步骤24、该程序创建远程线程,将所述动态链接库加载至资源管理器;步骤25、当所述动态链接库加载至资源管理器完成后,所述程序释放该内存空间。所述步骤30进一步具体为步骤31、所述DLL模块取得W indows桌面的SysListView32的窗体句柄;步骤32、DLL模块利用所述窗体句柄,通过Windows的SetWindowLongPtr函数定义该扩展操作消息处理流程;步骤33、所述程序通过Windows的RegisterClass函数注册一该消息接收模块的类名;所述程序通过Windows的CreateWindow函数创建一该消息接收模块的窗体名;所述消息接收处理模块创建后,Windows赋予该消息接收处理模块一第一句柄;所述DLL模块通过Windows的FindWindowEx函数,利用所述类名及窗体名找出所述第一句柄; 步骤34、所述DLL模块将扩展操作消息进行偏移变换处理形成一加密消息;所述DLL模块将加密消息通过Windows的PostMessage函数,依所述第一句柄找到所述消息接收处理模块,并将该加密消息派发到所述消息接收处理模块。本发明的具体操作流程如下I. Windows桌面扩展程序创建消息接收处理模块1-1.程序启动后,首先定义一个用来接收消息的窗体过程(即扩展操作消息处理流程),即用Windows的WNDPR0C回调函数类型来定义一个窗体过程(如MyWndProc)。1-2.通过Windows的RegisterClass函数注册一个自定义的类(如MyClassColor5201),同时设置其窗体过程为先前定义的窗体名称(如MyWndProc)。1-3.然后用Windows的CreateWindow函数创建该窗体用来接收消息的窗口,该窗口名称为自定义的名称(如MyClassColor5201),父窗口的句柄为hShellDefView ;这样就可以接收到DLL模块派发过来的加密消息了。1-4.当消息接收处理模块接收到DLL模块派发过来的加密消息时,该消息接收处理模块依4-2的方法对所述加密消息进行解密;所述加密消息解密后形成执行消息,所述消息接收处理模块对该执行消息进行处理,完成所述Windows桌面扩展程序的操作动作(如在桌面上显示3D场景、通过鼠标滚轮可以进行场景的切换,缩放等)。2. Windows桌面扩展程序将动态链接库加载注入Windows的资源管理器中2-1.取得资源管理器的进程ID:2-1-1.通过 Windows 的 FindWindowEx 函数取得外壳程序 Program Manager 的句柄(即 hProgram)。2-1-2.取得外壳程序 Program Manager 的 SHELLDLL_DefView 子窗口的句柄(即hShellDefView)。2-1-3.通过Windows的FindWindowEx函数取得桌面句柄(即hDe sktopFoIderV i ew)。2-1-4.通过Windows的GetWindowThreadProcessId函数取得资源管理器的进程ID (即 nDesktopProcessId)。2-2.通过资源管理器的进程ID打开资源管理器进程得到进程句柄2-2-1.使用Windows的OpenProcess函数取得资源管理器的进程句柄。
2-3.在资源管理器上远程分配内存后,写入要注入的动态链接库文件路径2-3-1.通过Windows的VirtualAllocEx函数在资源管理器上申请内存空间,空间大小为要注入的动态链接库文件全路径所需的空间大小。2-3-2.通过Windows的WritePr ocessMemory函数把动态链接库文件全路径写入在2-3-1中所述的空间里。2-4.创建远程线程加载上面指定的动态链接库2-4-1.通过Windows的CreateRemoteThread函数进行远程线程的创建,并调用LoadLibrary函数加载所述动态链接库,如果成功即在资源管理器中运行所述DLL模块,如果失败则退出该程序并结束。2-5.等待动态链接库加载完成返回,释放内存空间,完成动态链接库注入2-5-1.使用Windows的WaitForSingleObject函数等待远程线程创建加载完毕后返回。2-5-2.使用Windows的CloseHandle函数关闭在2-2-1中所打开的进程句柄。2-5-3.使用Windows的VirtualFreeEx函数释放在2-3-1中所述的内存空间。3. DLL模块的Window消息过程接管和消息加密转发3-1.在DLL模块初始化时,使用2-1的技术,取得SHELLDLL_DefView窗口的句柄。3-2. DLL模块定义一个自定义的窗体过程(即扩展操作消息处理流程),即用Windows的WNDPR0C回调函数类型来定义一个窗体过程名称(如NewProgramProc)。3-3.利用3-1中取到的句柄,通过Windows的SetWindowLongPtr函数,设置资源管理器的窗体过程为自定义的窗体过程(即NewProgramProc),同时保存其返回的原有窗体过程(即资源管理器对原Windows的桌面操作,非扩展程序的操作处理流程)指针。3-4.用Windows的FindWindowEx函数取得1_3中创建的桌面扩展程序接收消息的窗体句柄(即 hNewDesktopHandle)。3-5.在自定义的窗体过程(即NewProgramProc)里,对使用者使用Windows桌面扩展程序的功能操作所产生的扩展操作消息(即自定义窗体过程NewProgramProc里的参数msg)进行处理,处理内容取决于程序想提供什么功能,同时把扩展操作消息用4-1的方法进行加密形成加密消息,然后通过Windows的PostMessage函数将加密消息派发到Windows桌面扩展程序的消息接收处理模块里去。其他非加密消息(即使用者在使用Windows桌面中非扩展程序的操作下所产生的消息)用Windows的CallWindowProc函数调用原先资源管理器的内部处理流程,完成消息流程的接管。4.扩展操作消息的加密和解密4-1.扩展操作消息加密将扩展消息进行偏移转换处理(如将扩展消息的ID预定义常量值都加上WM USER再加上X,其中WM USER为Windows定义的用户自定义消息的起始值,X为一个非负数的整数值)形成加密消息。4-2.扩展操作消息解密将加密消息进反行偏移转换处理(如将加密消息的ID预定义常量值都减去WM_USER再减去X,其中X为一个非负数的整数值)形成执行消息。综上可知,本发明一种接管Windows桌面方法通过远程注入动态链接库的方式将DLL模块注入资源管理器中,通过远程注入的技术避开桌面安全软件对传统钩子技术中的消息进行拦截过滤的问题,实现有效接管Windows桌面,让Windows扩展程序能顺利的在Windows的桌面上执行应用。
虽然以上描述了本发明的具体实施方式
,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
权利要求
1.一种接管Windows桌面方法,其特征在于包括如下步骤 步骤10、Windows桌面扩展程序启动后,该程序创建一消息接收处理模块,并通过该程序将动态链接库加载注入Windows的资源管理器中; 步骤20、当远程注入动态链接库成功时进入步骤30 ;当远程注入动态链接库失败时退出该程序并结束; 步骤30、所述资源管理器内包含一由该程序注入的DLL模块;所述DLL模块定义一扩展操作消息处理流程,并将扩展消息处理流程设置为资源管理器的消息处理流程,并保存资源管理器原先的内部处理流程; 当使用者使用Windows桌面程序时产生桌面操作消息;当使用者使用Windows桌面扩展程序的功能操作时产生扩展操作消息;资源管理器在扩展操作消息处理流程里,对Windows的桌面操作消息及扩展操作消息进行处理; 所述扩展操作消息处理流程为 当所述DLL模块接收到桌面操作消息后,将该桌面操作消息通过资源管理器原先的内部操作处理流程进行处理让相应的桌面程序执行动作; 当所述DLL模块收到该扩展操作消息后,将该扩展操作消息中需要传递给所述消息接受处理模块的部份消息进行加密形成一加密消息,并将该加密消息派发给所述消息接收处理模块; 所述DLL模块判断该扩展操作消息是否包含需要调用所述内部处理流程的内部消息,如果需要则将该内部消息派发给资源管理器; 步骤40、所述消息接收处理模块收到加密消息后,将该加密消息解密成执行消息;该程序依所述执行消息执行动作;所述资源管理器接收到内部消息后,该资源管理器依原先的内部处理流程对所述内部资料进行处理让相应的桌面程序执行动作。
2.根据权利要求I所述的一种接管Windows桌面方法,其特征在于所述步骤10进一步具体为 步骤11、该程序通过Windows的RegisterClass函数及CreateWindow函数创建所述消息接收处理模快。
3.根据权利要求I所述的一种接管Windows桌面方法,其特征在于所述步骤20进一步具体为 步骤21、所述程序取得所述资源管理器的进程ID ; 步骤22、该程序通过所述进程ID打开资源管理器进程,得到进程句柄; 步骤23、该程序在资源管理器中分配一内存空间后,将所述动态链接库的路径写入该内存空间; 步骤24、该程序创建远程线程,将所述动态链接库加载至资源管理器; 步骤25、当所述动态链接库加载至资源管理器完成后,所述程序释放该内存空间。
4.根据权利要求I所述的一种接管Windows桌面方法,其特征在于所述步骤30进一步具体为 步骤31、所述DLL模块取得W indows桌面的SysListView32的窗体句柄; 步骤32、DLL模块利用所述窗体句柄,通过Windows的SetWindowLongPtr函数定义该扩展操作消息处理流程;步骤33、所述程序通过Windows的RegisterClass函数注册一该消息接收模块的类名;所述程序通过Windows的CreateWindow函数创建一该消息接收模块的窗体名;所述消息接收处理模块创建后,Windows赋予该消息接收处理模块一第一句柄; 所述DLL模块通过Windows的FindWindowEx函数,利用所述类名及窗体名找出所述第一句柄; 步骤34、所述DLL模块将扩展操作消息进行偏移变换处理形成一加密消息;所述DLL模块将加密消息通过Windows的PostMessage函数,依所述第一句柄找到所述消息接收处理模块,并将该加密消息派发到所述消息接收处理模块。
全文摘要
本发明提供一种接管Windows桌面方法,通过启动Windows桌面扩展程序,远程注入一动态链接库,实现接管Windows桌面,本发明的优点在通过远程注入的方式取代传统钩子技术,避免Windows桌面扩展程序在运行时被其他桌面安全软件所过滤的问题。
文档编号G06F9/46GK102722403SQ20121017277
公开日2012年10月10日 申请日期2012年5月30日 优先权日2012年5月30日
发明者刘德建, 甘平, 钟良德, 陈宏展, 陈甦, 陈辉东 申请人:福建天晴数码有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1