Python获取某聊天软件消息

最近尝试截取某聊天软件的聊天消息并使用Python来获取这些聊天记录,其实早在几年前就有一些文章讲过,使用Hook的方式可以截取。

但是文章中使用的版本多是2013之前的,其中文章说的SaveMsg和SaveMsg194:

?SaveMsg194@Msg@Util@@YAHPB_WKKKPAUITXMsgPack@@PAUITXData@@PAUITXCallback@@@Z
?SaveMsg@Msg@Util@@YAHPB_WKKKPAUITXMsgPack@@PAUITXData@@@Z

经过测试该导出函数只有在自己发消息的时候才会触发,所以只能花时间找其他的函数,最终找到了:

?CheckVideoMsg@Msg@Util@@YAXHKKPAUITXMsgPack@@@Z

该API会在有消息来时触发,并且根据该函数的签名:

void __cdecl Util::Msg::CheckVideoMsg(int,unsigned long /* 发送者Uin */,unsigned long /* 群组Uin */,struct ITXMsgPack *)

有了这些参数,再配合:

?GetMsgAbstract@Msg@Util@@YA?AVCTXStringW@@PAUITXMsgPack@@@Z
?GetMsgTime@Msg@Util@@YA_JPAUITXMsgPack@@@Z
?GetNickname@Contact@Util@@YA?AVCTXStringW@@K@Z

就可以获取到我们需要的大部分内容,之后我通过zeromq和msgpack的方式将获取到的消息push出来,然后通过Python端的zeromq获取就可以实现效果,下面是截图:
screenshot

之后是我的github代码:https://github.com/bstaint/MsgIPC

但其中有个问题就是在dll中使用zeromq在DLL_PROCESS_DETACH时想要释放zmq::context_t的话就会出现QQ假死,只能选择不释放,暂时还没有其他办法。

参考链接:
https://stackoverflow.com/questions/19795245/zeromq-context-singleton-provided-in-a-dll-crashes-when-program-exits-vs2010

没有评论: