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