对于当前流行的各种即时聊天工具,截获聊天内容大致有两种办法。第一种,分析通信协议。第二种,通过截取控件的消息或者Hook Api或者是Hook Com组件的接口。第一种,方式存在严重 的问题,因为某些聊天工具的协议没有公开,另外聊天内容很多都已经加密。所以本文主要来讨论第二种方式。
首先,我们来介绍一下一些将要用到的基本知识。对于老版本的聊天工具,他们的文本窗口一般是Edit或者RichEdit控件,当前使用的新版本的聊天工具多数是自定义的窗口类。对于Edit和RichEdit控件我们可以通过给控件发送消息来获取控件中的文本(当然,前提是这些控件的消息没有被屏蔽掉)。这种方式很简单,而且当今流行的新版本的聊天工具都是自定义的控件并且消息多数都被屏蔽掉,所以在这里我们着重讨论使用Hook Api和Hook COM 组件的接口来实现聊天信息的截取。
对于Hook Api的方式,我们一般可以通过截获TextOutA,TextOutW,ExtTextOutA,ExtTextOutW,DrawTextA,DrawTextW这些Api函数来截获聊天内容,因为不管使用什么控件来做为聊天窗口,它们一定是通过调用这些Api函数来实现文字的输出的。
对于Hook COM组件接口和Hook WIndows 的系统库来实现聊天内容的截获,一般来说,我们可以替换系统的RichEdit和Edit动态连接库来实现,这些系统库包括:RICHTX32.OCX,riched32.dll,riched20.dll...。
另外,还有一些辅助的方式,对于输入法我们还可以Hook IME的接口,来截获文本内容。对于控件中的文本内