Bilibili登入接口password参数逆向分析

        直接输入账号密码登入,找到web/login这个包,大家自行操作.

         相关的加密字段如下,圈起来的password是我们本次需要逆向的参数,看到结尾有个等号,应该大致知道是啥加密了。

         其余的参数如challenge、token等,来自b站上的极验验证码,直接开始跟栈分析我们的password。最终会跟到这,不想跟的小伙伴也可以全局搜索subForm.password,找到和我相似的地方可以了,这里是加密的入口。

        进到it这个函数里头看,在函数的末尾处可以看到几个关键词,setPublicKey和encrypt,在此次下段点,果不其然,是一个典型的rsa加密,先new了一个a,然后通过设置publickey,最后调用encrypt对一个hash和密码明文的拼接值进行加密,然后返回加密后的password。

         我们直接跟到a里头看看,发现他所有函数都在一个大方法里头,翻到最顶上还能看到webpackjson,遇到这样的先看总体代码长不长,不长直接全部扣下来再进行改写。这里使用两千行,我选择全部copy至本地改写。

         扣下来后,头部画圈的这部分其实不需要,直接删掉,然后将function(t)改成一个自执行的方法。

         然后跟到encrypt的位置,会发现他自动跳到这,我们可以直接用window或者重新定义一个全局变量进行导出,这里我选择window。直接在t这个函数下写上window.JSEncrypt = t;

         有一点需要注意,rt方法的最后几行中也使用window对加密部分的代码进行导出,直接删掉即可,这部分都是可以删掉的。 

        最后我们仿写加密的方法,先new一个a 然后巴拉巴拉就可以了。整体代码如下

var window = global;
var navigator = {
    appCodeName: 'Mozilla',
    appName: "Netscape"
}

'''
代码过长,中间的部分省略,只展示关键部分,
省略的这部分代码直接扣就好了
'''


PublicKey = '-----BEGIN PUBLIC KEY-----\n' +
    'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n' +
    '6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n' +
    '/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\n' +
    'Xl69GV6klzgxW6d2xQIDAQAB\n' +
    '-----END PUBLIC KEY-----'
var hash = 'de4e2f7ed44dd7b6'

function password_encrypt(publickey, hash) {
    RSAEncrypt = new window.JSEncrypt;
    RSAEncrypt.setPublicKey(PublicKey);
    after_encrypt_password = RSAEncrypt.encrypt(hash + '123123123');
    return after_encrypt_password;
}

console.log(password_encrypt(PublicKey, hash))



        加密结果如下:

        注意publickey和hash值都是通过passport-login/web/key?这个接口返回的,而且hash的有效使用期在1分钟内,超过1分钟后无法使用。 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值