本篇文章作者 ius,本文属 i 春秋原创奖励计划,未经许可禁止转载
原文链接:https://bbs.ichunqiu.com/thread-63876-1-1.html
某稀小程序敲木鱼活动逆向分析
前言
最近发现某稀在小程序搞了个活动,敲木鱼赢好礼。
身为一名程序猿,必然要分析分析请求接口辣
正文
抓包软件,启动!
然后我们打开活动界面,测试一下
ok,一切正常
然后进入游戏,开始抓接口
可以看到这个就是提交接口的返回内容
里面的参数只有token
是未知的,我们的目标就是搞定这个参数
而且这个参数每次都会变动,并非固定的
通过分析抓包流程可以发现,在每次的接口提交中,都会对这个接口发起请求
我们可以大胆的推测,token就是由这个data来生成的
先模拟请求一下,把data摘出来
放到js里运行一下
提示缺少window
,我们在开头补上
再次运行,可以运行成功,但是没有结果
我们去浏览器里运行测试看看,是不是检测nodejs环境了
在浏览器里控制台会打印一个false
这时候,我们要想办法调试一下,单看肯定看不出来
先给代码格式化一下
这些注释估计就是混淆视听的,我们用正则去除一下
然后再格式化一下
在最后下个断点
可以发现,在window
中生成了一堆乱码
这样看来单纯的分析这个js好像没什么头绪了
在抓包流程中,我们可以发现小程序的首页
对于这种内嵌的网页,我们尝试直接从浏览器访问
访问成功,但是提示我们没有登录
我们把抓包中的cookie
导入到浏览器中,这里需要用到一个Cookie-Editor
这个插件,在chrome
扩展商店可以下载到
复制cookie
导入
刷新界面,这次没有提示我们未登录
在浏览器调试就舒服多了,随便给下个xhr断点
再次提交,成功断住
开始跟栈分析token
生成位置
此处省略1万字
简单说一下这种流程如何跟栈吧
我们从这里可以大概的看一下,调用函数名称
总览一下,看看有哪些函数名比较关键
这里有个叫startGame
的函数,我就选择在这里断点,然后一步一步分析
跟到这里的时候,我们可以发现参数token
的生成
进去之后,发现是这样的一串代码
这个代码的意思是,从window里获取p83d60
的值
我们从控制台测试一下
看着就像token
,我们放行断点,看看发包是不是这个值
看着这俩参数长得不能再一样了
所以这个token
是从window里取得值。
我们回到刚才测试js里
打印一下window
果然有一堆乱七八糟的参数
试试打印window['p83d60']
undefined?
我们重新获取一次data
,然后再打印试试
这次成功获取到了,所以看来这个window的值并非固定的。
经过测试发现,这个值大概是1个小时会变一次
不过,这点小伎俩,怎么可能会阻碍到聪明绝顶的我??
在这个js中,只有一个参数是我们想要的,而其他的值都是用来混淆视听的
所以我们可不可以,获取两次data,然后在生成的值中找到两次data相同的值
从而获取到当前时间段的真正的值?
理论形成,实践开始!
为了方便调用js,这次我们直接用nodejs写
获取data参数,然后用vm执行js,最后打印window
然后根据上面的思路完善一下,最后运行,测试成功!
后记
参数都搞定了,我们来用代码模拟一下流程试试
根据抓包分析可以知道
需要请求三次个接口,创建页面,开始游戏,提交分数
这里就不赘述了,简单完成一下
成功提交