注意:本文章的重要操作部分已标红显示,其他内容可以不看。
最近QQ的坦白说很火,许多人都好奇坦白说是谁发的。结果没过多久大家还真就发现了bug。
(1)iOS设备可以直接在搜索框中搜索坦白说的内容,随后就会显示发送者和你有一段聊天记录。
(2)骗发送坦白说的人发一张图片,然后收藏它,在收藏夹里就可以看到发送者了。
(3)请求https://ti.qq.com/cgi-node/honest-say/receive/mine,可以得到带有加密过发送者的一段json,可以解密它。
不用想,这几种方法也就存活了几天,现在已经凉透了。
第三种方法目前的结果。
事实上,腾讯只是加了一个token来验证是否是正常请求。token怎么获得需要费一番功夫研究。那么我们能不能直接获取到加密的json呢,答案是可以的,我们可以直接抓取请求的response。
下面开始教程:
1.下载我的坦白说解密工具 下载地址:http://file.walnutech.cn/upload/ShowTanbaiSay.Net.zip
下载并安装Fiddler ,因为这个工具的官网在国内打不开,所以我把它上传到了我的私有云,下载地址:http://file.walnutech.cn/upload/FiddlerSetup.exe
2.运行它,点击Cancel
3.点击菜单栏中的Tools-Options
4.点击HTTPS
勾选Decrypt HTTPS traffic(解密HTTPS)
勾选Ignore server certificate errors(UNsafe)(忽略证书错误)
由于坦白说的接口的HTTPS协议的,所以我们要启用
5.点击Connections,
勾选Allow remote computers to connect(允许远程设备连接)
这样其他设备才能连上电脑
6.保存设置
现在通过代理连接的设备就可以被抓到包了。然后我们需要让我们的手机通过此代理上网。
7.先查看我们本机的ip(局域网内,手机和电脑在一个网络)
运行-cmd
8.输入ipconfig /all命令并回车
9.无线局域网适配器的内容就代表这台电脑的无线网卡的连接信息,记住这个IPv4地址(192.168.123.192)
10.现在我们进入手机的WLAN,长按当前wifi,点击修改网络
11.点击高级选项
12.点击代理-手动,
代理服务器主机名填写刚刚记下的ip,端口填8888保存
设置完代理,现在我们用手机上网,已经可以抓包了。接下来我们进入QQ。
13.手机QQ直接访问https://ti.qq.com/honest-say/my-received.html
进入坦白说界面,点击收到的坦白说也可以
注意:出现证书错误,一定要点击继续访问!
14.现在我们看Fiddler的左侧列表,仔细找,可以看到Host为ti.qq.com,URL为/cgi-node/honest-say/receive/mine?字样的记录。就是它!
15.将响应保存下来,鼠标右击它,依次选择Save-Response-Response Body
16.保存它,然后用记事本打开,复制全部内容
17.打开我的坦白说解密工具,粘贴进去,点击解密
18.随后会显示解密内容(标签-消息-QQ号),大功告成!
那么,解密坦白说的发送者是怎么实现的呢?
返回的数据是一段json,在data-list分组下,保存着用户数据fromNick是发送者的信息topicName是消息,这两个都是没有加密的。
而fromEncodeUin则是加密过的发送者QQ号,为这么需要它?我猜测是QQ为了实现匿名聊天留的。
下面是一段fromEncodeUin的示例
*S1*xxxxxxxxx
它的开头四位是永远不变的,之后以四位为一组,对应三个数字。循环完一组,又是一组,一直有三组。这样就可以得到前9位了。从第10位开始,字典就不适用了,不过我们完全不需要它,因为只得到前几位就能知道是谁发的坦白说了。
字典如下
第 一 二 三 位 0 - "oe", "n", "z" 1 - "oK", "6", "5" 2 - "ow", "-", "A" 3 - "oi", "o", "i" 4 - "7e", "v", "P" 5 - "7K", "4", "k" 6 - "7w", "C", "s" 7 - "7i", "S", "l" 8 - "Ne", "c", "F" 9 - "NK", "E", "q"
代码实现很容易
源代码地址:http://file.walnutech.cn/upload/坦白说源代码(C#).zip
部分内容参考自Z实验室