也论腾讯拿你的历史记录做了点啥
Lion Yang & Epics of Anticensorship已得作者首肯,特此转载。
拿到历史记录之后干了什么?应该是读取了淘宝、天猫和京东的搜索记录,并且通过统一接口上传了特定的搜索关键词吧。
根据有关灵媒的说法,内部算法具体 URL 检查步骤如下:
- 确保 URL 是 UTF-16LE 编码的宽字符串
- 把整条 URL 转换成大写
- 寻找长度为
size
的,MD5(4个整数)哈希为A B C D
的子字符串。
MD5 是一种将任意长度内容转换为四个整数的单向函数。由于它找的是一小段字符串的 MD5,所以我们没法恢复出它想要找的真正原文是什么。
总共有四对这样的 (size, A, B, C, D)
,分别是:
23, 0x1C6389BA, 0xF2FA5666, 0xF2A2E0D3, 0xC892E7BA 34, 0xB829484C, 0x520F7CC3, 0x94EC8A73, 0xD808E79 30, 0xDDA1029, 0x9E67F3BB, 0xB18ACC45, 0x597CF438 21, 0x2564591C, 0x5B11347B, 0x846A0F72, 0xEF704A8
我们只能暴力破解 23 个字符、34 个字符……,天文数字的计算耗时,非常困难。
?吗
不困难,因为 QQ/TIM 要找的东西肯定有机会出现在用户的历史记录里。
把自己多年丰富的历史记录全部翻出来主动喂给这个算法就好。
23, 0x1C6389BA, 0xF2FA5666, 0xF2A2E0D3, 0xC892E7BA => ://S.TAOBAO.COM/SEARCH? 34, 0xB829484C, 0x520F7CC3, 0x94EC8A73, 0xD808E79 => LIST.TMALL.COM/SEARCH_PRODUCT.HTM? 30, 0xDDA1029, 0x9E67F3BB, 0xB18ACC45, 0x597CF438 => (未知) 21, 0x2564591C, 0x5B11347B, 0x846A0F72, 0xEF704A8 => SEARCH.JD.COM/SEARCH?
只找到了其中的三个,它在寻找 淘宝、天猫、京东 的历史搜索记录。
接下来根据一位幽灵的托梦,我了解到它会截取 URL 后面的 q=... 和 keyword=... 两种搜索参数,它包含了在网页上输入的搜索内容。
针对搜索的内容,它又故技重施,(目前只有)有以下的六条内容匹配。
# group 1 18, 0x8C2F8C3B, 0x9CA6DB69, 0x663C9537, 0xA0B64B58 7, 0x966DC59E, 0x592F2331, 0x6D2BF021, 0xA1D96C3C # group 2 18, 0x7FACF63C, 0xBEC2FCB0, 0xBE8836F6, 0x167CC273 18, 0x46B6D8D7, 0x8AA82723, 0xBE19FA24, 0x670E160C # group 3 18, 0xE235F85E, 0x5C924D20, 0xA61B84AC, 0x4BC792DD 18, 0x79088BEC, 0xF29CC9E8, 0xBF920D9, 0x455AE9ED
在我的浏览记录里,恰好找到了第二和第四条的内容为
7, 0x966DC59E, 0x592F2331, 0x6D2BF021, 0xA1D96C3C VINTAGE 18, 0x46B6D8D7, 0x8AA82723, 0xBE19FA24, 0x670E160C %E8%9E%8D%E8%B5%84
%E8%9E%8D%E8%B5%84
这18个字是“融资”的 URL 里的编码。
结合这个发现,联想到 18 = 3*6,再结合 一个汉字等于3个字节 的事实。不难理解,剩下的四个 size 为 18 的未知字符很有可能都同样是汉字双字词。
汉字虽多,但是实际上通用规范汉字表常用字集只有 3500 字,两个字就遍历两层即可,百万级别的循环对于电脑来说还是轻松简单的。另外还有有趣的朋友们(编者注:即 Epic of Anticensorship 小编和某匿名群友)提供的汉字双字词表,遍历起来就更快了。
# group 1 18, 0x8C2F8C3B, 0x9CA6DB69, 0x663C9537, 0xA0B64B58 # 古着 7, 0x966DC59E, 0x592F2331, 0x6D2BF021, 0xA1D96C3C # VINTAGE # group 2 18, 0x7FACF63C, 0xBEC2FCB0, 0xBE8836F6, 0x167CC273 # 融券 18, 0x46B6D8D7, 0x8AA82723, 0xBE19FA24, 0x670E160C # 融资 # group 3 18, 0xE235F85E, 0x5C924D20, 0xA61B84AC, 0x4BC792DD # 炒股 18, 0x79088BEC, 0xF29CC9E8, 0xBF920D9, 0x455AE9ED # 股票
这就是 QQ/TIM 关心的全部关键词。然后或许可能我觉得会带着 skey=0x800915e 这个编号把搜索到的 group 组号 传上去服务器里。可以确定的是,它没有上传完整 URL,更没有上传所有浏览记录。
根据一位不知名妖怪所说:这份程序实现的成熟度很低,很可能只是一个初步的、实验性的或者说试探性的代码,以上清单也是固定在程序里的,不能下发任务控制 QQ 扫描其他的关键词。腾讯公司顶多就知道你是个会到天猫淘宝京东搜索炒股教程、融资技巧、和买二手衣服(?)的用户罢了。
什么叫用户画像啊?(战术后仰)
如是我闻。