X博登陆密码解析与讲解如何扣取一个加密算法
本次受伤者:
aHR0cHM6Ly93d3cud2VpYm8uY29tL2xvZ2luLnBocA==
用 Chrome 浏览器抓包相信大家都会,前面抓包我们跳过,直接到加密参数分析的地方。
Tip: 这次的加密不是异步的 不要在 XHR 选项卡傻乎乎的等了。
X博登陆框是嵌在页面中的加上X博的登陆页面图片以及要加载的东西很多,所以我们需要注意的包主要有两个:
- 登录前返回相关加密密匙的包,如下图:
- 发起登录请求的包,如下图:
看上面两张图就知道,我们只要找出 su 和 sp 的加密逻辑就完事儿了。
先来看看 su 这个其实不要搜索,看着是不是很像我们开头的编码结果,由 a-zA-Z[0-9]+/= 这几种字符组成的编码 熟悉的就只有 Base64 , 我们直接找一个在线工具验证一下我们的猜想。如下图
当然我们也可以试试搜索 参数名 su ,很明显搜索结果也验证了我们的猜想。
接下来看看 sp:
在我们上面搜索 su 的地方我们找到了密码加密的地方,已经用红框框出主要的逻辑如下图,接下来我们打上断点找找缺失的参数都是什么。
这里的参数都是比较简单的首先是 me.servertime 、me.rsaPubkey 和 me.nonce 如下图 这三个参数在第一个请求包 prelogin.php 都有同名的参数返回可以参考。
我们现在已经找齐了全部的参数,接下来需要切换到 pycharm或者webstorm 中调试出我们整体的加密算法。
直接复制粘贴 789 - 791 行的代码到编辑框中补全成下面这样。
function get_sp() {
var f = new sinaSSOEncoder.RSAKey;
f.setPublic(me.rsaPubkey, "10001");
b = f.encrypt([me.servertime, me.nonce].join("\t") + "\n" + b);
return b;
}
get_sp();
运行肯定报错的,但我们需要的就是报错信息,看缺什么补什么,如下图:
提示 sinaSSOEncoder is not defined ,我们回到浏览器调试窗口找 sinaSSOEncoder 在哪儿定义的。可以直接在页面中搜索 var sinaSSOEncoder 如下图:
接下来复制 sinaSSOEncoder 的全部内容到编辑器中,第1048-1981行。继续运行并提示 navigator is not defined,我们定义它为{}。如下图:
接下来会提示 me 未定义,如下图:
但是我们调试过都知道这个 me.rsaPubkey 是在第一个请求包中返回的,所以我们把它替换掉。同理替换到我们已知的的其他参数。现在就只剩下 b 参数是未知的了。
我们向下运行,可以看到b参数就是我们输入的密码,我们继续替换再次运行,发现没有东西输出,也没有报错,定义个变量接收函数返回的内容,然后打印一下,看看返回的 b是什么结果,可以看到已经得到了加密后的结果了。如下图:
总结
这次主要把如何扣一个简单的加密算法做了讲解,这里包含了基础的JS知识,或许看不明白为什么是复制的是这些代码而不是其他的。
这里我的建议是可以适当补充一些JS基础语法的知识。等到下次有类似的加密算法时,你可以试着自己做出判断复制扣取哪些,这样学的更快。
JS逆向学习的文章每一篇都是很简单的案例,希望看完可以自己动手扣一遍。
因为
每天一题,头发掉的更快。
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持