3分钟破译朋友圈测试小游戏

最近,朋友圈时不时会流行起某个测试类小游戏,比如你的性格图谱啦,你是三体中的哪个角色啦,你有什么超能力啦……昨天晚上在某个群里,又被一个测测你是什么书的小游戏刷屏了。

讲真,这个游戏还真不赖,制作得很精良,立意也不错:在即将到来的世界读书日,邀请你多读点书(当然是用他们的产品读啦)。

通过回答6道二选一的题目,会给你一个结论:你是一本什么书。于是在咱们这个爱读书爱学习的群里,自然都跃跃欲试。还有人不断尝试,想测出所有结果。

然而作为一只程序猿,看到大家这么热情地讨论,自然忍不住要手贱一把,一探究竟。

1. 潜入

因为这种推广类小游戏的开发周期短,又要考虑被封禁的可能,所以通常都直接使用 HTML5 的网页开发,且没有微信登录验证,计算逻辑完全通过前端实现。而前端代码是很难加密的,这就给我们留下了探索的空间。

扫描结果中的二维码,选择“复制链接”,得到游戏的 URL 地址

Chrome 浏览器中打开链接,提示要将手机竖屏。

没关系,我们右键点击页面,选择“审查元素”,或从菜单栏里找到“开发者工具”,打开 Chrome 开发者工具,点击手机样的图标,就可以进入手机模拟模式

现在就可以在电脑上来做这个测试了。

2. 探索与发现

首先选择开发者工具 Console(控制台)标签页,看看在游戏中会有什么信息。

的确会有些输出,但除了知道这是用 Cocos2d-JS v3.14 开发的之外,也并不什么更有价值的。

那就再看看 Network(网络)标签页。

当游戏结束,显示最终结果之后,一个图片请求成功引起了我的注意:

点击预览一下,正是游戏给我们的结果图片,只是上面没有我们的名字。

哈哈,还记得我上一次“每周一坑”栏目推送了什么来着? 【每周一坑】用代码给图片配上文字

当时还有同学留言说这功能有什么用。喏,这就是应用场景,我们输入的名字就是通过与这张图片合成后,显示出的结果。

这张图片的名字叫做 estp.jpg,可以拿到它的 URL 地址。我们就从它入手,寻找更多的线索。

3. 顺藤摸瓜

这里,就可以用到我在爬虫课程里经常提到的一个方法:如何从网页上的众多请求中搜索关键字。

在 Network 标签页的请求列表上右键单击,选择“Save as HAR with content”。这样就得到一个包含所有请求和返回值详细信息的 .har 文本文件。

找一个功能强大的编辑器打开这个文件。(比如 SublimeText、Notepad++,默认的记事本就算了……)

搜索上一步得到的关键字:estp

很幸运,游戏的开发者没有给我们设置很大的障碍,比较轻松地就找到了一些有意思的信息:

从这个信息往上翻一翻,就可以找到对应的请求来源:

这个 loader.js 看来就是揭开答案的关键。打开地址,再搜一下 estp

即使你不懂 JS 代码,也能从这里猜出个大概了吧。

4. 剧透,慎入

e和i、n和s、f和t、j和p,分别对应了4组不同的选择。而下半部分代码,就是把你的名字绘制到图片上。

于是,把它这里的另外15组字符替换到我们前面的拿到的结果图片地址中,你就会看到其他15个答案。

等等!6组二选一,不是应该有2的6次方,64组结果吗?怎么只有16个!难道说……

没错,稍微验证下就会发现,最后两题的答案根本不影响结果!

到这里,我的工作就算完成了。不过呢,我这么懒,显然不会去一张张下载图片啊。借用对方代码里的 ys 字典,随手写个批量下载的 python 脚本:

ys = {
    'enfj': 360,
    'enfp': 428,
    'entj': 428,
    'entp': 428,
    'esfj': 428,
    'esfp': 428,
    'estj': 428,
    'estp': 428,
    'infj': 428,
    'infp': 360,
    'intj': 428,
    'intp': 428,
    'isfj': 428,
    'isfp': 360,
    'istj': 428,
    'istp': 360
}
import requests as r
for k in ys:
    u = 'https://cdn.tiaotiaotang.net/library/f_test_5/res/result/%s.jpg' % k
    d = r.get(u)
    with open(k + '.jpg', 'wb') as f:
        f.write(d.content)

瞬间搞定:

最后的结果,16本书:

1.《爱的教育》 2.《小王子》 3.《且以优雅过一生 杨绛传》 4.《无声告白》 5.《自控力》 6.《我们都是孤独的行路人》 7.《向上汇报》 8.《天生变态狂》 9.《中国通史》 10.《悟空传》 11.《门口的野蛮人》 12.《罗生门》 13.《降临》 14.《查令十字街84号》 15.《十一字杀人》 16.《批判性思维工具》

想到群里的有朋友花了1个小时去试所有的选项,我默默心疼1秒……

不过最后给个友情提醒:作为一个无趣的程序猿,还是低调一点好,不然会没朋友的。

┑( ̄Д  ̄)┍

原文发布于微信公众号 - Crossin的编程教室(crossincode)

原文发表时间:2018-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏视频云

腾讯云直播答题方案解析

基于腾讯云业界领先的视频云技术,提供一站式在线知识竞技接入方案,并独家提供微信小程序接入方案。

6.3K9
来自专栏云计算D1net

不再飘在云中 揭秘云存储与云备份的不同

随着云计算的深入应用,云备份和云存储的应用也逐渐被企业和个人所熟悉,那么问题来了,云备份和云存储有什么区别吗? 大家之所以对两者存在疑虑,是因为大多数的时候我们...

4717
来自专栏灯塔大数据

荐读|爬虫还在用Python?我与Node.js不得不说的故事

深夜闲来无事,默默的打开github,在搜索框中填入了”Stars:>1”,本想着依旧可以在第一页看到Spark的身影,结果第一个映入眼帘的是这个: ? 快速...

1.1K5
来自专栏量子位

5天被迫喊停!Win 10史上最短命系统升级:删文件、无法联网,误报CPU使用率

此次更新的版本号为1809,遍地是坑:删除私人文件、CPU使用情况算错、微软App连不上网……很多抢先更新的用户,现在还没爬上来。

2021
来自专栏芋道源码1024

Redis 深度历险:核心原理与应用实践

Redis 是如今互联网技术架构中,使用最广泛的缓存。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储...

1982
来自专栏智能大石头

大数据分析中Redis怎么做到220万ops

大数据时代,海量数据分析就像吃饭一样,成为了我们每天的工作。为了更好的为公司提供运营决策,各种抖机灵甚至异想天开的想法都会紧跟着接踵而来!业务多变,决定了必须每...

4896
来自专栏FreeBuf

物联网安全研究之二:IoT系统攻击面定义分析

在前文中,我们了解了IoT技术的基本架构,本文我将来说说IoT安全,在此过程中,我们会尝试定义一种新方法来理解IoT安全,同时也会创建一个结构化流程来方便认知I...

3289
来自专栏IT大咖说

做一个不背锅的运维

内容来源:作者:田逸(sery),来自:http://blog.51cto.com/sery/2162642

1514
来自专栏Java后端技术栈

Redis 深度历险:核心原理与应用实践!

Redis 是如今互联网技术架构中,使用最广泛的缓存。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储...

2201
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合优化篇(八)代码优化整理小记及个人吐槽

前言 这两天也一直在纠结这一篇文章该写什么东西,前面临时加的两篇文章就有些打乱了整体节奏,这一篇又想去写一下代码层面优化的事情,可是也不太能抓住重要的点,不太确...

2526

扫码关注云+社区