51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

某稀小程序敲木鱼活动逆向分析

本篇文章作者 ius,本文属 i 春秋原创奖励计划,未经许可禁止转载
原文链接:https://bbs.ichunqiu.com/thread-63876-1-1.html

某稀小程序敲木鱼活动逆向分析

前言 {#toc_0}

最近发现某稀在小程序搞了个活动,敲木鱼赢好礼。

身为一名程序猿,必然要分析分析请求接口辣


image-20240212225711002 image-20240212225711002


正文 {#toc_1}

抓包软件,启动!


image-20240212225938249 image-20240212225938249


然后我们打开活动界面,测试一下


image-20240212230100622 image-20240212230100622


ok,一切正常


image-20240212230051819 image-20240212230051819


然后进入游戏,开始抓接口


image-20240212230240197 image-20240212230240197


可以看到这个就是提交接口的返回内容


image-20240212230748721 image-20240212230748721


里面的参数只有token是未知的,我们的目标就是搞定这个参数


image-20240212230828453 image-20240212230828453


而且这个参数每次都会变动,并非固定的


image-20240212230944369 image-20240212230944369


通过分析抓包流程可以发现,在每次的接口提交中,都会对这个接口发起请求


image-20240212232159181 image-20240212232159181


我们可以大胆的推测,token就是由这个data来生成的


image-20240212231142586 image-20240212231142586


先模拟请求一下,把data摘出来


image-20240212232520621 image-20240212232520621


放到js里运行一下


image-20240212232657057 image-20240212232657057


提示缺少window,我们在开头补上


image-20240212232742120 image-20240212232742120


再次运行,可以运行成功,但是没有结果


image-20240212232802325 image-20240212232802325


我们去浏览器里运行测试看看,是不是检测nodejs环境了

在浏览器里控制台会打印一个false


image-20240213000118100 image-20240213000118100


这时候,我们要想办法调试一下,单看肯定看不出来

先给代码格式化一下


image-20240213000309188 image-20240213000309188


这些注释估计就是混淆视听的,我们用正则去除一下


image-20240213000354202 image-20240213000354202


然后再格式化一下


image-20240213000429103 image-20240213000429103


在最后下个断点

可以发现,在window中生成了一堆乱码

这样看来单纯的分析这个js好像没什么头绪了


image-20240213000700057 image-20240213000700057


在抓包流程中,我们可以发现小程序的首页

对于这种内嵌的网页,我们尝试直接从浏览器访问


image-20240212233053130 image-20240212233053130


访问成功,但是提示我们没有登录


image-20240212233124868 image-20240212233124868


我们把抓包中的cookie导入到浏览器中,这里需要用到一个Cookie-Editor这个插件,在chrome扩展商店可以下载到

复制cookie


image-20240212233311522 image-20240212233311522


导入


image-20240212233359849 image-20240212233359849


刷新界面,这次没有提示我们未登录


image-20240212233431180 image-20240212233431180


在浏览器调试就舒服多了,随便给下个xhr断点


image-20240212233804914 image-20240212233804914


再次提交,成功断住


image-20240212233848211 image-20240212233848211


开始跟栈分析token生成位置

此处省略1万字

简单说一下这种流程如何跟栈吧

我们从这里可以大概的看一下,调用函数名称


image-20240212234930444 image-20240212234930444


总览一下,看看有哪些函数名比较关键


image-20240212235016397 image-20240212235016397


这里有个叫startGame的函数,我就选择在这里断点,然后一步一步分析

跟到这里的时候,我们可以发现参数token的生成


image-20240212235228757 image-20240212235228757 image-20240212235302145 image-20240212235302145


进去之后,发现是这样的一串代码

这个代码的意思是,从window里获取p83d60的值


image-20240212235326205 image-20240212235326205


我们从控制台测试一下


image-20240212235526146 image-20240212235526146


看着就像token,我们放行断点,看看发包是不是这个值

看着这俩参数长得不能再一样了


image-20240212235606115 image-20240212235606115


所以这个token是从window里取得值。

我们回到刚才测试js里

打印一下window


image-20240212235731699 image-20240212235731699


果然有一堆乱七八糟的参数

试试打印window['p83d60']

undefined?


image-20240212235826452 image-20240212235826452


我们重新获取一次data,然后再打印试试


image-20240212235943352 image-20240212235943352


这次成功获取到了,所以看来这个window的值并非固定的。

经过测试发现,这个值大概是1个小时会变一次

不过,这点小伎俩,怎么可能会阻碍到聪明绝顶的我??

在这个js中,只有一个参数是我们想要的,而其他的值都是用来混淆视听的

所以我们可不可以,获取两次data,然后在生成的值中找到两次data相同的值

从而获取到当前时间段的真正的值?

理论形成,实践开始!

为了方便调用js,这次我们直接用nodejs写

获取data参数,然后用vm执行js,最后打印window


image-20240213001447184 image-20240213001447184


然后根据上面的思路完善一下,最后运行,测试成功!


image-20240213001624647 image-20240213001624647


后记 {#toc_2}

参数都搞定了,我们来用代码模拟一下流程试试

根据抓包分析可以知道

需要请求三次个接口,创建页面,开始游戏,提交分数

这里就不赘述了,简单完成一下

成功提交


image-20240213001927674 image-20240213001927674


赞(1)
未经允许不得转载:工具盒子 » 某稀小程序敲木鱼活动逆向分析