自己写的逆向案例三——某蔬菜小说登录接口逆向

发布于:2024-04-19 ⋅ 阅读:(28) ⋅ 点赞:(0)

网址:aHR0cHM6Ly9mYW5xaWVub3ZlbC5jb20v

登录接口抓包,发现电话号码和密码都进行了加密。开始跟栈。

在相应位置打上断点,点击登录,其中在右侧发现已经进行了加密。

现在判断异步栈有没有是加密位置。第一个异步栈,已经是经过加密的了。现在看第二个异步栈。

点击进入第二个异步栈f.request

又看到了最熟悉的位置,打上断点,进入f函数的第一个。看参数又没有加密。 

在控制台打印f

进入第一个函数,并打上断点,发现参数已经经过了加密,因此直接跳过异步栈,往前看。

进入疑似栈,并在疑似位置打上断点,找到了未加密的参数。电话和密码。

逐步点击,跳过下一步函数调用,在控制台打印,发现r就是加密后的数据,加密位置,k(d(,打印d,发现是一个内置函数assign。

现在进入k函数,并打上断点。 发现k函数接收两个参数e是电话号码和密码,和t,分别复制e和t

再在o处打断点,执行到o,发现最后返回的o就是加密后的数据。

复制整个k函数到pycharm中。

运行发现d未定义,在控制台打印。 发现。

在 JavaScript 中,Object 是一个全局对象,不需要额外引入。你可以直接使用 Object 对象,而无需使用 require 来导入它。

如果你想在 Node.js 环境中使用某个特定的 JavaScript 库或模块,你需要使用 require 来导入它。但对于 Object 这样的内置对象,不需要额外导入,你可以直接在代码中使用它。

改写

Object.assign
# 将d替换成上述

结果发现C函数未定义

直接找到其位置并复制,其实就是k的上一个函数

复制后运行,得到最后的结果。 

 完整代码:

t = [
    "username",
    "mobile",
    "email",
    "account",
    "password",
]
e = {
    "mobile": "18720180853",
    "password": "123456"
}
var O, E, C = function(e) {
            var t, n = [];
            if (void 0 === e)
                return "";
            t = function(e) {
                for (var t, n = e.toString(), r = [], i = 0; i < n.length; i++)
                    0 <= (t = n.charCodeAt(i)) && t <= 127 ? r.push(t) : 128 <= t && t <= 2047 ? (r.push(192 | 31 & t >> 6),
                    r.push(128 | 63 & t)) : (2048 <= t && t <= 55295 || 57344 <= t && t <= 65535) && (r.push(224 | 15 & t >> 12),
                    r.push(128 | 63 & t >> 6),
                    r.push(128 | 63 & t));
                for (var o = 0; o < r.length; o++)
                    r[o] &= 255;
                return r
            }(e);
            for (var r = 0, i = t.length; r < i; ++r)
                n.push((5 ^ t[r]).toString(16));
            return n.join("")
};
k = function(e, t) {
            var n, r = 0, i = 0;
            if ("object" != typeof e)
                return e;
            if (!t || t.length <= 0)
                return e;
            for (var o = Object.assign({
                mix_mode: r
            }, e), a = 0, s = t.length; a < s; ++a)
                void 0 !== (n = o[t[a]]) && (r |= 1,
                i |= 1,
                o[t[a]] = C(n));
            return o.mix_mode = r,
            o.fixed_mix_mode = i,
            o
};


网站公告

今日签到

点亮在社区的每一天
去签到