声明
本文章中所有内容仅供学习交流使用,不得用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。
若擅自使用本文讲解的技术而导致的任何意外,作者均不负责。文中若有侵权内容,请立即联系作者删除!
Ⅰ:目标
- 网址:aHR0cHM6Ly9kZW1vLmQuY24vYXV0aC9nb0xvZ2luLmh0bWw=
- 接口:aHR0cHM6Ly9kZW1vLmQuY24vYXV0aC9sb2dpbj9kaXNwbGF5PXdlYiZuYW1lPTEzNXh4eHh4eHh4JnB3ZD1iMjkyNzI4MTUyMGViLi4u
- 目标:请求参数 pwd reqId 【关于验证码的参数暂时不管】
Ⅱ:抓包分析
-
通过抓包分析查看,请求参数 pwd 和 reqId 是加密的,我们需要逆向分析出2个参数的加密逻辑,复刻其算法。

-
首先想看 pwd 的算法,我们先查看调用栈是什么情况?我们可以看到前面3个看着是 jquery 库,但是我们不知道里面是否被魔改过?此时我们可以先判断没有魔改,就是原生的库,那我们在 goLogin.html 处打上断点,如果在此处的js文件中还没有加密完成,那么就有可能对 jquery 库魔改,这个时候我们再去分析。此时我们重新发送请求。


-
可以看到其中 submitData 变量中确实有我们的加密参数,那么我们就需要向上查找 submitData 在什么时候给 pwd reqId 赋值的。我们可以在此文件中搜索。

-
此时发现 submitData 只有4处使用,但是可以发现 pwd 有2处赋值,但是它们都是由 rsaPwd 变量来的,所以此时我们需要查看rsaPwd 是如何赋值来的,我们需要进行搜索查找。

-
通过查找分析只有 rsaPwd = rsa(passwordVal);这一句看着很像加密的过程,此时我们可以在此打上断点,重新发送请求。


-
观察得知,passwordVal 刚好就是我们输入的密码明文,我们在控制台调用 rsa 函数也确实得到了我们的之前加密的密文,那么就肯定 rsa就是 pwd 的加密函数,此时我么就要分析 rsa 函数的逻辑,直接进入该函数,并打上断点并释放断点。

-
我们很清楚的看到,代码注释也写了是密码的加密,那就没问题,现在最主要就是看它的逻辑,通过代码的分析与经验可以知道,他是一套很古老的 rsa 加密算法,可以参考 https://ohdave.com/rsa/ ,他需要 RSA.js require BigInt.js and Barrett.js. ,我们直接把这个3个js文件放在一起一个js文件,但是外部要使用其中的方法,要导出需要使用的方法,我是这样写的,如图。

-
接着我们就需要复刻加密的js的代码,并且验证。

-
通过验证发现,加密算法无误,到此 pwd 的加密算法就搞定了,接着就看 reqId 的算法。
-
既然 pwd 是在该js文件生成,那么reqId是不是也在该文件有所表现,我们可以直接搜索 reqId 被赋值的地方。【小技巧:对于我们把js代码格式化后,那么赋值可能就会存在这样的格式 reqId :xxx 或者 reqId = xxx】


-
我们可以看到可以看到有2处都有可能生成为 reqId 赋值,他们都是调用 getData3 方法返回的结果取出 reqId 赋值,我们可以在2处打上断点,要想执行到 getData3 方法,可以刷新网页或者登录状态不为9999,此时,我们通过刷新网页来实现,上面代码分析可以知道,当用户名存在,并且鼠标在密码框聚焦时则会触发 getData3 方法。

-
我们直接进入 getData3 方法内,可以看到他 ajax 是发送了另一个请求获取 reqId 的。

-
到此,我们本次的对 pwd reqId 的算法就分析完毕。当然还可以根据xh断点、关键字搜索等等方法去分析。
Ⅲ:总结
本次的调试过程还算是简单的,主要是这个古老的RSA算法,大家可以记住他的特点,之后就可以直接使用。对于其他的值,我们不一定非要觉得它就是加密的,有可能就是前面的接口返回的。需要具体调试,公众号【逆向学习日记】回复【某乐网】获取地址。
351

被折叠的 条评论
为什么被折叠?



