反向工程“你的使用说明书”小记

起因

那是2018年的四月三日,我,还有几个同学,做了网易云音乐的小测试。

测试背景

测试的背景是这样的:输入用户名和性别,选择性别,做六个题。

题是听一段音乐,从三个选项中选出你认为最接近的。

做完题后,会得到一张图片上有你的使用说明书,三条文字。

接受任务

这以后几天,我的老师杨老师,给了我一个任务:反向工程 网易云音乐测试的代码。

穷举是否可以呢

我先是试了几次,感觉得到的答案挺不一样的,粗略估计穷举工作量没完,放弃了穷举。

如何使用电脑调试跑在手机端的代码呢?配置user agent,告诉服务器你是个手机即可。我选择伪装成我是一个iphone。
然后是用谷歌浏览器看代码。看文件夹,看到了存放问题图片素材的文件夹,标号最多到15(后来知道有16),一共六个问题。问题的格式都是一样的:这段音乐给你的感受是什么?不同的是选项和听到的音乐。

合理猜测

于是我猜测,问题是从15个问题中随机选择的六个。

阅读代码

代码是html调用两段js,最开始我不会看,经老师提示用Astyle,我自己百度找到了js代码格式化工具,华哥说,浏览器*(chrome and firefox)都有pretty print功能,可以一行行看代码。此时我对JavaScript这个语言知之甚少。

我先是漫无目的的遍历代码。两万多行,第一个大收获是找到了说明书的文本。一共66条,我的乖乖,这要穷举,得穷举到猴年马月去。

接下来是以各种关键词在代码中搜索,遨游。notepad++看代码很好。比较给力的一个关键词是“spec”,直指结果。然后我又试图去找一些中间结果的变量,函数,都没找到尽头。代码是混淆过的,许多变量名是n,N,A,a,U,u。函数名也乱七八糟。

能不能调试呢?

此时是有点崩溃的,老师给予我的一个建议是二分修改代码,调试。据说firefox有此种功能,然而我并未找到支持此种功能的插件。

然后我学了两天的JavaScript。发现它也只是一门编程语言,也是有作用域的,也是要定义函数的。一开始的神秘感消失了,并且坚信有一天会做出来的。

昨天,我把代码下载到本地,然而并没想我期待的一样运行起来。我对这个网站的运行环境并不了解。

暂时告一段落

终于在今天,我想到,最后结果是一张图片,从图片反过来推试试。生成图片的方法我找到了,并且,我在关键词spec附近找到了判断spec的逻辑。是的,跟听什么歌选什么选项毫无关系,跟性别倒是有一点关系。把66个spec根据标签和性别,能分成几个不同的类,check函数中判断能否选择,详见图片。生成了文字之后,还要转成图片。不过怎么转成图片我没有找出来。可能那个函数的定义不在这个文件里。查看图片的Url,看到一串base64,这是图片本身的base64编码,可以解码出图片。由于找不到生成图片的方法的定义,反向工程任务到此为止。需要按照新的路线继续进行。

fm=female,fm=!0即fm=true,是女的。fm=!1即fm=false,是男的。

值得一提的是,spec备选项中有一个属性叫foodie,翻译成中文可以是“吃货”。

杨老师提醒我,为长期工作记录日志。八天里我记录了两天。期待下一次工作我的进步。

函数调用关系


chooseSpec调用chooseFromF,chooseFromL1,chooseFromL2和checkS1,checkS2,checkS3.

原文地址:https://www.cnblogs.com/gaoyb348/p/8856192.html