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

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

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

注意:

一定要点击文化按钮进行请求数据,我已经吃了大亏,一开始点击了文化按钮进行抓包,找到如下数据包后,开始debug测试时,点击刷新,一直进不了debug,搞得我以为这个网站的加密升级到进制debug,在这里浪费了好长时间(当然,最开始也有因为用关键词搜索时找到了干扰的js文件,这里还是看了https://blog.csdn.net/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的值会不同

javascript 复制代码
var c = Math.random().toString(16).slice( - 9);
return r += '&nonce='.concat(c),
a.nonce = c,
javascript 复制代码
将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)**中的代码于是我将其中的代码全部复制下来

javascript 复制代码
'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.length; n += 16) r = p,
          o = d,
          a = y,
          f = m,
          p = u(p, d, y, m, e[n], 7, - 680876936),
          m = u(m, p, d, y, e[n + 1], 12, - 389564586),
          y = u(y, m, p, d, e[n + 2], 17, 606105819),
          d = u(d, y, m, p, e[n + 3], 22, - 1044525330),
          p = u(p, d, y, m, e[n + 4], 7, - 176418897),
          m = u(m, p, d, y, e[n + 5], 12, 1200080426),
          y = u(y, m, p, d, e[n + 6], 17, - 1473231341),
          d = u(d, y, m, p, e[n + 7], 22, - 45705983),
          p = u(p, d, y, m, e[n + 8], 7, 1770035416),
          m = u(m, p, d, y, e[n + 9], 12, - 1958414417),
          y = u(y, m, p, d, e[n + 10], 17, - 42063),
          d = u(d, y, m, p, e[n + 11], 22, - 1990404162),
          p = u(p, d, y, m, e[n + 12], 7, 1804603682),
          m = u(m, p, d, y, e[n + 13], 12, - 40341101),
          y = u(y, m, p, d, e[n + 14], 17, - 1502002290),
          d = u(d, y, m, p, e[n + 15], 22, 1236535329),
          p = c(p, d, y, m, e[n + 1], 5, - 165796510),
          m = c(m, p, d, y, e[n + 6], 9, - 1069501632),
          y = c(y, m, p, d, e[n + 11], 14, 643717713),
          d = c(d, y, m, p, e[n], 20, - 373897302),
          p = c(p, d, y, m, e[n + 5], 5, - 701558691),
          m = c(m, p, d, y, e[n + 10], 9, 38016083),
          y = c(y, m, p, d, e[n + 15], 14, - 660478335),
          d = c(d, y, m, p, e[n + 4], 20, - 405537848),
          p = c(p, d, y, m, e[n + 9], 5, 568446438),
          m = c(m, p, d, y, e[n + 14], 9, - 1019803690),
          y = c(y, m, p, d, e[n + 3], 14, - 187363961),
          d = c(d, y, m, p, e[n + 8], 20, 1163531501),
          p = c(p, d, y, m, e[n + 13], 5, - 1444681467),
          m = c(m, p, d, y, e[n + 2], 9, - 51403784),
          y = c(y, m, p, d, e[n + 7], 14, 1735328473),
          d = c(d, y, m, p, e[n + 12], 20, - 1926607734),
          p = s(p, d, y, m, e[n + 5], 4, - 378558),
          m = s(m, p, d, y, e[n + 8], 11, - 2022574463),
          y = s(y, m, p, d, e[n + 11], 16, 1839030562),
          d = s(d, y, m, p, e[n + 14], 23, - 35309556),
          p = s(p, d, y, m, e[n + 1], 4, - 1530992060),
          m = s(m, p, d, y, e[n + 4], 11, 1272893353),
          y = s(y, m, p, d, e[n + 7], 16, - 155497632),
          d = s(d, y, m, p, e[n + 10], 23, - 1094730640),
          p = s(p, d, y, m, e[n + 13], 4, 681279174),
          m = s(m, p, d, y, e[n], 11, - 358537222),
          y = s(y, m, p, d, e[n + 3], 16, - 722521979),
          d = s(d, y, m, p, e[n + 6], 23, 76029189),
          p = s(p, d, y, m, e[n + 9], 4, - 640364487),
          m = s(m, p, d, y, e[n + 12], 11, - 421815835),
          y = s(y, m, p, d, e[n + 15], 16, 530742520),
          d = s(d, y, m, p, e[n + 2], 23, - 995338651),
          p = l(p, d, y, m, e[n], 6, - 198630844),
          m = l(m, p, d, y, e[n + 7], 10, 1126891415),
          y = l(y, m, p, d, e[n + 14], 15, - 1416354905),
          d = l(d, y, m, p, e[n + 5], 21, - 57434055),
          p = l(p, d, y, m, e[n + 12], 6, 1700485571),
          m = l(m, p, d, y, e[n + 3], 10, - 1894986606),
          y = l(y, m, p, d, e[n + 10], 15, - 1051523),
          d = l(d, y, m, p, e[n + 1], 21, - 2054922799),
          p = l(p, d, y, m, e[n + 8], 6, 1873313359),
          m = l(m, p, d, y, e[n + 15], 10, - 30611744),
          y = l(y, m, p, d, e[n + 6], 15, - 1560198380),
          d = l(d, y, m, p, e[n + 13], 21, 1309151649),
          p = l(p, d, y, m, e[n + 4], 6, - 145523070),
          m = l(m, p, d, y, e[n + 11], 10, - 1120210379),
          y = l(y, m, p, d, e[n + 2], 15, 718787259),
          d = l(d, y, m, p, e[n + 9], 21, - 343485551),
          p = i(p, r),
          d = i(d, o),
          y = i(y, a),
          m = i(m, f);
          return [p,
          d,
          y,
          m]
        }
        function p(e) {
          var t,
          n = '',
          r = 32 * e.length;
          for (t = 0; t < r; t += 8) n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
          return n
        }
        function d(e) {
          var t,
          n = [];
          for (t = 0, n[(e.length >> 2) - 1] = void 0; t < n.length; t += 1) n[t] = 0;
          var r = 8 * e.length;
          for (t = 0; t < r; t += 8) n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
          return n
        }
        function y(e) {
          var t,
          n,
          r = '0123456789abcdef',
          o = '';
          for (n = 0; n < e.length; n += 1) o += r.charAt((t = e.charCodeAt(n)) >>> 4 & 15) + r.charAt(15 & t);
          return o
        }
        function m(e) {
          return unescape(encodeURIComponent(e))
        }
        function h(e) {
          var t;
          return p(f(d(t = m(e)), 8 * t.length))
        }
        function v(e, t) {
          return function (e, t) {
            var n,
            r,
            o = d(e),
            i = [],
            a = [];
            for (
              i[15] = a[15] = void 0,
              o.length > 16 &&
              (o = f(o, 8 * e.length)),
              n = 0;
              n < 16;
              n += 1
            ) i[n] = 909522486 ^ o[n],
            a[n] = 1549556828 ^ o[n];
            return r = f(i.concat(d(t)), 512 + 8 * t.length),
            p(f(a.concat(r), 640))
          }(m(e), m(t))
        }
        function g(e, t, n) {
          return t ? n ? v(t, e) : y(v(t, e)) : n ? h(e) : y(h(e))
        }

