声明
本文仅供参考学习,请勿用于其他途径,违者后果自负!
前言
目标网站:喜马拉雅
接口信息:登陆包
参数生成逻辑
抓包发现,疑似加密的参数有nonce
、password
、signature
。
搜索一番能够轻易定位加密点。我这里搜索的是signature,因为比较有代表性。搜索数量比较多,可以都打上断点逐一调试然后排除,最后就会定位到4332行
signature的生成逻辑是q函数,参数是一个对象,对象中的内容:
var e = {
account: 用户账号,
password: 密文密码,
nonce: 随机生成的参数
}
进入q函数内部:
拿到本地进行调试。
将代码简单改写一下
function q(e) {
var security_key = "WEB-V1-PRODUCT-E7768904917C4154A925FBE1A3848BC3E84E2C7770744E56AFBC9600C267891F";
var t = getQueryString(e) + "&" + security_key;
return sign(t.toUpperCase())
}
security_key 写死即可,这样运行会报错,缺少了getQueryString和sign函数,分别拿下来。
getQueryString的函数逻辑如下。
这是一个将对象变成字符串的方法,没有什么难度,拿下来就可以直接使用。跳出来再看一下sign方法。
有一个default方法,如果猜的没错这里就是加密的生成逻辑。
console中输出。
signature的加密就出来了,跳进default中。
sha1加密,这里就不扣js代码了,因为比较简单,这里不多做演示,可以使用python去还原。
再来看password。
进入函数。
再跳进函数内,webpack打包。将整个文件拿到本地,找到加密函数的主逻辑拿下来。
补上window和navigator这两个环境就可以得到结果。
最后一个nonce没找到在哪里生成,不过找到一个接口。应该是由服务器返回。
至此三个参数全部分析完成!
代码在我的gitee上,其他加密比较简单,只放了password的加密部分。
链接: password加密逻辑