最近尝试截取某聊天软件的聊天消息并使用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获取就可以实现效果,下面是截图:
之后是我的github代码:https://github.com/bstaint/MsgIPC
但其中有个问题就是在dll中使用zeromq在DLL_PROCESS_DETACH
时想要释放zmq::context_t的话就会出现QQ假死,只能选择不释放,暂时还没有其他办法。
没有评论:
发表评论