一开始也将这个函数复制了,运行后会报错,然后就删了

javascript 复制代码
void 0 !== (r = (function () {
          return g
        }).call(t, n, t, e)) &&
        (e.exports = r)
      }(0)

根据之前调试时的发现,xyz调用b()®后第一个进入的是function g(e, t, n)

于是,直接修改为xyz = g®,运行

javascript 复制代码
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);
  r += "&nonce=8ddb1cb48";//固定nonce的值与发送的数据包一直进行测试
console.log("获取nonce:", nonce);

//var xyz = b()(r);
var xyz = g(r);
console.log("xyz: ", xyz)

OK,就是一样的,这两个参数破解成功。

新手第一次js逆向,用时一天。

感谢

https://blog.csdn.net/qq_64095740/article/details/141093492文章的帮助!!!!!

相关推荐
黑客笔记1 小时前
第11章 web应用程序安全(网络安全防御实战--蓝军武器库)
web安全·网络安全·wireshark
黑客Jack2 小时前
属于网络安全规划重安全性需求
安全·web安全·php
夏天的味道٥2 小时前
使用 Java 执行 SQL 语句和存储过程
java·开发语言·sql
Fantasywt2 小时前
THREEJS 片元着色器实现更自然的呼吸灯效果
前端·javascript·着色器
IT、木易3 小时前
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
开发语言·前端·javascript·ecmascript
Mr.NickJJ4 小时前
JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件
开发语言·javascript·react.js
Archer1945 小时前
C语言——链表
c语言·开发语言·链表
My Li.5 小时前
c++的介绍
开发语言·c++
功德+n5 小时前
Maven 使用指南:基础 + 进阶 + 高级用法
java·开发语言·maven
达斯维达的大眼睛5 小时前
qt小项目,简单的音乐播放器
开发语言·qt