




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分类号 分类号 TP311 1TP311 1 U U D D C C D10621 408 2007 6115 0D10621 408 2007 6115 0 密密 级 公级 公 开开 编编 号 号 20030312332003031233 成成 都都 信信 息息 工工 程程学学 院院 学学 位位 论论 文文 基于网络的虚拟实验平台基于网络的虚拟实验平台 远程指导模块的设计与实现远程指导模块的设计与实现 论文作者姓名 论文作者姓名 黄伟黄伟 申请学位专业 申请学位专业 计算机科学与技术计算机科学与技术 申请学位类别 申请学位类别 工学学士工学学士 指指导导教教师师姓姓名名 职职称称 王王中中科科 讲讲师师 论文提交日期 论文提交日期 20072007 年年 6 6 月月 8 8 日日 基于网络的虚拟实验平台基于网络的虚拟实验平台 远程指导模块的设计与实现远程指导模块的设计与实现 摘摘 要要 基于网络的虚拟实验平台是在能够进行网络通信的基础之上将计算机上虚 拟的各种仪器 器件 按实验要求组装成一个完整的实验环境 实现搭接实验 电路 演示实验过程等功能 远程指导模块是其中的一个功能模块 它分成指 导端和被指导端两部分 指导端通过 HOOK 技术 采集本地机鼠标和键盘信息 然后将这些信息打包 通过 P2P 网络通信机制将信息包传给被指导端 在被指 导端将信息包信息解出 通过 mouse event keybd event 等函数去控制被指导 端的鼠标 键盘动作 实现相关的一些远程指导动作 本模块在 VC 环境下开发 用到了 Windows Socket 编程技术 P2P 编程思想 HOOK 技术 多线程技术等多 方面的技术 由于整个系统模块很多 本设计中编写了独立的测试程序 经过 测试基本达到预期的设计目标 关键词关键词 远程指导 P2P Windows Socket 编程 HOOK 多线程 Design and Implementation of Remote Guidance Module Based on Network Virtual Experiment Platform Abstract Under the foundation of network communications the network based Virtual Experimental Platform could integrate various computer virtual devices into a complete experimental environment according to the experiment requirements and connect the experiment circuit and demonstrate the process of experiment The remote guiding module was one of function modules which was divided into guiding end and the guided end With HOOK the guiding end captured the information of local mouse and keyboard and packed the information to send to the guided part through peer to peer network communication mechanism The guided end will unpack the information and control the mouse and keyboard of the guided end by mouse event keybd event functions to implement some remote control actions Developed under VC environment the remote guidance module used Windows Socket programming technology P2P programming ideas HOOK technology multithreading technology and etc Because there are many modules for the whole system an independent testing procedure was programmed to test the modules which had been proven to achieve the desired objectives Key words Remote guidance Peer to Peer Windows Socket programming HOOK Multithreading 目目 录录 论文总页数 23 页 1 引言 1 1 1 项目背景 1 1 2 项目介绍 1 1 2 1 基于网络的虚拟实验平台 1 1 2 2 远程指导模块 2 1 3 项目要求 2 1 3 1 功能要求 2 1 3 2 Client Server 客户端 服务器 结构工作过程 2 2 网络基础知识简介 3 2 1 OSI 与 TCP IP 参考模型的对应关系 3 2 1 1 OSI 参考模型 3 2 1 2 TCP IP 参考模型 4 2 2 WINDOWS SOCKET编程原理及操作步骤 5 2 3 P2P 网络介绍 8 3 相关函数分析与代码实现 8 3 1 多线程 8 3 1 1 进程介绍 8 3 1 2 线程介绍 8 3 1 3 进程与线程的关系 9 3 1 4 多线程实现 9 3 2 HOOK技术 9 3 2 1 Hook 函数简介及类型 9 3 2 2 Hook 子过程处理 12 3 2 3 Hook 的安装 卸载 13 3 3 设计流程及函数思想 15 3 3 1 简述 15 3 3 2 代码分析 15 4 程序测试与相应改进 18 4 1 程序界面 18 4 2 程序相关测试 19 4 2 1 获取对方相关信息 19 4 2 2 发送消息及存贮 19 4 2 3 被指导端显示信息 20 4 3 相关改进 20 结 论 20 参考文献 21 致 谢 22 声 明 23 第 1 页 共 23 页 1 1 引言引言 近年来 随着信息技术的发展 计算机的普及 网络为我们带了更多的便 利 网络技术的发展 引发了控制领域的深刻技术变革 控制系统结构沿着网 络化方向与控制系统体系沿着开放性方向发展将是控制系统技术创新的大潮流 计算机局域网络 企业网络 现代信号处理等等使自动化系统与工业控制系统 从体系结构 控制方法 产品系列 人机协作方法等都发生了重大的变化 进 入 21 世纪的控制系统以网络为主要特征 一方面是在自动化与工业控制中需要 更深层次地渗透通信与网络技术 另一方面是在通信网络的管理与控制中也要 求更多的采用控制理论与策略并且由于系统中需要大量的数据交换 服务器的 负担很重 所以我们就研究出了基于网络的虚拟实验平台 作为基于网络的虚拟实验平台的远程指导模块 本文通过 Windows Socket 编程 以 HOOK 技术 多线程技术作为基础 再利用其他的 API 函数来实现被指 导端对指导端发送请求信息 将信息打包以后通过网络传输到服务器端 指导 端收到信息以后 将信息解包 根据信息提示来对被指导端进行相关指导 获 取客户的相关信息 锁定鼠标和键盘 对鼠标进行动态的控制和指导键盘的信 息输入 1 11 1 项目背景项目背景 全球信息化的发展 计算机网络给我们提供了优越的通信平台 优秀的软 件系统必须要具有网络功能 虚拟实验平台正是应这个大需求而诞生 并且随 着信息技术的发展 网络无疑为我们带了更多的便利 同时一个优秀的系统必 须要具有网络功能 要完成这些功能 那就要把各种网络通过某种方式连接起 来 在网络实现过程中存在穿透 NAT 的问题 此问题存在较长时间 后来因为 网络地址不够而产生了 P2P 技术 伴随着 P2P 技术的出现 利用 UDP 实现 P2P 网络穿越 NAT 的即时通讯技术 而问题即被解决 1 21 2 项目介绍项目介绍 1 2 11 2 1 基于网络的虚拟实验平台基于网络的虚拟实验平台 计算机技术 大规模集成电路技术和通讯技术的飞速发展 为虚拟实验的 发展奠定了坚实的基础 虚拟实验就是在通用计算机上加载相应的软件或硬件 使得使用者在操作这台计算机时 就像是在操作一台专用的传统试验设备一样 在虚拟实验系统中 软件是整个系统的关键 任何使用者都可以通过软件的相 关设置来达到要实现实验的效果 虚拟实验就是利用外部输入 如鼠标的点击 拖动和键盘的敲击等 将计 算机上虚拟的各种仪器 按实验要求 过程 组装成一个完整的实验环境 同 时在这个环境中完成实验操作 包括实验器材的添加 实验条件的改变 数据 第 2 页 共 23 页 采集以及实验结果的模拟 分析 它包含了虚拟仿真技术 计算机技术 实验 技术 网络技术与专业等多方面理论知识 1 2 21 2 2 远程指导模块远程指导模块 远程指导模块是基于网络的虚拟实验平台的一个通信模块 是基于 Windows Socket 编程 使用 Client Server 客户端 服务器 结构来实现模块的 功能 以 VC 为开发环境 同时以 HOOK 技术和多线程技术作为基础 再利用 API 相关函数来实现指导端和被指导端的互动 1 31 3 项目要求项目要求 1 3 11 3 1 功能要求功能要求 完成远程指导的基本功能 指导端和被指导端能够进行 P2P 网络通信 指 导端能够控制被指导端的鼠标和键盘 并且能够存储相关信息 还能够对鼠标 进行动态控制和指导键盘的输入 1 3 21 3 2 Client Server Client Server 客户端客户端 服务器服务器 结构工作过程结构工作过程 Client Server 客户端 服务器 结构 通过将任务合理分配到Client 端和 Server 端 降低了系统的通讯开销 可以充分利用两端硬件环境的优势 在 TCP IP网络应用中 通信的两个进程间相互作用的主要模式是客户机 服务器模 式 client server 即客户向服务器提出请求 服务器接收到请求后 提供相 应的服务 客户机 服务器模式的建立基于以下两点 首先 建立网络的起因是 网络中软硬件资源 运算能力和信息不均等 需要共享 从而造就拥有众多资 源的主机提供服务 资源较少的客户请求服务这一非对等作用 其次 网络之 间进程通信完全是异步的 相互通信的进程间既不存在父子关系 又不共享内 存缓冲区 因此需要一种机制为希望通信的进程间建立联系 为二者的数据交 换提供同步 这就是基于客户机 服务器模式的TCP IP 客户机 服务器模式在操作过程中采取的是主动请求的方式 首先服务器方 要先启动 并根据请求提供相应的服务 打开一个通信通道并告知本地主机 它愿意在某一地址和端口上接收客户请求 等待客户请求到达该端口 接收到 重复服务请求 处理该请求并发送应答信号 接收到并发服务请求 要激活一 个新的进程 或线程 来处理这个客户请求 新进程 或线程 处理此客户请求 并不需要对其它请求做出应答 服务完成后 关闭此新进程与客户的通信链路 并终止 返回第二步 等待另一客户请求 关闭服务器 客户方 打开一个通信通道 并连接到服务器所在主机的特定端口 向服 务器发送服务请求报文 等待并接收应答 继续提出请求 请求结束后关闭通 信通道并终止 第 3 页 共 23 页 2 2 网络基础知识简介网络基础知识简介 2 12 1 OSIOSI 与与 TCP IPTCP IP 参考模型的对应关系参考模型的对应关系 2 1 12 1 1 OSIOSI 参考模型参考模型 国际标准化组织 ISO 开发了开放式系统互联 OSI 参考模型 以促进计算 机系统的开放互联 开放式互联就是可在多个厂家的环境中支持互联 该模型 为计算机间开放式通信所需要定义的功能层次建立了全球标准 OSI 模型将通 信会话需要的各种进程划分成 7 个相对独立的功能层次 这些层次的组织是以 在一个通信会话中事件发生的自然顺序为基础的 表 1 描述了 OSI 1 3 层提供 了网络访问 4 7 层用于支持端端通信 1 物理层是 OSI 模型的最低层 它建立在物理通信介质的基础上 规定了 机械的 电气的功能 该层负责建立 保持和拆除物理链路 规定如何在此链 路上传送原始比特流 比特如何编码 使用的电平 极性 连接插头插座的插 脚如何分配等 所以在物理层数据的传送单位是比特 bit 2 数据链路层它把相邻两个节点间不可靠的物理链路变成可靠的无差错的 逻辑链路 包括把原始比特流分帧 frame 顺序 排序 设置检错 确认 重 发 流控等功能 数据链路层传动信息的单位是 frame 每帧 frame 包括一定 数量的数据和一些必要的控制信息 在每帧 frame 的控制信息中 包括同步信 息 地址信息 流量信息等 同物理层相似 数据链路层负责建立 维护和释 放数据链路 3 网络层 它连接网络中任何两个计算机点 从一个节点上接收数据 正 确的传送到另一个节点 在网络层 传送的信息单位是分组或包 packet 网 络层的主要任务是要选择合适的路由和交换节点 透明地向目的站交付发送站 所发的分组或包 这里的透明表示收发两端好像是直接连通的 另外网络层还 要解决网络互连 拥挤控制等问题 上述三层组成了所谓的通信子网 用户计 算机连接到此子网上 通信子网负责把一个地方的数据可靠地传送到另一个地 方 但并未实现两个地方主机上进行进程之间的通信 通信子网的主要功能是 面向通信的 4 传输层上真正地实现了端对端通信 把数据可靠地从一方的用户进程或 程序送到另一方的用户进程或程序 这一层的控制通常由通信两端的计算机完 成 中间节点一般不提供这一层的服务 这一层的通信与通信子网无关 从这 一层开始的以上各层全部是针对通信的最终的源端目的端计算机的进程之间的 传输层传送的信息单位是报文 message 传输层向上一层提供一个可靠的端 一端服务 使上一层看不见下面几层的通信细节 正因为如此 传输层成为网 络体系结构中关键的一层 对于传输层的功能 主要在主机内实现 而对于物 第 4 页 共 23 页 理层 数据链路层以及网络层的功能均能在报文接口机中实现 对于传输层之 上的各个层次的功能通常在主机中实现 5 会话层又称对话层会话层允许两个计算机上的用户进程建立对话连接 双方相互确认身份 协商对话连接的细节 它可管理对话是双向同时进行的 还是任何时刻只能一个方向进行 在后一种情况下 对话层控制哪一方有权发 送数据 对话层还提供同步机制 在数据流中插入同步点机制 在每次网络出 现故障后可以仅重传最近一个同步点以后的数据 而不必从头开始 以上两层 为两个计算机上的用户进程或程序之间提供了正确传送数据的手段 6 表示层主要解决用户信息的语法表示问题 表示层将数据从适合于某一 系统的语法转变为适合于 OSI 系统内部使用的语法 具体地讲 表示层对传送 的用户数据进行翻译 编码和变换 使得不同类型的机器对数据信息的不同表 示方法可以相互理解 7 应用层主要处理资源可用性和安全问题 它包含了大量人们普遍需要的 协议 如 FTP TELNET HTTP SMTP 等 最近几年 应用层协议发展很快 出 现了很多新的应用 如 ICQ Multimedia stream 等 2 1 22 1 2 TCP IPTCP IP 参考模型参考模型 与 OSI 参考模型不同 TCP IP 模 表 2 更侧重于互联设备间的数据传送 而不是严格的功能层次划分 它通过解释功能层次分布的重要性来做到这点 但仍为设计者具体实现协议留下很大的余地 因此 OSI 参考模型在解释互联 网络通信机制比较适合 但 TCP IP 成为了互联网络协议的市场标准 TCP IP 老 模型是在它所解释的协议出现很久以后才发展起来的 更重要的是 在于它 更强调功能分布而不是严格的功能层次的划分 因此它比 OSI 模型更灵活 1 应用层 应用层包括 SMTP FTP HTTP NFS NIS LPD Telnet f II Remote Login 应用层包括一些服务 这些服务在 OSI 中由独立的三层实现 这些服务 是和用户相关的认证 数据处理以及压缩 包括电子邮件 浏览器 Telnet 以 及其他的 Internet 应用 2 传输层 传输层包括 TCP Transport Control Protocol 传输控制协议 和 UDP User Datagram Protocol 用户数据报协议 UDP 几乎不进行检查 而 TCP 提供传输保证 与 OSI 中传输层不一样 TCP 不保证报文的准确传输 TCP 为两 台主机提供高可靠性的数据通信 而另一方面 UDP 则为应用层提供一种非常 简单的服务 它只是把称作数据报的分组从一台主机发送到另一台主机 但并 不保证该数据报能到达另一端 任何必需的可靠性必须由应用层来提供 第 5 页 共 23 页 3 网络层 TCP IP 协议族中 网络层由以下协议组成 ICMP Internt 联网托制报文协 议 IP 网际协议 IGMP Internet 组管理协议 RIP OSPF 和路由的 EGP 网 络层处理报文的路由管理 4 链路层 链路层包括 ARP 和 RARP 负责报文传输 链路层管理网络的连接并提供网 络上的报文输入 输出 表 1 OSI 模型 表 2 TCP IP 模型 0 SI 参考模型 层次描述 OSI 层次号 应用层7 表示层6 会话层5 传输层4 网络层3 数据链路层2 物理层1 第 6 页 共 23 页 2 22 2 WindowsWindows SocketSocket 编程原理及操作步骤编程原理及操作步骤 Windows Sockets 是 Microsoft Windows 的网络程序设计接口 它是从 Berkeley Sockets 扩展而来的 以动态链接库的形式提供给我们使用 Windows Sockets 在继承了 Berkeley Sockets 主要特征的基础上 又对它进行 了重要扩充 这些扩充主要是提供了一些异步函数 并增加了符合 Windows 消 息驱动特性的网络事件异步选择机制 Windows Sockets 1 1 和 Berkeley Sockets 都是基于 TCP IP 协议的 Windows Sockets 2 从 Windows Sockets 1 1 发展而来 与协议无关并向下兼容 可以使用任何底层传输协议提供的通 信能力 来为上层应用程序完成网络数据通讯 而不关心底层网络链路的通讯 情况 真正实现了底层网络通讯对应用程序的透明 流式套接字 SOCK STREAM 提供面向连接 可靠的数据传输服务 数据无差错 无重复的发送 且按 发送顺序接收 数据报式套接字 SOCK DGRAM 提供无连接服务 数据包以 独立包 形式发送 不提供无错保证 数据 可能丢失或重复 并且接收顺序混乱 原始套接字 SOCK RAW 基于TCP 面向连接 的socket编程 服务器端程序 1 创建套接字 socket 2 将套接字绑定到一个本地地址和端口上 bind 3 将套接字设为监听模式 准备接收客户请求 listen 4 等待客户请求到来 当请求到来后 接受连接请求 返回一个新的对应 于此次连接的套接字 accept TCP IP 参考模型层 次描述 TCP IP 层次号 应用层4 传输层3 网络层2 数据链路层1 第 7 页 共 23 页 5 用返回的套接字和客户端进行通信 send recv 6 返回 等待另一客户请求 7 关闭套接字 客户端程序 1 创建套接字 socket 2 向服务器发出连接请求 connect 3 和服务器端进行通信 send recv 4 关闭套接字 基于UDP 面向无连接 的socket编程 服务器端 接收端 程序 1 创建套接字 socket 2 将套接字绑定到一个本地地址和端口上 bind 3 等待接收数据 recvfrom 4 关闭套接字 客户端 发送端 程序 1 创建套接字 socket 2 向服务器发送数据 send to 3 关闭套接字 相关函数说明 int bind SOCKET s const struct sockaddr FAR name int namelen 这个函数接收三个参数 第一个参数s指定要绑定的套接字 第二个参数指 定了该套接字的本地地址信息 是指向sockaddr结构的指针变量 由于该地址 结构是为所有的地址家族准备的 这个结构可能 通常会 随所使用的网络协 议不同而不同 所以 要用第三个参数指定该地址结构的长度 sockaddr结构 定义如下 struct sockaddr u shortu short sa family charchar sa data 14 sockaddr的第一个字段sa family指定该地址家族 在这里必须设为 AF INET sa data仅仅是表示要求一块内存分配区 起到占位的作用 该区域 中指定与协议相关的具体地址信息 由于实际要求的只是内存区 所以对于不 同的协议家族 用不同的结构来替换sockaddr 除了sa family外 sockaddr是 第 8 页 共 23 页 按网络字节顺序表示的 在TCP IP中 我们可以用sockaddr in结构替换 sockaddr 以方便我们填写地址信息 sockaddr in的定义如下 structstruct sockaddr in shortshort sin family unsignedunsigned shortshort sin port structstruct in addrin addr sin addr charchar sin zero 8 其中 sin family表示地址族 对于IP地址 sin family成员将一直是 AF INET 成员sin port指定的是将要分配给套接字的端口 成员sin addr给出 的是套接字的主机IP地址 而成员sin zero只是一个填充数 以使sockaddr in 结构和sockaddr结构的长度一样 如果这个函数调用成功 它将返回0 如果调 用失败 这个函数就会返回一个SOCKET ERROR 错误信息可以通过 WSAGetLastError函数返回 将IP地址指定为INADDR ANY 允许套接字向任何分配给本地机器的IP地 址发送或接收数据 多数情况下 每个机器只有一个IP地址 但有的机器可能 会有多个网卡 每个网卡都可以有自己的IP地址 用INADDR ANY可以简化应用 程序的编写 将地址指定为INADDR ANY 允许一个独立应用接受发自多个接口 的回应 如果我们只想让套接字使用多个IP中的一个地址 就必须指定实际地 址 要做到这一点 可以用inet addr 函数 这个函数需要一个字符串作为其 参数 该字符串指定了以点分十进制格式表示的IP地址 如192 168 0 16 而 且inet addr 函数会返回一个适合分配给S addr的u long类型的数值 inet ntoa 函数会完成相反的转换 它接受一个in addr结构体类型的参数并 返回一个以点分十进制格式表示的IP地址字符串 2 32 3 P2PP2P 网络介绍网络介绍 P2P技术源于局域网共享 其目标是改变人们通过服务器中转交换文件的传 统方式 达到自由交换资源的目的 IBM为P2P下了如下定义 系统由若干互联 协作的计算机构成 且至少具有如下特征之一 系统依存于边缘化 非中央式 服务器 设备的主动协作 每个成员直接从其他成员而不是从服务器的参与中 受益 系统中成员同时扮演服务器与客户端的角色 系统应用的用户能够意识 到彼此的存在 构成一个虚拟或实际的群体 P2P网络是互联网整体架构的基础 互联网中最基本的 TCP IP协议并没有客户端和服务器的概念 在通讯过程中 所有的设备都是平等的一端 P2P 技术改变了 内容 所在的位置 使其正在 第 9 页 共 23 页 从 中心 走向 边缘 也就是说不再如C S模式将内容存于主要的服务器上 而是存在所有用户的 PC 机上 广义的P2P 网络将 P2P网络划分为纯分散式 P2P网络 如gnutella模型 超级结点式网络和混合式 P2P网络等大类 3 3 相关函数分析与代码实现相关函数分析与代码实现 3 13 1 多线程多线程 3 1 13 1 1 进程进程介绍介绍 进程 通常被定义为一个正在运行的程序的实例 是一个程序在其自身的 地址空间中的一次执行活动 进程是资源申请 调度和独立运行的单位 因此 它使用系统中的运行资源 而程序不能申请系统资源 不能被系统调度 也不 能作为独立运行的单位 因此 它不占用系统的运行资源 进程由两个部分组成 1 操作系统用来管理进程的内核对象 内核对象也是系统用来存放关于进 程的统计信息的地方 2 地址空间 它包含所有可执行模块或DLL模块的代码和数据 它还包含 动态内存分配的空间 如线程堆栈和堆分配空间 3 1 23 1 2 线程介绍线程介绍 线程由两个部分组成 1 线程的内核对象 操作系统用它来对线程实施管理 内核对象也是系统 用来存放线程统计信息的地方 2 线程堆栈 它用于维护线程在执行代码时需要的所有参数和局部变量 当创建线程时 系统创建一个线程内核对象 该线程内核对象不是线程本 身 而是操作系统用来管理线程的较小的数据结构 可以将线程内核对象视为 由关于线程的统计信息组成的一个小型数据结构 线程总是在某个进程环境中创建 系统从进程的地址空间中分配内存 供 线程的堆栈使用 新线程运行的进程环境与创建线程的环境相同 因此 新线 程可以访问进程的内核对象的所有句柄 进程中的所有内存和在这个相同的进 程中的所有其他线程的堆栈 这使得单个进程中的多个线程确实能够非常容易 地互相通信 3 1 33 1 3 进程与线程的关系进程与线程的关系 进程是不活泼的 进程从来不执行任何东西 它只是线程的容器 若要使 进程某操作 它必须拥有一个在它的环境中运行的线程 此线程负责执行包含 在进程的地址空间中的代码 单个进程可能包含若干个线程 这些线程都 同 时 执行进程地址空间中的代码 每个进程至少拥有一个线程 来执行进程的 第 10 页 共 23 页 地址空间中的代码 当创建一个进程时 操作系统会自动创建这个进程的第一 个线程 称为主线程 此后 该线程可以创建其他的线程 3 1 43 1 4 多线程实现多线程实现 线程只有一个内核对象和一个堆栈 保留的记录很少 因此所需要的内存 也很少 因为线程需要的开销比进程少 因此在编程中经常采用多线程来解决 编程问题 而尽量避免创建新的进程 3 23 2 HookHook 技术技术 3 2 13 2 1 HookHook 函数简介及类型函数简介及类型 Hook 钩子 是WINDOWS提供的一种消息处理机制 是指在程序正常运行中 接受信息之前预先启动的函数 用来检查和修改传给该程序的信息 钩子 实际上是一个处理消息的程序段 通过系统调用 把它挂入系统 每当特定的 消息发出 在没有到达目的窗口前 钩子程序就先捕获该消息 亦即钩子函数 先得到控制权 这时钩子函数即可以加工处理 改变 该消息 也可以不作处 理而继续传递该消息 还可以强制结束消息的传递 安装钩子函数将会影响系 统的性能 监测 系统范围事件 的系统钩子特别明显 因为系统在处理所有 的相关事件时都将调用您的钩子函数 这样系统将会明显的减慢 HOOK链 WINDOWS提供了14种不同类型的HOOKS 不同的HOOK可以处理不同的消息 例如 WH MOUSE HOOK用来监视鼠标消息 WINDOWS为这几种HOOKS维护着各自的 HOOK链表 HOOK链表是一串由应用程序定义的回调函数 CALLBACK Function 队 列 当某种类型的消息发生时 WINDOWS向此种类型的HOOK链的第一个函数 HOOK链的顶部 发送该消息 在第一函数处理完该消息后由该函数向链表中 的下一个函数传递消息 依次向下 如果链中某个函数没有向下传送该消息 那么链表中后面的函数将得不到此消息 对于某些类型的HOOK 不管HOOK链 中的函数是否向下传递消息 与此类型HOOK联系的所有HOOK函数都会收到系统 发送的消息 一些Hook子过程可以只监视消息 或者修改消息 或者停止消息 的前进 避免这些消息传递到下一个Hook子过程或者目的窗口 最近安装的钩 子放在链的开始 而最早安装的钩子放在最后 也就是后加入的先获得控制权 HOOK的作用范围 两种类型 局部和远程 一 局部钩子仅钩挂您自己进程的事件 二 远程的钩子还可以将钩挂其它进程发生的事件 远程的钩子又有两种 第 11 页 共 23 页 1 基于线程的 它将捕获其它进程中某一特定线程的事件 简言之 就是 可 以用来观察其它进程中的某一特定线程将发生的事件 2 系统范围的 将捕捉系统中所有进程将发生的事件消息 HOOK类型 Windows共有14种HOOKS 每一种类型的Hook可以使应用程序能够监视不同 类型的系统消息处理机制 下面描述所有可以利用的Hook类型的发生时机 这些常数值均可以API浏览器里查到 1 WH CALLWNDPROC和WH CALLWNDPROCRET Hooks WH CALLWNDPROC和WH CALLWNDPROCRET Hooks使你可以监视发送到窗口过程 的消息 系统在消息发送到接收窗口过程之前调用WH CALLWNDPROC Hook子过程 并且在窗口过程处理完消息之后调用WH CALLWNDPROCRET Hook子过程 WH CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构 再传递到Hook子 过程 CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值 同样也包 括了与这个消息关联的消息参数 2 WH CBT Hook 在以下事件之前 系统都会调用WH CBT Hook子过程 这些事件包括 1 激活 建立 销毁 最小化 最大化 移动 改变尺寸等窗口事件 2 完成系统指令 3 来自系统消息队列中的移动鼠标 键盘事件 4 设置输入焦点事件 5 同步系统消息队列事件 Hook子过程的返回值确定系统是否允许或者防止这些操作中的一个 3 WH DEBUG Hook 在系统调用系统中与其它Hook关联的Hook子过程之前 系统会调用 WH DEBUG Hook子过程 你可以使用这个Hook来决定是否允许系统调用与其它 Hook关联的Hook子过程 4 WH FOREGROUNDIDLE Hook 当应用程序的前台线程处于空闲状态时 可以使用WH FOREGROUNDIDLE Hook执行低优先级的任务 当应用程序的前台线程大概要变成空闲状态时 系 统就会调用WH FOREGROUNDIDLE Hook子过程 5 WH GETMESSAGE Hook 应用程序使用WH GETMESSAGE Hook来监视从GetMessage or PeekMessage函 数返回的消息 你可以使用WH GETMESSAGE Hook去监视鼠标和键盘输入 以及 第 12 页 共 23 页 其它发送到消息队列中的消息 6 WH JOURNALPLAYBACK Hook WH JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列 以使 用这个Hook回放通过使用WH JOURNALRECORD Hook记录下来的连续的鼠标和键盘 事件 WH JOURNALPLAYBACK Hook已经安装 正常的鼠标和键盘事件就是无效的 WH JOURNALPLAYBACK Hook是全局Hook 它不能像线程特定Hook一样使用 WH JOURNALPLAYBACK Hook返回超时值 这个值告诉系统在处理来自回放Hook当 前消息之前需要等待多长时间 毫秒 这就使Hook可以控制实时事件的回放 WH JOURNALPLAYBACK是system wide local hooks 它们不会被注射到任何行程 地址空间 7 WH JOURNALRECORD Hook WH JOURNALRECORD Hook用来监视和记录输入事件 典型的 可以使用这个 Hook记录连续的鼠标和键盘事件 然后通过使用WH JOURNALPLAYBACK Hook来回 放 WH JOURNALRECORD Hook是全局Hook 它不能像线程特定Hook一样使用 WH JOURNALRECORD是system wide local hooks 它们不会被注射到任何行程地 址空间 8 WH KEYBOARD Hook 在应用程序中 WH KEYBOARD Hook用来监视WM KEYDOWN and WM KEYUP消息 这些消息通过GetMessage or PeekMessage function返回 可以使用这个Hook 来监视输入到消息队列中的键盘消息 9 WH KEYBOARD LL Hook WH KEYBOARD LL Hook监视输入到线程消息队列中的键盘消息 10 WH MOUSE Hook WH MOUSE Hook监视从GetMessage 或者 PeekMessage 函数返回的鼠标消息 使用这个Hook监视输入到消息队列中的鼠标消息 11 WH MOUSE LL Hook WH MOUSE LL Hook监视输入到线程消息队列中的鼠标消息 12 WH MSGFILTER 和 WH SYSMSGFILTER Hooks WH MSGFILTER 和 WH SYSMSGFILTER Hooks使我们可以监视菜单 滚动条 消息框 对话框消息并且发现用户使用ALT TAB or ALT ESC 组合键切换窗口 WH MSGFILTER Hook只能监视传递到菜单 滚动条 消息框的消息 以及传递到 通过安装了Hook子过程的应用程序建立的对话框的消息 WH SYSMSGFILTER Hook监视所有应用程序消息 WH MSGFILTER 和 WH SYSMSGFILTER Hooks使我们可以在模式循环期间过滤 第 13 页 共 23 页 消息 这等价于在主消息循环中过滤消息 通过调用CallMsgFilter function可以直接的调用WH MSGFILTER Hook 通 过使用这个函数 应用程序能够在模式循环期间使用相同的代码去过滤消息 如同在主消息循环里一样 13 WH SHELL Hook 外壳应用程序可以使用WH SHELL Hook去接收重要的通知 当外壳应用程序 是激活的并且当顶层窗口建立或者销毁时 系统调用WH SHELL Hook子过程 WH SHELL 共有 种情况 1 只要有个top level unowned 窗口被产生 起作用 或是被摧毁 2 当Taskbar需要重画某个按钮 3 当系统需要显示关于Taskbar的一个程序的最小化形式 4 当目前的键盘布局状态改变 5 当使用者按Ctrl Esc去执行Task Manager 或相同级别的程序 按照惯例 外壳应用程序都不接收WH SHELL消息 所以 在应用程序能够 接收WH SHELL消息之前 应用程序必须调用SystemParametersInfo function注 册它自己 3 2 23 2 2 HookHook 子过程处理子过程处理 回调函数 HOOK处理子过程 为了拦截和处理特定的消息 你可以使用SetWindowsHookEx函数 下面将 具体说明这些函数的声明及各种参数 在该类型的HOOK链中安装你自己的处理 HOOK的子过程 回调函数 只要您安装的钩子的消息事件类型发生 WINDOWS 就将调用钩子函数 譬如您安装的钩子是WH MOUSE类型 那么只要有一个鼠标 事件发生时 该钩子函数就会被调用 不管您安装的是那一类型钩子 钩子函 数的原型都时是一样的 语法如下 public function MyHook ByVal nCode As Long ByVal wParam As Long ByVal lParam As Long as long 处理代码 end function 其中MyHook可以随便命名 其它不能变 该函数必须放在模块段 参数说明 nCode指定HOOK传入的信息类型 Hook子过程使用这个参数来确定任务 这 个参数的值依赖于Hook类型 每一种Hook都有自己的Hook代码特征字符集 wParam 短整型参数 第 14 页 共 23 页 lParam 长整型参数 wParam iParam的取值随nCode不同而不同 它代表了某种类型的HOOK的某 个特定的动作 它们的典型值是包含了关于发送或者接收消息的信息 至于以 上的几个参数及返回值的具体含义 各种类型的钩子都不相同 所以您必须查 询WIN32 API 指南来得到不同类型钩子参数的详细定义以及它们返回值的意义 譬如 WH CALLWNDPROC nCode 只能是HC ACTION 它代表有一个消息发送给了一个窗口 wParam 如果非0 代表正被发送的消息 lParam 指向CWPSTRUCT型结构体变量的指针 return value 未使用 返回0 WH MOUSE nCode 为HC ACTION 或 HC NOREMOVE wParam 包含鼠标的事件消息 lParam 指向MOUSEHOOKSTRUCT型结构体变量的指针 return value 如果不处理返回0 否则返回非0值 3 2 33 2 3 HookHook 的安装的安装 卸载卸载 安装钩子 使用SetWindowsHookEx函数 API函数 指定一个HOOK类型 自己的HOOK 过程是全局还是局部HOOK 同时给出HOOK过程的进入点 就可以轻松的安装你 自己的HOOK过程 SetWindowsHookEx总是将你的HOOK函数放置在HOOK链的顶端 你可以使用CallNextHookEx函数将系统消息传递给HOOK链中的下一个函数 注 意 对于某些类型的HOOK 系统将向该类的所有HOOK函数发送消息 这时 HOOK 函数中的CallNextHookEx语句将被忽略 全局 远程钩子 HOOK函数可以拦截系统中所有线程的某个特定的消息 为了安装一个全局HOOK过程 必须在应用程序外建立一个DLL 并将该HOOK函数 封装到其中 应用程序在安装全局HOOK过程时必须先得到该DLL模块的句柄 将 DLL名传递给LoadLibrary 函数 就会得到该DLL模块的句柄 得到该句柄 后 使用GetProcAddress函数可以得到HOOK过程的地址 最后 使用 SetWindowsHookEx将HOOK过程的首址嵌入相应的HOOK链中 SetWindowsHookEx 传递一个模块句柄 它为HOOK过程的进入点 线程标识符置为0 指出 该HOOK 过程同系统中的所有线程关联 如果是安装局部HOOK此时该HOOK函数可以放置 在DLL中 也可以放置在应用程序的模块段 第 15 页 共 23 页 SetWindowHookEx函数参数说明 idHook 代表是何种Hook 也就是上面讲的14种Hook lpfn 代表处理Hook的过程所在的Address 这是一个CallBack Fucnction 也就是上面讲的回调函数 当挂上某个Hook时 我们便得定义一个 Function来当作某个信息产生时 来处理它的Function 因这个参数是一个 Function的Address所以我们固定将Hook Function放在 Bas中 并以AddressOf HookFunc传入 hmod 代表 DLL的hInstance 如果是Local Hook 该值可以是Null VB中 可传0进去 而如果是Remote Hook 则可以使用GetModuleHandle dll名称 来 传入 dwThreadId 代表执行这个Hook的ThreadId 线程ID 如果不设定是那 个Thread 线程 来做 则传0 该参数可以决定该钩子是局部的还是系统范围 的 如果该值为NULL 那么该钩子将被解释成系统范围内的 那它就可以监控 所有的进程及它们的线程 如果您指定了您自己进程中的某个线程ID 号 那该 钩子是一个局部的钩子 如果该线程ID是另一个进程中某个线程的ID 那该钩 子是一个全局的远程钩子 这里有两个特殊情况 WH JOURNALRECORD 和 WH JOURNALPLAYBACK总是代表局部的系统范围的钩子 之所以说是局部 是因 为它们没有必要放到一个DLL中 WH SYSMSGFILTER 总是一个系统范围内的远程 钩子 其实它和WH MSGFILTER钩子类似 如果把参数ThreadID设成0的话 它们 就完全一样了 etWindowHookEx函数返回值 如果SetWindowsHookEx 成功 它会传回一 个值 代表目前的Hook的Handle 否则返回NULL 您必须保存该句柄 因为后 面我们还要它来卸载钩子 卸载钩子 使用UnhookWindowsHookEx函数来卸载创建的钩子 函数声明 Declare Function UnhookWindowsHookEx Lib user32 Alias UnhookWindowsHookEx ByVal hHook As Long As Long 参数说明 hHook 是SetWindowsHookEx 的传回值 3 33 3 设计流程及函数思想设计流程及函数思想 3 3 13 3 1 简述简述 本模块是基于 Client Server 客户端 服务器 结构的 Windows Socket 编程 第 16 页 共 23 页 基本函数思想是与被控制端向控制端发送一个消息 可以是字符 数字等 然后控制端根据相关信息采取相关的操作 主要是主要是通过多线程技术来实 现 同时也运用了 HOOK 技术 还有相关的 API 函数来支持 3 3 23 3 2 代码分析代码分析 我们可以根据其中的一个功能来具体分析以下 锁定键盘 控制端 void CGetInfoDlg OnLockKeyBord 定义对象 m fCheck m fCheck 创建一个关联键 CSocket sockClient sockClient Create 创建一个新的 Socket CString ip strError m ip GetWindowText ip 获得服务器端的 IP int conn sockClient Connect ip PORT 1 连接服务器端 if conn 0 判断发送是否成功 AfxMessageBox SendMsgThread Connect 错误 GetL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部队培训安全保密协议课件
- 社区服务边缘智能应用-洞察及研究
- 湖北省黄石市大冶市2024-2025学年七年级下学期期末考试数学试卷(含答案)
- 安徽省黄山市2024-2025学年高二上学期期末质量检测物理试卷(含答案)
- 部门安全培训需求课件
- 遨游汉字王国课件
- 基于循环经济理念的分条带钢边角料高值化再利用工艺创新图谱
- 基于代谢组学的前列康片多靶点作用机制网络图谱构建
- 培养基配方迭代与专利壁垒下的中小企业研发困境
- 国际标准体系下高强浇注料出口认证壁垒突破与质量追溯体系重构
- 卡西欧PROTREKPRW-6000使用手册
- 物流网络规划与设计课件
- JB∕T 5245.4-2017 台式钻床 第4部分:技术条件
- 鞘膜积液的护理查房
- 《水工监测工》习题集最新测试题含答案
- 大金D型水冷螺杆机说明书
- 部编版三年级上册道德与法治第一单元第1课《学习伴我成长》课件
- ASCO双电源自动转换开关操作手册
- 组合式塔吊基础施工专项方案(117页)
- 1、《国际贸易实务》课程标准解析
- 现场临电方案改
评论
0/150
提交评论