网址: aHR0cHM6Ly93d3cuZG91eWluLmNvbQ==
输入账号: 15112348765
输入密码: 123456
先不考虑登录前的滑块, 抖音滑块后面再分析, 本文主要分析登录时提交的参数
一. 抓包请求方式为: POST
POST的字段有mix_mode、account、password、account_type、service、fixed_mix_mode
在请求地址中也携带了一些GET参数: aid、account_sdk_source、language、msToken、Bogus、_signature
本文主要分析account和password的加密
二. js调试 方法一: XHR断点寻找可以的方法, 不妨进入第一个n.accountLoginV2中下断看看
运气比较好, 直接就找到了加密位置
整理一下红框处的代码:
o = z(
T(
{
account: e.account,
password: e.password,
account_type: void 0 === t ? 0 : t,
service: e.service
},
void 0 === r ? {} : r
),
["account", "password"]
);
先断到这里看看
不是T函数, 那一定就是z函数了
跟到里面看看
)]
稍微分析一下就可以知道账号和密码的加密函数都是N
断到N处
对账号加密的时候在账号前面加了个+86
然后对明文的ASCII码进行了简单的变换
方法二: 字段搜索直接搜索password:
逐个进入, 然后在文件中继续搜索, 全部打上断点
三. 扣JS代码这个加密方法比较容易, js代码都不需要动, 直接拿出来就行, 或者也可以用python代码进行改写
function encrypt(e) {
var t, n = [];
if (void 0 === e)
return "";
t = function(e) {
for (var t, n = e.toString(), r = [], o = 0; o < n.length; o++)
0 <= (t = n.charCodeAt(o)) && 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 i = 0; i < r.length; i++)
r[i] &= 255;
return r
}(e);
for (var r = 0, o = t.length; r < o; ++r)
n.push((5 ^ t[r]).toString(16));
return n.join("")
}
四. 使用python实现加密
import execjs
def encrypt(str):
ctx = execjs.compile("""
function encrypt(e) {
var t, n = [];
if (void 0 === e)
return "";
t = function(e) {
for (var t, n = e.toString(), r = [], o = 0; o < n.length; o++)
0 <= (t = n.charCodeAt(o)) && 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 i = 0; i < r.length; i++)
r[i] &= 255;
return r
}(e);
for (var r = 0, o = t.length; r < o; ++r)
n.push((5 ^ t[r]).toString(16));
return n.join("")
}
""")
return ctx.call("encrypt", str)
def main():
print(encrypt("+86 15112348765"))
print(encrypt("123456"))
if __name__ == '__main__':
main()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)