怎样创建个人网站seo最新快速排名
web端登录页:aHR0cHM6Ly93ZWliby5jb20vbG9naW4ucGhw
首先抓包:随意输入账号密码。打开开发者工具会发现,输入完账号密码之后会分别发一次get请求。
第二次请求的响应结果比较重要,在后面做逆向会用到,首先请求头中携带参数su: MTU3MTIzNDU2Nzg=,是由用户名进行了base64编码而来。该请求响应如下图:
exectime: 7
nonce: "OT1XYI"
pcid: "gz-578eb0e9e0cecca273279e66ad49add8c260"
pubkey: "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
retcode: 0
rsakv: "1330428213"
servertime: 1649748442
pubkey即为加密公钥。
接下来看登录请求:
大部分参数都是前面的请求中有携带,只有sp这个参数是做了加密的,我们全局搜sp,发现搜索结果众多,试着搜索“sp:”, “sp=”, “sp :”, "sp ="等等,这里搜索“sp =”能搜到结果
可以看到sp是由b赋值的,而b在上方出现两次赋值,一个if一个else if,也就是说b是经由其中一个生成,再赋值给sp。我们在两个b的赋值位置都打上断点,然后发送登录请求,看断点生效位置。
很明显断在了第一个位置,这里就是sp的加密入口,b就是明文密码
而加密所需参数me.servertime, me.nonce都是前面提到的,公钥也有了。把代码扒出
e.servertime = me.servertime;
e.nonce = me.nonce;
e.pwencode = "rsa2";
e.rsakv = me.rsakv;
var f = new sinaSSOEncoder.RSAKey;
f.setPublic(me.rsaPubkey, "10001");
b = f.encrypt([me.servertime, me.nonce].join("\t") + "\n" + b)
实例化的sinaSSOEncoder.RSAKey为函数bq
加密处为bt函数
两者都存在于index.js文件中,并且处于同一个匿名函数内,所以只需要把匿名函数内的代码全部扒出即可,运行之后缺啥补啥。
function getsp(pwd) {key = "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"var f = new RSAKey;f.setPublic(key, "10001");b = f.encrypt([1649745222, "UQXOS8"].join("\t") + "\n" + pwd)return b;}
由于只是做测试,我把加密入口的代码直接写死了,如果要做实际登录,记得每次都从前面的请求中获取,js调试工具运行如下: