1、先分析参数:
su,sp是必要的。
其中su是加密后的账号,很简单就是个bs64,不再说了。
2、直接搜参数,这个时候要搜代表性的,特殊的。例如pwencode。
很好只有一个
两种加密,一个是RSA,一个是sha,这里判断用的是RSA
3、直接打断点调试
很明显b是明文密码,经过加密之后又赋值给了b
我们进入f.encrypt
实际上是bt函数,然后bt又调用bp,反正就是各种调用。那我们直接把这个外层的匿名函数抠出来
直接运行
sinaSSOEncoder未定义
那就定义为{};
var sinaSSOEncoder = {};
同样
var navigator = {};
随后把外层调用的代码扣进来
var f = new sinaSSOEncoder.RSAKey;
f.setPublic(me.rsaPubkey, "10001");
b = f.encrypt([me.servertime, me.nonce].join("\t") + "\n" + b)
对于rsaPubkey,肯定是加载页面的时候就给你了
servertime是时间戳给你了,nonce也是给你了,那就直接模拟下。
publickey = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
var b = '111111'
var f = new sinaSSOEncoder.RSAKey;
f.setPublic(publickey, "10001");
a= [1635469113, 'QNCUFY'].join("\t") + "\n" + b
b = f.encrypt(a)
console.log(b)
直接运行发现还有问题
alert 是浏览器弹窗。这里并不需要,直接删了就ok
再次运行,完美得出结果。
实现完整登录流程还有别的要做,例如验证码啥的,那些都比较简单了,逐步分析需要的参数就行,都在包里。简单说下验证码的解决思路:
先请求他们的验证码,然后第三方或者本地识别下,我这里用的是本地过验证。
得到的验证码code嵌入到post参数就行了。
如有错误敬请指正,欢迎批评。