网络聊天软件实时监控系统设计与实现

网络聊天软件实时监控系统设计与实现

ID:1308948

大小:861.50 KB

页数:36页

时间:2017-11-10

上传者:xinshengwencai
网络聊天软件实时监控系统设计与实现_第1页
网络聊天软件实时监控系统设计与实现_第2页
网络聊天软件实时监控系统设计与实现_第3页
网络聊天软件实时监控系统设计与实现_第4页
网络聊天软件实时监控系统设计与实现_第5页
资源描述:

《网络聊天软件实时监控系统设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

学号7023801270112分类号本科生毕业论文(设计)题目:网络聊天软件实时监控系统设计与实现院(系)电子与信息工程系专业计算机科学与技术班级2007级专升本学生姓名贺湘闽指导教师(职称)刘宏(副教授)提交时间2009年6月 摘要网络聊天软件实时监控系统设计与实现贺湘闽(安康学院电子信息工程系,陕西安康,邮编:725000)摘要随着信息时代的到来,网络聊天软件给人们沟通带来便利的同时也为各类人员利用网络进行影响信息安全行为甚至犯罪提供了条件。因此,进行实时的网络聊天监控就具有重要的研究意义和实用价值。Windows的消息机制是用户与Windows应用程序交互的基础,Hook技术为Windows的消息机制提供了一种对本地进程消息按照用户设置的条件进行过滤的内核级机制,所以基于Hook技术实现了一个网络聊天软件的实时监控系统。由于实时监控会产生大量的数据,如何提高系统性能,保证数据完整性和可靠性,成为本系统研究的另一个关键点。在系统中采用多线程和数据两次存储技术。首先使用进程内多线程实现聊天数据获取与数据文档保存,第二次使用后台进程实现文档数据的数据库保存。关键词聊天监控Hook多线程文档数据数据库 摘要Designandrealizationofreal-timemonitoringsystemonchattingsoftwareHeXiangmin(AnkangUniversityDepartmentofElectronicandInformationEngineering,ShaanxiAnkang725000)AbstractWiththearrivalofinformationera,networkchattingsoftwaremakescommunicationmoreconvenient,butatthesametimeitinfluencesthesafetyofinformationandevenbringstheconditiontocommitcrime.Therefore,carryingonthereal-timesystemofmonitoringnetworkchattinghasanimportantresearchandpracticalvalue.ThemessagemechanismofWindowsisthefoundationofusers’interactingwithapplicationprogram.Accordingtotheconditionwhichuserssetupforthelocalprocess,HOOKtechnologyofferedakindofwaytofilteredmessagesinkernellayer,andanetworkchattingsoftwareofthemonitoringsystemcomesoutonthebaseofHooktechnology.Becausemonitoringsysteminrealtimewillproducealargenumberofdata,soitisbecominganotherkeytechnologyhowtoimprovesystematicperformanceandguaranteeintegralityandreliabilityofthedata.Itadoptstwotechnologiesofmultithreadsandfiletostoredatatemporarilyinthesystem.Atfirst,thechattingdatacanbesavingintofilewithmultithreadinprocess,andthendatainfilecanbestoredintodatabaseinanotherbackstageprocess.KeywordsHook;multithreads;file;database 摘要 目录目录1网络聊天软件监控的意义11.1软件监控的现状11.2网络监控技术概述11.3发展前景21.4本文研究主要内容22网络聊天软件的监控的基本原理32.1WINDOWS平台消息机制32.2Hook技术42.2.1Hook的技术原理42.2.2Hook的种类52.2.3Hook的使用方式52.2.4DLL的三种注入方式52.3WinSock数据传输方式及工作原理72.3.1UDP(UserDatagramProtocol)用户数据报协议72.3.2TCP(TransmissionControlProtocol)传输控制协议82.3.3套接字的阻塞模式和非阻塞模式93聊天监控软件的系统分析113.1软件目标113.2聊天监控软件的功能分析113.3软件的逻辑结构114软件系统设计134.1钩子模块设计134.2数据库模块设计134.3界面设计144.3.1聊天界面144.3.2数据库操纵界面设计154.4文档数据与数据库设计164.4.1数据文档的结构164.4.2数据库设计165系统实现及关键代码195.1开发环境19 目录5.2聊天软件实现195.2.1聊天信息的发送与接收195.2.2RECVPARAM结构体195.2.3用户消息响应205.3聊天软件监控的实现215.3.1函数入口地址的获得215.3.2内存的访问控制225.3.3函数改写225.4数据文件的输入输出235.5文件数据的导出及其数据库的操作235.5.1文件数据导出235.5.2数据库操作24结束语27参考文献28致谢29 网络聊天软件监控的意义1网络聊天软件监控的意义1.1软件监控的现状网络聊天一直是网民们上网的主要活动之一。常用的聊天软件有大家熟知的ICQ、QQ、MSN、百度Hi,还有主要用于语音聊天的skype,还有用于电子商务的阿里旺旺等。这些网络聊天软件会吸引大量的人群,还会延伸出很多社区等。在这个盘大的人群聚集的地方,要对所有的人的聊天内容进行管理是十分困难的。像一些论坛上,一般是通过管理员对信息进行分析,当发现有危险的信息出现的时候,管理员通过自己的权限可以对信息进行删除,净化网络环境。这种事后的处理,达不到比较好的效果。同时还会让管理员的工作繁重或者是漏操作。1.2网络监控技术概述网络监控技术指针对计算机进行监视和控制,针对电脑上互联网活动(上网监控)以及非上网相关的内部行为与资产等过程管理(内网监控;所以包含了上网监控(上网行为监视和控制、上网行为安全审计)和内网监控(内网行为监视、控制、软硬件资产管理、数据与信息安全),有些还增加了数据安全的透明加密软件部署。目前做的完整的网络监控软件,已经包含了以下所有的功能了:(1)上网监控软件基本功能有:上网监控、网页浏览监控、邮件监控、Webmail发送监视、聊天监控、BT禁止、流量监视、上下行分离流量带宽限制、并发连接数限制、FTP命令监视、TELNET命令监视、网络行为审计、操作员审计、软网关功能、端口映射和PPPOE拨号支持、通过WEB方式发送文件的监视、通过IM聊天工具发送文件的监视和控制等。(2)内网监控软件基本功能(内网行为管理、屏幕监视、软硬件资产管理、数据安全)应包含如下基本功能:内网监控、屏幕监视和录象、软硬件资产管理、光驱和USB等硬件禁止、应用软件限制、打印监控、ARP火墙、消息发布、日志报警、远程文件自动备份功能、禁止修改本地连接属性、禁止聊天工具传输文件、通过网页发送文件监视、远程文件资源管理、支持远程关机注销等、支持MSN/MSNshell/新浪UC/ICQ/AOL/SKYPE/E话通/YAHOO通/贸易通/googletalk/淘宝旺旺/飞信/UUCALL/TM/QQ聊天记录等功能;数据安全部分一般为单独的透明加密软件。1 网络聊天软件监控的意义1.3发展前景随着网络聊天的发展,以后一定还会出现更多更好的聊天软件。并且监控的功能以后会原来越细化。比如用在电子商务上的阿里旺旺,可以监控一些虚假的广告信息,以及阻止一些非法的商业群发软件的应用。再比如用在QQ上,在这一个上亿人使用的聊天软件这个平台上,常常有不法分子发布对社会,国家有危害的语言。数据量过大,仅仅依靠管理员的检查,力度是很难达到要求的。但是可以在客户端当用户使用的时候就对消息进行分析与监控,把住消息发出的源头,进行一个实时的监控就可以有一个事半功倍的效果。以后还可以根据不同的需求分析,可以开发出不同的聊天监控软件。这样的软件就可以应用在所有的聊天软件上,或者可以为这些聊天软件以插件的形式开发。所以,网络监控软件的应用是十分广泛的,由于有一个很大的发展空间,它只会随着网络聊天软件的普及也会迅速发展。1.4本文研究主要内容本论文分为四个章节,从理论依据,设计,和实施三个部分组成。重点是介绍HOOK的种类,以及其注入的方式与实现。以下为各个章节内容的简单介绍:第一章:网络聊天监控软件意义。通过一些调查了解到网络聊天软件监控软件的应用前景及市场的需求。第二章:从网络聊天软件的监控的基本原理,理解Windows消息机制。Winsock种类和工作原理。第三章:聊天监控软件的需求分析。从需求分析,系统分析,和可行性分析三个角度来对聊天控制软件大体认识。第四章:软件分析与设计,包括界面、数据库的具体实现。第五章:系统实现及关键代码。通过一个实例,详细说明聊天软件监控的全过程。第六章:总结与工作展望。总结这次毕业设计过程中的收获,以及对以后工作的展望,还有对指导老师的感谢。1 网络聊天软件的监控的基本原理2网络聊天软件的监控的基本原理2.1WINDOWS平台消息机制消息机制是Windows应用程序的核心。在Windows中发生的一切都可以用消息来表示,消息用于告诉操作系统发生了什么,所有的Windows应用程序都是消息驱动的[1]。消息机制如图2-1所示: 在Windows中,不同的消息由应用程序的不同部分进行处理。MFC库将很多底层的消息都屏蔽了,使用户更加方便、简易地处理消息。例如,用户接收到诸如移动鼠标键(WM_MOUSEMOVE)消息或单击鼠标键(WM_LRBUTTONDOWN)消息时不必处理窗口和鼠标的重画工作,MFC及应用程序框架会替用户做这些工作。一个消息是由消息的名称(UINT)和两个参数(WPARAM,LPARAM)组成。消息的参数中包含有重要的信息。例如对鼠标消息而言,LPARAM中一般包含鼠标的位置信息,而WPARAM参数中包含了发生该消息时,SHIFT、CTRL等键的状态信息,对于不同的消息类型来说,两个参数也都相应地具有明确意义。Windows消息过滤机制,是微软给程序员提供的一个消息判别机制。也就是在消息循环中,通过一个HOOK的方法,可以对消息进行拦截。就像警察要抓一个犯人,在一个重要路口对所有要经过的行人进行排除,不是犯人的就可以通过。这个消息过滤机制,大大丰富了程序员的编程思维。尤其在监控软件中可以得到了广泛的应用。9 网络聊天软件的监控的基本原理2.2Hook技术2.2.1Hook的技术原理Hook是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的[2]。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理windows消息或特定事件。Hook的机制如图2-2所示:每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。Windows并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows便释放其占用的内存,并更新整个9 网络聊天软件的监控的基本原理Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作[4]。钩子子程是一个应用程序定义的回调函数(CALLBACKFunction),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。2.2.2Hook的种类根据Hook捕获消息的不同,Hook又分为键盘钩子、鼠标钩子、用户与空间交互的钩子、获得从消息队列发出的消息的钩子、调试钩子、捕获非标准硬件钩子等等。2.2.3Hook的使用方式Hook的使用分为两大类。一个是全局钩子,一个是线程钩子。SetWindowsHookEx()函数的最后一个参数决定了此钩子是全局钩子还是线程钩子。 线程勾子用于监视指定线程的事件消息。线程勾子一般在当前线程或者当前线程派生的线程内。  全局勾子监视系统中的所有线程的事件消息。因为系统勾子会影响系统中所有的应用程序,所以勾子函数必须放在独立的动态链接库(DLL)中。系统自动将包含“钩子回调函数”的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入了那些进程。2.2.4DLL的三种注入方式(1)修改注册表可以使用注册表来插入DLL。因为整个系统的配置都是在注册表中维护的,可以通过调整它的设置来改变系统的行为特性。通过对注册表的修改(使用注册表编辑器),可以实现DLL的插入。在插入DLL时所用的所有方法中,这是最容易的一种方法。要做的工作只是将一个值添加到一个已经存在的注册表关键字中。不过这种方法也有它的某些不足:由于系统在初始化时要读取这个关键字的值,因此在修改这个值后必须重新启动你的计算机—即使退出后再登录,也不行。当然,如果从这个关键字的值中删除DLL,那么在计算机重新启动之前,系统不会停止对库的映射操作。你的DLL只会映射到使用User32.dll的进程中。所有基于GUI的应用程序均使用User32.dll,不过大多数基于GUI的应用程序并不使用它。因此,如果需要将DLL插入编译器或链接程序,这种方法将不起作用。(2)通过使用WINDOWS挂钩来插入DLL。9 网络聊天软件的监控的基本原理安装了一个挂钩WN_GETMESSAGE,以便查看系统中的各个窗口处理的消息。该挂钩是通过调用SetWindowsHookEx函数来安装的。hHook=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hinstDll,0)将会发生什么情况:u进程B中的一个线程准备将一条消息发送到一个窗口。u系统查看该线程上是否已经安装了WH_GETMESSAGE挂钩。u系统查看包含GetMsgProc函数的DLL是否被映射到进程B的地址空间中。(3)使用远程线程来注入第三种方法是使用远程线程。这种方法具有更大的灵活性。、要求懂得若干个Windows特性、如进程、线程、线程同步、虚拟内存管理、DLL和Unicode等。Windows的大多数函数允许进程只对自己进行操作。这是很好的一个特性,因为它能够防止一个进程破坏另一个进程的运行。但是,有些函数却允许一个进程对另一个进程进行操作。这些函数大部分最初是为调试程序和其他工具设计的。不过任何函数都可以调用这些函数。这个DLL插入方法基本上要求目标进程中的线程调用LoadLibrary函数来加载必要的DLL。由于除了自己进程中的线程外,无法方便地控制其他进程中的线程,因此这种解决方案要求在目标进程中创建一个新线程。由于是自己创建这个线程,因此能够控制它执行什么代码。Windows提供了一个称为CreateRemoteThread的函数,能够非常容易地在另一个进程中创建线程HANDLECreateRemoteThread(HANDLEhProcess,PSECURITY_ATTRIBUTESpsa,DWORDdwStackSize,PTHREAD_START_ROUTINEpfnStartAddr,PVOIDpvParam,DWORDdfwCreate,DWORDpdwThreadId);CreateRemoteThread与CreateThread很相似,差别在于它增加了一个参数hProcess。该参数指明拥有新创建线程的进程。参数pfnStartAddr指明线程函数的内存地址。当然,该内存地址与远程进程是相关的。线程函数的代码不能位于你自己进程的地址空间中。9 网络聊天软件的监控的基本原理这三个注入DLL的办法,在实施的时候可以根据自己的需要,使用不同的方式。比如程序已经是在注册表存在的可以使用注册表修改。如果要捕获特殊的API函数的应用,就可以用挂钩的方法注入。还有如果程序的灵活性较大,就还可以使用远程线程注入的方法。2.3WinSock数据传输方式及工作原理Windows下网络编程的规范-WindowsSockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。[13]从1991年的1.0版到1995年的2.0.8版,经过不断完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成为Windows网络编程的事实上的标准。Windowssockets有两种工作方式UDP和TCP。2.3.1UDP(UserDatagramProtocol)用户数据报协议用户数据报协议是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。是一个简单的面向数据报的传输层协议,IETFRFC768是UDP的正式规范。UDP协议基本。是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少。UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)、动态主机配置协议(DHCP)、路由信息协议(RIP)和某些影音串流服务等等。UDP通信过程如图2-3所示:9 网络聊天软件的监控的基本原理2.3.2TCP(TransmissionControlProtocol)传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transportlayer)通信协议,由IETF的RFC793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。在因特网协议族(Internetprotocolsuite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。TCP建立连接之后,通信双方都同时可以进行数据的传输。他是全双工的,在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用慢启动算法。TCP通信过程如图2-4所示:9 网络聊天软件的监控的基本原理2.3.3套接字的阻塞模式和非阻塞模式套接字的阻塞模式是指套接字在执行操作时,调用函数在没有完成操作前不会立即返回的工作模式。使用阻塞模式的套接字开发网络程序比较简单,容易实现。当希望能够立即发送和接收数据,且处理的套接字数量比较少的情况下,使用阻塞模式来开发网络程序比较适合。阻塞模式的不足表现为,在大量建立好的套接字线程之间进行通信是比较困难。套接字的非阻塞模式是指套接字在执行操作时,调用的函数不管操作是否完成都会立即返回的工作模式非阻塞套接字在处理同时建立的多个连接,发送和接收的数据量不均、时间不定的方面具有明显优势。9 网络聊天软件的监控的基本原理9 聊天监控软件的系统分析3聊天监控软件的系统分析3.1软件目标本系统就是要营造一个良好的网络聊天氛围,对违法犯罪的信息发布进行拦截与记录。为聊天软件开发商提供真实可靠的拦截数据记录。为实时聊天安全监控提出一个初步的模版。可以根据需要对不同的分支进行扩展,包括网络聊天,电子商务的安全,以及聊天室,社区。系统功能应包含对数据的拦截、读写文件、数据库操作等。系统界面力求简洁、易用,在标准化的基础上考虑界面的美观和新颖。该软件可以面向所有经常使用网络聊天软件的用户。以及为网络安全管理员提供真实可靠的数据依据。3.2聊天监控软件的功能分析本系统一共有4个模块。1:小型的聊天程序,它主要实现一般的聊天信息的接收和发送,最主要的目的是为监控软件系统提供测试平台与环境。2:监控程序,对信息间的数据进行获取与分析。3:写程序文件,对拦截到的信息进行一个简单的文件操作。4:数据库管理,对大量的数据进一个综合的整理与分析。在得到拦截到的消息以后,管理员就可以对数据进行查询和分析。尽管系统有许多功能模块,但是从用户角度来看,系统提供的功能如图3-1所示:图3-1用例图3.3软件的逻辑结构软件主要分为四个模块。聊天程序、Hook注入的DLL模块,文件读写模块和数据库模块。聊天程序通过WinSock,主要实现消息的发送与接收。Hook的DLL文件在发送Send()函数调用时,对Send()的消息进行拦截和判断。如果发现有不安全的信息时,会把内容通过文件流写到文件里面。最后通过数据库程序把文件内容导入数据库。各个模块类之间的关系11 聊天监控软件的系统分析如图3-2所示:图3-2软件各个模块类关系图11 软件系统设计4软件系统设计4.1钩子模块设计钩子模块设计是系统中最核心的内容。在程序运行的时候,先钩子程序。当然钩子程序发现有send()函数调用时进行DLL的注入。将拦截到的信息写入到文件中,最后通过数据库程序将文件的内容进行拆分并导入到数据库中。钩子模块实现的顺序图如图4-1所示:4.2数据库模块设计数据库操作包括了4个模块。文件的读写、查询、删除、显示。数据模块类如图4-2所示:15 软件系统设计文件的读写把Hook拦截到的文本内容进行拆分和导入数据库。然后管理员可以通过查询和删除功能对数据库的数据进行分析。数据库各个模块之间通过主界面模块互相联系。4.3界面设计4.3.1聊天界面聊天界面分为接收消息和发送消息两个区域。由两个编辑框控件一个IP地址控件和一个按钮控件组成。聊天界面和主流的聊天软件界面相符合。聊天界面的类组成图如图4-3所示:图4-3聊天软件类组成图聊天界面如图4-4所示:图4-4聊天界面图15 软件系统设计4.3.2数据库操纵界面设计数据库的视图界面是数据库模块中重要组成部分。数据库的视图界面由一个网格控件、查找和删除两个按钮组成。管理员可以通过数据库的视图界面对拦截到的数据进行整理和分析。数据库视图界面类的组成图如图4-5所示:数据库的视图界面如图4-6所示:图4-6数据库视图数据库的查找界面如图4-7所示:图4-7数据库查找界面图15 软件系统设计数据库的删除界面如图4-8所示:图4-8数据库删除界面4.4文档数据与数据库设计4.4.1数据文档的结构数据文档用来记录每次拦截到的信息记录。为了在导入数据库时文档数据进行格式化拆分,需要定义数据文档的结构。一条完成的信息记录包括首尾字符分隔符、信息内容、拦截信息的来源、和拦截时间。文档结构如图4-8所示:4.4.2数据库设计数据库存储了拦截到消息的内容,消息来源和记录的时间。数据库信息类图如图4-9所示:15 系统实现及关键代码5系统实现及关键代码5.1开发环境操作系统:MicrosoftWindowsXPServerPack2开发环境:MicrosoftVisualC++6.0MicrosoftVisualVB6.0数据库:SQLServer20005.2聊天软件实现5.2.1聊天信息的发送与接收为了确保聊天信息的稳定安全的传递。聊天软件采用TCP协议进行通信。聊天程序启动以后,首先初始化Winsock,然后Winsock进行监听。当有请求连接的时候,Winsock会调用accept()接收连接。最后调用send()和recv()完成对话。实现聊天消息的发送与接收。在程序运行时初始化的代码如下:BOOLCSocketDlg::OnInitDialog(){_declspec(dllimport)BOOLSetHook(HWNDhWnd);if(SetHook(this->m_hWnd)){}SOCKINIT();RECVPARAM*pRecvParam=newRECVPARAM;pRecvParam->sock=m_socket;pRecvParam->hwnd=m_hWnd;HANDLEhThread=CreateThread(NULL,0,RecvProc,(LPVOID)(pRecvParam),0,NULL);CloseHandle(hThread);returnTRUE;}5.2.2RECVPARAM结构体为了提高程序的效率和传参的需要,程序要用到了一个结构体。在创建线程的时候,通过传递结构体的地址。实现一个地址指针传递两个变量。RECVPARAM结构体如下:structRECVPARAM25 系统实现及关键代码{SOCKETsock;HWNDhwnd;};线程回调函数通过结构体地址,传递消息SOCKET和窗口句柄的值。线程的回调函数如下:DWORDWINAPICSocketDlg::RecvProc(LPVOIDlpParameter){SOCKETsock=((RECVPARAM*)lpParameter)->sock;HWNDhwnd=((RECVPARAM*)lpParameter)->hwnd;SOCKADDR_INaddrFrom;intlen=sizeof(SOCKADDR);charrecvBuf[200];chartempBuf[300];intretval;while(TRUE){retval=recv(sock,recvBuf,200,0);if(SOCKET_ERROR==retval)break;sprintf(tempBuf,"%s说:%s",inet_ntoa(addrFrom.sin_addr),recvBuf);::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);}return0;}5.2.3用户消息响应线程回调函数接收到聊天消息以后,通过PostMessage()方法通知聊天窗体。然后通过消息映射调用响应函数。把收到的消息显示到对话框上。定义消息时,WM_USER+1表示是用户自己定义的消息。消息响应的映射要放在SocketDlg.cpp文件中的BEGIN_MESSAGE_MAP(CSocketDlg,CDialog)中,消息映射为ON_MESSAGE(WM_RECVDATA,onRecvData),onRecvData函数如下:voidCSocketDlg::onRecvData(WPARAMwParam,LPARAMlParam)25 系统实现及关键代码{if(bfirst==false){SetDlgItemText(IDC_EDIT_RECV,(char*)lParam);g_str=(char*)lParam;}else{g_str=g_str+"r "+(char*)lParam;SetDlgItemText(IDC_EDIT_RECV,g_str);}bfirst=true;}定义全局的CString变量g_str用来保存所有的聊天记录,而每条新的聊天记录是用"r "(回车换行)来区分开的。5.3聊天软件监控的实现5.3.1函数入口地址的获得新建一个DLL文件。使用函数SetWindowsHookEx()进行Hook的安装。当Hook程序捕获到send()函数时,相应安装Hook的回调函数。通过回调函数的JMPXXX方法,对要捕捉的函数进行拦截。获得函数入口代码如下:BOOLinit(){hModule=LoadLibrary("wsock32.dll");pfMessageBoxA=GetProcAddress(hModule,"send");if(pfMessageBoxA==NULL)returnfalse;_asm{leaedi,OldMessageBoxACodemovesi,pfMessageBoxAcldmovsdmovsb25 系统实现及关键代码}NewMessageBoxACode[0]=0xe9;_asm{leaeax,Mysendmovebx,pfMessageBoxAsubeax,ebxsubeax,5movdwordptr[NewMessageBoxACode+1],eax}dwIdNew=GetCurrentProcessId();dwIdOld=dwIdNew;HookOn();return(true);}5.3.2内存的访问控制Windows程序在运行的时候为安全性,运程时的内存是不可以修改的。如果不对内存的访问控制进行控制,就对内存进程修改,就会导致错误的发生。在WindowsXP和Windows2000系统中。可以通VirtualProtectEx和WriteProcessMemory两个API函数来修改内存的访问控制。两函数使用如下:hProc=OpenProcess(PROCESS_ALL_ACCESS,0,dwIdOld);VirtualProtectEx(hProc,pfMessageBoxA,5,PAGE_READWRITE,&dwIdOld)5.3.3函数改写内存修改成功后,就可以通过自己定义的函数来改写拦截到的函数。intWINAPIMysend(SOCKETs,constcharFAR*buf,intlen,intflags){intnReturn=0;HookOff();charrecvBuf[200];char*SendBuf;SendBuf="消息被拦截";25 系统实现及关键代码MessageBoxA(NULL,buf,"成功拦截到的消息如下:",MB_OK);nReturn=send(s,SendBuf,200,0);HookOn();、return(nReturn);}5.4数据文件的输入输出为得到直观的看到程序的运行情况。C++有一个stream这个类,所有的I/O都以这个“流”类为基础的。对文件的操作是通过stream的子类fstream来实现。time_tt=time(0);chartmp[64];strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A本年第%j天",localtime(&t));charstr[200];chartempbuf[1000]="";ifstreamfin("c:\recordset.txt");while(!fin.eof()){fin.getline(str,200,' ');strcat(tempbuf,str);}chartextBuf[200];GetWindowText(g_hWnd,textBuf,200);ofstreamfout;fout.open("c:\recordset.txt");fout<<”|”<linesThenTimer_insert.Enabled=FalseExitSubEndIfCallwrite_flag(CStr(flag))b=Split(a(flag),"|")IfUBound(b)=2Thenen=check(b(0))cn=check(b(1))pros=check(b(2))en=RTrim(en)en=RTrim(en)hasif=Conn.Execute("selectcount(*)fromlanjiewherecontext='"&context&"'andtype='"&context&"'")(0)Ifhasif=0ThenConn.Execute("insertintolanjie(contest,type,propery)values('"&RTrim(en)&"','"&RTrim(cn)&"')")success=success+1Text1.Text="成功插入:"&a(flag)Callwritesuccess("成功插入:"&a(flag))Elsebad=bad+1Text_badlist.Text="重复插入失败:"&a(flag)EndIf25 系统实现及关键代码EndIfEndSub数据库程序可以对文本文件的数据进行格式化拆分。然后进行数据库的入库操作。数据库的数据建立后,就可以对拦截到的数据进行相关的分析工作。25 结束语结束语通过这次毕业设计,本人不仅熟悉了WINDOWS的核心编程、HOOK技术,而且感觉自己的自学能力得到了提升。在毕业设计的这段过程中,可以深切地体会到不同开发工具的不同平台下利用各个优势进行开发。所以通过实际地进行软件的开发和程序的设计,对所学知识的再认识和更进一步的理解和运用。但是由于时间太短,本程序还有很多不足的地方。结构上比较凌乱,在界面看不够方便美观。数据库的操作还不是很合理。这些功能都需要以后进一步的完善。美好的大学生活,培养了我科学严谨的思维方法,更造就了我积极乐观的生活态度和开拓进取的创新意识.课堂内外拓展的广博的社会实践、扎实的基础知识和开阔的视野,使我更了解社会。在不断的学习和工作中养成的严谨、踏实的工作作风和团结协作的优秀品质,使我深信自己完全可以在岗位上守业、敬业、更能创业!同时我也相信网络聊天监控软件必将有一片很大的前景,能为网络创造一个安全和谐的环境。27 结束语参考文献[1]GeorgeShepherd、DavidJ.KruglinskiVC.NE技术内[M],MICROSOFTPRESS[2]CharlesPetzoldWINDOWS程序设计[M],MICROSOFTPRESS[3]艾克尔刘宗田等译,C++编程思想,北京:机械工业出版社[4]姚领田,精通MFC[M].北京:邮电出版社[5]林锐,高质量C/C++编程[M].北京:机械工业出版社[6]唐亚哲,网络编程[M].西安:西安交通大学出版社[7]萧秋水,Windows网络编程之VC篇[M].北京,清华大学出版社[8]侯俊杰,深入浅出MFC[M].北京:机械工业出版社[9]胡峪,VC++高级编程技巧与示例[M].西安:西安电子科技大学出版[10]方可燕.VisualC++6.0实战与精通[M]北京:清华大学出版社,2000-7:267-305[11]明日科技.VisualC++项目开发实例自学手册[M].北京:人民邮电出版社.2008-8:254-289[12]胡或.VB程序设计[M].电子工业出版社,2004.[13]姜照林.基于WinSock实现文件在网络的点对点传输[J]嘉兴学院学报,2006-8[14]郭庚麒.软件工程基础教程[M].北京:科学出版社.2004:84-11[15]CSDN综合社区.http://www.csdn.net/[OL][16]成奋华.现代软件工程[M].中南大学出版社,2004.[17]胡或.VB程序设计[M].电子工业出版社,2004.[18]http://www.umlchina.com/[OL][19]http://www.vcbace.com/[OL][20]于鹏.VisualBasic6.0程序设计教程[M].电子工业出版社,2003.[21]谭浩强.VisualBasic程序设计[M].清华大学出版社,2005.27 致谢致谢毕业论文的完成,自己大学的生活也告了一个段落。几年的大学生活过来,真的有很多的感触。在这里首先要感谢我的父母对我多年养育以及对我学业的支持。几年在外地的学习,我基本很少回家,每年的放假我也都在外面工作,对父母的关心真的太少,所以一直也很内疚,父母真的为我付出了很多,省吃俭用的为我攒学费,还常常在电话里面鼓励我,在我不顺意的时候,也是他们在后面一直支持我。有他们我觉得自己很幸福。还有,我要感谢给我指导的刘宏老师,感谢他花费了很多的时间给予我细心的指导。尤其在很晚的时候还在机房给我指导和交流,这个让我很感动。也对自己的毕业设计充满的信心。刘老师还给我提供了关于Windows核心编程的资料,让我能个在更短的时间内,学习到实用的知识。在程序的设计上,指导我添加对消息的存储功能,提高了程序的可移植和操作性。同时由于我在校外还在实习,刘老师也给了我很多的支持。保证了我工作对时间的需要,正是因为有刘老师的细心指导和帮助,我才有可能完成此论文。衷心的感谢刘老师。其次,还要感谢我的朋友,包括在网上从来没有见过面的老师,你们在我成长的路上给了我很大的帮助,尤其在我觉得没有思路,没有办法的时候,你们的经验给我劈开了一条宽阔的道路。虽然我们从未相逢,但我仍心存感激。最后,感谢安康学院的每一位老师,感谢这几年来您们的一路带领,从为人处事,到专业技能上,都让我受益匪浅。谢谢您们的谆谆教诲。我一定会在将来的工作中,严格要求自己。努力做好每一件事情。创造一个属于自己的未来。29

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