本文主要是介绍自己写的逆向案例三——某蔬菜小说登录接口逆向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网址: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
};
这篇关于自己写的逆向案例三——某蔬菜小说登录接口逆向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!