声明
本文仅供学习参考,请勿用于其他途径,违者后果自负!
前言
目标网站:aHR0cDovL2xvZ2luLnNoaWtlZS5jb20v
接口:aHR0cDovL2xvZ2luLnNoaWtlZS5jb20vY2hlY2sv
参数:password
参数分析
如上文所示,需要逆向分析的是login的密码。
熟悉我逆向思路的同学都知道逆向的几大件。搜索关键字、排除可疑项、打断点……
今天的逆向步骤也是如此,通过password的关键字。经过排除法可以找到可疑点,打下断点。
encryptedString
函数完成加密。
key和formData[i].value的值分别是:
key是RSA加密的一部分,value则是明文的密码。
通过上图可以看出这是一个RSA加密,通过上下文分析最终可以将关键代码封装成函数。
function getPwd(pwd) {
var rsa_n = 'DC1683EEAA2B709F97743773E18F53E3C9A15D12465CE82227A6E447E6EC590D0B569876BB631B0AB4D67881E7EC874066D6E022E2978B4C6EAA8903EC1774AAE040A3BEAF9C2B48730ADD46BEF5F0C8109DB6FCEFED0F4A84CCD7AFFDB4FB4214DA0D0FF1A8E2831E81FA4D7C2F4346184EEC87CE42230FC320B2B4E392ECDF'
var key = new RSAKeyPair("10001", '', rsa_n);
setMaxDigits(131);
var encryptPwd = encryptedString(key, pwd);
return encryptPwd;
}
代码提取
既然知道了加密函数,剩下的内容就是将需要的代码拿下来进行调试。这一步骤非常考验耐心和观察能力,所以遇到困难不要放弃,总会解决的。
看文件的名称和rsa有关,直接全部拿下。
运行之后发现报错。
看一下setMaxDigits是什么。
定义在另一个文件,js逆向的原则就是可以多不能少,直接cv到本地,继续运行。
这时候报错就发生变化了,继续找报错的函数。
发现又是定义在一个新的js文件中,毫无疑问全部拿下来有报错再说。
重新运行发现就出结果了,与之前的密文对比发现一模一样,也就是说我们的本地还原是没有问题的。
然后可以通过python去模拟登陆试一试效果。
最后
代码链接:试客联盟pwd逆向