记一次JS逆向-新榜数据nonce和xyz参数分析

分析网站:https://www.newrank.cn/ranklist/gongzhonghao

这次我们要分析的是该网站的接口 文化 按钮中的noncexyz参数。

注意:
一定要点击文化按钮进行请求数据,我已经吃了大亏,一开始点击了文化按钮进行抓包,找到如下数据包后,开始debug测试时,点击刷新,一直进不了debug,搞得我以为这个网站的加密升级到进制debug,在这里浪费了好长时间(当然,最开始也有因为用关键词搜索时找到了干扰的js文件,这里还是看了https://blog.youkuaiyun.com/qq_64095740/article/details/141093492这篇文章,学到了一个根据调用堆栈找到js文件,再用关键关键词搜索的技巧,才顺利的找到核心加密代码),到处找教程,最后偶然点了一次文化按钮进行请求,发现可以进debug。

在这里插入图片描述
在这里插入图片描述

1、发送请求

打开网页https://www.newrank.cn/ranklist/gongzhonghao

点击F12,来到网络,先清空数据,然后点击文化按钮,可以看到我们会发送一个请求

在这里插入图片描述

如果进入网页后,直接来到网络这里,然后发送请求的话会有大量的干扰包,不利于我们找到有用的数据包。

2、查看数据包

查看数据包,找到要破解的密文nonce、xyz

在这里插入图片描述

3、点击栈跟踪

通过观察可以发现

在这里插入图片描述

这里主要涉及到的js文件有

在这里插入图片描述

然后我们点击调试器中的

在这里插入图片描述
将代码展开

4、关键词搜索

ctrl+f 进入在文件中查找,输入关键词xyz,或nonce

在这里插入图片描述

在该文件中找到关键代码,此时不用急,先把其余文件搜索完,然后发现其余文件中均没有该关键词。

这里提一下我最开始的做法,我是直接上来就ctrl+shift+f 关键词搜索,然后找到了很多跟上图一样的代码块,然后就在哪里测试,浪费了很多时间。

5、debug

在我们找的关键词位置打两个断点

在这里插入图片描述
然后点击文化按钮,点击刷新是不会发送这个请求的,也就不会进入这个断点调试

根据代码可以看到nonce是 c 得到的值,c做了一个随机数的操作

我们可以点击下一步就可以看到nonce的值

在这里插入图片描述

接着再看xyz的值b()®,调用了一个b函数,然后传入r

所以我们可以看一下r的值,在控制台输入r,我们就可以拿到r的值,

在这里插入图片描述

点击下一步,直到跳转到另一个js文件

在这里插入图片描述

一直点击下一步,会发现它带我们调用的是88970下的函数,这里会用比较长的时间。在循环时可以按住F11或F9(浏览器不同,下一步按键就不同)不松,看一看都调用了哪些函数
在这里插入图片描述

这些函数调用完后就会带我们回到关键词的代码那里

然后再控制台输入b()®会得到xyz的值
在这里插入图片描述

停止调试后,可以看到发送了请求数据,然后跟数据包中的xyz对比一下,是一样的,此时就确定了这是xyz和nonce加密的关键代码

6、扣代码

这一步也可以提前在测试nonce的值时做

我们将生成nonce的代码复制出来,运行该代码,得到值,由于是随机数,所以每次运行的nonce的值会不同

var c = Math.random().toString(16).slice( - 9);
return r += '&nonce='.concat(c),
a.nonce = c,
将r的值提出来
let r = "/nr/user/wx/getTempQrCode?AppKey=joker&scene=portal_login&type=1";

const nonce = Math.random().toString(16).slice(-9);// '&nonce=0f7c6816d'
 // r += "&nonce=".concat(c);
console.log("获取nonce:", nonce);

在这里插入图片描述

然后再扣下xyz的代码,找到刚刚调用过的函数,可以直接将88970下的所有代码都复制下来,但是会有一些错误,仔细观察后,发现它只调用了**!function (o)**中的代码于是我将其中的代码全部复制下来

'use strict';
        function i(e, t) {
   
          var n = (65535 & e) + (65535 & t);
          return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
        }
        function a(e, t, n, r, o, a) {
   
          var u;
          return i((u = i(i(t, e), i(r, a))) << o | u >>> 32 - o, n)
        }
        function u(e, t, n, r, o, i, u) {
   
          return a(t & n | ~t & r, e, t, o, i, u)
        }
        function c(e, t, n, r, o, i, u) {
   
          return a(t & r | n & ~r, e, t, o, i, u)
        }
        function s(e, t, n, r, o, i, u) {
   
          return a(t ^ n ^ r, e, t, o, i, u)
        }
        function l(e, t, n, r, o, i, u) {
   
          return a(n ^ (t | ~r), e, t, o, i, u)
        }
        function f(e, t) {
   
          e[t >> 5] |= 128 << t % 32,
          e[(t + 64 >>> 9 << 4) + 14] = t;
          var n,
          r,
          o,
          a,
          f,
          p = 1732584193,
          d = - 271733879,
          y = - 1732584194,
          m = 271733878;
          for (n = 0; n < e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whoam_laowei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值