-
-
[原创]关于微信聊天机器人的半hook半协议研究
-
2018-12-13 10:29
19740
-
声明:本技术贴仅为了某些想在AI技术的基础上做个微信聊天机器人提供部分技术原理,如有侵权,就当我写过。删帖便是了。
背景:AI技术吊炸天,很多人工智能聊天都看起来很酷炫,而微信智能聊天机器人,是很多人想实现的一个玩意,但是微信没有提供方便的开发平台,
让一些学生想用自己的微信号做个机器人,都找不到门路,所以,基于此,我们可以使用hook PC的办法来实现这个机器人。
1:如何hook接受消息?
微信公开了一个mars框架,这个可以在github上看到,从mars上我们大概能看到微信底层的样子,当然它缺少CDN和mmtls,不过没啥关系,一个
做机器人的技术,没有这两个,也是可以实现的。
从mars的源码里,我们重点看sample里面https://github.com/Tencent/mars/blob/master/samples/Windows/PublicComponentV2/longlink_packer.cc
这个代码,其中
这两个函数是收发包的核心函数,如果我们能够hook到这里,基本上消息的接收是可以完全监控到的。
2.如何找到这两个函数?
找这两个函数大概有很多种办法,但是我个人觉得最简单的就是
htonl 和
ntohl。这两个函数是导出函数,封包需要用好几次,解包也用好几次,
相信打开IDA,找到这种一个函数用好几次htonl的函数不是很多,挨个下断点就能够hook出来了。
比如 2.6.2.31这个版本 封包解包的地址 : 0x9A6579
0x9A6664
3.如何解包?
我们知道微信登录以后使用sessionkey加密解密包的,如果不知道的可以阅读以下文章:
所以我们也需要拿到sessionkey,打开ida,字符串搜索sessionkey
test edx,edx 就是sessionkey了。
拿到sessionkey,如何解包?
这时候基本可以参考github上的一些代码:
解开了包,就可以用protobuf反序列化,这样我们就能监控到聊天消息了。
4.那如何发送消息?
1.可以通过hook发送函数来发。
可以在微信的客户端启动一个PRCServer,然后我们的AI负责把回复消息发送给里面的线程,负责发送,这种Call发送虽然比较死。
2.可以自己构建包来发。
发送一个包需要什么,proto文件,这个很好弄。
如何封包?
根据hook pack函数我们揭秘一个就好了。
拿到version,uin,cookies,然后最后几位标志。
3.怎么发送出去?
我们走短连接就好了,然后用早期的版本,因为早期的低版本可以关闭mmtls,所以我们在登录以后拿到一个短连接的ip
封包发送就好了。
会不会封号就不知道了,但是我们的聊天机器人,就算是可以实现自动回复了。撩起来吧。
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界