<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} p.MsoTitle, li.MsoTitle, div.MsoTitle {margin-top:12.0pt; margin-right:0cm; margin-bottom:3.0pt; margin-left:0cm; text-align:center; mso-pagination:none; mso-outline-level:1; font-size:16.0pt; font-family:Arial; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt; font-weight:bold;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->

QQ2009 聊天界面消息获取文档说明

版权所有: Goldant

时间: 2009-2-8

Blog: http://blog.csdn.net/antswallow

重要声明 : 任何第三方个人或公司使用该技术对他人聊天消息进行监控 , 需经过被控方同意 , 任何由此引起的法律纠风均与本人无关 .

内容 : 本文简述 QQ09 聊天界面获取的基本原理 , 对于其它所需的技术以及细节将一笔带过 , 需第三方人员自行实现完成 . (个人已实现 QQ08/09 MSN 8.5+ 版本的聊天监控,有时间会把细节处理及其它关键技术后续发表出来)

由于 QQ2009 采用了最新的 UI 界面技术 , 使得无法再通取窗口句柄的方式来取得用户的聊天消息 . 查看了下 QQ 聊天窗体 , 发现采用的是 RichEdit 4.1 控件 . 对于这种无窗口句柄的控件 , 只能通过拦截内部的 COM 指针 , 来获取聊天消息 . 经过跟踪研究 , 只需要拦截掉 RichEdit.dll 中的 CreateService, 就可以取得 COM 指针 , 然后利用这 COM 指针去获取聊天消息 .

为了能够拦截掉 COM 指针需要将一 DLL 注入 QQ 进程之中 , 至于如何注入进程 , 网上有很多教程 , 这里不作详述 ,CreateRemoteThread 以及 SetHook 都可以 , 逻辑代码如下 :

DWORD pid =GetProcessID(_T("QQ.exe"));

HANDLE hProcess =OpenProcess(PROCESS_ALL_ACCESS,false,pid);

void *pDataRemote=

(char*)VirtualAllocEx(hProcess,0,cb, MEM_COMMIT,PAGE_READWRITE );

ret = WriteProcessMemory( hProcess, pDataRemote, "qqinject.dll", cb, NULL);

CreateRemoteThread(

hProcess, NULL, 0,

(LPTHREAD_START_ROUTINE)

GetProcAddress(GetModuleHandle(_T("KERNEL32.DLL")),"LoadLibraryW"),

pDataRemote, 0 , NULL);

当 DLL 成功注入 QQ 进程后 , 便可以开始进行 API 拦截 ,API 拦截不在本文档所述之内 , 所需拦截的 API 函数 , 需包含相应的头文件 , 建议在 VS2003 下编绎 ,VC6 还需下载 SDK, 如下 :

#include <richedit.h>

#include <imm.h>

#include <textserv.h>

#include <tom.h>

#pragma comment(lib,"riched20.lib")

const IID IID_ITextServices = {

// 由于此 IID 在 SDK 中的 riched20.lib 是错误的 , 需重新定义

0x8d33f740, 0xcf58, 0x11ce, {0xa8, 0x9d, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5}

};

// 函数拦截代码 用户自行完成 , 需拦截掉 riched20.dll 中的导出函数 CreateService

CreateService 函数原型如下 :

// 定义所需拦截函数的函数指针 PFCreateTextServices

typedef HRESULT (STDAPICALLTYPE * PFCreateTextServices)(

IUnknown *punkOuter,

ITextHost *pITextHost,

IUnknown **ppUnk);

// 此函数为自定义的函数 , 用户需自行完成 API 的拦截 , 使得

// 当 QQ 进程调用 CreateService 的时候 , 能够先跳转到此函数 ,

STDAPI MyCreateTextServices(

IUnknown *punkOuter,

ITextHost *pITextHost,

IUnknown **ppUnk)

{

// 找到原始函数的地址

PFCreateTextServices proc = (PFCreateTextServices) FindHook ("CreateTextServices",NULL);

// 执行原始函数 , 以取得当前 COM 的指针

HRESULT ret=proc(punkOuter,pITextHost,ppUnk);

// 得到 COM 的 IID_ItextServices 接口

CComQIPtr<ITextServices,&IID_ITextServices> my_textServ;

my_textServ=*ppUnk;

// 需自行过滤掉没用的接口指针

// 保存 QQ 聊天消息窗体的 COM 接口

Save(my_textServ);

return ret;

}

// 查询 QQ 聊天内容

BSTR GetQQContent(){

BSTR bs;

my_textServ->TxGetText(&bs);   // 取得存文本聊天消息

// 如果想要修改聊天消息 , 请自行参与 RichEdit 控件 SDK,

return bs;

}

关于QQ2009聊天消息获取原理说明 .相关推荐

  1. 阿里旺旺分析系列一:实时获取阿里旺旺聊天消息,实现旺旺客服机器人

    目前网络上有为数不多的几款客服机器人.比如某某旺旺机器人.实现的大概机制是获取淘宝旺旺收到的聊天消息.从本地数据库中搜索答案.然后再自动或者手动回复. 本文详细讲述如何分析阿里旺旺和某某旺旺机器人软件 ...

  2. Android QQ、微信聊天消息界面设计原理与实现

     原理:Android平台上,典型的以腾讯的QQ.微信这些聊天消息界面通常可以采用ListView设计与实现,需要使用ListView 适配器Adapter的getItemViewType()和g ...

  3. 【转】编写微信聊天机器人4《聊天精灵WeChatGenius》:实时获取到微信聊天消息,hook数据库插入操作。...

    接上篇,使用Xposed来hook微信,找到微信进程:https://blog.csdn.net/weixin_42127613/article/details/81839537 既然已经找到了微信进 ...

  4. 编写微信聊天机器人4《聊天精灵WeChatGenius》:实时获取到微信聊天消息,hook数据库插入操作。

    接上篇,使用Xposed来hook微信,找到微信进程:https://blog.csdn.net/weixin_42127613/article/details/81839537 既然已经找到了微信进 ...

  5. android qq功能实现原理,Android QQ、微信聊天消息界面设计原理与实现

     Android QQ.微信聊天消息界面设计原理与实现 原理:Android平台上,典型的以腾讯的QQ.微信这些聊天消息界面通常可以采用ListView设计与实现,需要使用ListView 适配器 ...

  6. 微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)

    1.点评 对于IM系统来说,如何做到IM聊天消息离线差异拉取(差异拉取是为了节省流量).消息多端同步.消息顺序保证等,是典型的IM技术难点. 就像即时通讯网整理的以下IM开发干货系列一样: <I ...

  7. php获取微信聊天图片,vbot微信聊天机器人微信聊天消息详解(4):图片消息

    <vbot微信聊天机器人微信聊天消息详解(4):图片消息>要点: 本文介绍了vbot微信聊天机器人微信聊天消息详解(4):图片消息,希望对您有用.如果有疑问,可以联系我们. 图片是资源文件 ...

  8. 聊天软交互原理_来自不同城市的人们如何在freeCodeCamp聊天室中进行交互

    聊天软交互原理 by Déborah Mesquita 由DéborahMesquita 来自不同城市的人们如何在freeCodeCamp聊天室中进行交互 (How people from diffe ...

  9. 刚刚更新:在线聊天系统设计(原理+思路+源码+效果图)

    2019独角兽企业重金招聘Python工程师标准>>> 这周项目要做一个在线聊天系统,感觉不是特别困难,原理也很简单,分享给大家. 技术 Java(Spring)+Mysql+Mem ...

最新文章

  1. 模块化的 Windows 7
  2. Crypto API
  3. online_judge_1046
  4. 【知识星球】超3万字的网络结构解读,学习必备
  5. MongoDB 聚合操作之$group使用
  6. Eclipse 报java.lang.OutOfMemoryError: PermGen space错
  7. Inside the C++ Object Model | Outline
  8. java求字符串数组交集、并集和差集
  9. 能力提升综合题单 Part 8.3.3 最近公共祖先
  10. vb代码转为c++代码_vb代码转为c++代码_VB源码转换工具(VBto Converter)
  11. codeforces 题解
  12. php 16进制 声明,php16进制转换
  13. 阿里云实践 - HTML5断点播放m3u8视频(videojs)
  14. 如何减少block的数量?也就是减小Namenode的内存压力?
  15. opencv--轮廓拟合函数 boundingRect(),minAreaRect(),minEnclosingCircle(),fitEllipse(),fitLine()
  16. 知道创宇研发技能表v3.0
  17. Android 发展史:“吃货”就是这么练成的
  18. Torque2D MIT 实战记录: Isometric(等轴视距)
  19. mysql集群 教程_mysql集群搭建教程-基础篇
  20. 计算机技术在注射模中的应用,CAD/CAM技术在注射模具设计,制造中的应用.pdf

热门文章

  1. 毕业论文答辩の七个原则(博士)
  2. ./configure 的配置和用法
  3. mysql字符集乱码问题_解决mysql字符集乱码问题
  4. 使用LiveGBS GB28181平台监控视频录像回放如何在页面上嵌入录像时间轴
  5. 关于手机,最近想了这些
  6. mysql的exists与inner join 和 not exists与 left join 性能差别惊人
  7. 后缀自动机 (WJMZBMR讲稿的整理和注释)
  8. 萌新接触前端的第一课——HTML
  9. 一种开环控制的两轮差速驱动小车的设计
  10. echarts 直方图加正态_用Excel2007制作直方图和正态分布曲线图